| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #ifndef JINGLE_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ | 5 #ifndef JINGLE_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ |
| 6 #define JINGLE_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ | 6 #define JINGLE_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| 11 #include "jingle/notifier/base/xmpp_connection.h" | 11 #include "jingle/notifier/base/xmpp_connection.h" |
| 12 #include "jingle/notifier/communicator/xmpp_connection_generator.h" | 12 #include "jingle/notifier/communicator/xmpp_connection_generator.h" |
| 13 #include "talk/base/sigslot.h" | |
| 14 #include "talk/xmpp/xmppengine.h" | 13 #include "talk/xmpp/xmppengine.h" |
| 15 | 14 |
| 16 namespace talk_base { | 15 namespace talk_base { |
| 17 class Task; | 16 class Task; |
| 18 } | 17 } |
| 19 | 18 |
| 20 namespace notifier { | 19 namespace notifier { |
| 21 | 20 |
| 22 class ConnectionSettings; | 21 class ConnectionSettings; |
| 23 class LoginSettings; | 22 class LoginSettings; |
| 24 | 23 |
| 25 // Handles all of the aspects of a single login attempt (across multiple ip | 24 // Handles all of the aspects of a single login attempt (across multiple ip |
| 26 // addresses) and maintainence. By containing this within one class, when | 25 // addresses) and maintainence. By containing this within one class, when |
| 27 // another login attempt is made, this class will be disposed and all of the | 26 // another login attempt is made, this class will be disposed and all of the |
| 28 // signalling for the previous login attempt will be cleaned up immediately. | 27 // signalling for the previous login attempt will be cleaned up immediately. |
| 29 class SingleLoginAttempt : public XmppConnection::Delegate, | 28 class SingleLoginAttempt : public XmppConnection::Delegate, |
| 30 public XmppConnectionGenerator::Delegate { | 29 public XmppConnectionGenerator::Delegate { |
| 31 public: | 30 public: |
| 32 explicit SingleLoginAttempt(LoginSettings* login_settings); | 31 class Delegate { |
| 32 public: |
| 33 virtual ~Delegate() {} |
| 34 |
| 35 virtual void OnConnect(base::WeakPtr<talk_base::Task> base_task) = 0; |
| 36 virtual void OnNeedReconnect() = 0; |
| 37 virtual void OnRedirect(const std::string& redirect_server, |
| 38 int redirect_port) = 0; |
| 39 }; |
| 40 |
| 41 // Does not take ownership of |login_settings| or |delegate|. |
| 42 // Neither may be NULL. |
| 43 SingleLoginAttempt(LoginSettings* login_settings, Delegate* delegate); |
| 33 | 44 |
| 34 virtual ~SingleLoginAttempt(); | 45 virtual ~SingleLoginAttempt(); |
| 35 | 46 |
| 36 // XmppConnection::Delegate implementation. | 47 // XmppConnection::Delegate implementation. |
| 37 virtual void OnConnect(base::WeakPtr<talk_base::Task> parent); | 48 virtual void OnConnect(base::WeakPtr<talk_base::Task> parent); |
| 38 virtual void OnError(buzz::XmppEngine::Error error, | 49 virtual void OnError(buzz::XmppEngine::Error error, |
| 39 int error_subcode, | 50 int error_subcode, |
| 40 const buzz::XmlElement* stream_error); | 51 const buzz::XmlElement* stream_error); |
| 41 | 52 |
| 42 // XmppConnectionGenerator::Delegate implementation. | 53 // XmppConnectionGenerator::Delegate implementation. |
| 43 virtual void OnNewSettings(const ConnectionSettings& new_settings); | 54 virtual void OnNewSettings(const ConnectionSettings& new_settings); |
| 44 virtual void OnExhaustedSettings(bool successfully_resolved_dns, | 55 virtual void OnExhaustedSettings(bool successfully_resolved_dns, |
| 45 int first_dns_error); | 56 int first_dns_error); |
| 46 | 57 |
| 47 // Typically handled by storing the redirect for 5 seconds, and setting it | |
| 48 // into LoginSettings, then creating a new SingleLoginAttempt, and doing | |
| 49 // StartConnection. | |
| 50 // | |
| 51 // SignalRedirect(const std::string& redirect_server, int redirect_port); | |
| 52 sigslot::signal2<const std::string&, int> SignalRedirect; | |
| 53 | |
| 54 sigslot::signal0<> SignalNeedAutoReconnect; | |
| 55 | |
| 56 sigslot::signal1<base::WeakPtr<talk_base::Task> > SignalConnect; | |
| 57 | |
| 58 private: | 58 private: |
| 59 LoginSettings* login_settings_; | 59 LoginSettings* login_settings_; |
| 60 Delegate* delegate_; |
| 60 XmppConnectionGenerator connection_generator_; | 61 XmppConnectionGenerator connection_generator_; |
| 61 scoped_ptr<XmppConnection> xmpp_connection_; | 62 scoped_ptr<XmppConnection> xmpp_connection_; |
| 62 | 63 |
| 63 DISALLOW_COPY_AND_ASSIGN(SingleLoginAttempt); | 64 DISALLOW_COPY_AND_ASSIGN(SingleLoginAttempt); |
| 64 }; | 65 }; |
| 65 | 66 |
| 66 } // namespace notifier | 67 } // namespace notifier |
| 67 | 68 |
| 68 #endif // JINGLE_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ | 69 #endif // JINGLE_NOTIFIER_COMMUNICATOR_SINGLE_LOGIN_ATTEMPT_H_ |
| OLD | NEW |