// threadedHandleConn reads header data from a connection, then routes it to the // appropriate handler for further processing. func (g *Gateway) threadedHandleConn(conn modules.PeerConn) { defer conn.Close() var id rpcID if err := encoding.ReadObject(conn, &id, 8); err != nil { return } // call registered handler for this ID lockid := g.mu.RLock() fn, ok := g.handlers[id] g.mu.RUnlock(lockid) if !ok { g.log.Printf("WARN: incoming conn %v requested unknown RPC \"%v\"", conn.RemoteAddr(), id) return } // call fn err := fn(conn) // don't log benign errors if err == modules.ErrDuplicateTransactionSet || err == modules.ErrBlockKnown { err = nil } if err != nil { g.log.Printf("WARN: incoming RPC \"%v\" failed: %v", id, err) } }
// threadedHandleConn reads header data from a connection, then routes it to the // appropriate handler for further processing. func (g *Gateway) threadedHandleConn(conn modules.PeerConn) { defer conn.Close() var id rpcID if err := encoding.ReadObject(conn, &id, 8); err != nil { g.log.Printf("WARN: could not read RPC identifier from incoming conn %v: %v", conn.RemoteAddr(), err) return } // call registered handler for this ID lockid := g.mu.RLock() fn, ok := g.handlers[id] g.mu.RUnlock(lockid) if !ok { g.log.Printf("WARN: incoming conn %v requested unknown RPC \"%v\"", conn.RemoteAddr(), id) return } if err := fn(conn); err != nil { g.log.Printf("WARN: incoming RPC \"%v\" failed: %v", id, err) } }