diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-16 20:54:02 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-16 20:54:02 +0000 |
commit | dd7981da8ce9ae81b77c43c308cab8b664b63276 (patch) | |
tree | d06cb20f9a9f0cd762aaf0e7206b0cf8faa0dcd5 /third_party/libjingle/files/talk/xmpp/xmppclient.cc | |
parent | ce08079cf7f61aa56f11dd502690e4318b1db035 (diff) | |
download | chromium_src-dd7981da8ce9ae81b77c43c308cab8b664b63276.zip chromium_src-dd7981da8ce9ae81b77c43c308cab8b664b63276.tar.gz chromium_src-dd7981da8ce9ae81b77c43c308cab8b664b63276.tar.bz2 |
Split up PreXmppAuth and SaslHandler.
Created a X-GOOGLE-TOKEN-only SaslHandler class for use by sync.
BUG=38034
TEST=manual
Review URL: http://codereview.chromium.org/904006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41761 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/libjingle/files/talk/xmpp/xmppclient.cc')
-rw-r--r-- | third_party/libjingle/files/talk/xmpp/xmppclient.cc | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/third_party/libjingle/files/talk/xmpp/xmppclient.cc b/third_party/libjingle/files/talk/xmpp/xmppclient.cc index 41cb77d..ec68215 100644 --- a/third_party/libjingle/files/talk/xmpp/xmppclient.cc +++ b/third_party/libjingle/files/talk/xmpp/xmppclient.cc @@ -30,6 +30,7 @@ #include "talk/xmpp/xmppconstants.h" #include "talk/base/sigslot.h" #include "talk/xmpp/saslplainmechanism.h" +#include "talk/xmpp/saslhandler.h" #include "talk/xmpp/prexmppauth.h" #include "talk/base/scoped_ptr.h" #include "talk/xmpp/plainsaslhandler.h" @@ -66,6 +67,7 @@ public: scoped_ptr<AsyncSocket> socket_; scoped_ptr<XmppEngine> engine_; scoped_ptr<PreXmppAuth> pre_auth_; + scoped_ptr<SaslHandler> sasl_handler_; talk_base::CryptString pass_; std::string auth_cookie_; talk_base::SocketAddress server_; @@ -90,7 +92,11 @@ public: }; XmppReturnStatus -XmppClient::Connect(const XmppClientSettings & settings, const std::string & lang, AsyncSocket * socket, PreXmppAuth * pre_auth) { +XmppClient::Connect(const XmppClientSettings & settings, + const std::string & lang, + AsyncSocket * socket, + PreXmppAuth * pre_auth, + SaslHandler * sasl_handler) { if (socket == NULL) return XMPP_RETURN_BADARGUMENT; if (d_->socket_.get() != NULL) @@ -137,6 +143,7 @@ XmppClient::Connect(const XmppClientSettings & settings, const std::string & lan d_->proxy_port_ = settings.proxy_port(); d_->allow_plain_ = settings.allow_plain(); d_->pre_auth_.reset(pre_auth); + d_->sasl_handler_.reset(sasl_handler); return XMPP_RETURN_OK; } @@ -198,6 +205,14 @@ ForgetPassword(std::string & to_erase) { int XmppClient::ProcessStart() { + if (d_->sasl_handler_.get()) { + d_->engine_->SetSaslHandler(d_->sasl_handler_.release()); + } + else { + d_->engine_->SetSaslHandler(new PlainSaslHandler( + d_->engine_->GetUser(), d_->pass_, d_->allow_plain_)); + } + if (d_->pre_auth_.get()) { d_->pre_auth_->SignalAuthDone.connect(this, &XmppClient::OnAuthDone); d_->pre_auth_->StartPreXmppAuth( @@ -206,8 +221,6 @@ XmppClient::ProcessStart() { return STATE_PRE_XMPP_LOGIN; } else { - d_->engine_->SetSaslHandler(new PlainSaslHandler( - d_->engine_->GetUser(), d_->pass_, d_->allow_plain_)); d_->pass_.Clear(); // done with this; return STATE_START_XMPP_LOGIN; } @@ -250,8 +263,6 @@ XmppClient::ProcessCookieLogin() { // Save auth cookie as a result d_->auth_cookie_ = d_->pre_auth_->GetAuthCookie(); - // transfer ownership of pre_auth_ to engine - d_->engine_->SetSaslHandler(d_->pre_auth_.release()); return STATE_START_XMPP_LOGIN; } |