in conn.go [205:253]
func dialConn(ctx context.Context, addr string, opts *ConnOptions) (*Conn, error) {
u, err := url.Parse(addr)
if err != nil {
return nil, err
}
host, port := u.Hostname(), u.Port()
if port == "" {
port = "5672"
if u.Scheme == "amqps" || u.Scheme == "amqp+ssl" {
port = "5671"
}
}
var cp ConnOptions
if opts != nil {
cp = *opts
}
// prepend SASL credentials when the user/pass segment is not empty
if u.User != nil {
pass, _ := u.User.Password()
cp.SASLType = SASLTypePlain(u.User.Username(), pass)
}
if cp.HostName == "" {
cp.HostName = host
}
c, err := newConn(nil, &cp)
if err != nil {
return nil, err
}
switch u.Scheme {
case "amqp", "":
err = c.dialer.NetDialerDial(ctx, c, host, port)
case "amqps", "amqp+ssl":
c.initTLSConfig()
c.tlsNegotiation = false
err = c.dialer.TLSDialWithDialer(ctx, c, host, port)
default:
err = fmt.Errorf("unsupported scheme %q", u.Scheme)
}
if err != nil {
return nil, err
}
return c, nil
}