Index: remoting/jingle_glue/iq_sender.cc |
diff --git a/remoting/jingle_glue/iq_sender.cc b/remoting/jingle_glue/iq_sender.cc |
deleted file mode 100644 |
index 7b00c7f7410ff1660075c57975f24296c71c2e22..0000000000000000000000000000000000000000 |
--- a/remoting/jingle_glue/iq_sender.cc |
+++ /dev/null |
@@ -1,165 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "remoting/jingle_glue/iq_sender.h" |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/thread_task_runner_handle.h" |
-#include "base/time/time.h" |
-#include "remoting/jingle_glue/signal_strategy.h" |
-#include "third_party/libjingle/source/talk/xmllite/xmlelement.h" |
-#include "third_party/libjingle/source/talk/xmpp/constants.h" |
- |
-namespace remoting { |
- |
-// static |
-scoped_ptr<buzz::XmlElement> IqSender::MakeIqStanza( |
- const std::string& type, |
- const std::string& addressee, |
- scoped_ptr<buzz::XmlElement> iq_body) { |
- scoped_ptr<buzz::XmlElement> stanza(new buzz::XmlElement(buzz::QN_IQ)); |
- stanza->AddAttr(buzz::QN_TYPE, type); |
- if (!addressee.empty()) |
- stanza->AddAttr(buzz::QN_TO, addressee); |
- stanza->AddElement(iq_body.release()); |
- return stanza.Pass(); |
-} |
- |
-IqSender::IqSender(SignalStrategy* signal_strategy) |
- : signal_strategy_(signal_strategy) { |
- signal_strategy_->AddListener(this); |
-} |
- |
-IqSender::~IqSender() { |
- signal_strategy_->RemoveListener(this); |
-} |
- |
-scoped_ptr<IqRequest> IqSender::SendIq(scoped_ptr<buzz::XmlElement> stanza, |
- const ReplyCallback& callback) { |
- std::string addressee = stanza->Attr(buzz::QN_TO); |
- std::string id = signal_strategy_->GetNextId(); |
- stanza->AddAttr(buzz::QN_ID, id); |
- if (!signal_strategy_->SendStanza(stanza.Pass())) { |
- return scoped_ptr<IqRequest>(); |
- } |
- DCHECK(requests_.find(id) == requests_.end()); |
- scoped_ptr<IqRequest> request(new IqRequest(this, callback, addressee)); |
- if (!callback.is_null()) |
- requests_[id] = request.get(); |
- return request.Pass(); |
-} |
- |
-scoped_ptr<IqRequest> IqSender::SendIq(const std::string& type, |
- const std::string& addressee, |
- scoped_ptr<buzz::XmlElement> iq_body, |
- const ReplyCallback& callback) { |
- return SendIq(MakeIqStanza(type, addressee, iq_body.Pass()), callback); |
-} |
- |
-void IqSender::RemoveRequest(IqRequest* request) { |
- IqRequestMap::iterator it = requests_.begin(); |
- while (it != requests_.end()) { |
- IqRequestMap::iterator cur = it; |
- ++it; |
- if (cur->second == request) { |
- requests_.erase(cur); |
- break; |
- } |
- } |
-} |
- |
-void IqSender::OnSignalStrategyStateChange(SignalStrategy::State state) { |
-} |
- |
-bool IqSender::OnSignalStrategyIncomingStanza(const buzz::XmlElement* stanza) { |
- if (stanza->Name() != buzz::QN_IQ) { |
- LOG(WARNING) << "Received unexpected non-IQ packet " << stanza->Str(); |
- return false; |
- } |
- |
- const std::string& type = stanza->Attr(buzz::QN_TYPE); |
- if (type.empty()) { |
- LOG(WARNING) << "IQ packet missing type " << stanza->Str(); |
- return false; |
- } |
- |
- if (type != "result" && type != "error") { |
- return false; |
- } |
- |
- const std::string& id = stanza->Attr(buzz::QN_ID); |
- if (id.empty()) { |
- LOG(WARNING) << "IQ packet missing id " << stanza->Str(); |
- return false; |
- } |
- |
- std::string from = stanza->Attr(buzz::QN_FROM); |
- |
- IqRequestMap::iterator it = requests_.find(id); |
- if (it == requests_.end()) { |
- return false; |
- } |
- |
- IqRequest* request = it->second; |
- |
- if (request->addressee_ != from) { |
- LOG(ERROR) << "Received IQ response from from a invalid JID. Ignoring it." |
- << " Message received from: " << from |
- << " Original JID: " << request->addressee_; |
- return false; |
- } |
- |
- requests_.erase(it); |
- request->OnResponse(stanza); |
- |
- return true; |
-} |
- |
-IqRequest::IqRequest(IqSender* sender, const IqSender::ReplyCallback& callback, |
- const std::string& addressee) |
- : sender_(sender), |
- callback_(callback), |
- addressee_(addressee) { |
-} |
- |
-IqRequest::~IqRequest() { |
- sender_->RemoveRequest(this); |
-} |
- |
-void IqRequest::SetTimeout(base::TimeDelta timeout) { |
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
- FROM_HERE, base::Bind(&IqRequest::OnTimeout, AsWeakPtr()), timeout); |
-} |
- |
-void IqRequest::CallCallback(const buzz::XmlElement* stanza) { |
- if (!callback_.is_null()) { |
- IqSender::ReplyCallback callback(callback_); |
- callback_.Reset(); |
- callback.Run(this, stanza); |
- } |
-} |
- |
-void IqRequest::OnTimeout() { |
- CallCallback(NULL); |
-} |
- |
-void IqRequest::OnResponse(const buzz::XmlElement* stanza) { |
- // It's unsafe to delete signal strategy here, and the callback may |
- // want to do that, so we post task to invoke the callback later. |
- scoped_ptr<buzz::XmlElement> stanza_copy(new buzz::XmlElement(*stanza)); |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, base::Bind(&IqRequest::DeliverResponse, AsWeakPtr(), |
- base::Passed(&stanza_copy))); |
-} |
- |
-void IqRequest::DeliverResponse(scoped_ptr<buzz::XmlElement> stanza) { |
- CallCallback(stanza.get()); |
-} |
- |
-} // namespace remoting |