Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -483,8 +483,8 @@ internal void DropAllBufferedData()
private void SetStreamAborted(long errorCode, bool byUs)
{
_deliverableChannel.Writer.TryComplete(byUs
? new QuicOperationAbortedException()
: new QuicStreamAbortedException(errorCode));
? new QuicException(QuicError.OperationAborted, null, "Stream aborted by us.")
: new QuicException(QuicError.StreamAborted, errorCode));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ internal void RequestAbort(long errorCode, bool byUs)
StreamState = SendStreamState.WantReset;
}

_writesCompleted.TryCompleteException(new QuicOperationAbortedException("Write was aborted."));
_writesCompleted.TryCompleteException(new QuicException(QuicError.OperationAborted, null, "Write was aborted."));
_toSendChannel.Writer.TryComplete();
if (_toBeQueuedChunk.Buffer != null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ private static TransportParameters Create(long maxBidiStreams, long maxUniStream

internal static TransportParameters FromConnectionOptions(QuicConnectionOptions options)
{
return Create(options.MaxBidirectionalStreams, options.MaxUnidirectionalStreams, options.IdleTimeout);
return Create(options.MaxInboundBidirectionalStreams, options.MaxInboundUnidirectionalStreams, options.IdleTimeout);
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private ProcessPacketResult ProcessFrames(QuicReader reader, PacketType packetTy

if (!IsFrameAllowed(frameType, packetType))
{
return CloseConnection(TransportErrorCode.ProtocolViolation, QuicError.FrameNotAllowed, frameType);
return CloseConnection(TransportErrorCode.ProtocolViolation, QuicTransportError.FrameNotAllowed, frameType);
}

ackEliciting |= IsAckEliciting(frameType);
Expand Down Expand Up @@ -140,7 +140,7 @@ _ when (frameType & FrameType.StreamMask) == frameType => ProcessStreamFrame(rea
continue;
case ProcessPacketResult.Error when _outboundError == null:
return CloseConnection(TransportErrorCode.FrameEncodingError,
QuicError.UnableToDeserialize, frameType);
QuicTransportError.UnableToDeserialize, frameType);
}

return result;
Expand Down Expand Up @@ -231,7 +231,7 @@ private ProcessPacketResult ProcessAckFrame(QuicReader reader, PacketType packet

if (frame.LargestAcknowledged >= pnSpace.NextPacketNumber || // acking future packet
frame.LargestAcknowledged < frame.FirstAckRange) // acking negative PN
return CloseConnection(TransportErrorCode.ProtocolViolation, QuicError.InvalidAckRange, FrameType.Ack);
return CloseConnection(TransportErrorCode.ProtocolViolation, QuicTransportError.InvalidAckRange, FrameType.Ack);

Span<RangeSet.Range> ranges = frame.AckRangeCount < 16
? stackalloc RangeSet.Range[(int)frame.AckRangeCount + 1]
Expand All @@ -240,7 +240,7 @@ private ProcessPacketResult ProcessAckFrame(QuicReader reader, PacketType packet
if (!frame.TryDecodeAckRanges(ranges))
{
return CloseConnection(TransportErrorCode.FrameEncodingError,
QuicError.InvalidAckRange, frame.HasEcnCounts ? FrameType.AckWithEcn : FrameType.Ack);
QuicTransportError.InvalidAckRange, frame.HasEcnCounts ? FrameType.AckWithEcn : FrameType.Ack);
}

var space = GetPacketSpace(packetType);
Expand All @@ -267,12 +267,12 @@ private ProcessPacketResult ProcessResetStreamFrame(QuicReader reader)

if (!StreamHelpers.CanRead(IsServer, frame.StreamId))
return CloseConnection(TransportErrorCode.StreamStateError,
QuicError.StreamNotReadable,
QuicTransportError.StreamNotReadable,
FrameType.ResetStream);

if (!TryGetOrCreateStream(frame.StreamId, out var stream))
return CloseConnection(TransportErrorCode.StreamLimitError,
QuicError.StreamsLimitViolated,
QuicTransportError.StreamsLimitViolated,
FrameType.ResetStream);

// TODO-RZ: Return control flow budget
Expand All @@ -294,7 +294,7 @@ private ProcessPacketResult ProcessStopSendingFrame(QuicReader reader)

if (!StreamHelpers.CanWrite(IsServer, frame.StreamId))
return CloseConnection(TransportErrorCode.StreamStateError,
QuicError.StreamNotWritable,
QuicTransportError.StreamNotWritable,
FrameType.StopSending);

var stream = _streams.TryGetStream(frame.StreamId);
Expand All @@ -304,12 +304,12 @@ private ProcessPacketResult ProcessStopSendingFrame(QuicReader reader)
// Streams are Created by sending a STREAM frame, if we didn't send anything, report error
!(stream?.SendStream?.UnsentOffset > 0))
return CloseConnection(TransportErrorCode.StreamStateError,
QuicError.StreamNotCreated,
QuicTransportError.StreamNotCreated,
FrameType.StopSending);

if (stream == null && !TryGetOrCreateStream(frame.StreamId, out stream))
return CloseConnection(TransportErrorCode.StreamLimitError,
QuicError.StreamsLimitViolated,
QuicTransportError.StreamsLimitViolated,
FrameType.StopSending);

Debug.Assert(stream!.CanWrite);
Expand Down Expand Up @@ -377,11 +377,11 @@ private ProcessPacketResult ProcessMaxStreamDataFrame(QuicReader reader)

if (!StreamHelpers.CanWrite(IsServer, frame.StreamId))
return CloseConnection(TransportErrorCode.StreamStateError,
QuicError.NotInRecvState, FrameType.MaxStreamData);
QuicTransportError.NotInRecvState, FrameType.MaxStreamData);

if (!TryGetOrCreateStream(frame.StreamId, out var stream))
return CloseConnection(TransportErrorCode.StreamLimitError,
QuicError.StreamsLimitViolated, FrameType.MaxStreamData);
QuicTransportError.StreamsLimitViolated, FrameType.MaxStreamData);

Debug.Assert(stream!.CanWrite);

Expand Down Expand Up @@ -460,7 +460,7 @@ private ProcessPacketResult ProcessStreamDataBlockedFrame(QuicReader reader)

if (!TryGetOrCreateStream(frame.StreamId, out _))
return CloseConnection(TransportErrorCode.StreamLimitError,
QuicError.StreamsLimitViolated,
QuicTransportError.StreamsLimitViolated,
FrameType.StreamDataBlocked);

// TODO-RZ: Implement STREAM_DATA_BLOCKED
Expand Down Expand Up @@ -492,7 +492,7 @@ private ProcessPacketResult ProcessNewConnectionIdFrame(QuicReader reader)
if (DestinationConnectionId!.Data.Length == 0)
{
return CloseConnection(TransportErrorCode.ProtocolViolation,
QuicError.NewConnectionIdFrameWhenZeroLengthCIDUsed, FrameType.NewConnectionId);
QuicTransportError.NewConnectionIdFrameWhenZeroLengthCIDUsed, FrameType.NewConnectionId);
}

// RFC: If an endpoint receives a NEW_CONNECTION_ID frame that repeats a
Expand All @@ -507,7 +507,7 @@ private ProcessPacketResult ProcessNewConnectionIdFrame(QuicReader reader)
existingCid != null && existingCid.StatelessResetToken != frame.StatelessResetToken)
{
return CloseConnection(TransportErrorCode.ProtocolViolation,
QuicError.InconsistentNewConnectionIdFrame, FrameType.NewConnectionId);
QuicTransportError.InconsistentNewConnectionIdFrame, FrameType.NewConnectionId);
}

if (existingCid == null)
Expand Down Expand Up @@ -614,12 +614,12 @@ private ProcessPacketResult ProcessStreamFrame(QuicReader reader)

if (!StreamHelpers.CanRead(IsServer, frame.StreamId))
return CloseConnection(TransportErrorCode.StreamStateError,
QuicError.StreamNotWritable,
QuicTransportError.StreamNotWritable,
frameType);

if (!TryGetOrCreateStream(frame.StreamId, out var stream))
return CloseConnection(TransportErrorCode.StreamLimitError,
QuicError.StreamsLimitViolated,
QuicTransportError.StreamsLimitViolated,
frameType);

Debug.Assert(stream!.CanRead);
Expand All @@ -633,14 +633,14 @@ private ProcessPacketResult ProcessStreamFrame(QuicReader reader)
ReceivedData += writtenOffset - buffer.Size;
if (ReceivedData > _sendLimits.MaxData)
{
return CloseConnection(TransportErrorCode.FlowControlError, QuicError.MaxDataViolated, frameType);
return CloseConnection(TransportErrorCode.FlowControlError, QuicTransportError.MaxDataViolated, frameType);
}
}

// check stream-level flow control
if (writtenOffset > buffer.MaxData)
{
return CloseConnection(TransportErrorCode.FlowControlError, QuicError.StreamMaxDataViolated, frameType);
return CloseConnection(TransportErrorCode.FlowControlError, QuicTransportError.StreamMaxDataViolated, frameType);
}

if (frame.Fin)
Expand All @@ -649,14 +649,14 @@ private ProcessPacketResult ProcessStreamFrame(QuicReader reader)
if (buffer.FinalSizeKnown && writtenOffset != buffer.Size ||
writtenOffset < buffer.Size)
{
return CloseConnection(TransportErrorCode.FinalSizeError, QuicError.InconsistentFinalSize, frameType);
return CloseConnection(TransportErrorCode.FinalSizeError, QuicTransportError.InconsistentFinalSize, frameType);
}
}

// close if writing past known stream end
if (buffer.FinalSizeKnown && writtenOffset > buffer.Size)
{
return CloseConnection(TransportErrorCode.FinalSizeError, QuicError.WritingPastFinalSize, frameType);
return CloseConnection(TransportErrorCode.FinalSizeError, QuicTransportError.WritingPastFinalSize, frameType);
}

// RFC: STREAM frames received after sending STOP_SENDING are still counted
Expand Down Expand Up @@ -697,7 +697,7 @@ private ProcessPacketResult ProcessUnknownFrame(QuicReader reader)
int length = reader.BytesLeft;
FrameType frameType = reader.ReadFrameType();
_trace?.OnUnknownFrame((long)frameType, length);
return CloseConnection(TransportErrorCode.FrameEncodingError, QuicError.UnknownFrameType, frameType);
return CloseConnection(TransportErrorCode.FrameEncodingError, QuicTransportError.UnknownFrameType, frameType);
}

private void WriteFrames(QuicWriter writer, PacketType packetType, EncryptionLevel level, QuicSocketContext.SendContext context)
Expand Down Expand Up @@ -937,7 +937,7 @@ private bool WriteStreamMaxDataFrame(QuicWriter writer, ManagedQuicStream stream
return true;
}

var frame = new MaxStreamDataFrame(stream.StreamId, buffer.MaxData);
var frame = new MaxStreamDataFrame(stream.Id, buffer.MaxData);
if (writer.BytesAvailable < frame.GetSerializedLength())
{
return false;
Expand All @@ -962,7 +962,7 @@ private bool WriteStopSendingFrame(QuicWriter writer, ManagedQuicStream stream,
return true;
}

var frame = new StopSendingFrame(stream.StreamId, buffer.Error.Value);
var frame = new StopSendingFrame(stream.Id, buffer.Error.Value);
if (writer.BytesAvailable < frame.GetSerializedLength())
{
return false;
Expand All @@ -988,15 +988,15 @@ private bool WriteResetStreamFrame(QuicWriter writer, ManagedQuicStream stream,
return true;
}

var frame = new ResetStreamFrame(stream.StreamId, buffer.Error.Value, buffer.UnsentOffset);
var frame = new ResetStreamFrame(stream.Id, buffer.Error.Value, buffer.UnsentOffset);
if (writer.BytesAvailable < frame.GetSerializedLength())
{
return false;
}

ResetStreamFrame.Write(writer, frame);
_trace?.OnResetStreamFrame(frame);
context.SentPacket.StreamsReset.Add(stream.StreamId);
context.SentPacket.StreamsReset.Add(stream.Id);
buffer.OnResetSent();

return true;
Expand Down Expand Up @@ -1042,7 +1042,7 @@ private void WriteStreamFrames(QuicWriter writer, QuicSocketContext.SendContext
(long offset, long count) = buffer.GetNextSendableRange();

// send only as much data as can fit into the packet
int overhead = StreamFrame.GetOverheadLength(stream.StreamId, offset, count);
int overhead = StreamFrame.GetOverheadLength(stream.Id, offset, count);
count = Math.Min(count, writer.BytesAvailable - overhead);

// respect connection-level control flow
Expand All @@ -1054,16 +1054,16 @@ private void WriteStreamFrames(QuicWriter writer, QuicSocketContext.SendContext

if (count > 0 || fin && !buffer.FinAcked)
{
var payloadDestination = StreamFrame.ReservePayloadBuffer(writer, stream!.StreamId, offset, (int)count, fin);
_trace?.OnStreamFrame(new StreamFrame(stream!.StreamId, offset, fin, payloadDestination));
var payloadDestination = StreamFrame.ReservePayloadBuffer(writer, stream.Id, offset, (int)count, fin);
_trace?.OnStreamFrame(new StreamFrame(stream.Id, offset, fin, payloadDestination));

// add the newly sent data to the flow control counter
SentData += Math.Max(0, offset + count - buffer.UnsentOffset);
buffer.CheckOut(payloadDestination);

// record sent data
context.SentPacket.StreamFrames.Add(
new SentPacket.StreamFrameHeader(stream!.StreamId, offset, (int)count, fin));
new SentPacket.StreamFrameHeader(stream.Id, offset, (int)count, fin));

written = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private ProcessPacketResult ReceiveOne(QuicReader reader, QuicSocketContext.Recv
if (reader.Buffer.Length < QuicConstants.MinimumClientInitialDatagramSize)
{
return CloseConnection(TransportErrorCode.ProtocolViolation,
QuicError.InitialPacketTooShort);
QuicTransportError.InitialPacketTooShort);
}
}

Expand All @@ -105,7 +105,7 @@ private ProcessPacketResult ReceiveOne(QuicReader reader, QuicSocketContext.Recv
{
return CloseConnection(
TransportErrorCode.ProtocolViolation,
QuicError.UnexpectedToken);
QuicTransportError.UnexpectedToken);
}

// after client receives the first packet (which is either initial or retry), it must
Expand Down Expand Up @@ -240,7 +240,7 @@ private ProcessPacketResult ReceiveOne(QuicReader reader, QuicSocketContext.Recv
if (header.ReservedBits != 0)
{
return CloseConnection(TransportErrorCode.ProtocolViolation,
QuicError.InvalidReservedBits);
QuicTransportError.InvalidReservedBits);
}

result = ReceiveCore(reader, pnSpace, pnOffset, header.PacketNumberLength, packetType, recvSeal,
Expand Down Expand Up @@ -333,7 +333,7 @@ private ProcessPacketResult ReceiveLongHeader(QuicReader reader, in LongPacketHe
if (header.ReservedBits != 0)
{
return CloseConnection(TransportErrorCode.ProtocolViolation,
QuicError.InvalidReservedBits);
QuicTransportError.InvalidReservedBits);
}

return ReceiveCore(reader, pnSpace, pnOffset, header.PacketNumberLength, packetType, seal,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,12 +179,12 @@ internal QuicConnectionState ConnectionState
/// <summary>
/// Error received via CONNECTION_CLOSE frame to be reported to the user.
/// </summary>
private QuicError? _inboundError;
private QuicTransportError? _inboundError;

/// <summary>
/// Error to send in next packet in a CONNECTION_CLOSE frame.
/// </summary>
private QuicError? _outboundError;
private QuicTransportError? _outboundError;

/// <summary>
/// Version of the QUIC protocol used for this connection.
Expand Down Expand Up @@ -593,7 +593,7 @@ internal PacketNumberSpace GetPacketNumberSpace(EncryptionLevel encryptionLevel)
private ProcessPacketResult CloseConnection(TransportErrorCode errorCode, string? reason = null,
FrameType frameType = FrameType.Padding)
{
_outboundError ??= new QuicError(errorCode, reason, frameType);
_outboundError ??= new QuicTransportError(errorCode, reason, frameType);
return ProcessPacketResult.Error;
}

Expand All @@ -618,7 +618,7 @@ internal ValueTask DisposeAsync(long errorCode)
stream.OnConnectionClosed(MakeOperationAbortedException());
}

_outboundError = new QuicError((TransportErrorCode)errorCode, null, FrameType.Padding, false);
_outboundError = new QuicTransportError((TransportErrorCode)errorCode, null, FrameType.Padding, false);
_disposed = true;
Tls.Dispose();
_socketContext.WakeUp();
Expand Down Expand Up @@ -818,7 +818,7 @@ private void DropPacketNumberSpace(PacketSpace space, ObjectPool<SentPacket> sen
/// </summary>
/// <param name="now">Timestamp of the current moment.</param>
/// <param name="error">Error which led to connection closing.</param>
private void StartClosing(long now, QuicError error)
private void StartClosing(long now, QuicTransportError error)
{
Debug.Assert(_closingPeriodEndTimestamp == null);
Debug.Assert(error != null);
Expand Down Expand Up @@ -896,7 +896,7 @@ private QuicException MakeOperationAbortedException()
: new QuicOperationAbortedException(); // initiated by us
}

private static QuicException MakeConnectionAbortedException(QuicError error)
private static QuicException MakeConnectionAbortedException(QuicTransportError error)
{
return new QuicException(QuicError.ConnectionAborted, (long)error.ErrorCode, error.ReasonPhrase);
}
Expand Down
Loading