OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/sync/notifier/cache_invalidation_packet_handler.h" | 5 #include "chrome/browser/sync/notifier/cache_invalidation_packet_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 // given callback on them. | 39 // given callback on them. |
40 class CacheInvalidationListenTask : public buzz::XmppTask { | 40 class CacheInvalidationListenTask : public buzz::XmppTask { |
41 public: | 41 public: |
42 // Takes ownership of callback. | 42 // Takes ownership of callback. |
43 CacheInvalidationListenTask(Task* parent, | 43 CacheInvalidationListenTask(Task* parent, |
44 Callback1<const std::string&>::Type* callback) | 44 Callback1<const std::string&>::Type* callback) |
45 : XmppTask(parent, buzz::XmppEngine::HL_TYPE), callback_(callback) {} | 45 : XmppTask(parent, buzz::XmppEngine::HL_TYPE), callback_(callback) {} |
46 virtual ~CacheInvalidationListenTask() {} | 46 virtual ~CacheInvalidationListenTask() {} |
47 | 47 |
48 virtual int ProcessStart() { | 48 virtual int ProcessStart() { |
49 LOG(INFO) << "CacheInvalidationListenTask started"; | 49 VLOG(2) << "CacheInvalidationListenTask started"; |
50 return STATE_RESPONSE; | 50 return STATE_RESPONSE; |
51 } | 51 } |
52 | 52 |
53 virtual int ProcessResponse() { | 53 virtual int ProcessResponse() { |
54 const buzz::XmlElement* stanza = NextStanza(); | 54 const buzz::XmlElement* stanza = NextStanza(); |
55 if (stanza == NULL) { | 55 if (stanza == NULL) { |
56 LOG(INFO) << "CacheInvalidationListenTask blocked"; | 56 VLOG(2) << "CacheInvalidationListenTask blocked"; |
57 return STATE_BLOCKED; | 57 return STATE_BLOCKED; |
58 } | 58 } |
59 LOG(INFO) << "CacheInvalidationListenTask response received"; | 59 VLOG(2) << "CacheInvalidationListenTask response received"; |
60 std::string data; | 60 std::string data; |
61 if (GetCacheInvalidationIqPacketData(stanza, &data)) { | 61 if (GetCacheInvalidationIqPacketData(stanza, &data)) { |
62 callback_->Run(data); | 62 callback_->Run(data); |
63 } else { | 63 } else { |
64 LOG(ERROR) << "Could not get packet data"; | 64 LOG(ERROR) << "Could not get packet data"; |
65 } | 65 } |
66 // Acknowledge receipt of the iq to the buzz server. | 66 // Acknowledge receipt of the iq to the buzz server. |
67 // TODO(akalin): Send an error response for malformed packets. | 67 // TODO(akalin): Send an error response for malformed packets. |
68 scoped_ptr<buzz::XmlElement> response_stanza(MakeIqResult(stanza)); | 68 scoped_ptr<buzz::XmlElement> response_stanza(MakeIqResult(stanza)); |
69 SendStanza(response_stanza.get()); | 69 SendStanza(response_stanza.get()); |
70 return STATE_RESPONSE; | 70 return STATE_RESPONSE; |
71 } | 71 } |
72 | 72 |
73 virtual bool HandleStanza(const buzz::XmlElement* stanza) { | 73 virtual bool HandleStanza(const buzz::XmlElement* stanza) { |
74 LOG(INFO) << "Stanza received: " | 74 VLOG(1) << "Stanza received: " |
75 << notifier::XmlElementToString(*stanza); | 75 << notifier::XmlElementToString(*stanza); |
76 if (IsValidCacheInvalidationIqPacket(stanza)) { | 76 if (IsValidCacheInvalidationIqPacket(stanza)) { |
77 LOG(INFO) << "Queueing stanza"; | 77 VLOG(2) << "Queueing stanza"; |
78 QueueStanza(stanza); | 78 QueueStanza(stanza); |
79 return true; | 79 return true; |
80 } | 80 } |
81 LOG(INFO) << "Stanza skipped"; | 81 VLOG(2) << "Stanza skipped"; |
82 return false; | 82 return false; |
83 } | 83 } |
84 | 84 |
85 private: | 85 private: |
86 bool IsValidCacheInvalidationIqPacket(const buzz::XmlElement* stanza) { | 86 bool IsValidCacheInvalidationIqPacket(const buzz::XmlElement* stanza) { |
87 // We make sure to compare jids (which are normalized) instead of | 87 // We make sure to compare jids (which are normalized) instead of |
88 // just strings -- server may use non-normalized jids in | 88 // just strings -- server may use non-normalized jids in |
89 // attributes. | 89 // attributes. |
90 // | 90 // |
91 // TODO(akalin): Add unit tests for this. | 91 // TODO(akalin): Add unit tests for this. |
(...skipping 29 matching lines...) Expand all Loading... |
121 int seq, | 121 int seq, |
122 const std::string& sid) | 122 const std::string& sid) |
123 : XmppTask(parent, buzz::XmppEngine::HL_SINGLE), | 123 : XmppTask(parent, buzz::XmppEngine::HL_SINGLE), |
124 to_jid_(to_jid), msg_(msg), seq_(seq), sid_(sid) {} | 124 to_jid_(to_jid), msg_(msg), seq_(seq), sid_(sid) {} |
125 virtual ~CacheInvalidationSendMessageTask() {} | 125 virtual ~CacheInvalidationSendMessageTask() {} |
126 | 126 |
127 virtual int ProcessStart() { | 127 virtual int ProcessStart() { |
128 scoped_ptr<buzz::XmlElement> stanza( | 128 scoped_ptr<buzz::XmlElement> stanza( |
129 MakeCacheInvalidationIqPacket(to_jid_, task_id(), msg_, | 129 MakeCacheInvalidationIqPacket(to_jid_, task_id(), msg_, |
130 seq_, sid_)); | 130 seq_, sid_)); |
131 LOG(INFO) << "Sending message: " | 131 VLOG(1) << "Sending message: " |
132 << notifier::XmlElementToString(*stanza.get()); | 132 << notifier::XmlElementToString(*stanza.get()); |
133 if (SendStanza(stanza.get()) != buzz::XMPP_RETURN_OK) { | 133 if (SendStanza(stanza.get()) != buzz::XMPP_RETURN_OK) { |
134 LOG(INFO) << "Error when sending message"; | 134 VLOG(2) << "Error when sending message"; |
135 return STATE_ERROR; | 135 return STATE_ERROR; |
136 } | 136 } |
137 return STATE_RESPONSE; | 137 return STATE_RESPONSE; |
138 } | 138 } |
139 | 139 |
140 virtual int ProcessResponse() { | 140 virtual int ProcessResponse() { |
141 const buzz::XmlElement* stanza = NextStanza(); | 141 const buzz::XmlElement* stanza = NextStanza(); |
142 if (stanza == NULL) { | 142 if (stanza == NULL) { |
143 LOG(INFO) << "CacheInvalidationSendMessageTask blocked..."; | 143 VLOG(2) << "CacheInvalidationSendMessageTask blocked..."; |
144 return STATE_BLOCKED; | 144 return STATE_BLOCKED; |
145 } | 145 } |
146 LOG(INFO) << "CacheInvalidationSendMessageTask response received: " | 146 VLOG(2) << "CacheInvalidationSendMessageTask response received: " |
147 << notifier::XmlElementToString(*stanza); | 147 << notifier::XmlElementToString(*stanza); |
148 // TODO(akalin): Handle errors here. | 148 // TODO(akalin): Handle errors here. |
149 return STATE_DONE; | 149 return STATE_DONE; |
150 } | 150 } |
151 | 151 |
152 virtual bool HandleStanza(const buzz::XmlElement* stanza) { | 152 virtual bool HandleStanza(const buzz::XmlElement* stanza) { |
153 LOG(INFO) << "Stanza received: " | 153 VLOG(1) << "Stanza received: " |
154 << notifier::XmlElementToString(*stanza); | 154 << notifier::XmlElementToString(*stanza); |
155 if (!MatchResponseIq(stanza, to_jid_, task_id())) { | 155 if (!MatchResponseIq(stanza, to_jid_, task_id())) { |
156 LOG(INFO) << "Stanza skipped"; | 156 VLOG(2) << "Stanza skipped"; |
157 return false; | 157 return false; |
158 } | 158 } |
159 LOG(INFO) << "Queueing stanza"; | 159 VLOG(2) << "Queueing stanza"; |
160 QueueStanza(stanza); | 160 QueueStanza(stanza); |
161 return true; | 161 return true; |
162 } | 162 } |
163 | 163 |
164 private: | 164 private: |
165 static buzz::XmlElement* MakeCacheInvalidationIqPacket( | 165 static buzz::XmlElement* MakeCacheInvalidationIqPacket( |
166 const buzz::Jid& to_jid, | 166 const buzz::Jid& to_jid, |
167 const std::string& task_id, | 167 const std::string& task_id, |
168 const std::string& msg, | 168 const std::string& msg, |
169 int seq, const std::string& sid) { | 169 int seq, const std::string& sid) { |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 std::string decoded_message; | 253 std::string decoded_message; |
254 if (!base::Base64Decode(packet, &decoded_message)) { | 254 if (!base::Base64Decode(packet, &decoded_message)) { |
255 LOG(ERROR) << "Could not base64-decode received message: " | 255 LOG(ERROR) << "Could not base64-decode received message: " |
256 << packet; | 256 << packet; |
257 return; | 257 return; |
258 } | 258 } |
259 network_endpoint->HandleInboundMessage(decoded_message); | 259 network_endpoint->HandleInboundMessage(decoded_message); |
260 } | 260 } |
261 | 261 |
262 } // namespace sync_notifier | 262 } // namespace sync_notifier |
OLD | NEW |