// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Utility methods for MCS interactions. #ifndef GOOGLE_APIS_GCM_BASE_MCS_UTIL_H_ #define GOOGLE_APIS_GCM_BASE_MCS_UTIL_H_ #include <string> #include <vector> #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "google_apis/gcm/base/gcm_export.h" #include "google_apis/gcm/protocol/mcs.pb.h" namespace base { class Clock; } namespace net { class StreamSocket; } namespace gcm { // MCS Message tags. // WARNING: the order of these tags must remain the same, as the tag values // must be consistent with those used on the server. enum MCSProtoTag { kHeartbeatPingTag = 0, kHeartbeatAckTag, kLoginRequestTag, kLoginResponseTag, kCloseTag, kMessageStanzaTag, kPresenceStanzaTag, kIqStanzaTag, kDataMessageStanzaTag, kBatchPresenceStanzaTag, kStreamErrorStanzaTag, kHttpRequestTag, kHttpResponseTag, kBindAccountRequestTag, kBindAccountResponseTag, kTalkMetadataTag, kNumProtoTypes, }; enum MCSIqStanzaExtension { kSelectiveAck = 12, kStreamAck = 13, }; // Builds a LoginRequest with the hardcoded local data. GCM_EXPORT scoped_ptr<mcs_proto::LoginRequest> BuildLoginRequest( uint64 auth_id, uint64 auth_token, const std::string& version_string); // Builds a StreamAck IqStanza message. GCM_EXPORT scoped_ptr<mcs_proto::IqStanza> BuildStreamAck(); GCM_EXPORT scoped_ptr<mcs_proto::IqStanza> BuildSelectiveAck( const std::vector<std::string>& acked_ids); // Utility methods for building and identifying MCS protobufs. GCM_EXPORT scoped_ptr<google::protobuf::MessageLite> BuildProtobufFromTag(uint8 tag); GCM_EXPORT int GetMCSProtoTag(const google::protobuf::MessageLite& message); // RMQ utility methods for extracting/setting common data from/to protobufs. GCM_EXPORT std::string GetPersistentId( const google::protobuf::MessageLite& message); GCM_EXPORT void SetPersistentId( const std::string& persistent_id, google::protobuf::MessageLite* message); GCM_EXPORT uint32 GetLastStreamIdReceived( const google::protobuf::MessageLite& protobuf); GCM_EXPORT void SetLastStreamIdReceived( uint32 last_stream_id_received, google::protobuf::MessageLite* protobuf); // Returns whether the TTL (time to live) for this message has expired, based // on the |sent| timestamps and base::TimeTicks::Now(). If |protobuf| is not // for a DataMessageStanza or the TTL is 0, will return false. GCM_EXPORT bool HasTTLExpired(const google::protobuf::MessageLite& protobuf, base::Clock* clock); GCM_EXPORT int GetTTL(const google::protobuf::MessageLite& protobuf); } // namespace gcm #endif // GOOGLE_APIS_GCM_BASE_MCS_UTIL_H_