Changeset 22 in code for trunk/downstream.go
- Timestamp:
- Feb 6, 2020, 8:11:35 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r15 r22 43 43 irc *irc.Conn 44 44 srv *Server 45 logger Logger 46 45 47 registered bool 46 48 closed bool … … 48 50 username string 49 51 realname string 52 } 53 54 func newDownstreamConn(srv *Server, netConn net.Conn) *downstreamConn { 55 return &downstreamConn{ 56 net: netConn, 57 irc: irc.NewConn(netConn), 58 srv: srv, 59 logger: &prefixLogger{srv.Logger, fmt.Sprintf("downstream %q: ", netConn.RemoteAddr())}, 60 } 61 } 62 63 func (c *downstreamConn) readMessages() error { 64 c.logger.Printf("new connection") 65 defer c.Close() 66 67 for { 68 msg, err := c.irc.ReadMessage() 69 if err == io.EOF { 70 break 71 } else if err != nil { 72 return fmt.Errorf("failed to read IRC command: %v", err) 73 } 74 75 err = c.handleMessage(msg) 76 if ircErr, ok := err.(ircError); ok { 77 ircErr.Message.Prefix = c.srv.prefix() 78 if err := c.WriteMessage(ircErr.Message); err != nil { 79 return fmt.Errorf("failed to write IRC reply: %v", err) 80 } 81 } else if err != nil { 82 return fmt.Errorf("failed to handle IRC command %q: %v", msg.Command, err) 83 } 84 85 if c.closed { 86 return nil 87 } 88 } 89 90 return c.Close() 50 91 } 51 92 … … 96 137 return c.Close() 97 138 default: 139 c.logger.Printf("unhandled message: %v", msg) 98 140 return newUnknownCommandError(msg.Command) 99 141 } … … 163 205 return c.Close() 164 206 default: 207 c.logger.Printf("unhandled message: %v", msg) 165 208 return newUnknownCommandError(msg.Command) 166 209 } 167 210 } 168 169 func handleConn(s *Server, netConn net.Conn) error {170 s.Logger.Printf("Handling connection from %v", netConn.RemoteAddr())171 172 c := downstreamConn{net: netConn, irc: irc.NewConn(netConn), srv: s}173 defer c.Close()174 for {175 msg, err := c.irc.ReadMessage()176 if err == io.EOF {177 break178 } else if err != nil {179 return fmt.Errorf("failed to read IRC command: %v", err)180 }181 s.Logger.Printf("Downstream message: %v", msg)182 183 err = c.handleMessage(msg)184 if ircErr, ok := err.(ircError); ok {185 ircErr.Message.Prefix = s.prefix()186 if err := c.WriteMessage(ircErr.Message); err != nil {187 return fmt.Errorf("failed to write IRC reply: %v", err)188 }189 } else if err != nil {190 return fmt.Errorf("failed to handle IRC command %q: %v", msg.Command, err)191 }192 193 if c.closed {194 return nil195 }196 }197 198 return c.Close()199 }
Note:
See TracChangeset
for help on using the changeset viewer.