| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "google_apis/gcm/base/mcs_util.h" | 5 #include "google_apis/gcm/base/mcs_util.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 const char kLoginDomain[] = "mcs.android.com"; | 46 const char kLoginDomain[] = "mcs.android.com"; |
| 47 const char kLoginDeviceIdPrefix[] = "android-"; | 47 const char kLoginDeviceIdPrefix[] = "android-"; |
| 48 const char kLoginSettingDefaultName[] = "new_vc"; | 48 const char kLoginSettingDefaultName[] = "new_vc"; |
| 49 const char kLoginSettingDefaultValue[] = "1"; | 49 const char kLoginSettingDefaultValue[] = "1"; |
| 50 | 50 |
| 51 // Maximum amount of time to save an unsent outgoing message for. | 51 // Maximum amount of time to save an unsent outgoing message for. |
| 52 const int kMaxTTLSeconds = 24 * 60 * 60; // 1 day. | 52 const int kMaxTTLSeconds = 24 * 60 * 60; // 1 day. |
| 53 | 53 |
| 54 } // namespace | 54 } // namespace |
| 55 | 55 |
| 56 scoped_ptr<mcs_proto::LoginRequest> BuildLoginRequest( | 56 std::unique_ptr<mcs_proto::LoginRequest> BuildLoginRequest( |
| 57 uint64_t auth_id, | 57 uint64_t auth_id, |
| 58 uint64_t auth_token, | 58 uint64_t auth_token, |
| 59 const std::string& version_string) { | 59 const std::string& version_string) { |
| 60 // Create a hex encoded auth id for the device id field. | 60 // Create a hex encoded auth id for the device id field. |
| 61 std::string auth_id_hex; | 61 std::string auth_id_hex; |
| 62 auth_id_hex = base::StringPrintf("%" PRIx64, auth_id); | 62 auth_id_hex = base::StringPrintf("%" PRIx64, auth_id); |
| 63 | 63 |
| 64 std::string auth_id_str = base::Uint64ToString(auth_id); | 64 std::string auth_id_str = base::Uint64ToString(auth_id); |
| 65 std::string auth_token_str = base::Uint64ToString(auth_token); | 65 std::string auth_token_str = base::Uint64ToString(auth_token); |
| 66 | 66 |
| 67 scoped_ptr<mcs_proto::LoginRequest> login_request( | 67 std::unique_ptr<mcs_proto::LoginRequest> login_request( |
| 68 new mcs_proto::LoginRequest()); | 68 new mcs_proto::LoginRequest()); |
| 69 | 69 |
| 70 login_request->set_adaptive_heartbeat(false); | 70 login_request->set_adaptive_heartbeat(false); |
| 71 login_request->set_auth_service(mcs_proto::LoginRequest::ANDROID_ID); | 71 login_request->set_auth_service(mcs_proto::LoginRequest::ANDROID_ID); |
| 72 login_request->set_auth_token(auth_token_str); | 72 login_request->set_auth_token(auth_token_str); |
| 73 login_request->set_id(kLoginId + version_string); | 73 login_request->set_id(kLoginId + version_string); |
| 74 login_request->set_domain(kLoginDomain); | 74 login_request->set_domain(kLoginDomain); |
| 75 login_request->set_device_id(kLoginDeviceIdPrefix + auth_id_hex); | 75 login_request->set_device_id(kLoginDeviceIdPrefix + auth_id_hex); |
| 76 login_request->set_network_type(1); | 76 login_request->set_network_type(1); |
| 77 login_request->set_resource(auth_id_str); | 77 login_request->set_resource(auth_id_str); |
| 78 login_request->set_user(auth_id_str); | 78 login_request->set_user(auth_id_str); |
| 79 login_request->set_use_rmq2(true); | 79 login_request->set_use_rmq2(true); |
| 80 | 80 |
| 81 login_request->add_setting(); | 81 login_request->add_setting(); |
| 82 login_request->mutable_setting(0)->set_name(kLoginSettingDefaultName); | 82 login_request->mutable_setting(0)->set_name(kLoginSettingDefaultName); |
| 83 login_request->mutable_setting(0)->set_value(kLoginSettingDefaultValue); | 83 login_request->mutable_setting(0)->set_value(kLoginSettingDefaultValue); |
| 84 return login_request; | 84 return login_request; |
| 85 } | 85 } |
| 86 | 86 |
| 87 scoped_ptr<mcs_proto::IqStanza> BuildStreamAck() { | 87 std::unique_ptr<mcs_proto::IqStanza> BuildStreamAck() { |
| 88 scoped_ptr<mcs_proto::IqStanza> stream_ack_iq(new mcs_proto::IqStanza()); | 88 std::unique_ptr<mcs_proto::IqStanza> stream_ack_iq(new mcs_proto::IqStanza()); |
| 89 stream_ack_iq->set_type(mcs_proto::IqStanza::SET); | 89 stream_ack_iq->set_type(mcs_proto::IqStanza::SET); |
| 90 stream_ack_iq->set_id(""); | 90 stream_ack_iq->set_id(""); |
| 91 stream_ack_iq->mutable_extension()->set_id(kStreamAck); | 91 stream_ack_iq->mutable_extension()->set_id(kStreamAck); |
| 92 stream_ack_iq->mutable_extension()->set_data(""); | 92 stream_ack_iq->mutable_extension()->set_data(""); |
| 93 return stream_ack_iq; | 93 return stream_ack_iq; |
| 94 } | 94 } |
| 95 | 95 |
| 96 scoped_ptr<mcs_proto::IqStanza> BuildSelectiveAck( | 96 std::unique_ptr<mcs_proto::IqStanza> BuildSelectiveAck( |
| 97 const std::vector<std::string>& acked_ids) { | 97 const std::vector<std::string>& acked_ids) { |
| 98 scoped_ptr<mcs_proto::IqStanza> selective_ack_iq(new mcs_proto::IqStanza()); | 98 std::unique_ptr<mcs_proto::IqStanza> selective_ack_iq( |
| 99 new mcs_proto::IqStanza()); |
| 99 selective_ack_iq->set_type(mcs_proto::IqStanza::SET); | 100 selective_ack_iq->set_type(mcs_proto::IqStanza::SET); |
| 100 selective_ack_iq->set_id(""); | 101 selective_ack_iq->set_id(""); |
| 101 selective_ack_iq->mutable_extension()->set_id(kSelectiveAck); | 102 selective_ack_iq->mutable_extension()->set_id(kSelectiveAck); |
| 102 mcs_proto::SelectiveAck selective_ack; | 103 mcs_proto::SelectiveAck selective_ack; |
| 103 for (size_t i = 0; i < acked_ids.size(); ++i) | 104 for (size_t i = 0; i < acked_ids.size(); ++i) |
| 104 selective_ack.add_id(acked_ids[i]); | 105 selective_ack.add_id(acked_ids[i]); |
| 105 selective_ack_iq->mutable_extension()->set_data( | 106 selective_ack_iq->mutable_extension()->set_data( |
| 106 selective_ack.SerializeAsString()); | 107 selective_ack.SerializeAsString()); |
| 107 return selective_ack_iq; | 108 return selective_ack_iq; |
| 108 } | 109 } |
| 109 | 110 |
| 110 // Utility method to build a google::protobuf::MessageLite object from a MCS | 111 // Utility method to build a google::protobuf::MessageLite object from a MCS |
| 111 // tag. | 112 // tag. |
| 112 scoped_ptr<google::protobuf::MessageLite> BuildProtobufFromTag(uint8_t tag) { | 113 std::unique_ptr<google::protobuf::MessageLite> BuildProtobufFromTag( |
| 114 uint8_t tag) { |
| 113 switch(tag) { | 115 switch(tag) { |
| 114 case kHeartbeatPingTag: | 116 case kHeartbeatPingTag: |
| 115 return scoped_ptr<google::protobuf::MessageLite>( | 117 return std::unique_ptr<google::protobuf::MessageLite>( |
| 116 new mcs_proto::HeartbeatPing()); | 118 new mcs_proto::HeartbeatPing()); |
| 117 case kHeartbeatAckTag: | 119 case kHeartbeatAckTag: |
| 118 return scoped_ptr<google::protobuf::MessageLite>( | 120 return std::unique_ptr<google::protobuf::MessageLite>( |
| 119 new mcs_proto::HeartbeatAck()); | 121 new mcs_proto::HeartbeatAck()); |
| 120 case kLoginRequestTag: | 122 case kLoginRequestTag: |
| 121 return scoped_ptr<google::protobuf::MessageLite>( | 123 return std::unique_ptr<google::protobuf::MessageLite>( |
| 122 new mcs_proto::LoginRequest()); | 124 new mcs_proto::LoginRequest()); |
| 123 case kLoginResponseTag: | 125 case kLoginResponseTag: |
| 124 return scoped_ptr<google::protobuf::MessageLite>( | 126 return std::unique_ptr<google::protobuf::MessageLite>( |
| 125 new mcs_proto::LoginResponse()); | 127 new mcs_proto::LoginResponse()); |
| 126 case kCloseTag: | 128 case kCloseTag: |
| 127 return scoped_ptr<google::protobuf::MessageLite>( | 129 return std::unique_ptr<google::protobuf::MessageLite>( |
| 128 new mcs_proto::Close()); | 130 new mcs_proto::Close()); |
| 129 case kIqStanzaTag: | 131 case kIqStanzaTag: |
| 130 return scoped_ptr<google::protobuf::MessageLite>( | 132 return std::unique_ptr<google::protobuf::MessageLite>( |
| 131 new mcs_proto::IqStanza()); | 133 new mcs_proto::IqStanza()); |
| 132 case kDataMessageStanzaTag: | 134 case kDataMessageStanzaTag: |
| 133 return scoped_ptr<google::protobuf::MessageLite>( | 135 return std::unique_ptr<google::protobuf::MessageLite>( |
| 134 new mcs_proto::DataMessageStanza()); | 136 new mcs_proto::DataMessageStanza()); |
| 135 case kStreamErrorStanzaTag: | 137 case kStreamErrorStanzaTag: |
| 136 return scoped_ptr<google::protobuf::MessageLite>( | 138 return std::unique_ptr<google::protobuf::MessageLite>( |
| 137 new mcs_proto::StreamErrorStanza()); | 139 new mcs_proto::StreamErrorStanza()); |
| 138 default: | 140 default: |
| 139 return scoped_ptr<google::protobuf::MessageLite>(); | 141 return std::unique_ptr<google::protobuf::MessageLite>(); |
| 140 } | 142 } |
| 141 } | 143 } |
| 142 | 144 |
| 143 // Utility method to extract a MCS tag from a google::protobuf::MessageLite | 145 // Utility method to extract a MCS tag from a google::protobuf::MessageLite |
| 144 // object. | 146 // object. |
| 145 int GetMCSProtoTag(const google::protobuf::MessageLite& message) { | 147 int GetMCSProtoTag(const google::protobuf::MessageLite& message) { |
| 146 const std::string& type_name = message.GetTypeName(); | 148 const std::string& type_name = message.GetTypeName(); |
| 147 if (type_name == kProtoNames[kHeartbeatPingTag]) { | 149 if (type_name == kProtoNames[kHeartbeatPingTag]) { |
| 148 return kHeartbeatPingTag; | 150 return kHeartbeatPingTag; |
| 149 } else if (type_name == kProtoNames[kHeartbeatAckTag]) { | 151 } else if (type_name == kProtoNames[kHeartbeatAckTag]) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 | 267 |
| 266 bool IsImmediateAckRequested(const google::protobuf::MessageLite& protobuf) { | 268 bool IsImmediateAckRequested(const google::protobuf::MessageLite& protobuf) { |
| 267 if (protobuf.GetTypeName() != kProtoNames[kDataMessageStanzaTag]) | 269 if (protobuf.GetTypeName() != kProtoNames[kDataMessageStanzaTag]) |
| 268 return false; | 270 return false; |
| 269 const mcs_proto::DataMessageStanza* data_message = | 271 const mcs_proto::DataMessageStanza* data_message = |
| 270 reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf); | 272 reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf); |
| 271 return data_message->has_immediate_ack() && data_message->immediate_ack(); | 273 return data_message->has_immediate_ack() && data_message->immediate_ack(); |
| 272 } | 274 } |
| 273 | 275 |
| 274 } // namespace gcm | 276 } // namespace gcm |
| OLD | NEW |