Home | History | Annotate | Download | only in base
      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 
     12 MCSMessage::Core::Core() {}
     13 
     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 
     21 MCSMessage::Core::Core(
     22     uint8 tag,
     23     scoped_ptr<const google::protobuf::MessageLite> protobuf) {
     24   protobuf_ = protobuf.Pass();
     25 }
     26 
     27 MCSMessage::Core::~Core() {}
     28 
     29 const google::protobuf::MessageLite& MCSMessage::Core::Get() const {
     30   return *protobuf_;
     31 }
     32 
     33 MCSMessage::MCSMessage() : tag_(0), size_(0) {}
     34 
     35 MCSMessage::MCSMessage(const google::protobuf::MessageLite& protobuf)
     36   : tag_(GetMCSProtoTag(protobuf)),
     37     size_(protobuf.ByteSize()),
     38     core_(new Core(tag_, protobuf)) {
     39 }
     40 
     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 
     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 
     57 MCSMessage::~MCSMessage() {
     58 }
     59 
     60 bool MCSMessage::IsValid() const {
     61   return core_.get() != NULL;
     62 }
     63 
     64 std::string MCSMessage::SerializeAsString() const {
     65   return core_->Get().SerializeAsString();
     66 }
     67 
     68 const google::protobuf::MessageLite& MCSMessage::GetProtobuf() const {
     69   return core_->Get();
     70 }
     71 
     72 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