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 }