summaryrefslogtreecommitdiffstats
path: root/third_party/libjingle/files/talk/xmpp/xmppclient.cc
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-16 20:54:02 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-16 20:54:02 +0000
commitdd7981da8ce9ae81b77c43c308cab8b664b63276 (patch)
treed06cb20f9a9f0cd762aaf0e7206b0cf8faa0dcd5 /third_party/libjingle/files/talk/xmpp/xmppclient.cc
parentce08079cf7f61aa56f11dd502690e4318b1db035 (diff)
downloadchromium_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.cc21
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;
}