| 81 | } |
| 82 | |
| 83 | static void SerializeRpcHeaderAndMeta( |
| 84 | butil::IOBuf* out, const RpcMeta& meta, int payload_size) { |
| 85 | const uint32_t meta_size = GetProtobufByteSize(meta); |
| 86 | if (meta_size <= 244) { // most common cases |
| 87 | char header_and_meta[12 + meta_size]; |
| 88 | PackRpcHeader(header_and_meta, meta_size, payload_size); |
| 89 | ::google::protobuf::io::ArrayOutputStream arr_out(header_and_meta + 12, meta_size); |
| 90 | ::google::protobuf::io::CodedOutputStream coded_out(&arr_out); |
| 91 | meta.SerializeWithCachedSizes(&coded_out); // not calling ByteSize again |
| 92 | CHECK(!coded_out.HadError()); |
| 93 | CHECK_EQ(0, out->append(header_and_meta, sizeof(header_and_meta))); |
| 94 | } else { |
| 95 | char header[12]; |
| 96 | PackRpcHeader(header, meta_size, payload_size); |
| 97 | CHECK_EQ(0, out->append(header, sizeof(header))); |
| 98 | butil::IOBufAsZeroCopyOutputStream buf_stream(out); |
| 99 | ::google::protobuf::io::CodedOutputStream coded_out(&buf_stream); |
| 100 | meta.SerializeWithCachedSizes(&coded_out); |
| 101 | CHECK(!coded_out.HadError()); |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | ParseResult ParseRpcMessage(butil::IOBuf* source, Socket* socket, |
| 106 | bool /*read_eof*/, const void*) { |
no test coverage detected