Documentation ¶
Index ¶
- func GetPathSmoothedRTT(pth *path) time.Duration
- func PrintSchedulerInfo(config *Config)
- type Config
- type Cookie
- type Listener
- func Listen(pconn net.PacketConn, tlsConf *tls.Config, config *Config) (Listener, error)
- func ListenAddr(addr string, tlsConf *tls.Config, config *Config) (Listener, error)
- func ListenAddrImpl(addr string, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager) (Listener, error)
- func ListenImpl(pconn net.PacketConn, tlsConf *tls.Config, config *Config, ...) (Listener, error)
- type NonFWSession
- type PacketBuffer
- func (pb *PacketBuffer) AddPacket(frame *wire.DatagramFrame, info PacketInfo)
- func (pb *PacketBuffer) GetPacket(sequenceID int) (*wire.DatagramFrame, PacketInfo, error)
- func (pb *PacketBuffer) GetPacketInfoByFrame(frame *wire.DatagramFrame) (PacketInfo, error)
- func (pb *PacketBuffer) Refreshinfonolog(frame *wire.DatagramFrame, info PacketInfo)
- func (pb *PacketBuffer) RetransmissionBlock(blockSequenceID int)
- type PacketInfo
- type PacketList
- type Session
- type Stream
- type StreamID
- type TimeoutError
- type VersionNumber
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetPathSmoothedRTT ¶
GetPathSmoothedRTT get smoothed RTT in time.Duration zzh
func PrintSchedulerInfo ¶
func PrintSchedulerInfo(config *Config)
Types ¶
type Config ¶
type Config struct { // The QUIC versions that can be negotiated. // If not set, it uses all versions available. // Warning: This API should not be considered stable and will change soon. Versions []VersionNumber // Ask the server to truncate the connection ID sent in the Public Header. // This saves 8 bytes in the Public Header in every packet. However, if the IP address of the server changes, the connection cannot be migrated. // Currently only valid for the client. RequestConnectionIDTruncation bool // HandshakeTimeout is the maximum duration that the cryptographic handshake may take. // If the timeout is exceeded, the connection is closed. // If this value is zero, the timeout is set to 10 seconds. HandshakeTimeout time.Duration // IdleTimeout is the maximum duration that may pass without any incoming network activity. // This value only applies after the handshake has completed. // If the timeout is exceeded, the connection is closed. // If this value is zero, the timeout is set to 30 seconds. IdleTimeout time.Duration // AcceptCookie determines if a Cookie is accepted. // It is called with cookie = nil if the client didn't send an Cookie. // If not set, it verifies that the address matches, and that the Cookie was issued within the last 24 hours. // This option is only valid for the server. AcceptCookie func(clientAddr net.Addr, cookie *Cookie) bool // MaxReceiveStreamFlowControlWindow is the maximum stream-level flow control window for receiving data. // If this value is zero, it will default to 1 MB for the server and 6 MB for the client. MaxReceiveStreamFlowControlWindow uint64 // MaxReceiveConnectionFlowControlWindow is the connection-level flow control window for receiving data. // If this value is zero, it will default to 1.5 MB for the server and 15 MB for the client. MaxReceiveConnectionFlowControlWindow uint64 // KeepAlive defines whether this peer will periodically send PING frames to keep the connection alive. KeepAlive bool // Should we cache handshake parameters? If no cache available, should we create one? CacheHandshake bool // Should the host try to create new paths, if possible? CreatePaths bool // Select Scheduler to Choose default will be round-robin Scheduler string WeightsFile string Training bool Epsilon float64 AllowedCongestion int DumpExperiences bool // zzh: Add a flag to enable datagrams. // See https://datatracker.ietf.org/doc/draft-ietf-quic-datagram/. // Datagrams will only be available when both peers enable datagram support. EnableDatagrams bool }
Config contains all configuration data needed for a QUIC server or client.
type Listener ¶
type Listener interface { // Close the server, sending CONNECTION_CLOSE frames to each peer. Close() error // Addr returns the local network addr that the server is listening on. Addr() net.Addr // Accept returns new sessions. It should be called in a loop. Accept() (Session, error) }
A Listener for incoming QUIC connections
func Listen ¶
Listen listens for QUIC connections on a given net.PacketConn. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil.
func ListenAddr ¶
ListenAddr creates a QUIC server listening on a given address. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil.
func ListenAddrImpl ¶
func ListenAddrImpl(addr string, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager) (Listener, error)
ListenAddrImpl creates a QUIC server listening on a given address. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil. The pconnManager may be nil
func ListenImpl ¶
func ListenImpl(pconn net.PacketConn, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager) (Listener, error)
ListenImpl listens for QUIC connections on a given net.PacketConn. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil. pconnManager may be nil
type NonFWSession ¶
A NonFWSession is a QUIC connection between two peers half-way through the handshake. The communication is encrypted, but not yet forward secure.
func DialAddrNonFWSecure ¶
DialAddrNonFWSecure establishes a new QUIC connection to a server. The hostname for SNI is taken from the given address.
func DialNonFWSecure ¶
func DialNonFWSecure( pconn net.PacketConn, remoteAddr net.Addr, host string, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager, ) (NonFWSession, error)
DialNonFWSecure establishes a new non-forward-secure QUIC connection to a server using a net.PacketConn. The host parameter is used for SNI.
type PacketBuffer ¶
type PacketBuffer struct {
// contains filtered or unexported fields
}
PacketBuffer manages packets and their metadata.
func NewPacketBuffer ¶
func NewPacketBuffer(s *session) *PacketBuffer
NewPacketBuffer creates a new PacketBuffer.
func (*PacketBuffer) AddPacket ¶
func (pb *PacketBuffer) AddPacket(frame *wire.DatagramFrame, info PacketInfo)
AddPacket adds a packet and its metadata to the buffer.
func (*PacketBuffer) GetPacket ¶
func (pb *PacketBuffer) GetPacket(sequenceID int) (*wire.DatagramFrame, PacketInfo, error)
GetPacket retrieves a packet and its metadata from the buffer.
func (*PacketBuffer) GetPacketInfoByFrame ¶
func (pb *PacketBuffer) GetPacketInfoByFrame(frame *wire.DatagramFrame) (PacketInfo, error)
func (*PacketBuffer) Refreshinfonolog ¶
func (pb *PacketBuffer) Refreshinfonolog(frame *wire.DatagramFrame, info PacketInfo)
AddPacket adds a packet and its metadata to the buffer.
func (*PacketBuffer) RetransmissionBlock ¶
func (pb *PacketBuffer) RetransmissionBlock(blockSequenceID int)
type PacketInfo ¶
type PacketInfo struct { IsStart bool IsEnd bool SequenceID int Processed bool Packetsize int BlockSize int BlockSequenceID int }
zzh: add PacketBufferPool PacketInfo stores metadata about each packet.
type PacketList ¶
type PacketList struct {
// contains filtered or unexported fields
}
zzh: begin from ytxing's code PacketList zzh
type Session ¶
type Session interface { // AcceptStream returns the next stream opened by the peer, blocking until one is available. // Since stream 1 is reserved for the crypto stream, the first stream is either 2 (for a client) or 3 (for a server). AcceptStream() (Stream, error) // OpenStream opens a new QUIC stream, returning a special error when the peer's concurrent stream limit is reached. // New streams always have the smallest possible stream ID. // TODO: Enable testing for the special error OpenStream() (Stream, error) // OpenStreamSync opens a new QUIC stream, blocking until the peer's concurrent stream limit allows a new stream to be opened. // It always picks the smallest possible stream ID. OpenStreamSync() (Stream, error) // LocalAddr returns the local address. LocalAddr() net.Addr // RemoteAddr returns the address of the peer. RemoteAddr() net.Addr // Close closes the connection. The error will be sent to the remote peer in a CONNECTION_CLOSE frame. An error value of nil is allowed and will cause a normal PeerGoingAway to be sent. Close(error) error // The context is cancelled when the session is closed. // Warning: This API should not be considered stable and might change soon. Context() context.Context // zzh: Get the deadline status Getdeadlinestatus() time.Duration // zzh: add a datagram interface // SendMessage sends a message as a datagram. // See https://datatracker.ietf.org/doc/draft-pauly-quic-datagram/. SendMessage([]byte) error // ReceiveMessage gets a message received in a datagram. // See https://datatracker.ietf.org/doc/draft-pauly-quic-datagram/. ReceiveMessage() ([]byte, error) }
A Session is a QUIC connection between two peers.
type Stream ¶
type Stream interface { // Read reads data from the stream. // Read can be made to time out and return a net.Error with Timeout() == true // after a fixed time limit; see SetDeadline and SetReadDeadline. io.Reader // Write writes data to the stream. // Write can be made to time out and return a net.Error with Timeout() == true // after a fixed time limit; see SetDeadline and SetWriteDeadline. io.Writer io.Closer StreamID() StreamID // Reset closes the stream with an error. Reset(error) // The context is canceled as soon as the write-side of the stream is closed. // This happens when Close() is called, or when the stream is reset (either locally or remotely). // Warning: This API should not be considered stable and might change soon. Context() context.Context // SetReadDeadline sets the deadline for future Read calls and // any currently-blocked Read call. // A zero value for t means Read will not time out. SetReadDeadline(t time.Time) error // SetWriteDeadline sets the deadline for future Write calls // and any currently-blocked Write call. // Even if write times out, it may return n > 0, indicating that // some of the data was successfully written. // A zero value for t means Write will not time out. SetWriteDeadline(t time.Time) error // SetDeadline sets the read and write deadlines associated // with the connection. It is equivalent to calling both // SetReadDeadline and SetWriteDeadline. SetDeadline(t time.Time) error // GetBytesSent returns the number of bytes of the stream that were sent to the peer GetBytesSent() (protocol.ByteCount, error) // GetBytesRetrans returns the number of bytes of the stream that were retransmitted to the peer GetBytesRetrans() (protocol.ByteCount, error) }
Stream is the interface implemented by QUIC streams
type VersionNumber ¶
type VersionNumber = protocol.VersionNumber
A VersionNumber is a QUIC version number.