• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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