Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Unified Diff: remoting/protocol/message_decoder.h

Issue 6277003: Simplified MessageReader and MessageDecoder classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/jingle_connection_to_host.cc ('k') | remoting/protocol/message_decoder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/message_decoder.h
diff --git a/remoting/protocol/message_decoder.h b/remoting/protocol/message_decoder.h
index 8b521fe6a1144f0785f20cbacf98b6547b438f80..3e0745f73f9a70a4d017f7797c65d5d7be248601 100644
--- a/remoting/protocol/message_decoder.h
+++ b/remoting/protocol/message_decoder.h
@@ -17,63 +17,30 @@
namespace remoting {
namespace protocol {
-// MessageDecoder uses CompoundBuffer to decode bytes into protocol
-// buffer messages. This can be used to decode bytes received from the
-// network.
+// MessageDecoder uses CompoundBuffer to split the data received from
+// the network into separate messages. Each message is expected to be
+// decoded in the stream as follows:
+// +--------------+--------------+
+// | message_size | message_data |
+// +--------------+--------------+
//
-// It provides ParseMessages() which accepts an IOBuffer. If enough bytes
-// are collected to produce protocol buffer messages then the bytes will be
-// consumed and the generated protocol buffer messages are added to the output
-// list.
-//
-// It retains ownership of IOBuffer given to this object and keeps it alive
-// until it is full consumed.
+// Here, message_size is 4-byte integer that represents size of
+// message_data in bytes. message_data - content of the message.
class MessageDecoder {
public:
MessageDecoder();
virtual ~MessageDecoder();
- // Parses the bytes in |data| into a protobuf of type MessageType. The bytes
- // in |data| are conceptually a stream of bytes to be parsed into a series of
- // protobufs. Each parsed protouf is appended into the |messages|. All calls
- // to ParseMessages should use same MessageType for any single instace of
- // MessageDecoder.
-
- // This function retains |data| until all its bytes are consumed.
- // Ownership of the produced protobufs is passed to the caller via the
- // |messages| list.
- template <class MessageType>
- void ParseMessages(scoped_refptr<net::IOBuffer> data,
- int data_size, std::list<MessageType*>* messages) {
- AddBuffer(data, data_size);
-
- // Then try to parse the next message until we can't parse anymore.
- MessageType* message;
- while (ParseOneMessage<MessageType>(&message)) {
- messages->push_back(message);
- }
- }
-
- private:
- // Parse one message from |buffer_list_|. Return true if sucessful.
- template <class MessageType>
- bool ParseOneMessage(MessageType** message) {
- CompoundBuffer buffer;
- if (!GetNextMessageData(&buffer))
- return false;
-
- CompoundBufferInputStream stream(&buffer);
- *message = new MessageType();
- bool ret = (*message)->ParseFromZeroCopyStream(&stream);
- if (!ret)
- delete *message;
- return ret;
- }
-
- void AddBuffer(scoped_refptr<net::IOBuffer> data, int data_size);
+ // Add next chunk of data. MessageDecoder retains |data| until all
+ // its bytes are consumed.
+ void AddData(scoped_refptr<net::IOBuffer> data, int data_size);
- bool GetNextMessageData(CompoundBuffer* message_buffer);
+ // Get next message from the stream and puts it in
+ // |message_buffer|. Returns false if there are no complete messages
+ // yet.
+ bool GetNextMessage(CompoundBuffer* message_buffer);
+ private:
// Retrieves the read payload size of the current protocol buffer via |size|.
// Returns false and leaves |size| unmodified, if we do not have enough data
// to retrieve the current size.
« no previous file with comments | « remoting/protocol/jingle_connection_to_host.cc ('k') | remoting/protocol/message_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698