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

Side by Side Diff: remoting/protocol/jingle_session.cc

Issue 2967213002: Fix ASSERT in JingleMessage::OrderedMessageQueue. (Closed)
Patch Set: Created 3 years, 5 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 unified diff | Download patch
« no previous file with comments | « remoting/protocol/jingle_session.h ('k') | remoting/protocol/jingle_session_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/protocol/jingle_session.h" 5 #include "remoting/protocol/jingle_session.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <memory> 10 #include <memory>
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 class JingleSession::OrderedMessageQueue { 108 class JingleSession::OrderedMessageQueue {
109 public: 109 public:
110 OrderedMessageQueue() {} 110 OrderedMessageQueue() {}
111 ~OrderedMessageQueue() {} 111 ~OrderedMessageQueue() {}
112 112
113 // Returns the list of messages ordered by their sequential IDs. 113 // Returns the list of messages ordered by their sequential IDs.
114 std::vector<PendingMessage> OnIncomingMessage( 114 std::vector<PendingMessage> OnIncomingMessage(
115 const std::string& id, 115 const std::string& id,
116 PendingMessage&& pending_message); 116 PendingMessage&& pending_message);
117 117
118 // Sets the initial ID of the session initiate message.
119 void setInitialId(const std::string& id);
Sergey Ulanov 2017/07/05 18:00:14 SetInitialiId() please
kelvinp 2017/07/05 22:29:40 Done.
120
118 private: 121 private:
119 // Implements an ordered list by using map with the |sequence_id| as the key, 122 // Implements an ordered list by using map with the |sequence_id| as the key,
120 // so that |queue_| is always sorted by |sequence_id|. 123 // so that |queue_| is always sorted by |sequence_id|.
121 std::map<int, PendingMessage> queue_; 124 std::map<int, PendingMessage> queue_;
122 125
123 int next_incoming_ = kAny; 126 int next_incoming_ = kAny;
124 127
125 DISALLOW_COPY_AND_ASSIGN(OrderedMessageQueue); 128 DISALLOW_COPY_AND_ASSIGN(OrderedMessageQueue);
126 }; 129 };
127 130
131 void JingleSession::OrderedMessageQueue::setInitialId(const std::string& id) {
Sergey Ulanov 2017/07/05 18:00:14 Put this after OnIncomingMessage() so the order ma
kelvinp 2017/07/05 22:29:41 Done.
132 int current = GetSequentialId(id);
133 if (current != kInvalid)
134 next_incoming_ = current + 1;
135 }
136
128 std::vector<JingleSession::PendingMessage> 137 std::vector<JingleSession::PendingMessage>
129 JingleSession::OrderedMessageQueue::OnIncomingMessage( 138 JingleSession::OrderedMessageQueue::OnIncomingMessage(
130 const std::string& id, 139 const std::string& id,
131 JingleSession::PendingMessage&& message) { 140 JingleSession::PendingMessage&& message) {
132 std::vector<JingleSession::PendingMessage> result; 141 std::vector<JingleSession::PendingMessage> result;
133 int current = GetSequentialId(id); 142 int current = GetSequentialId(id);
134 // If there is no sequencing order encoded in the id, just return the 143 // If there is no sequencing order encoded in the id, just return the
135 // message. 144 // message.
136 if (current == kInvalid) { 145 if (current == kInvalid) {
137 result.push_back(std::move(message)); 146 result.push_back(std::move(message));
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 // Delay sending session-initiate message to ensure SessionPlugin can be 226 // Delay sending session-initiate message to ensure SessionPlugin can be
218 // attached before the message. 227 // attached before the message.
219 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 228 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
220 base::Bind(&JingleSession::SendSessionInitiateMessage, 229 base::Bind(&JingleSession::SendSessionInitiateMessage,
221 weak_factory_.GetWeakPtr())); 230 weak_factory_.GetWeakPtr()));
222 231
223 SetState(CONNECTING); 232 SetState(CONNECTING);
224 } 233 }
225 234
226 void JingleSession::InitializeIncomingConnection( 235 void JingleSession::InitializeIncomingConnection(
236 const std::string& id,
Sergey Ulanov 2017/07/05 18:00:14 call it message_id.
kelvinp 2017/07/05 22:29:40 Done.
227 const JingleMessage& initiate_message, 237 const JingleMessage& initiate_message,
228 std::unique_ptr<Authenticator> authenticator) { 238 std::unique_ptr<Authenticator> authenticator) {
229 DCHECK(thread_checker_.CalledOnValidThread()); 239 DCHECK(thread_checker_.CalledOnValidThread());
230 DCHECK(initiate_message.description.get()); 240 DCHECK(initiate_message.description.get());
231 DCHECK(authenticator.get()); 241 DCHECK(authenticator.get());
232 DCHECK_EQ(authenticator->state(), Authenticator::WAITING_MESSAGE); 242 DCHECK_EQ(authenticator->state(), Authenticator::WAITING_MESSAGE);
233 243
234 peer_address_ = initiate_message.from; 244 peer_address_ = initiate_message.from;
235 authenticator_ = std::move(authenticator); 245 authenticator_ = std::move(authenticator);
236 session_id_ = initiate_message.sid; 246 session_id_ = initiate_message.sid;
247 message_queue_->setInitialId(id);
237 248
238 SetState(ACCEPTING); 249 SetState(ACCEPTING);
239 250
240 config_ = 251 config_ =
241 SessionConfig::SelectCommon(initiate_message.description->config(), 252 SessionConfig::SelectCommon(initiate_message.description->config(),
242 session_manager_->protocol_config_.get()); 253 session_manager_->protocol_config_.get());
243 if (!config_) { 254 if (!config_) {
244 LOG(WARNING) << "Rejecting connection from " << peer_address_.id() 255 LOG(WARNING) << "Rejecting connection from " << peer_address_.id()
245 << " because no compatible configuration has been found."; 256 << " because no compatible configuration has been found.";
246 Close(INCOMPATIBLE_PROTOCOL); 257 Close(INCOMPATIBLE_PROTOCOL);
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 authenticator_->GetNextMessage())); 811 authenticator_->GetNextMessage()));
801 SendMessage(std::move(message)); 812 SendMessage(std::move(message));
802 } 813 }
803 814
804 std::string JingleSession::GetNextOutgoingId() { 815 std::string JingleSession::GetNextOutgoingId() {
805 return outgoing_id_prefix_ + "_" + base::IntToString(++next_outgoing_id_); 816 return outgoing_id_prefix_ + "_" + base::IntToString(++next_outgoing_id_);
806 } 817 }
807 818
808 } // namespace protocol 819 } // namespace protocol
809 } // namespace remoting 820 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/jingle_session.h ('k') | remoting/protocol/jingle_session_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698