func readRequestBody(r io.Reader, header *wire.RequestHeader, request proto.Message) error { // recv body (end) compressedPbRequest, err := recvFrame(r) if err != nil { return err } // checksum if crc32.ChecksumIEEE(compressedPbRequest) != header.GetChecksum() { return fmt.Errorf("protorpc.readRequestBody: unexpected checksum.") } // decode the compressed data pbRequest, err := snappy.Decode(nil, compressedPbRequest) if err != nil { return err } // check wire header: rawMsgLen if uint32(len(pbRequest)) != header.GetRawRequestLen() { return fmt.Errorf("protorpc.readRequestBody: Unexcpeted header.RawRequestLen.") } // Unmarshal to proto message if request != nil { err = proto.Unmarshal(pbRequest, request) if err != nil { return err } } return nil }
func (c *serverCodec) ReadRequestHeader(r *rpc.Request) error { header := wire.RequestHeader{} err := readRequestHeader(c.r, &header) if err != nil { return err } c.mutex.Lock() c.seq++ c.pending[c.seq] = header.GetId() r.ServiceMethod = header.GetMethod() r.Seq = c.seq c.mutex.Unlock() c.reqHeader = header return nil }