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 |