Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: remoting/jingle_glue/xmpp_signal_strategy.cc

Issue 8432009: Refactor IqRequest. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "remoting/jingle_glue/xmpp_signal_strategy.h" 5 #include "remoting/jingle_glue/xmpp_signal_strategy.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "jingle/notifier/base/gaia_token_pre_xmpp_auth.h" 8 #include "jingle/notifier/base/gaia_token_pre_xmpp_auth.h"
9 #include "remoting/jingle_glue/iq_request.h"
10 #include "remoting/jingle_glue/jingle_thread.h" 9 #include "remoting/jingle_glue/jingle_thread.h"
11 #include "remoting/jingle_glue/xmpp_socket_adapter.h" 10 #include "remoting/jingle_glue/xmpp_socket_adapter.h"
12 #include "third_party/libjingle/source/talk/base/asyncsocket.h" 11 #include "third_party/libjingle/source/talk/base/asyncsocket.h"
13 #include "third_party/libjingle/source/talk/xmpp/prexmppauth.h" 12 #include "third_party/libjingle/source/talk/xmpp/prexmppauth.h"
14 #include "third_party/libjingle/source/talk/xmpp/saslcookiemechanism.h" 13 #include "third_party/libjingle/source/talk/xmpp/saslcookiemechanism.h"
15 14
16 namespace remoting { 15 namespace remoting {
17 16
18 XmppSignalStrategy::XmppSignalStrategy(JingleThread* jingle_thread, 17 XmppSignalStrategy::XmppSignalStrategy(JingleThread* jingle_thread,
19 const std::string& username, 18 const std::string& username,
20 const std::string& auth_token, 19 const std::string& auth_token,
21 const std::string& auth_token_service) 20 const std::string& auth_token_service)
22 : thread_(jingle_thread), 21 : thread_(jingle_thread),
23 username_(username), 22 username_(username),
24 auth_token_(auth_token), 23 auth_token_(auth_token),
25 auth_token_service_(auth_token_service), 24 auth_token_service_(auth_token_service),
26 xmpp_client_(NULL), 25 xmpp_client_(NULL),
27 observer_(NULL), 26 observer_(NULL) {
28 listener_(NULL) {
29 } 27 }
30 28
31 XmppSignalStrategy::~XmppSignalStrategy() { 29 XmppSignalStrategy::~XmppSignalStrategy() {
32 DCHECK(listener_ == NULL); 30 DCHECK(listeners_.empty());
33 Close(); 31 Close();
34 } 32 }
35 33
36 void XmppSignalStrategy::Init(StatusObserver* observer) { 34 void XmppSignalStrategy::Init(StatusObserver* observer) {
37 observer_ = observer; 35 observer_ = observer;
38 36
39 buzz::Jid login_jid(username_); 37 buzz::Jid login_jid(username_);
40 38
41 buzz::XmppClientSettings settings; 39 buzz::XmppClientSettings settings;
42 settings.set_user(login_jid.node()); 40 settings.set_user(login_jid.node());
(...skipping 19 matching lines...) Expand all
62 xmpp_client_->engine()->RemoveStanzaHandler(this); 60 xmpp_client_->engine()->RemoveStanzaHandler(this);
63 61
64 xmpp_client_->Disconnect(); 62 xmpp_client_->Disconnect();
65 63
66 // |xmpp_client_| should be set to NULL in OnConnectionStateChanged() 64 // |xmpp_client_| should be set to NULL in OnConnectionStateChanged()
67 // in response to Disconnect() call above. 65 // in response to Disconnect() call above.
68 DCHECK(xmpp_client_ == NULL); 66 DCHECK(xmpp_client_ == NULL);
69 } 67 }
70 } 68 }
71 69
72 void XmppSignalStrategy::SetListener(Listener* listener) { 70 void XmppSignalStrategy::AddListener(Listener* listener) {
73 // Don't overwrite an listener without explicitly going 71 DCHECK(std::find(listeners_.begin(), listeners_.end(), listener) ==
74 // through "NULL" first. 72 listeners_.end());
75 DCHECK(listener_ == NULL || listener == NULL); 73 listeners_.push_back(listener);
76 listener_ = listener;
77 } 74 }
78 75
79 void XmppSignalStrategy::SendStanza(buzz::XmlElement* stanza) { 76 void XmppSignalStrategy::RemoveListener(Listener* listener) {
77 std::vector<Listener*>::iterator it =
78 std::find(listeners_.begin(), listeners_.end(), listener);
79 CHECK(it != listeners_.end());
80 listeners_.erase(it);
81 }
82
83 bool XmppSignalStrategy::SendStanza(buzz::XmlElement* stanza) {
80 if (!xmpp_client_) { 84 if (!xmpp_client_) {
81 LOG(INFO) << "Dropping signalling message because XMPP " 85 LOG(INFO) << "Dropping signalling message because XMPP "
82 "connection has been terminated."; 86 "connection has been terminated.";
83 return; 87 delete stanza;
88 return false;
84 } 89 }
85 xmpp_client_->SendStanza(stanza); 90
91 buzz::XmppReturnStatus status = xmpp_client_->SendStanza(stanza);
92 return status == buzz::XMPP_RETURN_OK || status == buzz::XMPP_RETURN_PENDING;
86 } 93 }
87 94
88 std::string XmppSignalStrategy::GetNextId() { 95 std::string XmppSignalStrategy::GetNextId() {
89 if (!xmpp_client_) { 96 if (!xmpp_client_) {
90 // If the connection has been terminated then it doesn't matter 97 // If the connection has been terminated then it doesn't matter
91 // what Id we return. 98 // what Id we return.
92 return ""; 99 return "";
93 } 100 }
94 return xmpp_client_->NextId(); 101 return xmpp_client_->NextId();
95 } 102 }
96 103
97 IqRequest* XmppSignalStrategy::CreateIqRequest() {
98 return new IqRequest(this, &iq_registry_);
99 }
100
101 bool XmppSignalStrategy::HandleStanza(const buzz::XmlElement* stanza) { 104 bool XmppSignalStrategy::HandleStanza(const buzz::XmlElement* stanza) {
102 if (listener_ && listener_->OnIncomingStanza(stanza)) 105 for (std::vector<Listener*>::iterator it = listeners_.begin();
103 return true; 106 it != listeners_.end(); ++it) {
104 return iq_registry_.OnIncomingStanza(stanza); 107 if ((*it)->OnIncomingStanza(stanza))
108 return true;
109 }
110 return false;
105 } 111 }
106 112
107 void XmppSignalStrategy::OnConnectionStateChanged( 113 void XmppSignalStrategy::OnConnectionStateChanged(
108 buzz::XmppEngine::State state) { 114 buzz::XmppEngine::State state) {
109 switch (state) { 115 switch (state) {
110 case buzz::XmppEngine::STATE_START: 116 case buzz::XmppEngine::STATE_START:
111 observer_->OnStateChange(StatusObserver::START); 117 observer_->OnStateChange(StatusObserver::START);
112 break; 118 break;
113 case buzz::XmppEngine::STATE_OPENING: 119 case buzz::XmppEngine::STATE_OPENING:
114 observer_->OnStateChange(StatusObserver::CONNECTING); 120 observer_->OnStateChange(StatusObserver::CONNECTING);
(...skipping 24 matching lines...) Expand all
139 } 145 }
140 146
141 return new notifier::GaiaTokenPreXmppAuth( 147 return new notifier::GaiaTokenPreXmppAuth(
142 jid.Str(), 148 jid.Str(),
143 settings.auth_cookie(), 149 settings.auth_cookie(),
144 settings.token_service(), 150 settings.token_service(),
145 mechanism); 151 mechanism);
146 } 152 }
147 153
148 } // namespace remoting 154 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698