package quic
import (
"context"
"crypto/tls"
"errors"
"net"
"github.com/quic-go/quic-go/internal/protocol"
)
var generateConnectionIDForInitial = protocol .GenerateConnectionIDForInitial
func DialAddr (ctx context .Context , addr string , tlsConf *tls .Config , conf *Config ) (Connection , error ) {
udpConn , err := net .ListenUDP ("udp" , &net .UDPAddr {IP : net .IPv4zero , Port : 0 })
if err != nil {
return nil , err
}
udpAddr , err := net .ResolveUDPAddr ("udp" , addr )
if err != nil {
return nil , err
}
tr , err := setupTransport (udpConn , tlsConf , true )
if err != nil {
return nil , err
}
return tr .dial (ctx , udpAddr , addr , tlsConf , conf , false )
}
func DialAddrEarly (ctx context .Context , addr string , tlsConf *tls .Config , conf *Config ) (EarlyConnection , error ) {
udpConn , err := net .ListenUDP ("udp" , &net .UDPAddr {IP : net .IPv4zero , Port : 0 })
if err != nil {
return nil , err
}
udpAddr , err := net .ResolveUDPAddr ("udp" , addr )
if err != nil {
return nil , err
}
tr , err := setupTransport (udpConn , tlsConf , true )
if err != nil {
return nil , err
}
conn , err := tr .dial (ctx , udpAddr , addr , tlsConf , conf , true )
if err != nil {
tr .Close ()
return nil , err
}
return conn , nil
}
func DialEarly (ctx context .Context , c net .PacketConn , addr net .Addr , tlsConf *tls .Config , conf *Config ) (EarlyConnection , error ) {
dl , err := setupTransport (c , tlsConf , false )
if err != nil {
return nil , err
}
conn , err := dl .DialEarly (ctx , addr , tlsConf , conf )
if err != nil {
dl .Close ()
return nil , err
}
return conn , nil
}
func Dial (ctx context .Context , c net .PacketConn , addr net .Addr , tlsConf *tls .Config , conf *Config ) (Connection , error ) {
dl , err := setupTransport (c , tlsConf , false )
if err != nil {
return nil , err
}
conn , err := dl .Dial (ctx , addr , tlsConf , conf )
if err != nil {
dl .Close ()
return nil , err
}
return conn , nil
}
func setupTransport(c net .PacketConn , tlsConf *tls .Config , createdPacketConn bool ) (*Transport , error ) {
if tlsConf == nil {
return nil , errors .New ("quic: tls.Config not set" )
}
return &Transport {
Conn : c ,
createdConn : createdPacketConn ,
isSingleUse : true ,
}, nil
}
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 .