| Index: remoting/protocol/jingle_session.cc
|
| diff --git a/remoting/protocol/jingle_session.cc b/remoting/protocol/jingle_session.cc
|
| index 49b1f13deeaa98a3ed24c3ae1e95c1972fdc313d..f3d96a2994846c0b285b4d943c56a0f90264d68d 100644
|
| --- a/remoting/protocol/jingle_session.cc
|
| +++ b/remoting/protocol/jingle_session.cc
|
| @@ -25,6 +25,7 @@
|
| #include "remoting/protocol/transport.h"
|
| #include "remoting/signaling/iq_sender.h"
|
| #include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
|
| +#include "third_party/webrtc/libjingle/xmpp/constants.h"
|
| #include "third_party/webrtc/p2p/base/candidate.h"
|
|
|
| using buzz::XmlElement;
|
| @@ -220,9 +221,12 @@ void JingleSession::SendTransportInfo(
|
| peer_address_, JingleMessage::TRANSPORT_INFO, session_id_));
|
| message->transport_info = std::move(transport_info);
|
|
|
| + std::unique_ptr<buzz::XmlElement> stanza = message->ToXml();
|
| + stanza->AddAttr(buzz::QN_ID, message_queue_.GetNextOutgoingId());
|
| +
|
| auto request = session_manager_->iq_sender()->SendIq(
|
| - message->ToXml(), base::Bind(&JingleSession::OnTransportInfoResponse,
|
| - base::Unretained(this)));
|
| + std::move(stanza), base::Bind(&JingleSession::OnTransportInfoResponse,
|
| + base::Unretained(this)));
|
| if (request) {
|
| request->SetTimeout(base::TimeDelta::FromSeconds(kTransportInfoTimeout));
|
| transport_info_requests_.push_back(std::move(request));
|
| @@ -283,9 +287,12 @@ void JingleSession::Close(protocol::ErrorCode error) {
|
| void JingleSession::SendMessage(std::unique_ptr<JingleMessage> message) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| + std::unique_ptr<buzz::XmlElement> stanza = message->ToXml();
|
| + stanza->AddAttr(buzz::QN_ID, message_queue_.GetNextOutgoingId());
|
| +
|
| auto request = session_manager_->iq_sender()->SendIq(
|
| - message->ToXml(), base::Bind(&JingleSession::OnMessageResponse,
|
| - base::Unretained(this), message->action));
|
| + std::move(stanza), base::Bind(&JingleSession::OnMessageResponse,
|
| + base::Unretained(this), message->action));
|
|
|
| int timeout = kDefaultMessageTimeout;
|
| if (message->action == JingleMessage::SESSION_INITIATE ||
|
| @@ -369,8 +376,22 @@ void JingleSession::OnTransportInfoResponse(IqRequest* request,
|
| }
|
| }
|
|
|
| -void JingleSession::OnIncomingMessage(std::unique_ptr<JingleMessage> message,
|
| +void JingleSession::OnIncomingMessage(std::string id,
|
| + std::unique_ptr<JingleMessage> message,
|
| const ReplyCallback& reply_callback) {
|
| + std::unique_ptr<QueueItem> item(
|
| + new QueueItem(std::move(message), reply_callback));
|
| + std::list<std::unique_ptr<QueueItem>> ordered =
|
| + message_queue_.OnIncomingMessage(id, std::move(item));
|
| + for (auto it = ordered.begin(); it != ordered.end(); it++) {
|
| + OnIncomingMessageInOrder(std::move(it->get()->message),
|
| + it->get()->reply_callback);
|
| + }
|
| +}
|
| +
|
| +void JingleSession::OnIncomingMessageInOrder(
|
| + std::unique_ptr<JingleMessage> message,
|
| + const ReplyCallback& reply_callback) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| if (peer_address_ != message->from) {
|
| @@ -609,5 +630,11 @@ bool JingleSession::is_session_active() {
|
| state_ == AUTHENTICATING || state_ == AUTHENTICATED;
|
| }
|
|
|
| +JingleSession::QueueItem::QueueItem(std::unique_ptr<JingleMessage> message,
|
| + const ReplyCallback& reply_callback)
|
| + : message(std::move(message)), reply_callback(reply_callback) {}
|
| +
|
| +JingleSession::QueueItem::~QueueItem() {}
|
| +
|
| } // namespace protocol
|
| } // namespace remoting
|
|
|