diff options
Diffstat (limited to 'remoting/protocol/util.cc')
-rw-r--r-- | remoting/protocol/util.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/remoting/protocol/util.cc b/remoting/protocol/util.cc new file mode 100644 index 0000000..5a23c93 --- /dev/null +++ b/remoting/protocol/util.cc @@ -0,0 +1,28 @@ +// 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. + +#include "remoting/protocol/util.h" + +#include "base/basictypes.h" +#include "base/hash_tables.h" +#include "base/logging.h" +#include "net/base/io_buffer.h" +#include "third_party/libjingle/source/talk/base/byteorder.h" + +namespace remoting { + +scoped_refptr<net::IOBufferWithSize> SerializeAndFrameMessage( + const google::protobuf::MessageLite& msg) { + // Create a buffer with 4 extra bytes. This is used as prefix to write an + // int32 of the serialized message size for framing. + const int kExtraBytes = sizeof(int32); + int size = msg.ByteSize() + kExtraBytes; + scoped_refptr<net::IOBufferWithSize> buffer = new net::IOBufferWithSize(size); + talk_base::SetBE32(buffer->data(), msg.GetCachedSize()); + msg.SerializeWithCachedSizesToArray( + reinterpret_cast<uint8*>(buffer->data()) + kExtraBytes); + return buffer; +} + +} // namespace remoting |