Changeset 352 in code for trunk/upstream.go
- Timestamp:
- Jul 6, 2020, 3:18:13 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/upstream.go
r351 r352 11 11 "io" 12 12 "net" 13 "net/url" 13 14 "strconv" 14 15 "strings" … … 81 82 logger := &prefixLogger{network.user.srv.Logger, fmt.Sprintf("upstream %q: ", network.Addr)} 82 83 83 var scheme string84 var addr string85 86 addrParts := strings.SplitN(network.Addr, "://", 2)87 if len(addrParts) == 2 {88 scheme = addrParts[0]89 addr = addrParts[1]90 } else {91 scheme = "ircs"92 addr = addrParts[0]93 }94 95 84 dialer := net.Dialer{Timeout: connectTimeout} 96 85 86 s := network.Addr 87 if !strings.Contains(s, "://") { 88 // This is a raw domain name, make it an URL with the default scheme 89 s = "ircs://" + s 90 } 91 92 u, err := url.Parse(s) 93 if err != nil { 94 return nil, fmt.Errorf("failed to parse upstream server URL: %v", err) 95 } 96 97 97 var netConn net.Conn 98 var err error 99 switch scheme { 98 switch u.Scheme { 100 99 case "ircs": 100 addr := u.Host 101 101 if _, _, err := net.SplitHostPort(addr); err != nil { 102 102 addr = addr + ":6697" … … 105 105 logger.Printf("connecting to TLS server at address %q", addr) 106 106 107 var cfg *tls.Config107 var tlsConfig *tls.Config 108 108 if network.SASL.Mechanism == "EXTERNAL" { 109 109 if network.SASL.External.CertBlob == nil { … … 117 117 return nil, fmt.Errorf("failed to parse private key: %v", err) 118 118 } 119 cfg = &tls.Config{119 tlsConfig = &tls.Config{ 120 120 Certificates: []tls.Certificate{ 121 121 { … … 128 128 } 129 129 130 netConn, err = tls.DialWithDialer(&dialer, "tcp", addr, cfg) 130 netConn, err = tls.DialWithDialer(&dialer, "tcp", addr, tlsConfig) 131 if err != nil { 132 return nil, fmt.Errorf("failed to dial %q: %v", addr, err) 133 } 131 134 case "irc+insecure": 135 addr := u.Host 132 136 if _, _, err := net.SplitHostPort(addr); err != nil { 133 137 addr = addr + ":6667" … … 136 140 logger.Printf("connecting to plain-text server at address %q", addr) 137 141 netConn, err = dialer.Dial("tcp", addr) 142 if err != nil { 143 return nil, fmt.Errorf("failed to dial %q: %v", addr, err) 144 } 138 145 default: 139 return nil, fmt.Errorf("failed to dial %q: unknown scheme: %v", addr, scheme) 140 } 141 if err != nil { 142 return nil, fmt.Errorf("failed to dial %q: %v", addr, err) 146 return nil, fmt.Errorf("failed to dial %q: unknown scheme: %v", network.Addr, u.Scheme) 143 147 } 144 148 … … 157 161 messageLoggers: make(map[string]*messageLogger), 158 162 } 159 160 163 return uc, nil 161 164 }
Note:
See TracChangeset
for help on using the changeset viewer.