Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(423)

Unified Diff: jingle/notifier/communicator/single_login_attempt.cc

Issue 3298021: Removed use of XmppSocketAdapter by sync. (Closed)
Patch Set: Fixed checkdeps problem Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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".

Powered by Google App Engine
This is Rietveld 408576698