1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "google_apis/gcm/base/mcs_message.h"
6
7 #include "base/logging.h"
8 #include "google_apis/gcm/base/mcs_util.h"
9
10 namespace gcm {
11
Core()12 MCSMessage::Core::Core() {}
13
Core(uint8 tag,const google::protobuf::MessageLite & protobuf)14 MCSMessage::Core::Core(uint8 tag,
15 const google::protobuf::MessageLite& protobuf) {
16 scoped_ptr<google::protobuf::MessageLite> owned_protobuf(protobuf.New());
17 owned_protobuf->CheckTypeAndMergeFrom(protobuf);
18 protobuf_ = owned_protobuf.Pass();
19 }
20
Core(uint8 tag,scoped_ptr<const google::protobuf::MessageLite> protobuf)21 MCSMessage::Core::Core(
22 uint8 tag,
23 scoped_ptr<const google::protobuf::MessageLite> protobuf) {
24 protobuf_ = protobuf.Pass();
25 }
26
~Core()27 MCSMessage::Core::~Core() {}
28
Get() const29 const google::protobuf::MessageLite& MCSMessage::Core::Get() const {
30 return *protobuf_;
31 }
32
MCSMessage()33 MCSMessage::MCSMessage() : tag_(0), size_(0) {}
34
MCSMessage(const google::protobuf::MessageLite & protobuf)35 MCSMessage::MCSMessage(const google::protobuf::MessageLite& protobuf)
36 : tag_(GetMCSProtoTag(protobuf)),
37 size_(protobuf.ByteSize()),
38 core_(new Core(tag_, protobuf)) {
39 }
40
MCSMessage(uint8 tag,const google::protobuf::MessageLite & protobuf)41 MCSMessage::MCSMessage(uint8 tag,
42 const google::protobuf::MessageLite& protobuf)
43 : tag_(tag),
44 size_(protobuf.ByteSize()),
45 core_(new Core(tag_, protobuf)) {
46 DCHECK_EQ(tag, GetMCSProtoTag(protobuf));
47 }
48
MCSMessage(uint8 tag,scoped_ptr<const google::protobuf::MessageLite> protobuf)49 MCSMessage::MCSMessage(uint8 tag,
50 scoped_ptr<const google::protobuf::MessageLite> protobuf)
51 : tag_(tag),
52 size_(protobuf->ByteSize()),
53 core_(new Core(tag_, protobuf.Pass())) {
54 DCHECK_EQ(tag, GetMCSProtoTag(core_->Get()));
55 }
56
~MCSMessage()57 MCSMessage::~MCSMessage() {
58 }
59
IsValid() const60 bool MCSMessage::IsValid() const {
61 return core_.get() != NULL;
62 }
63
SerializeAsString() const64 std::string MCSMessage::SerializeAsString() const {
65 return core_->Get().SerializeAsString();
66 }
67
GetProtobuf() const68 const google::protobuf::MessageLite& MCSMessage::GetProtobuf() const {
69 return core_->Get();
70 }
71
CloneProtobuf() const72 scoped_ptr<google::protobuf::MessageLite> MCSMessage::CloneProtobuf() const {
73 scoped_ptr<google::protobuf::MessageLite> clone(GetProtobuf().New());
74 clone->CheckTypeAndMergeFrom(GetProtobuf());
75 return clone.Pass();
76 }
77
78 } // namespace gcm
79