func (c *Codec) ReadHeader(hdr *rpc.Header) error { c.msg = inMsg{} // avoid any potential cross-message contamination. var err error if c.isLogging() { var m json.RawMessage err = c.conn.Receive(&m) if err == nil { logger.Tracef("<- %s", m) err = json.Unmarshal(m, &c.msg) } else { logger.Tracef("<- error: %v (closing %v)", err, c.isClosing()) } } else { err = c.conn.Receive(&c.msg) } if err != nil { // If we've closed the connection, we may get a spurious error, // so ignore it. if c.isClosing() || err == io.EOF { return io.EOF } return fmt.Errorf("error receiving message: %v", err) } hdr.RequestId = c.msg.RequestId hdr.Request = rpc.Request{ Type: c.msg.Type, Id: c.msg.Id, Action: c.msg.Request, } hdr.Error = c.msg.Error hdr.ErrorCode = c.msg.ErrorCode return nil }
func (c *Codec) ReadHeader(hdr *rpc.Header) error { var m json.RawMessage var version int err := c.conn.Receive(&m) if err == nil { logger.Tracef("<- %s", m) c.msg, version, err = c.readMessage(m) } else { logger.Tracef("<- error: %v (closing %v)", err, c.isClosing()) } if err != nil { // If we've closed the connection, we may get a spurious error, // so ignore it. if c.isClosing() || err == io.EOF { return io.EOF } return errors.Annotate(err, "error receiving message") } hdr.RequestId = c.msg.RequestId hdr.Request = rpc.Request{ Type: c.msg.Type, Version: c.msg.Version, Id: c.msg.Id, Action: c.msg.Request, } hdr.Error = c.msg.Error hdr.ErrorCode = c.msg.ErrorCode hdr.Version = version return nil }