hopp/dial.go
Sasha Koshka 218949bd46 Remove quic
It's clear it won't survive this change because I can't even test
it, so who knows if its good enough to have in main.
2025-05-14 14:39:19 -04:00

67 lines
2.0 KiB
Go

package hopp
import "net"
import "errors"
import "context"
import "crypto/tls"
// Dial opens a connection to a server. The network must be one of "quic",
// "quic4", (IPv4-only) "quic6" (IPv6-only), or "unix". For now, "quic4" and
// "quic6" don't do anything as the quic-go package doesn't seem to support this
// behavior.
func Dial(ctx context.Context, network, address string) (Conn, error) {
return (Dialer { }).Dial(ctx, network, address)
}
// Dialer allows for further configuration of the dialing process.
type Dialer struct {
TLSConfig *tls.Config
}
// Dial opens a connection to a server. The network must be one of "quic",
// "quic4", (IPv4-only) "quic6" (IPv6-only), or "unix". For now, "quic4" and
// "quic6" don't do anything as the quic-go package doesn't seem to support this
// behavior.
func (diale Dialer) Dial(ctx context.Context, network, address string) (Conn, error) {
switch network {
case "quic", "quic4", "quic6": return diale.dialQUIC(ctx, network, address)
case "unix": return diale.dialUnix(ctx, network, address)
default: return nil, ErrUnknownNetwork
}
}
func (diale Dialer) dialQUIC(ctx context.Context, network, address string) (Conn, error) {
return nil, errors.New("quic is not yet implemented")
}
func (diale Dialer) dialUnix(ctx context.Context, network, address string) (Conn, error) {
if network != "unix" { return nil, ErrUnknownNetwork }
addr, err := net.ResolveUnixAddr(network, address)
if err != nil { return nil, err }
conn, err := net.DialUnix(network, nil, addr)
if err != nil { return nil, err }
return AdaptA(conn, ClientSide), nil
}
func tlsConfig(conf *tls.Config) *tls.Config {
if conf == nil {
conf = &tls.Config { }
} else {
conf = conf.Clone()
}
conf.NextProtos = []string {
"HOPP/0",
}
return conf
}
func quicNetworkToUDPNetwork(network string) (string, error) {
switch network {
case "quic4": return "udp4", nil
case "quic6": return "udp6", nil
case "quic": return "udp", nil
default: return "", ErrUnknownNetwork
}
}