| Index: jingle/notifier/communicator/single_login_attempt.cc
|
| diff --git a/jingle/notifier/communicator/single_login_attempt.cc b/jingle/notifier/communicator/single_login_attempt.cc
|
| index ccdf0ce81865b54144548a1de7602cd81f325412..4db7758bfc0403b4be3e8300ea97754208c4259c 100644
|
| --- a/jingle/notifier/communicator/single_login_attempt.cc
|
| +++ b/jingle/notifier/communicator/single_login_attempt.cc
|
| @@ -18,16 +18,9 @@
|
| #include "jingle/notifier/communicator/gaia_token_pre_xmpp_auth.h"
|
| #include "jingle/notifier/communicator/login_failure.h"
|
| #include "jingle/notifier/communicator/login_settings.h"
|
| -#include "jingle/notifier/communicator/product_info.h"
|
| #include "jingle/notifier/communicator/xmpp_connection_generator.h"
|
| -#include "jingle/notifier/communicator/xmpp_socket_adapter.h"
|
| #include "net/base/ssl_config_service.h"
|
| #include "net/socket/client_socket_factory.h"
|
| -#include "talk/base/asynchttprequest.h"
|
| -#include "talk/base/firewallsocketserver.h"
|
| -#include "talk/base/signalthread.h"
|
| -#include "talk/base/taskrunner.h"
|
| -#include "talk/base/win32socketinit.h"
|
| #include "talk/xmllite/xmlelement.h"
|
| #include "talk/xmpp/xmppclient.h"
|
| #include "talk/xmpp/xmppclientsettings.h"
|
| @@ -61,23 +54,15 @@ static void GetClientErrorInformation(
|
| }
|
|
|
| SingleLoginAttempt::SingleLoginAttempt(talk_base::TaskParent* parent,
|
| - LoginSettings* login_settings,
|
| - bool use_chrome_async_socket,
|
| - bool successful_connection)
|
| + LoginSettings* login_settings)
|
| : talk_base::Task(parent),
|
| - use_chrome_async_socket_(use_chrome_async_socket),
|
| state_(buzz::XmppEngine::STATE_NONE),
|
| code_(buzz::XmppEngine::ERROR_NONE),
|
| subcode_(0),
|
| need_authentication_(false),
|
| certificate_expired_(false),
|
| - cookie_refreshed_(false),
|
| - successful_connection_(successful_connection),
|
| login_settings_(login_settings),
|
| client_(NULL) {
|
| -#if defined(OS_WIN)
|
| - talk_base::EnsureWinsockInit();
|
| -#endif
|
| connection_generator_.reset(new XmppConnectionGenerator(
|
| this,
|
| login_settings_->host_resolver(),
|
| @@ -154,14 +139,7 @@ void SingleLoginAttempt::OnAttemptedAllConnections(
|
|
|
| LOG(INFO) << "Connection failed with error " << code_;
|
|
|
| - // We were connected and we had a problem.
|
| - if (successful_connection_) {
|
| - SignalNeedAutoReconnect();
|
| - // Expect to be deleted at this point.
|
| - return;
|
| - }
|
| -
|
| - DiagnoseConnectionError();
|
| + SignalNeedAutoReconnect();
|
| }
|
|
|
| void SingleLoginAttempt::UseNextConnection() {
|
| @@ -225,39 +203,24 @@ void SingleLoginAttempt::OnCertificateExpired() {
|
|
|
| buzz::AsyncSocket* SingleLoginAttempt::CreateSocket(
|
| const buzz::XmppClientSettings& xcs) {
|
| - if (use_chrome_async_socket_) {
|
| - bool use_fake_ssl_client_socket =
|
| - (xcs.protocol() == cricket::PROTO_SSLTCP);
|
| - net::ClientSocketFactory* const client_socket_factory =
|
| - new XmppClientSocketFactory(
|
| - net::ClientSocketFactory::GetDefaultFactory(),
|
| - use_fake_ssl_client_socket);
|
| - // The default SSLConfig is good enough for us for now.
|
| - const net::SSLConfig ssl_config;
|
| - // A read buffer of 64k ought to be sufficient.
|
| - const size_t kReadBufSize = 64U * 1024U;
|
| - // This number was taken from a similar number in
|
| - // XmppSocketAdapter.
|
| - const size_t kWriteBufSize = 64U * 1024U;
|
| - // TODO(akalin): Use a real NetLog.
|
| - net::NetLog* const net_log = NULL;
|
| - return new ChromeAsyncSocket(
|
| - client_socket_factory, ssl_config,
|
| - kReadBufSize, kWriteBufSize, net_log);
|
| - }
|
| - // TODO(akalin): Always use ChromeAsyncSocket and get rid of this
|
| - // code.
|
| - bool allow_unverified_certs =
|
| - login_settings_->connection_options().allow_unverified_certs();
|
| - XmppSocketAdapter* adapter = new XmppSocketAdapter(xcs,
|
| - allow_unverified_certs);
|
| - adapter->SignalAuthenticationError.connect(
|
| - this,
|
| - &SingleLoginAttempt::OnAuthenticationError);
|
| - if (login_settings_->firewall()) {
|
| - adapter->set_firewall(true);
|
| - }
|
| - return adapter;
|
| + bool use_fake_ssl_client_socket =
|
| + (xcs.protocol() == cricket::PROTO_SSLTCP);
|
| + net::ClientSocketFactory* const client_socket_factory =
|
| + new XmppClientSocketFactory(
|
| + net::ClientSocketFactory::GetDefaultFactory(),
|
| + use_fake_ssl_client_socket);
|
| + // The default SSLConfig is good enough for us for now.
|
| + const net::SSLConfig ssl_config;
|
| + // A read buffer of 64k ought to be sufficient.
|
| + const size_t kReadBufSize = 64U * 1024U;
|
| + // This number was taken from a similar number in
|
| + // XmppSocketAdapter.
|
| + const size_t kWriteBufSize = 64U * 1024U;
|
| + // TODO(akalin): Use a real NetLog.
|
| + net::NetLog* const net_log = NULL;
|
| + return new ChromeAsyncSocket(
|
| + client_socket_factory, ssl_config,
|
| + kReadBufSize, kWriteBufSize, net_log);
|
| }
|
|
|
| buzz::PreXmppAuth* SingleLoginAttempt::CreatePreXmppAuth(
|
| @@ -267,147 +230,6 @@ buzz::PreXmppAuth* SingleLoginAttempt::CreatePreXmppAuth(
|
| jid.Str(), xcs.auth_cookie(), xcs.token_service());
|
| }
|
|
|
| -void SingleLoginAttempt::OnFreshAuthCookie(const std::string& auth_cookie) {
|
| - // Remember this is a fresh cookie.
|
| - cookie_refreshed_ = true;
|
| -
|
| - // TODO(sync): do the cookie logic (part of which is in the #if 0 below).
|
| -
|
| - // The following code is what PhoneWindow does for the equivalent method.
|
| -#if 0
|
| - // Save cookie
|
| - AccountInfo current(account_history_.current());
|
| - current.set_auth_cookie(auth_cookie);
|
| - account_history_.set_current(current);
|
| -
|
| - // Calc next time to refresh cookie, between 5 and 10 days. The cookie has
|
| - // 14 days of life; this gives at least 4 days of retries before the current
|
| - // cookie expires, maximizing the chance of having a valid cookie next time
|
| - // the connection servers go down.
|
| - FTULL now;
|
| -
|
| - // NOTE: The following line is win32. Address this when implementing this
|
| - // code (doing "the cookie logic").
|
| - GetSystemTimeAsFileTime(&(now.ft));
|
| - ULONGLONG five_days = (ULONGLONG)10000 * 1000 * 60 * 60 * 24 * 5; // 5 days
|
| - ULONGLONG random = (ULONGLONG)10000 * // get to 100 ns units
|
| - ((rand() % (5 * 24 * 60)) * (60 * 1000) + // random min. in 5 day period
|
| - (rand() % 1000) * 60); // random 1/1000th of a minute
|
| - next_cookie_refresh_ = now.ull + five_days + random; // 5-10 days
|
| -#endif
|
| -}
|
| -
|
| -void SingleLoginAttempt::DiagnoseConnectionError() {
|
| - switch (code_) {
|
| - case buzz::XmppEngine::ERROR_MISSING_USERNAME:
|
| - case buzz::XmppEngine::ERROR_NETWORK_TIMEOUT:
|
| - case buzz::XmppEngine::ERROR_DOCUMENT_CLOSED:
|
| - case buzz::XmppEngine::ERROR_BIND:
|
| - case buzz::XmppEngine::ERROR_AUTH:
|
| - case buzz::XmppEngine::ERROR_TLS:
|
| - case buzz::XmppEngine::ERROR_UNAUTHORIZED:
|
| - case buzz::XmppEngine::ERROR_VERSION:
|
| - case buzz::XmppEngine::ERROR_STREAM:
|
| - case buzz::XmppEngine::ERROR_XML:
|
| - case buzz::XmppEngine::ERROR_NONE:
|
| - default: {
|
| - LoginFailure failure(LoginFailure::XMPP_ERROR, code_, subcode_);
|
| - SignalLoginFailure(failure);
|
| - return;
|
| - }
|
| -
|
| - // The following errors require diagnosistics:
|
| - // * spurious close of connection
|
| - // * socket errors after auth
|
| - case buzz::XmppEngine::ERROR_CONNECTION_CLOSED:
|
| - case buzz::XmppEngine::ERROR_SOCKET:
|
| - break;
|
| - }
|
| -
|
| - talk_base::AsyncHttpRequest *http_request =
|
| - new talk_base::AsyncHttpRequest(GetUserAgentString());
|
| - http_request->set_host("www.google.com");
|
| - http_request->set_port(80);
|
| - http_request->set_secure(false);
|
| - http_request->request().path = "/";
|
| - http_request->request().verb = talk_base::HV_GET;
|
| -
|
| - talk_base::ProxyInfo proxy;
|
| - DCHECK(connection_generator_.get());
|
| - if (connection_generator_.get()) {
|
| - proxy = connection_generator_->proxy();
|
| - }
|
| - http_request->set_proxy(proxy);
|
| - http_request->set_firewall(login_settings_->firewall());
|
| -
|
| - http_request->SignalWorkDone.connect(this,
|
| - &SingleLoginAttempt::OnHttpTestDone);
|
| - http_request->Start();
|
| - http_request->Release();
|
| -}
|
| -
|
| -void SingleLoginAttempt::OnHttpTestDone(talk_base::SignalThread* thread) {
|
| - DCHECK(thread);
|
| -
|
| - talk_base::AsyncHttpRequest* request =
|
| - static_cast<talk_base::AsyncHttpRequest*>(thread);
|
| -
|
| - if (request->response().scode == 200) {
|
| - // We were able to do an HTTP GET of www.google.com:80
|
| -
|
| - //
|
| - // The original error should be reported
|
| - //
|
| - LoginFailure failure(LoginFailure::XMPP_ERROR, code_, subcode_);
|
| - SignalLoginFailure(failure);
|
| - return;
|
| - }
|
| -
|
| - // Otherwise lets transmute the error into ERROR_SOCKET, and put the subcode
|
| - // as an indicator of what we think the problem might be.
|
| -
|
| -#if 0
|
| - // TODO(sync): determine if notifier has an analogous situation.
|
| -
|
| - //
|
| - // We weren't able to do an HTTP GET of www.google.com:80
|
| - //
|
| - GAutoupdater::Version version_logged_in(g_options.version_logged_in());
|
| - GAutoupdater::Version version_installed(GetProductVersion().c_str());
|
| - if (version_logged_in < version_installed) {
|
| - //
|
| - // Google Talk has been updated and can no longer connect to the Google
|
| - // Talk Service. Your firewall is probably not allowing the new version of
|
| - // Google Talk to connect to the internet. Please adjust your firewall
|
| - // settings to allow the new version of Google Talk to connect to the
|
| - // internet.
|
| - //
|
| - // We'll use the "error=1" to help figure this out for now.
|
| - //
|
| - LoginFailure failure(LoginFailure::XMPP_ERROR,
|
| - buzz::XmppEngine::ERROR_SOCKET,
|
| - 1);
|
| - SignalLoginFailure(failure);
|
| - return;
|
| - }
|
| -#endif
|
| -
|
| - //
|
| - // Any other checking we can add here?
|
| - //
|
| -
|
| - //
|
| - // Google Talk is unable to use your internet connection. Either your network
|
| - // isn't configured or Google Talk is being blocked by a local firewall.
|
| - //
|
| - // We'll use the "error=0" to help figure this out for now
|
| - //
|
| - LoginFailure failure(LoginFailure::XMPP_ERROR,
|
| - buzz::XmppEngine::ERROR_SOCKET,
|
| - 0);
|
| - SignalLoginFailure(failure);
|
| -}
|
| -
|
| void SingleLoginAttempt::OnClientStateChange(buzz::XmppEngine::State state) {
|
| if (state_ == state)
|
| return;
|
| @@ -419,10 +241,8 @@ void SingleLoginAttempt::OnClientStateChange(buzz::XmppEngine::State state) {
|
| case buzz::XmppEngine::STATE_NONE:
|
| case buzz::XmppEngine::STATE_START:
|
| case buzz::XmppEngine::STATE_OPENING:
|
| - // Do nothing.
|
| - break;
|
| case buzz::XmppEngine::STATE_OPEN:
|
| - successful_connection_ = true;
|
| + // Do nothing.
|
| break;
|
| case buzz::XmppEngine::STATE_CLOSED:
|
| OnClientStateChangeClosed(previous_state);
|
| @@ -499,14 +319,6 @@ void SingleLoginAttempt::HandleConnectionError(
|
| // Or internal server binding error -
|
| // All these are temporary problems, so continue reconnecting.
|
|
|
| - // GaiaAuth signals this directly via SignalCertificateExpired, but
|
| - // SChannelAdapter propagates the error through SocketWindow as a socket
|
| - // error.
|
| - if (code_ == buzz::XmppEngine::ERROR_SOCKET &&
|
| - subcode_ == SEC_E_CERT_EXPIRED) {
|
| - certificate_expired_ = true;
|
| - }
|
| -
|
| login_settings_->modifiable_user_settings()->set_resource("");
|
|
|
| // Look for stream::error server redirection stanza "see-other-host".
|
|
|