aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/cpp/proto
diff options
context:
space:
mode:
authorGravatar Yang Gao <yangg@google.com>2015-04-30 16:07:06 -0700
committerGravatar Yang Gao <yangg@google.com>2015-04-30 16:07:06 -0700
commit3921c56bee2adff62cb0f9519114d2aa22a67410 (patch)
tree7fdd42a532ca2040b15441d92bcd0b66eccf0397 /src/cpp/proto
parent6d42a73bb984e19eb1bf84e2a952eec861cea464 (diff)
Expose max message size at the server side
Diffstat (limited to 'src/cpp/proto')
-rw-r--r--src/cpp/proto/proto_utils.cc9
-rw-r--r--src/cpp/proto/proto_utils.h3
2 files changed, 9 insertions, 3 deletions
diff --git a/src/cpp/proto/proto_utils.cc b/src/cpp/proto/proto_utils.cc
index b8de2ea173..8ab536aab8 100644
--- a/src/cpp/proto/proto_utils.cc
+++ b/src/cpp/proto/proto_utils.cc
@@ -158,9 +158,14 @@ bool SerializeProto(const grpc::protobuf::Message& msg, grpc_byte_buffer** bp) {
return msg.SerializeToZeroCopyStream(&writer);
}
-bool DeserializeProto(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg) {
+bool DeserializeProto(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg,
+ int max_message_size) {
GrpcBufferReader reader(buffer);
- return msg->ParseFromZeroCopyStream(&reader);
+ ::grpc::protobuf::io::CodedInputStream decoder(&reader);
+ if (max_message_size > 0) {
+ decoder.SetTotalBytesLimit(max_message_size, max_message_size);
+ }
+ return msg->ParseFromCodedStream(&decoder) && decoder.ConsumedEntireMessage();
}
} // namespace grpc
diff --git a/src/cpp/proto/proto_utils.h b/src/cpp/proto/proto_utils.h
index bc60dc9929..67a775b3ca 100644
--- a/src/cpp/proto/proto_utils.h
+++ b/src/cpp/proto/proto_utils.h
@@ -47,7 +47,8 @@ bool SerializeProto(const grpc::protobuf::Message& msg,
grpc_byte_buffer** buffer);
// The caller keeps ownership of buffer and msg.
-bool DeserializeProto(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg);
+bool DeserializeProto(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg,
+ int max_message_size);
} // namespace grpc