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

Unified Diff: remoting/protocol/jingle_session.cc

Issue 2417913002: Process incoming IQs in the same order that they were sent. (Closed)
Patch Set: Created 4 years, 2 months 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698