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