Index: chrome/browser/sync/notifier/communicator/single_login_attempt.h |
=================================================================== |
--- chrome/browser/sync/notifier/communicator/single_login_attempt.h (revision 0) |
+++ chrome/browser/sync/notifier/communicator/single_login_attempt.h (revision 0) |
@@ -0,0 +1,139 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_SYNC_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ |
+#define CHROME_BROWSER_SYNC_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ |
+#include <string> |
+ |
+#include "chrome/browser/sync/notifier/communicator/login.h" |
+#include "talk/base/scoped_ptr.h" |
+#include "talk/base/sigslot.h" |
+#include "talk/base/task.h" |
+#include "talk/xmpp/xmppengine.h" |
+ |
+namespace buzz { |
+class AsyncSocket; |
+class CaptchaChallenge; |
+class PreXmppAuth; |
+class XmppClient; |
+class XmppClientSettings; |
+class XmppClientSettings; |
+} |
+ |
+namespace talk_base { |
+class FirewallManager; |
+struct ProxyInfo; |
+class SignalThread; |
+class Task; |
+} |
+ |
+namespace notifier { |
+class ConnectionSettings; |
+class LoginFailure; |
+class LoginSettings; |
+struct ServerInformation; |
+class XmppConnectionGenerator; |
+ |
+// Handles all of the aspects of a single login attempt |
+// (across multiple ip addresses) and maintainence. By containing |
+// this within one class, when another login attempt is made, |
+// this class will be disposed and all of the signalling for the |
+// previous login attempt will be cleaned up immediately. |
+// |
+// This is a task to allow for cleaning this up when a signal |
+// is being fired. Technically, delete this during the firing of |
+// a signal could work but it is fragile. |
+class SingleLoginAttempt : public talk_base::Task, public sigslot::has_slots<> { |
+ public: |
+ SingleLoginAttempt(talk_base::Task* parent, |
+ LoginSettings* login_settings, |
+ bool successful_connection); |
+ ~SingleLoginAttempt(); |
+ virtual int ProcessStart(); |
+ void UseNextConnection(); |
+ void UseCurrentConnection(); |
+ |
+ buzz::XmppClient* xmpp_client() { |
+ return client_; |
+ } |
+ |
+ // Returns the proxy that is being used to connect (or |
+ // the default proxy information if all attempted |
+ // connections failed). |
+ const talk_base::ProxyInfo& proxy() const; |
+ |
+ // Typically handled by creating a new SingleLoginAttempt |
+ // and doing StartConnection |
+ sigslot::signal0<> SignalUnexpectedDisconnect; |
+ |
+ // Typically handled by setting storing the redirect for 5 seconds, |
+ // and setting it into LoginSettings, then creating a new SingleLoginAttempt, |
+ // and doing StartConnection. |
+ // |
+ // SignalRedirect(const std::string& redirect_server, int redirect_port); |
+ sigslot::signal2<const std::string&, int> SignalRedirect; |
+ |
+ sigslot::signal0<> SignalNeedAutoReconnect; |
+ |
+ // SignalClientStateChange(buzz::XmppEngine::State new_state); |
+ sigslot::signal1<buzz::XmppEngine::State> SignalClientStateChange; |
+ |
+ // See the LoginFailure for how to handle this. |
+ sigslot::signal1<const LoginFailure&> SignalLoginFailure; |
+ |
+ // Sent when there is a graceful log-off (state goes to closed |
+ // with no error) |
+ sigslot::signal0<> SignalLogoff; |
+ |
+ sigslot::repeater2<const char*, int> SignalLogInput; |
+ sigslot::repeater2<const char*, int> SignalLogOutput; |
+ |
+ protected: |
+ virtual void Stop(); |
+ |
+ private: |
+ void DoLogin(const ConnectionSettings& connection_settings); |
+ buzz::AsyncSocket* CreateSocket(const buzz::XmppClientSettings& xcs); |
+ buzz::PreXmppAuth* CreatePreXmppAuth(const buzz::XmppClientSettings& xcs); |
+ |
+ // cleans up any xmpp client state to get ready for a new one |
+ void ClearClient(); |
+ |
+ void HandleConnectionError( |
+ buzz::XmppEngine::Error code, |
+ int subcode, |
+ const buzz::XmlElement* stream_error, |
+ const buzz::CaptchaChallenge& captcha_challenge); |
+ void HandleConnectionPasswordError( |
+ const buzz::CaptchaChallenge& captcha_challenge); |
+ |
+ void DiagnoseConnectionError(); |
+ void OnHttpTestDone(talk_base::SignalThread* thread); |
+ |
+ void OnAuthenticationError(); |
+ void OnCertificateExpired(); |
+ void OnFreshAuthCookie(const std::string& auth_cookie); |
+ void OnClientStateChange(buzz::XmppEngine::State state); |
+ void OnClientStateChangeClosed(buzz::XmppEngine::State previous_state); |
+ void OnAttemptedAllConnections(bool successfully_resolved_dns, |
+ int first_dns_error); |
+ |
+ bool auto_reconnect() const; |
+ |
+ buzz::XmppEngine::State state_; |
+ buzz::XmppEngine::Error code_; |
+ int subcode_; |
+ bool need_authentication_; |
+ bool certificate_expired_; |
+ bool cookie_refreshed_; |
+ bool successful_connection_; |
+ LoginSettings* login_settings_; |
+ buzz::XmppClient* client_; |
+ scoped_ptr<XmppConnectionGenerator> connection_generator_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SingleLoginAttempt); |
+}; |
+} // namespace notifier |
+ |
+#endif // CHROME_BROWSER_SYNC_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ |
Property changes on: chrome\browser\sync\notifier\communicator\single_login_attempt.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |