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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 | 195 |
196 CacheInvalidationPacketHandler::CacheInvalidationPacketHandler( | 196 CacheInvalidationPacketHandler::CacheInvalidationPacketHandler( |
197 buzz::XmppClient* xmpp_client, | 197 buzz::XmppClient* xmpp_client, |
198 invalidation::InvalidationClient* invalidation_client) | 198 invalidation::InvalidationClient* invalidation_client) |
199 : xmpp_client_(xmpp_client), | 199 : xmpp_client_(xmpp_client), |
200 invalidation_client_(invalidation_client), | 200 invalidation_client_(invalidation_client), |
201 seq_(0), | 201 seq_(0), |
202 sid_(MakeSid()) { | 202 sid_(MakeSid()) { |
203 CHECK(xmpp_client_); | 203 CHECK(xmpp_client_); |
204 CHECK(invalidation_client_); | 204 CHECK(invalidation_client_); |
| 205 if (xmpp_client_->GetState() != buzz::XmppEngine::STATE_OPEN) { |
| 206 LOG(DFATAL) << "non-open xmpp_client_ passed to " |
| 207 << "CacheInvalidationPacketHandler"; |
| 208 return; |
| 209 } |
| 210 xmpp_client_->SignalStateChange.connect( |
| 211 this, &CacheInvalidationPacketHandler::OnClientStateChange); |
205 invalidation::NetworkEndpoint* network_endpoint = | 212 invalidation::NetworkEndpoint* network_endpoint = |
206 invalidation_client_->network_endpoint(); | 213 invalidation_client_->network_endpoint(); |
207 CHECK(network_endpoint); | 214 CHECK(network_endpoint); |
208 network_endpoint->RegisterOutboundListener( | 215 network_endpoint->RegisterOutboundListener( |
209 invalidation::NewPermanentCallback( | 216 invalidation::NewPermanentCallback( |
210 this, | 217 this, |
211 &CacheInvalidationPacketHandler::HandleOutboundPacket)); | 218 &CacheInvalidationPacketHandler::HandleOutboundPacket)); |
212 // Owned by xmpp_client. | 219 // Owned by xmpp_client. |
213 CacheInvalidationListenTask* listen_task = | 220 CacheInvalidationListenTask* listen_task = |
214 new CacheInvalidationListenTask( | 221 new CacheInvalidationListenTask( |
215 xmpp_client, NewCallback( | 222 xmpp_client, NewCallback( |
216 this, &CacheInvalidationPacketHandler::HandleInboundPacket)); | 223 this, &CacheInvalidationPacketHandler::HandleInboundPacket)); |
217 listen_task->Start(); | 224 listen_task->Start(); |
218 } | 225 } |
219 | 226 |
220 CacheInvalidationPacketHandler::~CacheInvalidationPacketHandler() { | 227 CacheInvalidationPacketHandler::~CacheInvalidationPacketHandler() { |
221 invalidation::NetworkEndpoint* network_endpoint = | 228 invalidation::NetworkEndpoint* network_endpoint = |
222 invalidation_client_->network_endpoint(); | 229 invalidation_client_->network_endpoint(); |
223 CHECK(network_endpoint); | 230 CHECK(network_endpoint); |
224 network_endpoint->RegisterOutboundListener(NULL); | 231 network_endpoint->RegisterOutboundListener(NULL); |
225 } | 232 } |
226 | 233 |
227 void CacheInvalidationPacketHandler::HandleOutboundPacket( | 234 void CacheInvalidationPacketHandler::HandleOutboundPacket( |
228 invalidation::NetworkEndpoint* const& network_endpoint) { | 235 invalidation::NetworkEndpoint* const& network_endpoint) { |
229 CHECK_EQ(network_endpoint, invalidation_client_->network_endpoint()); | 236 CHECK_EQ(network_endpoint, invalidation_client_->network_endpoint()); |
| 237 if (!xmpp_client_) { |
| 238 LOG(DFATAL) << "HandleOutboundPacket() called with NULL xmpp_client_"; |
| 239 return; |
| 240 } |
230 invalidation::string message; | 241 invalidation::string message; |
231 network_endpoint->TakeOutboundMessage(&message); | 242 network_endpoint->TakeOutboundMessage(&message); |
232 std::string encoded_message; | 243 std::string encoded_message; |
233 if (!base::Base64Encode(message, &encoded_message)) { | 244 if (!base::Base64Encode(message, &encoded_message)) { |
234 LOG(ERROR) << "Could not base64-encode message to send: " | 245 LOG(ERROR) << "Could not base64-encode message to send: " |
235 << message; | 246 << message; |
236 return; | 247 return; |
237 } | 248 } |
238 // Owned by xmpp_client. | 249 // Owned by xmpp_client. |
239 CacheInvalidationSendMessageTask* send_message_task = | 250 CacheInvalidationSendMessageTask* send_message_task = |
(...skipping 11 matching lines...) Expand all Loading... |
251 invalidation_client_->network_endpoint(); | 262 invalidation_client_->network_endpoint(); |
252 std::string decoded_message; | 263 std::string decoded_message; |
253 if (!base::Base64Decode(packet, &decoded_message)) { | 264 if (!base::Base64Decode(packet, &decoded_message)) { |
254 LOG(ERROR) << "Could not base64-decode received message: " | 265 LOG(ERROR) << "Could not base64-decode received message: " |
255 << packet; | 266 << packet; |
256 return; | 267 return; |
257 } | 268 } |
258 network_endpoint->HandleInboundMessage(decoded_message); | 269 network_endpoint->HandleInboundMessage(decoded_message); |
259 } | 270 } |
260 | 271 |
| 272 void CacheInvalidationPacketHandler::OnClientStateChange( |
| 273 buzz::XmppEngine::State state) { |
| 274 switch (state) { |
| 275 case buzz::XmppEngine::STATE_OPEN: |
| 276 LOG(INFO) << "redundant STATE_OPEN message received"; |
| 277 break; |
| 278 case buzz::XmppEngine::STATE_CLOSED: |
| 279 LOG(INFO) << "xmpp_client_ closed -- setting to NULL"; |
| 280 xmpp_client_->SignalStateChange.disconnect(this); |
| 281 xmpp_client_ = NULL; |
| 282 break; |
| 283 default: |
| 284 LOG(INFO) << "xmpp_client_ state changed to " << state; |
| 285 break; |
| 286 } |
| 287 } |
| 288 |
261 } // namespace sync_notifier | 289 } // namespace sync_notifier |
OLD | NEW |