| 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 |