- Timestamp:
- Feb 6, 2020, 8:20:22 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r22 r23 40 40 41 41 type downstreamConn struct { 42 net 43 irc 44 srv 45 logger 42 net net.Conn 43 irc *irc.Conn 44 srv *Server 45 logger Logger 46 46 47 47 registered bool … … 54 54 func newDownstreamConn(srv *Server, netConn net.Conn) *downstreamConn { 55 55 return &downstreamConn{ 56 net: netConn,57 irc: irc.NewConn(netConn),58 srv: srv,56 net: netConn, 57 irc: irc.NewConn(netConn), 58 srv: srv, 59 59 logger: &prefixLogger{srv.Logger, fmt.Sprintf("downstream %q: ", netConn.RemoteAddr())}, 60 60 } -
trunk/server.go
r22 r23 55 55 // TODO: retry connecting 56 56 go func() { 57 if err := connect(s, upstream); err != nil { 58 s.Logger.Printf("Failed to connect to upstream server %q: %v", upstream.Addr, err) 57 conn, err := connectToUpstream(s, upstream) 58 if err != nil { 59 s.Logger.Printf("failed to connect to upstream server %q: %v", upstream.Addr, err) 60 return 61 } 62 if err := conn.readMessages(); err != nil { 63 conn.logger.Printf("failed to handle messages: %v", err) 59 64 } 60 65 }() … … 73 78 go func() { 74 79 if err := conn.readMessages(); err != nil { 75 conn.logger.Printf(" Error handlingmessages: %v", err)80 conn.logger.Printf("failed to handle messages: %v", err) 76 81 } 77 82 }() -
trunk/upstream.go
r21 r23 176 176 } 177 177 178 func connect(s *Server, upstream *Upstream) error { 178 func (c *upstreamConn) readMessages() error { 179 defer c.net.Close() 180 181 err := c.irc.WriteMessage(&irc.Message{ 182 Command: "NICK", 183 Params: []string{c.upstream.Nick}, 184 }) 185 if err != nil { 186 return err 187 } 188 189 err = c.irc.WriteMessage(&irc.Message{ 190 Command: "USER", 191 Params: []string{c.upstream.Username, "0", "*", c.upstream.Realname}, 192 }) 193 if err != nil { 194 return err 195 } 196 197 for { 198 msg, err := c.irc.ReadMessage() 199 if err == io.EOF { 200 break 201 } else if err != nil { 202 return fmt.Errorf("failed to read IRC command: %v", err) 203 } 204 205 if err := c.handleMessage(msg); err != nil { 206 c.logger.Printf("failed to handle message %q: %v", msg, err) 207 } 208 } 209 210 return c.net.Close() 211 } 212 213 func connectToUpstream(s *Server, upstream *Upstream) (*upstreamConn, error) { 179 214 logger := &prefixLogger{s.Logger, fmt.Sprintf("upstream %q: ", upstream.Addr)} 180 215 logger.Printf("connecting to server") … … 182 217 netConn, err := tls.Dial("tcp", upstream.Addr, nil) 183 218 if err != nil { 184 return fmt.Errorf("failed to dial %q: %v", upstream.Addr, err)185 } 186 187 c :=upstreamConn{219 return nil, fmt.Errorf("failed to dial %q: %v", upstream.Addr, err) 220 } 221 222 return &upstreamConn{ 188 223 upstream: upstream, 189 224 logger: logger, … … 192 227 srv: s, 193 228 channels: make(map[string]*upstreamChannel), 194 } 195 defer netConn.Close() 196 197 err = c.irc.WriteMessage(&irc.Message{ 198 Command: "NICK", 199 Params: []string{upstream.Nick}, 200 }) 201 if err != nil { 202 return err 203 } 204 205 err = c.irc.WriteMessage(&irc.Message{ 206 Command: "USER", 207 Params: []string{upstream.Username, "0", "*", upstream.Realname}, 208 }) 209 if err != nil { 210 return err 211 } 212 213 for { 214 msg, err := c.irc.ReadMessage() 215 if err == io.EOF { 216 break 217 } else if err != nil { 218 return fmt.Errorf("failed to read IRC command: %v", err) 219 } 220 221 if err := c.handleMessage(msg); err != nil { 222 c.logger.Printf("failed to handle message %q: %v", msg, err) 223 } 224 } 225 226 return netConn.Close() 227 } 229 }, nil 230 }
Note:
See TracChangeset
for help on using the changeset viewer.