diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-23 16:35:44 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-23 16:35:44 +0000 |
commit | 512ac40edc7551c76bbd9bf288afee209f6bba15 (patch) | |
tree | 1ff85ae2cf2b7d65fef41729225a62b9ecc1d1f1 /remoting/jingle_glue/javascript_signal_strategy.cc | |
parent | 590742dc369f718055cded657f197d154639493e (diff) | |
download | chromium_src-512ac40edc7551c76bbd9bf288afee209f6bba15.zip chromium_src-512ac40edc7551c76bbd9bf288afee209f6bba15.tar.gz chromium_src-512ac40edc7551c76bbd9bf288afee209f6bba15.tar.bz2 |
Refactoring around SignalStrategy interface.
- Added AddListener/RemoveListener in the SignalStrategy interface.
- Remove dependancy on JavascriptIqRequest from JingleSignalingConnector.
BUG=None
TEST=Chromoting client still works
Review URL: http://codereview.chromium.org/7239005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90219 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/jingle_glue/javascript_signal_strategy.cc')
-rw-r--r-- | remoting/jingle_glue/javascript_signal_strategy.cc | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/remoting/jingle_glue/javascript_signal_strategy.cc b/remoting/jingle_glue/javascript_signal_strategy.cc index 2f5b64f..6227b5e 100644 --- a/remoting/jingle_glue/javascript_signal_strategy.cc +++ b/remoting/jingle_glue/javascript_signal_strategy.cc @@ -4,26 +4,35 @@ #include "remoting/jingle_glue/javascript_signal_strategy.h" +#include <algorithm> + +#include "base/logging.h" #include "remoting/jingle_glue/iq_request.h" #include "remoting/jingle_glue/jingle_signaling_connector.h" #include "remoting/jingle_glue/xmpp_proxy.h" +#include "third_party/libjingle/source/talk/xmllite/xmlelement.h" namespace remoting { JavascriptSignalStrategy::JavascriptSignalStrategy(const std::string& your_jid) - : your_jid_(your_jid) { + : your_jid_(your_jid), + listener_(NULL) { } JavascriptSignalStrategy::~JavascriptSignalStrategy() { + jingle_signaling_connector_.reset(); + DCHECK(listener_ == NULL); } void JavascriptSignalStrategy::AttachXmppProxy( scoped_refptr<XmppProxy> xmpp_proxy) { xmpp_proxy_ = xmpp_proxy; - xmpp_proxy_->AttachCallback(iq_registry_.AsWeakPtr()); + xmpp_proxy_->AttachCallback(AsWeakPtr()); } void JavascriptSignalStrategy::Init(StatusObserver* observer) { + DCHECK(CalledOnValidThread()); + // Blast through each state since for a JavascriptSignalStrategy, we're // already connected. // @@ -35,22 +44,55 @@ void JavascriptSignalStrategy::Init(StatusObserver* observer) { observer->OnStateChange(StatusObserver::CONNECTED); } +void JavascriptSignalStrategy::SetListener(Listener* listener) { + DCHECK(CalledOnValidThread()); + + // Don't overwrite an listener without explicitly going + // through "NULL" first. + DCHECK(listener_ == NULL || listener == NULL); + listener_ = listener; +} + +void JavascriptSignalStrategy::SendStanza(buzz::XmlElement* stanza) { + DCHECK(CalledOnValidThread()); + + xmpp_proxy_->SendIq(stanza->Str()); + delete stanza; +} + void JavascriptSignalStrategy::StartSession( cricket::SessionManager* session_manager) { + DCHECK(CalledOnValidThread()); + jingle_signaling_connector_.reset( - new JingleSignalingConnector(CreateIqRequest(), session_manager)); - jingle_signaling_connector_->Run(); + new JingleSignalingConnector(this, session_manager)); } void JavascriptSignalStrategy::EndSession() { + DCHECK(CalledOnValidThread()); + if (xmpp_proxy_) { xmpp_proxy_->DetachCallback(); } xmpp_proxy_ = NULL; } -JavascriptIqRequest* JavascriptSignalStrategy::CreateIqRequest() { - return new JavascriptIqRequest(&iq_registry_, xmpp_proxy_); +IqRequest* JavascriptSignalStrategy::CreateIqRequest() { + DCHECK(CalledOnValidThread()); + + return new JavascriptIqRequest(this, &iq_registry_); +} + +void JavascriptSignalStrategy::OnIq(const std::string& stanza_str) { + scoped_ptr<buzz::XmlElement> stanza(buzz::XmlElement::ForStr(stanza_str)); + + if (!stanza.get()) { + LOG(WARNING) << "Malformed XMPP stanza received: " << stanza_str; + return; + } + + listener_->OnIncomingStanza(stanza.get()); + iq_registry_.OnIncomingStanza(stanza.get()); } } // namespace remoting |