package libp2pquic
import (
"context"
ic "github.com/libp2p/go-libp2p/core/crypto"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
tpt "github.com/libp2p/go-libp2p/core/transport"
ma "github.com/multiformats/go-multiaddr"
"github.com/quic-go/quic-go"
)
type conn struct {
quicConn quic .Connection
transport *transport
scope network .ConnManagementScope
localPeer peer .ID
localMultiaddr ma .Multiaddr
remotePeerID peer .ID
remotePubKey ic .PubKey
remoteMultiaddr ma .Multiaddr
}
var _ tpt .CapableConn = &conn {}
func (c *conn ) Close () error {
return c .closeWithError (0 , "" )
}
func (c *conn ) CloseWithError (errCode network .ConnErrorCode ) error {
return c .closeWithError (quic .ApplicationErrorCode (errCode ), "" )
}
func (c *conn ) closeWithError (errCode quic .ApplicationErrorCode , errString string ) error {
c .transport .removeConn (c .quicConn )
err := c .quicConn .CloseWithError (errCode , errString )
c .scope .Done ()
return err
}
func (c *conn ) IsClosed () bool {
return c .quicConn .Context ().Err () != nil
}
func (c *conn ) allowWindowIncrease (size uint64 ) bool {
return c .scope .ReserveMemory (int (size ), network .ReservationPriorityMedium ) == nil
}
func (c *conn ) OpenStream (ctx context .Context ) (network .MuxedStream , error ) {
qstr , err := c .quicConn .OpenStreamSync (ctx )
if err != nil {
return nil , parseStreamError (err )
}
return &stream {Stream : qstr }, nil
}
func (c *conn ) AcceptStream () (network .MuxedStream , error ) {
qstr , err := c .quicConn .AcceptStream (context .Background ())
if err != nil {
return nil , parseStreamError (err )
}
return &stream {Stream : qstr }, nil
}
func (c *conn ) LocalPeer () peer .ID { return c .localPeer }
func (c *conn ) RemotePeer () peer .ID { return c .remotePeerID }
func (c *conn ) RemotePublicKey () ic .PubKey { return c .remotePubKey }
func (c *conn ) LocalMultiaddr () ma .Multiaddr { return c .localMultiaddr }
func (c *conn ) RemoteMultiaddr () ma .Multiaddr { return c .remoteMultiaddr }
func (c *conn ) Transport () tpt .Transport { return c .transport }
func (c *conn ) Scope () network .ConnScope { return c .scope }
func (c *conn ) ConnState () network .ConnectionState {
t := "quic-v1"
if _ , err := c .LocalMultiaddr ().ValueForProtocol (ma .P_QUIC ); err == nil {
t = "quic"
}
return network .ConnectionState {Transport : t }
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .