| Index: remoting/base/protocol_decoder.h
|
| ===================================================================
|
| --- remoting/base/protocol_decoder.h (revision 0)
|
| +++ remoting/base/protocol_decoder.h (revision 0)
|
| @@ -0,0 +1,72 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef REMOTING_BASE_PROTOCOL_DECODER_H_
|
| +#define REMOTING_BASE_PROTOCOL_DECODER_H_
|
| +
|
| +#include <deque>
|
| +#include <vector>
|
| +
|
| +#include "base/ref_counted.h"
|
| +#include "google/protobuf/message_lite.h"
|
| +#include "media/base/data_buffer.h"
|
| +#include "remoting/base/protocol/chromotocol.pb.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +typedef std::vector<chromotocol_pb::HostMessage*> HostMessageList;
|
| +typedef std::vector<chromotocol_pb::ClientMessage*> ClientMessageList;
|
| +
|
| +// A protocol decoder is used to decode data transmitted in the chromoting
|
| +// network.
|
| +// TODO(hclam): Defines the interface and implement methods.
|
| +class ProtocolDecoder {
|
| + public:
|
| + ProtocolDecoder();
|
| +
|
| + virtual ~ProtocolDecoder() {}
|
| +
|
| + // Parse data received from network into ClientMessages. Ownership of |data|
|
| + // is passed to this object and output is written to |messages|.
|
| + virtual void ParseClientMessages(scoped_refptr<media::DataBuffer> data,
|
| + ClientMessageList* messages);
|
| +
|
| + // Parse data received from network into HostMessages. Ownership of |data|
|
| + // is passed to this object and output is written to |messages|.
|
| + virtual void ParseHostMessages(scoped_refptr<media::DataBuffer> data,
|
| + HostMessageList* messages);
|
| +
|
| + private:
|
| + // A private method used to parse data received from network into protocol
|
| + // buffers.
|
| + template <typename T>
|
| + void ParseMessages(scoped_refptr<media::DataBuffer> data,
|
| + std::vector<T*>* messages);
|
| +
|
| + // Parse one message from |data_list_|. Return true if sucessful.
|
| + template <typename T>
|
| + bool ParseOneMessage(T** messages);
|
| +
|
| + // A utility method to read payload size of the protocol buffer from the
|
| + // data list. Return false if we don't have enough data.
|
| + bool GetPayloadSize(int* size);
|
| +
|
| + typedef std::deque<scoped_refptr<media::DataBuffer> > DataList;
|
| + DataList data_list_;
|
| + int last_read_position_;
|
| +
|
| + // Count the number of bytes in |data_list_| not read.
|
| + int available_bytes_;
|
| +
|
| + // Stores the size of the next payload if known.
|
| + int next_payload_;
|
| +
|
| + // True if the size of the next payload is known. After one payload is read,
|
| + // this is reset to false.
|
| + bool next_payload_known_;
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +#endif // REMOTING_BASE_PROTOCOL_DECODER_H_
|
|
|
| Property changes on: remoting/base/protocol_decoder.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|