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 // Utility methods for MCS interactions. 6 7 #ifndef GOOGLE_APIS_GCM_BASE_MCS_UTIL_H_ 8 #define GOOGLE_APIS_GCM_BASE_MCS_UTIL_H_ 9 10 #include <string> 11 #include <vector> 12 13 #include "base/basictypes.h" 14 #include "base/memory/ref_counted.h" 15 #include "base/memory/scoped_ptr.h" 16 #include "google_apis/gcm/base/gcm_export.h" 17 #include "google_apis/gcm/protocol/mcs.pb.h" 18 19 namespace base { 20 class Clock; 21 } 22 23 namespace net { 24 class StreamSocket; 25 } 26 27 namespace gcm { 28 29 // MCS Message tags. 30 // WARNING: the order of these tags must remain the same, as the tag values 31 // must be consistent with those used on the server. 32 enum MCSProtoTag { 33 kHeartbeatPingTag = 0, 34 kHeartbeatAckTag, 35 kLoginRequestTag, 36 kLoginResponseTag, 37 kCloseTag, 38 kMessageStanzaTag, 39 kPresenceStanzaTag, 40 kIqStanzaTag, 41 kDataMessageStanzaTag, 42 kBatchPresenceStanzaTag, 43 kStreamErrorStanzaTag, 44 kHttpRequestTag, 45 kHttpResponseTag, 46 kBindAccountRequestTag, 47 kBindAccountResponseTag, 48 kTalkMetadataTag, 49 kNumProtoTypes, 50 }; 51 52 enum MCSIqStanzaExtension { 53 kSelectiveAck = 12, 54 kStreamAck = 13, 55 }; 56 57 // Builds a LoginRequest with the hardcoded local data. 58 GCM_EXPORT scoped_ptr<mcs_proto::LoginRequest> BuildLoginRequest( 59 uint64 auth_id, 60 uint64 auth_token, 61 const std::string& version_string); 62 63 // Builds a StreamAck IqStanza message. 64 GCM_EXPORT scoped_ptr<mcs_proto::IqStanza> BuildStreamAck(); 65 GCM_EXPORT scoped_ptr<mcs_proto::IqStanza> BuildSelectiveAck( 66 const std::vector<std::string>& acked_ids); 67 68 // Utility methods for building and identifying MCS protobufs. 69 GCM_EXPORT scoped_ptr<google::protobuf::MessageLite> 70 BuildProtobufFromTag(uint8 tag); 71 GCM_EXPORT int GetMCSProtoTag(const google::protobuf::MessageLite& message); 72 73 // RMQ utility methods for extracting/setting common data from/to protobufs. 74 GCM_EXPORT std::string GetPersistentId( 75 const google::protobuf::MessageLite& message); 76 GCM_EXPORT void SetPersistentId( 77 const std::string& persistent_id, 78 google::protobuf::MessageLite* message); 79 GCM_EXPORT uint32 GetLastStreamIdReceived( 80 const google::protobuf::MessageLite& protobuf); 81 GCM_EXPORT void SetLastStreamIdReceived( 82 uint32 last_stream_id_received, 83 google::protobuf::MessageLite* protobuf); 84 85 // Returns whether the TTL (time to live) for this message has expired, based 86 // on the |sent| timestamps and base::TimeTicks::Now(). If |protobuf| is not 87 // for a DataMessageStanza or the TTL is 0, will return false. 88 GCM_EXPORT bool HasTTLExpired(const google::protobuf::MessageLite& protobuf, 89 base::Clock* clock); 90 GCM_EXPORT int GetTTL(const google::protobuf::MessageLite& protobuf); 91 92 } // namespace gcm 93 94 #endif // GOOGLE_APIS_GCM_BASE_MCS_UTIL_H_ 95