Documentation
¶
Overview ¶
or log package?
Index ¶
- Constants
- Variables
- func GetFrameWires(frames []Frame) (allWire []byte, err error)
- type AckBlock
- type AckFrame
- type ApplicationCloseFrame
- type BaseFrame
- type BasePacket
- func (bp *BasePacket) GetFrames() []Frame
- func (bp *BasePacket) GetHeader() PacketHeader
- func (bp *BasePacket) GetPacketNumber() qtype.PacketNumber
- func (bp *BasePacket) GetPayloadLen() int
- func (bp *BasePacket) GetWire() (wire []byte, err error)
- func (bp *BasePacket) IsProbePacket() bool
- func (bp *BasePacket) SetFrames(fs []Frame)
- func (bp *BasePacket) SetHeader(h PacketHeader)
- func (bp *BasePacket) SetWire(wire []byte)
- func (bp *BasePacket) String() string
- type BasePacketHandler
- type BasePacketHeader
- type BaseStream
- func (s BaseStream) GetID() qtype.StreamID
- func (s BaseStream) GetState() qtype.StreamState
- func (s BaseStream) String() string
- func (s BaseStream) UpdateConnectionByteReceived()
- func (s BaseStream) UpdateConnectionByteSent()
- func (s BaseStream) UpdateStreamOffsetReceived(offset qtype.QuicInt)
- func (s BaseStream) UpdateStreamOffsetSent(offset qtype.QuicInt)
- type BaseStreamLevelFrame
- type BlockedFrame
- type Client
- type CoalescingPacket
- func (ps CoalescingPacket) GetFrames() []Frame
- func (ps CoalescingPacket) GetHeader() PacketHeader
- func (ps CoalescingPacket) GetPacketNumber() qtype.PacketNumber
- func (ps CoalescingPacket) GetWire() ([]byte, error)
- func (ps CoalescingPacket) IsProbePacket() bool
- func (ps CoalescingPacket) SetFrames(fs []Frame)
- func (ps CoalescingPacket) SetHeader(ph PacketHeader)
- func (ps CoalescingPacket) SetWire(wire []byte)
- func (ps CoalescingPacket) String() string
- type Connection
- type ConnectionCloseFrame
- type ConnectionFlowController
- type CryptoFrame
- type ECNSection
- type FlowControlFlag
- type Frame
- func ParseAckFrame(data []byte) (Frame, int, error)
- func ParseApplicationCloseFrame(data []byte) (Frame, int, error)
- func ParseBlockedFrame(data []byte) (Frame, int, error)
- func ParseConnectionCloseFrame(data []byte) (Frame, int, error)
- func ParseCryptoFrame(data []byte) (Frame, int, error)
- func ParseFrame(data []byte) (f Frame, idx int, err error)
- func ParseFrames(data []byte) (fs []Frame, idx int, err error)
- func ParseMaxDataFrame(data []byte) (Frame, int, error)
- func ParseMaxStreamDataFrame(data []byte) (Frame, int, error)
- func ParseMaxStreamIDFrame(data []byte) (Frame, int, error)
- func ParseNewConnectionIDFrame(data []byte) (Frame, int, error)
- func ParseNewTokenFrame(data []byte) (Frame, int, error)
- func ParsePaddingFrame(data []byte) (Frame, int, error)
- func ParsePathChallengeFrame(data []byte) (Frame, int, error)
- func ParsePathResponseFrame(data []byte) (Frame, int, error)
- func ParsePingFrame(data []byte) (Frame, int, error)
- func ParseRetireConnectionFrame(data []byte) (Frame, int, error)
- func ParseRstStreamFrame(data []byte) (Frame, int, error)
- func ParseStopSendingFrame(data []byte) (Frame, int, error)
- func ParseStreamBlockedFrame(data []byte) (Frame, int, error)
- func ParseStreamFrame(data []byte) (Frame, int, error)
- func ParseStreamIDBlockedFrame(data []byte) (Frame, int, error)
- type FrameParser
- type FrameType
- type HandshakePacket
- type InitialPacket
- type LongHeader
- type LongHeaderPacketType
- type MaxDataFrame
- type MaxStreamDataFrame
- type MaxStreamIDFrame
- type NewConnectionIDFrame
- type NewTokenFrame
- type Packet
- type PacketHandler
- type PacketHeader
- type PacketHeaderPerser
- type PacketHeaderType
- type PaddingFrame
- type PathChallengeFrame
- type PathResponseFrame
- type PingFrame
- type PingHelper
- type ProtectedPacket
- type RecvStream
- type RetireConnectionIDFrame
- type RetryPacket
- type RstStreamFrame
- type SendRecvStream
- type SendStream
- type Server
- func (s *Server) ChangeConnectionID(fromID, toID qtype.ConnectionID)
- func (s *Server) Close(fType FrameType, err qerror.TransportError) error
- func (s *Server) DeleteSessionFromMap(ID qtype.ConnectionID)
- func (s *Server) IsAcceptableSession(version qtype.Version, srcID, destID qtype.ConnectionID, remoteAddr net.Addr) bool
- func (s *Server) IsVersionSupported(version qtype.Version) bool
- func (s *Server) SendVersionNegotiationPacket(srcID, destID qtype.ConnectionID, remoteAddr net.Addr) error
- func (s *Server) Serve() error
- type Session
- func (s *Session) AssembleAckFrame() *AckFrame
- func (s *Session) Close(f *ConnectionCloseFrame) error
- func (s *Session) HandleFrames(fs []Frame) error
- func (s *Session) HandleMigration() error
- func (s *Session) HandlePacket(p Packet) error
- func (s *Session) Migration() error
- func (s *Session) PathValidation() error
- func (s *Session) QueueFrame(frame Frame) error
- func (s *Session) Read() (data []byte, err error)
- func (s *Session) Run()
- func (s *Session) SendPacket(packet Packet) error
- func (s *Session) SetFinishedStream(stream *RecvStream)
- func (s *Session) UpdateConnectionOffsetSent(offset qtype.QuicInt)
- func (s *Session) Write(data []byte) (n int, err error)
- type SessionStore
- type ShortHeader
- type ShortHeaderFlagType
- type ShortHeaderPacketType
- type StopSendingFrame
- type Stream
- type StreamBlockedFrame
- type StreamFlowController
- type StreamFrame
- type StreamIDBlockedFrame
- type StreamLevelFrame
- type StreamManager
- func (s *StreamManager) CloseAllStream() error
- func (s *StreamManager) GetOrNewStream(streamID qtype.StreamID, send bool) (st Stream, isNew bool, err error)
- func (s *StreamManager) IsValidID(streamID qtype.StreamID) error
- func (s *StreamManager) QueueFrame(stream Stream, f StreamLevelFrame) error
- func (s *StreamManager) Read() ([]byte, error)
- func (s *StreamManager) StartNewSendStream() (Stream, error)
- func (s *StreamManager) Write(data []byte) (n int, err error)
- type VersionNegotiationPacket
- func (p VersionNegotiationPacket) GetFrames() []Frame
- func (p VersionNegotiationPacket) GetHeader() PacketHeader
- func (p VersionNegotiationPacket) GetPacketNumber() qtype.PacketNumber
- func (p VersionNegotiationPacket) GetWire() ([]byte, error)
- func (p VersionNegotiationPacket) IsProbePacket() bool
- func (p VersionNegotiationPacket) SetFrames(fs []Frame)
- func (p VersionNegotiationPacket) SetHeader(h PacketHeader)
- func (p VersionNegotiationPacket) SetWire(wire []byte)
- func (p VersionNegotiationPacket) String() string
Constants ¶
const InitialPacketMinimumPayloadSize = 1200
Variables ¶
var FrameParserMap = map[FrameType]FrameParser{ PaddingFrameType: ParsePaddingFrame, RstStreamFrameType: ParseRstStreamFrame, ConnectionCloseFrameType: ParseConnectionCloseFrame, ApplicationCloseFrameType: ParseApplicationCloseFrame, MaxDataFrameType: ParseMaxDataFrame, MaxStreamDataFrameType: ParseMaxStreamDataFrame, MaxStreamIDFrameType: ParseMaxStreamIDFrame, PingFrameType: ParsePingFrame, BlockedFrameType: ParseBlockedFrame, StreamBlockedFrameType: ParseStreamBlockedFrame, StreamIDBlockedFrameType: ParseStreamIDBlockedFrame, NewConnectionIDFrameType: ParseNewConnectionIDFrame, StopSendingFrameType: ParseStopSendingFrame, AckFrameTypeA: ParseAckFrame, AckFrameTypeB: ParseAckFrame, RetireConnectionIDFrameType: ParseRetireConnectionFrame, PathChallengeFrameType: ParsePathChallengeFrame, PathResponseFrameType: ParsePathResponseFrame, StreamFrameType: ParseStreamFrame, CryptoFrameType: ParseCryptoFrame, NewTokenFrameType: ParseNewTokenFrame, }
var LogLevel int
var PacketHeaderParserMap = map[PacketHeaderType]PacketHeaderPerser{ LongHeaderType: ParseLongHeader, ShortHeaderType: ParseShortHeader, }
Functions ¶
func GetFrameWires ¶
Types ¶
type AckFrame ¶
type AckFrame struct { *BaseFrame LargestAcked qtype.QuicInt AckDelay qtype.QuicInt AckBlockCount qtype.QuicInt AckBlocks []AckBlock ECN *ECNSection }
func NewAckFrame ¶
func NewAckFrame(lAcked, ackDelay qtype.QuicInt, ackBlocks []AckBlock, ecn *ECNSection) *AckFrame
type ApplicationCloseFrame ¶
type ApplicationCloseFrame struct { *BaseFrame ErrorCode qerror.ApplicationError ReasonLength qtype.QuicInt Reason string }
func NewApplicationCloseFrame ¶
func NewApplicationCloseFrame(errorCode qerror.ApplicationError, reason string) *ApplicationCloseFrame
func (ApplicationCloseFrame) String ¶
func (f ApplicationCloseFrame) String() string
type BaseFrame ¶
type BaseFrame struct { Type FrameType // contains filtered or unexported fields }
func NewBaseFrame ¶
func (*BaseFrame) GetWireSize ¶
func (*BaseFrame) IsProbeFrame ¶
type BasePacket ¶
type BasePacket struct { Header PacketHeader Frames []Frame PaddingNum int // contains filtered or unexported fields }
func (*BasePacket) GetFrames ¶
func (bp *BasePacket) GetFrames() []Frame
func (*BasePacket) GetHeader ¶
func (bp *BasePacket) GetHeader() PacketHeader
func (*BasePacket) GetPacketNumber ¶
func (bp *BasePacket) GetPacketNumber() qtype.PacketNumber
func (*BasePacket) GetPayloadLen ¶
func (bp *BasePacket) GetPayloadLen() int
func (*BasePacket) GetWire ¶
func (bp *BasePacket) GetWire() (wire []byte, err error)
GetWire of BasePacket assembles all wires, from header wire to frame wires
func (*BasePacket) IsProbePacket ¶
func (bp *BasePacket) IsProbePacket() bool
func (*BasePacket) SetFrames ¶
func (bp *BasePacket) SetFrames(fs []Frame)
func (*BasePacket) SetHeader ¶
func (bp *BasePacket) SetHeader(h PacketHeader)
func (*BasePacket) SetWire ¶
func (bp *BasePacket) SetWire(wire []byte)
func (*BasePacket) String ¶
func (bp *BasePacket) String() string
type BasePacketHandler ¶
type BasePacketHandler struct{}
type BasePacketHeader ¶
type BasePacketHeader struct { DestConnID qtype.ConnectionID SrcConnID qtype.ConnectionID PacketNumber qtype.PacketNumber // contains filtered or unexported fields }
func (*BasePacketHeader) GetConnectionIDPair ¶
func (ph *BasePacketHeader) GetConnectionIDPair() (qtype.ConnectionID, qtype.ConnectionID)
func (*BasePacketHeader) GetWireSize ¶
func (ph *BasePacketHeader) GetWireSize() int
func (*BasePacketHeader) SetWire ¶
func (ph *BasePacketHeader) SetWire(wire []byte)
func (*BasePacketHeader) String ¶
func (ph *BasePacketHeader) String() string
type BaseStream ¶
type BaseStream struct { ID qtype.StreamID State qtype.StreamState // contains filtered or unexported fields }
func (BaseStream) GetID ¶
func (s BaseStream) GetID() qtype.StreamID
func (BaseStream) GetState ¶
func (s BaseStream) GetState() qtype.StreamState
func (BaseStream) String ¶
func (s BaseStream) String() string
func (BaseStream) UpdateConnectionByteReceived ¶
func (s BaseStream) UpdateConnectionByteReceived()
func (BaseStream) UpdateConnectionByteSent ¶
func (s BaseStream) UpdateConnectionByteSent()
func (BaseStream) UpdateStreamOffsetReceived ¶
func (s BaseStream) UpdateStreamOffsetReceived(offset qtype.QuicInt)
func (BaseStream) UpdateStreamOffsetSent ¶
func (s BaseStream) UpdateStreamOffsetSent(offset qtype.QuicInt)
type BaseStreamLevelFrame ¶
func (*BaseStreamLevelFrame) GetStreamID ¶
func (s *BaseStreamLevelFrame) GetStreamID() qtype.StreamID
func (*BaseStreamLevelFrame) String ¶
func (s *BaseStreamLevelFrame) String() string
type BlockedFrame ¶
func NewBlockedFrame ¶
func NewBlockedFrame(offset qtype.QuicInt) *BlockedFrame
func (BlockedFrame) String ¶
func (f BlockedFrame) String() string
type Client ¶
type Client struct { *BasePacketHandler // contains filtered or unexported fields }
func (*Client) ReadUsableToken ¶
type CoalescingPacket ¶
type CoalescingPacket []Packet
func NewCoalescingPacket ¶
func NewCoalescingPacket(packets ...Packet) CoalescingPacket
func (CoalescingPacket) GetFrames ¶
func (ps CoalescingPacket) GetFrames() []Frame
func (CoalescingPacket) GetHeader ¶
func (ps CoalescingPacket) GetHeader() PacketHeader
func (CoalescingPacket) GetPacketNumber ¶
func (ps CoalescingPacket) GetPacketNumber() qtype.PacketNumber
func (CoalescingPacket) GetWire ¶
func (ps CoalescingPacket) GetWire() ([]byte, error)
func (CoalescingPacket) IsProbePacket ¶
func (ps CoalescingPacket) IsProbePacket() bool
func (CoalescingPacket) SetFrames ¶
func (ps CoalescingPacket) SetFrames(fs []Frame)
func (CoalescingPacket) SetHeader ¶
func (ps CoalescingPacket) SetHeader(ph PacketHeader)
func (CoalescingPacket) SetWire ¶
func (ps CoalescingPacket) SetWire(wire []byte)
func (CoalescingPacket) String ¶
func (ps CoalescingPacket) String() string
type Connection ¶
type Connection struct {
// contains filtered or unexported fields
}
func (*Connection) Close ¶
func (c *Connection) Close()
func (*Connection) Write ¶
func (c *Connection) Write(data []byte) error
type ConnectionCloseFrame ¶
type ConnectionCloseFrame struct { *BaseFrame ErrorCode qerror.TransportError ErrorFrameType FrameType ReasonLength qtype.QuicInt Reason string }
func NewConnectionCloseFrame ¶
func NewConnectionCloseFrame(errFrameType FrameType, errorCode qerror.TransportError, reason string) *ConnectionCloseFrame
func (ConnectionCloseFrame) String ¶
func (f ConnectionCloseFrame) String() string
type ConnectionFlowController ¶
type ConnectionFlowController struct {
// contains filtered or unexported fields
}
func NewConnectionFlowController ¶
func NewConnectionFlowController() *ConnectionFlowController
func (*ConnectionFlowController) ReceivableByOffset ¶
func (c *ConnectionFlowController) ReceivableByOffset(largestOffset qtype.QuicInt) error
func (*ConnectionFlowController) SendableByOffset ¶
func (c *ConnectionFlowController) SendableByOffset(largestOffset qtype.QuicInt) FlowControlFlag
type CryptoFrame ¶
func NewCryptoFrame ¶
func NewCryptoFrame(offset qtype.QuicInt, data []byte) *CryptoFrame
func (CryptoFrame) String ¶
func (f CryptoFrame) String() string
type ECNSection ¶
func NewECNSection ¶
func NewECNSection(etc0count, etc1count, ecnCeCount qtype.QuicInt) *ECNSection
func ParseECNSection ¶
func ParseECNSection(data []byte) (*ECNSection, int, error)
func (ECNSection) GetByteLen ¶
func (f ECNSection) GetByteLen() int
func (ECNSection) String ¶
func (f ECNSection) String() string
type FlowControlFlag ¶
type FlowControlFlag byte
const ( Sendable FlowControlFlag = 1 StreamBlocked FlowControlFlag = 2 ConnectionBlocked FlowControlFlag = 3 // will be represent by StreamBlcked * ConnectionBlocked BothBlocked FlowControlFlag = 6 )
type Frame ¶
type FrameType ¶
const ( // Unknown Frame is 0, same as Padding Frame PaddingFrameType FrameType = iota RstStreamFrameType ConnectionCloseFrameType ApplicationCloseFrameType MaxDataFrameType MaxStreamDataFrameType MaxStreamIDFrameType PingFrameType BlockedFrameType StreamBlockedFrameType StreamIDBlockedFrameType NewConnectionIDFrameType StopSendingFrameType RetireConnectionIDFrameType PathChallengeFrameType PathResponseFrameType StreamFrameType // 0x10-0x17 CryptoFrameType FrameType = iota + 7 NewTokenFrameType AckFrameTypeA AckFrameTypeB AckFrameTypeMask = 0x1b StreamFrameTypeMax = 0x17 StreamFrameTypeMask = 0x1f FrameSentinel = 0x1c )
type HandshakePacket ¶
type HandshakePacket struct {
*BasePacket
}
long header with type of 0x7D
func NewHandshakePacket ¶
func NewHandshakePacket(version qtype.Version, destConnID, srcConnID qtype.ConnectionID, packetNumber qtype.PacketNumber, frames ...Frame) *HandshakePacket
type InitialPacket ¶
type InitialPacket struct { *BasePacket // Additional Header fields TokenLen qtype.QuicInt Token []byte }
long header with type of 0x7F
func NewInitialPacket ¶
func NewInitialPacket(version qtype.Version, destConnID, srcConnID qtype.ConnectionID, token []byte, packetNumber qtype.PacketNumber, frames ...Frame) *InitialPacket
TODO: may contain AckFrame
func ParseInitialPacket ¶
func ParseInitialPacket(lh *LongHeader, data []byte) (*InitialPacket, int, error)
func (*InitialPacket) GetWire ¶
func (ip *InitialPacket) GetWire() (wire []byte, err error)
TODO: can be optimized
type LongHeader ¶
type LongHeader struct { *BasePacketHeader PacketType LongHeaderPacketType Version qtype.Version DCIL byte SCIL byte Length qtype.QuicInt }
Long Header
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+ |1| Type (7) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version (32) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |DCIL(4)|SCIL(4)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Connection ID (0/32..144) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Connection ID (0/32..144) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length (i) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Packet Number (8/16/32) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload (*) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
func NewLongHeader ¶
func NewLongHeader(packetType LongHeaderPacketType, version qtype.Version, destConnID, srcConnID qtype.ConnectionID, packetNumber qtype.PacketNumber, length qtype.QuicInt) *LongHeader
func (LongHeader) GetWire ¶
func (lh LongHeader) GetWire() ([]byte, error)
func (LongHeader) String ¶
func (lh LongHeader) String() string
type LongHeaderPacketType ¶
type LongHeaderPacketType byte
const ( ZeroRTTProtectedPacketType LongHeaderPacketType = iota + 0x7c HandshakePacketType RetryPacketType InitialPacketType )
func (LongHeaderPacketType) String ¶
func (lht LongHeaderPacketType) String() string
type MaxDataFrame ¶
func NewMaxDataFrame ¶
func NewMaxDataFrame(maxData qtype.QuicInt) *MaxDataFrame
func (MaxDataFrame) String ¶
func (f MaxDataFrame) String() string
type MaxStreamDataFrame ¶
type MaxStreamDataFrame struct { *BaseFrame *BaseStreamLevelFrame Data qtype.QuicInt }
func NewMaxStreamDataFrame ¶
func NewMaxStreamDataFrame(streamID qtype.StreamID, maxData qtype.QuicInt) *MaxStreamDataFrame
func (MaxStreamDataFrame) String ¶
func (f MaxStreamDataFrame) String() string
type MaxStreamIDFrame ¶
type MaxStreamIDFrame struct { *BaseFrame *BaseStreamLevelFrame }
func NewMaxStreamIDFrame ¶
func NewMaxStreamIDFrame(streamID qtype.StreamID) *MaxStreamIDFrame
func (MaxStreamIDFrame) String ¶
func (f MaxStreamIDFrame) String() string
type NewConnectionIDFrame ¶
type NewConnectionIDFrame struct { *BaseFrame Length byte Sequence qtype.QuicInt ConnID qtype.ConnectionID StatelessRstTkn [16]byte }
func NewNewConnectionIDFrame ¶
func NewNewConnectionIDFrame(sequence qtype.QuicInt, connID qtype.ConnectionID, stateLessRstTkn [16]byte) *NewConnectionIDFrame
func (NewConnectionIDFrame) String ¶
func (f NewConnectionIDFrame) String() string
type NewTokenFrame ¶
func NewNewTokenFrame ¶
func NewNewTokenFrame(token []byte) *NewTokenFrame
func (NewTokenFrame) String ¶
func (f NewTokenFrame) String() string
type Packet ¶
type Packet interface { // doesn't need genWire GetWire() ([]byte, error) SetWire(wire []byte) GetHeader() PacketHeader String() string SetHeader(ph PacketHeader) GetFrames() []Frame GetPacketNumber() qtype.PacketNumber SetFrames(fs []Frame) IsProbePacket() bool }
func ParseRetryPacket ¶
func ParseRetryPacket(header *LongHeader, data []byte) (Packet, int, error)
type PacketHandler ¶
type PacketHandler interface {
// contains filtered or unexported methods
}
type PacketHeader ¶
type PacketHeader interface { // TODO: can be defined as different interface, like WireObject? GetWire() ([]byte, error) SetWire(wire []byte) GetWireSize() int String() string GetConnectionIDPair() (qtype.ConnectionID, qtype.ConnectionID) // srcID, destID // contains filtered or unexported methods }
func ParseLongHeader ¶
func ParseLongHeader(data []byte) (PacketHeader, int, error)
func ParseShortHeader ¶
func ParseShortHeader(data []byte) (PacketHeader, int, error)
type PacketHeaderPerser ¶
type PacketHeaderPerser func(data []byte) (p PacketHeader, length int, err error)
before passing data, need to check whether data[1:5] == 0x00 or not data[1:5] == 0x00 means version negotiation packet
type PacketHeaderType ¶
type PacketHeaderType byte
const ( LongHeaderType PacketHeaderType = 0x80 ShortHeaderType PacketHeaderType = 0x00 )
type PaddingFrame ¶
type PaddingFrame struct {
*BaseFrame
}
func NewPaddingFrame ¶
func NewPaddingFrame() *PaddingFrame
func (PaddingFrame) String ¶
func (f PaddingFrame) String() string
type PathChallengeFrame ¶
func NewPathChallengeFrame ¶
func NewPathChallengeFrame(data [8]byte) *PathChallengeFrame
func (PathChallengeFrame) String ¶
func (f PathChallengeFrame) String() string
type PathResponseFrame ¶
func NewPathResponseFrame ¶
func NewPathResponseFrame(data [8]byte) *PathResponseFrame
func (PathResponseFrame) String ¶
func (f PathResponseFrame) String() string
type PingFrame ¶
type PingFrame struct {
*BaseFrame
}
func NewPingFrame ¶
func NewPingFrame() *PingFrame
type PingHelper ¶
func NewPingHelper ¶
func NewPingHelper(interval time.Duration) *PingHelper
type ProtectedPacket ¶
type ProtectedPacket struct { *BasePacket RTT byte }
long header with 0-RTT (type:0x7C) short header with 1-RTT
func NewProtectedPacket0RTT ¶
func NewProtectedPacket0RTT(version qtype.Version, destConnID, srcConnID qtype.ConnectionID, packetNumber qtype.PacketNumber, frames ...Frame) *ProtectedPacket
func NewProtectedPacket1RTT ¶
func NewProtectedPacket1RTT(key bool, destConnID qtype.ConnectionID, packetNumber qtype.PacketNumber, frames ...Frame) *ProtectedPacket
func (ProtectedPacket) String ¶
func (p ProtectedPacket) String() string
type RecvStream ¶
type RecvStream struct { *BaseStream DataBuffer *utils.RingBuffer DataSize qtype.QuicInt // will be known after receiving all data ReceiveAllDetector qtype.QuicInt }
func (*RecvStream) Close ¶
func (s *RecvStream) Close()
func (RecvStream) IsTerminated ¶
func (s RecvStream) IsTerminated() bool
func (*RecvStream) QueueFrame ¶
func (s *RecvStream) QueueFrame(f StreamLevelFrame) (err error)
QueueFrame is used for validate the frame can be sent, and then queue the frame
type RetireConnectionIDFrame ¶
func NewRetireConnectionIDFrame ¶
func NewRetireConnectionIDFrame(sequence qtype.QuicInt) *RetireConnectionIDFrame
type RetryPacket ¶
type RetryPacket struct { *BasePacket ODCIL byte OriginalDestConnID qtype.ConnectionID RetryToken []byte }
long header with type of 0x7E
func NewRetryPacket ¶
func NewRetryPacket(version qtype.Version, destConnID, srcConnID qtype.ConnectionID, originalDestConnID qtype.ConnectionID, retryToken []byte) *RetryPacket
func (*RetryPacket) GetWire ¶
func (rp *RetryPacket) GetWire() (wire []byte, err error)
TODO: can be optimized
func (RetryPacket) String ¶
func (p RetryPacket) String() string
type RstStreamFrame ¶
type RstStreamFrame struct { *BaseFrame *BaseStreamLevelFrame ErrorCode qerror.ApplicationError FinalOffset qtype.QuicInt }
func NewRstStreamFrame ¶
func NewRstStreamFrame(streamID qtype.StreamID, errorCode qerror.ApplicationError, offset qtype.QuicInt) *RstStreamFrame
func (RstStreamFrame) String ¶
func (f RstStreamFrame) String() string
type SendRecvStream ¶
type SendRecvStream struct { *BaseStream *SendStream *RecvStream }
func (*SendRecvStream) Close ¶
func (s *SendRecvStream) Close()
func (*SendRecvStream) IsTerminated ¶
func (s *SendRecvStream) IsTerminated() bool
func (*SendRecvStream) QueueFrame ¶
func (s *SendRecvStream) QueueFrame(f StreamLevelFrame) error
type SendStream ¶
type SendStream struct { *BaseStream // application data can be buffered at "Ready" state SendBuffer []byte // contains filtered or unexported fields }
func (*SendStream) Close ¶
func (s *SendStream) Close()
func (SendStream) IsTerminated ¶
func (s SendStream) IsTerminated() bool
func (*SendStream) QueueFrame ¶
func (s *SendStream) QueueFrame(f StreamLevelFrame) (err error)
QueueFrame is used for validate the frame can be sent, and then queue the frame
type Server ¶
type Server struct { SupportedVersions []qtype.Version // TODO: consider here? or in utility? or decide dynamically? SessionLimitNum int NumHandshake int // contains filtered or unexported fields }
func ListenAddr ¶
func (*Server) ChangeConnectionID ¶
func (s *Server) ChangeConnectionID(fromID, toID qtype.ConnectionID)
func (*Server) DeleteSessionFromMap ¶
func (s *Server) DeleteSessionFromMap(ID qtype.ConnectionID)
func (*Server) IsAcceptableSession ¶
func (*Server) SendVersionNegotiationPacket ¶
type Session ¶
type Session struct { *BasePacketHandler // tls config // connection DestConnID qtype.ConnectionID DesSeqID qtype.QuicInt SrcConnID qtype.ConnectionID SrcSeqID qtype.QuicInt DoneHandShake bool // A server MAY encode tokens provided with NEW_TOKEN // frames and Retry packets differently, and validate the latter more strictly. RetryPacketTokenSent string // from Token of Retry Packet, MUST not be discarded RetryTokenReceived []byte // from NEW_TOKEN TokenReceived []byte AssembleFrameChan chan struct{} WaitFrameTimeout *time.Ticker // three packet number spaces LastHandshakePN qtype.PacketNumber LastAppPN qtype.PacketNumber LastInitialPN qtype.PacketNumber UnAckedPacket map[qtype.PacketNumber]Packet PathChallengeData [][8]byte // For RetireConnectionIDFrame SmallestSeqIDSent qtype.QuicInt DidSendZeroLenConnID bool // Maximum of 8 IDs, experimentally used now, Set is better // int is SequenceNumber MySeqNumber qtype.QuicInt MyConIDPool map[qtype.QuicInt]qtype.ConnectionID MyConIDUsed map[qtype.QuicInt]qtype.ConnectionID PeerSeqNumber qtype.QuicInt PeerConIDPool map[qtype.QuicInt]qtype.ConnectionID PeerConIDUsed map[qtype.QuicInt]qtype.ConnectionID // connectionID string StatelessResetToken map[string][16]byte // contains filtered or unexported fields }
func NewSession ¶
func NewSession(conn *Connection, dstConnID, srcConnID qtype.ConnectionID, isClient bool) *Session
func (*Session) AssembleAckFrame ¶
func (*Session) Close ¶
func (s *Session) Close(f *ConnectionCloseFrame) error
func (*Session) HandleFrames ¶
func (*Session) HandleMigration ¶
func (*Session) HandlePacket ¶
func (*Session) PathValidation ¶
func (*Session) QueueFrame ¶
func (*Session) SendPacket ¶
func (*Session) SetFinishedStream ¶
func (s *Session) SetFinishedStream(stream *RecvStream)
func (*Session) UpdateConnectionOffsetSent ¶
type SessionStore ¶
type SessionStore struct {
// contains filtered or unexported fields
}
func (*SessionStore) Delete ¶
func (s *SessionStore) Delete(connID qtype.ConnectionID, remoteAddr net.Addr)
func (SessionStore) GetSession ¶
func (s SessionStore) GetSession(connID qtype.ConnectionID, remoteAddr net.Addr) (*Session, bool)
func (*SessionStore) Store ¶
func (s *SessionStore) Store(connID qtype.ConnectionID, remoteAddr net.Addr, sess *Session)
type ShortHeader ¶
type ShortHeader struct { *BasePacketHeader PacketType ShortHeaderPacketType }
func NewShortHeader ¶
func NewShortHeader(key bool, destConnID qtype.ConnectionID, packetNumber qtype.PacketNumber) *ShortHeader
func (ShortHeader) GetWire ¶
func (sh ShortHeader) GetWire() ([]byte, error)
func (ShortHeader) String ¶
func (sh ShortHeader) String() string
type ShortHeaderFlagType ¶
type ShortHeaderFlagType byte
const ( KeyPhaseFlag ShortHeaderFlagType = 0x40 GQUICDemultipexingFlag = 0x08 )
type ShortHeaderPacketType ¶
type ShortHeaderPacketType byte
const ( ShortHeaderReservedBits ShortHeaderPacketType = 0x30 KeyPhase ShortHeaderPacketType = 0x40 )
func (ShortHeaderPacketType) String ¶
func (sht ShortHeaderPacketType) String() string
type StopSendingFrame ¶
type StopSendingFrame struct { *BaseFrame *BaseStreamLevelFrame ErrorCode qerror.ApplicationError }
func NewStopSendingFrame ¶
func NewStopSendingFrame(streamID qtype.StreamID, errCode qerror.ApplicationError) *StopSendingFrame
func (StopSendingFrame) String ¶
func (f StopSendingFrame) String() string
type Stream ¶
type Stream interface { GetState() qtype.StreamState GetID() qtype.StreamID Close() IsTerminated() bool QueueFrame(f StreamLevelFrame) error UpdateConnectionByteSent() UpdateConnectionByteReceived() UpdateStreamOffsetSent(offset qtype.QuicInt) UpdateStreamOffsetReceived(offset qtype.QuicInt) // contains filtered or unexported methods }
type StreamBlockedFrame ¶
type StreamBlockedFrame struct { *BaseFrame *BaseStreamLevelFrame Offset qtype.QuicInt }
func NewStreamBlockedFrame ¶
func NewStreamBlockedFrame(streamID qtype.StreamID, offset qtype.QuicInt) *StreamBlockedFrame
func (StreamBlockedFrame) String ¶
func (f StreamBlockedFrame) String() string
type StreamFlowController ¶
type StreamFlowController struct { IsStreamZero bool // contains filtered or unexported fields }
func NewStreamFlowController ¶
func NewStreamFlowController(isZero bool, connFC *ConnectionFlowController) *StreamFlowController
func (*StreamFlowController) ReceivableByOffset ¶
func (s *StreamFlowController) ReceivableByOffset(offset qtype.QuicInt) error
func (*StreamFlowController) SendableByOffset ¶
func (s *StreamFlowController) SendableByOffset(offset qtype.QuicInt) FlowControlFlag
type StreamFrame ¶
type StreamFrame struct { *BaseFrame *BaseStreamLevelFrame Offset qtype.QuicInt Length qtype.QuicInt Finish bool Data []byte }
func NewStreamFrame ¶
func (StreamFrame) String ¶
func (f StreamFrame) String() string
type StreamIDBlockedFrame ¶
type StreamIDBlockedFrame struct { *BaseFrame *BaseStreamLevelFrame }
func NewStreamIDBlockedFrame ¶
func NewStreamIDBlockedFrame(streamID qtype.StreamID) *StreamIDBlockedFrame
func (StreamIDBlockedFrame) String ¶
func (f StreamIDBlockedFrame) String() string
type StreamLevelFrame ¶
type StreamManager ¶
type StreamManager struct {
// contains filtered or unexported fields
}
func NewStreamManager ¶
func NewStreamManager(sess *Session) *StreamManager
func (*StreamManager) CloseAllStream ¶
func (s *StreamManager) CloseAllStream() error
func (*StreamManager) GetOrNewStream ¶
func (*StreamManager) QueueFrame ¶
func (s *StreamManager) QueueFrame(stream Stream, f StreamLevelFrame) error
called from session.QueueFrame(f)
func (*StreamManager) Read ¶
func (s *StreamManager) Read() ([]byte, error)
func (*StreamManager) StartNewSendStream ¶
func (s *StreamManager) StartNewSendStream() (Stream, error)
type VersionNegotiationPacket ¶
type VersionNegotiationPacket struct { *BasePacketHeader Version qtype.Version DCIL byte SCIL byte SupportedVersions []qtype.Version // contains filtered or unexported fields }
Version negotiation doesn't use long header, but have similar form
func NewVersionNegotiationPacket ¶
func NewVersionNegotiationPacket(destConnID, srcConnID qtype.ConnectionID, supportedVersions []qtype.Version) *VersionNegotiationPacket
func (VersionNegotiationPacket) GetFrames ¶
func (p VersionNegotiationPacket) GetFrames() []Frame
func (VersionNegotiationPacket) GetHeader ¶
func (p VersionNegotiationPacket) GetHeader() PacketHeader
func (VersionNegotiationPacket) GetPacketNumber ¶
func (p VersionNegotiationPacket) GetPacketNumber() qtype.PacketNumber
func (VersionNegotiationPacket) GetWire ¶
func (p VersionNegotiationPacket) GetWire() ([]byte, error)
func (VersionNegotiationPacket) IsProbePacket ¶
func (p VersionNegotiationPacket) IsProbePacket() bool
func (VersionNegotiationPacket) SetFrames ¶
func (p VersionNegotiationPacket) SetFrames(fs []Frame)
func (VersionNegotiationPacket) SetHeader ¶
func (p VersionNegotiationPacket) SetHeader(h PacketHeader)
func (VersionNegotiationPacket) SetWire ¶
func (p VersionNegotiationPacket) SetWire(wire []byte)
func (VersionNegotiationPacket) String ¶
func (p VersionNegotiationPacket) String() string