| Index: chrome/browser/sync/tools/sync_listen_notifications.cc
|
| diff --git a/chrome/browser/sync/tools/sync_listen_notifications.cc b/chrome/browser/sync/tools/sync_listen_notifications.cc
|
| index f7cf9e237164ab2776bf6153fee0f9668946d404..d2c972a1f9685cdac5de1dfe132d04d4e4d4b3dd 100644
|
| --- a/chrome/browser/sync/tools/sync_listen_notifications.cc
|
| +++ b/chrome/browser/sync/tools/sync_listen_notifications.cc
|
| @@ -17,13 +17,15 @@
|
| #include "chrome/browser/sync/notifier/chrome_invalidation_client.h"
|
| #include "chrome/browser/sync/notifier/chrome_system_resources.h"
|
| #include "chrome/browser/sync/sync_constants.h"
|
| +#include "chrome/browser/sync/tools/chrome_async_socket.h"
|
| #include "chrome/common/chrome_switches.h"
|
| -#include "google/cacheinvalidation/invalidation-client.h"
|
| #include "jingle/notifier/base/task_pump.h"
|
| #include "jingle/notifier/communicator/xmpp_socket_adapter.h"
|
| #include "jingle/notifier/listener/listen_task.h"
|
| #include "jingle/notifier/listener/notification_constants.h"
|
| #include "jingle/notifier/listener/subscribe_task.h"
|
| +#include "net/base/ssl_config_service.h"
|
| +#include "net/socket/client_socket_factory.h"
|
| #include "talk/base/cryptstring.h"
|
| #include "talk/base/logging.h"
|
| #include "talk/base/sigslot.h"
|
| @@ -81,7 +83,8 @@ class XmppNotificationClient : public sigslot::has_slots<> {
|
| }
|
|
|
| // Connect with the given XMPP settings and run until disconnected.
|
| - void Run(const buzz::XmppClientSettings& xmpp_client_settings) {
|
| + void Run(const buzz::XmppClientSettings& xmpp_client_settings,
|
| + bool use_chrome_async_socket) {
|
| CHECK(!xmpp_client_);
|
| xmpp_client_settings_ = xmpp_client_settings;
|
| xmpp_client_ = new buzz::XmppClient(&task_pump_);
|
| @@ -93,17 +96,26 @@ class XmppNotificationClient : public sigslot::has_slots<> {
|
| xmpp_client_->SignalStateChange.connect(
|
| this, &XmppNotificationClient::OnXmppClientStateChange);
|
|
|
| - notifier::XmppSocketAdapter* xmpp_socket_adapter =
|
| - new notifier::XmppSocketAdapter(xmpp_client_settings_, false);
|
| - CHECK(xmpp_socket_adapter);
|
| - // Transfers ownership of xmpp_socket_adapter.
|
| + net::SSLConfig ssl_config;
|
| + buzz::AsyncSocket* buzz_async_socket =
|
| + use_chrome_async_socket ?
|
| + static_cast<buzz::AsyncSocket*>(
|
| + new sync_tools::ChromeAsyncSocket(
|
| + net::ClientSocketFactory::GetDefaultFactory(),
|
| + ssl_config, 4096, 64 * 1024, NULL)) :
|
| + static_cast<buzz::AsyncSocket*>(
|
| + new notifier::XmppSocketAdapter(xmpp_client_settings_, false));
|
| + CHECK(buzz_async_socket);
|
| + // Transfers ownership of buzz_async_socket.
|
| buzz::XmppReturnStatus connect_status =
|
| xmpp_client_->Connect(xmpp_client_settings_, "",
|
| - xmpp_socket_adapter, NULL);
|
| + buzz_async_socket, NULL);
|
| CHECK_EQ(connect_status, buzz::XMPP_RETURN_OK);
|
| xmpp_client_->Start();
|
| - MessageLoop::current()->PostTask(
|
| - FROM_HERE, NewRunnableFunction(&PumpAuxiliaryLoops));
|
| + if (!use_chrome_async_socket) {
|
| + MessageLoop::current()->PostTask(
|
| + FROM_HERE, NewRunnableFunction(&PumpAuxiliaryLoops));
|
| + }
|
| MessageLoop::current()->Run();
|
| DCHECK(!xmpp_client_);
|
| }
|
| @@ -265,7 +277,8 @@ int main(int argc, char* argv[]) {
|
| if (email.empty()) {
|
| printf("Usage: %s --email=foo@bar.com [--password=mypassword] "
|
| "[--server=talk.google.com] [--port=5222] [--allow-plain] "
|
| - "[--disable-tls] [--use-cache-invalidation] [--use-ssl-tcp]\n",
|
| + "[--disable-tls] [--use-cache-invalidation] [--use-ssl-tcp] "
|
| + "[--use-chrome-async-socket]\n",
|
| argv[0]);
|
| return -1;
|
| }
|
| @@ -310,8 +323,12 @@ int main(int argc, char* argv[]) {
|
| insecure_crypt_string.password() = password;
|
| xmpp_client_settings.set_pass(
|
| talk_base::CryptString(insecure_crypt_string));
|
| - xmpp_client_settings.set_server(
|
| - talk_base::SocketAddress(server, port));
|
| + talk_base::SocketAddress addr(server, port);
|
| + if (!addr.ResolveIP()) {
|
| + LOG(ERROR) << "Could not resolve " << addr.ToString();
|
| + return -1;
|
| + }
|
| + xmpp_client_settings.set_server(addr);
|
|
|
| // Set up message loops and socket servers.
|
| talk_base::PhysicalSocketServer physical_socket_server;
|
| @@ -329,8 +346,13 @@ int main(int argc, char* argv[]) {
|
| } else {
|
| delegate = &legacy_notifier_delegate;
|
| }
|
| + // TODO(akalin): Revert the move of all switches in this file into
|
| + // chrome_switches.h.
|
| + bool use_chrome_async_socket =
|
| + command_line.HasSwitch("use-chrome-async-socket");
|
| XmppNotificationClient xmpp_notification_client(delegate);
|
| - xmpp_notification_client.Run(xmpp_client_settings);
|
| + xmpp_notification_client.Run(xmpp_client_settings,
|
| + use_chrome_async_socket);
|
|
|
| return 0;
|
| }
|
|
|