| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include "webrtc/p2p/base/stunrequest.h" | 11 #include "webrtc/p2p/base/stunrequest.h" |
| 12 | 12 |
| 13 #include <algorithm> | 13 #include <algorithm> |
| 14 #include <memory> | 14 #include <memory> |
| 15 | 15 |
| 16 #include "webrtc/base/checks.h" |
| 16 #include "webrtc/base/common.h" | 17 #include "webrtc/base/common.h" |
| 17 #include "webrtc/base/helpers.h" | 18 #include "webrtc/base/helpers.h" |
| 18 #include "webrtc/base/logging.h" | 19 #include "webrtc/base/logging.h" |
| 19 #include "webrtc/base/stringencode.h" | 20 #include "webrtc/base/stringencode.h" |
| 20 | 21 |
| 21 namespace cricket { | 22 namespace cricket { |
| 22 | 23 |
| 23 const uint32_t MSG_STUN_SEND = 1; | 24 const uint32_t MSG_STUN_SEND = 1; |
| 24 | 25 |
| 25 const int MAX_SENDS = 9; | 26 const int MAX_SENDS = 9; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 37 delete request; | 38 delete request; |
| 38 } | 39 } |
| 39 } | 40 } |
| 40 | 41 |
| 41 void StunRequestManager::Send(StunRequest* request) { | 42 void StunRequestManager::Send(StunRequest* request) { |
| 42 SendDelayed(request, 0); | 43 SendDelayed(request, 0); |
| 43 } | 44 } |
| 44 | 45 |
| 45 void StunRequestManager::SendDelayed(StunRequest* request, int delay) { | 46 void StunRequestManager::SendDelayed(StunRequest* request, int delay) { |
| 46 request->set_manager(this); | 47 request->set_manager(this); |
| 47 ASSERT(requests_.find(request->id()) == requests_.end()); | 48 RTC_DCHECK(requests_.find(request->id()) == requests_.end()); |
| 48 request->set_origin(origin_); | 49 request->set_origin(origin_); |
| 49 request->Construct(); | 50 request->Construct(); |
| 50 requests_[request->id()] = request; | 51 requests_[request->id()] = request; |
| 51 if (delay > 0) { | 52 if (delay > 0) { |
| 52 thread_->PostDelayed(RTC_FROM_HERE, delay, request, MSG_STUN_SEND, NULL); | 53 thread_->PostDelayed(RTC_FROM_HERE, delay, request, MSG_STUN_SEND, NULL); |
| 53 } else { | 54 } else { |
| 54 thread_->Send(RTC_FROM_HERE, request, MSG_STUN_SEND, NULL); | 55 thread_->Send(RTC_FROM_HERE, request, MSG_STUN_SEND, NULL); |
| 55 } | 56 } |
| 56 } | 57 } |
| 57 | 58 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 69 for (const auto kv : requests_) { | 70 for (const auto kv : requests_) { |
| 70 StunRequest* request = kv.second; | 71 StunRequest* request = kv.second; |
| 71 if (msg_type == kAllRequests || msg_type == request->type()) { | 72 if (msg_type == kAllRequests || msg_type == request->type()) { |
| 72 return true; | 73 return true; |
| 73 } | 74 } |
| 74 } | 75 } |
| 75 return false; | 76 return false; |
| 76 } | 77 } |
| 77 | 78 |
| 78 void StunRequestManager::Remove(StunRequest* request) { | 79 void StunRequestManager::Remove(StunRequest* request) { |
| 79 ASSERT(request->manager() == this); | 80 RTC_DCHECK(request->manager() == this); |
| 80 RequestMap::iterator iter = requests_.find(request->id()); | 81 RequestMap::iterator iter = requests_.find(request->id()); |
| 81 if (iter != requests_.end()) { | 82 if (iter != requests_.end()) { |
| 82 ASSERT(iter->second == request); | 83 RTC_DCHECK(iter->second == request); |
| 83 requests_.erase(iter); | 84 requests_.erase(iter); |
| 84 thread_->Clear(request); | 85 thread_->Clear(request); |
| 85 } | 86 } |
| 86 } | 87 } |
| 87 | 88 |
| 88 void StunRequestManager::Clear() { | 89 void StunRequestManager::Clear() { |
| 89 std::vector<StunRequest*> requests; | 90 std::vector<StunRequest*> requests; |
| 90 for (RequestMap::iterator i = requests_.begin(); i != requests_.end(); ++i) | 91 for (RequestMap::iterator i = requests_.begin(); i != requests_.end(); ++i) |
| 91 requests.push_back(i->second); | 92 requests.push_back(i->second); |
| 92 | 93 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 } | 159 } |
| 159 | 160 |
| 160 StunRequest::StunRequest(StunMessage* request) | 161 StunRequest::StunRequest(StunMessage* request) |
| 161 : count_(0), timeout_(false), manager_(0), | 162 : count_(0), timeout_(false), manager_(0), |
| 162 msg_(request), tstamp_(0) { | 163 msg_(request), tstamp_(0) { |
| 163 msg_->SetTransactionID( | 164 msg_->SetTransactionID( |
| 164 rtc::CreateRandomString(kStunTransactionIdLength)); | 165 rtc::CreateRandomString(kStunTransactionIdLength)); |
| 165 } | 166 } |
| 166 | 167 |
| 167 StunRequest::~StunRequest() { | 168 StunRequest::~StunRequest() { |
| 168 ASSERT(manager_ != NULL); | 169 RTC_DCHECK(manager_ != NULL); |
| 169 if (manager_) { | 170 if (manager_) { |
| 170 manager_->Remove(this); | 171 manager_->Remove(this); |
| 171 manager_->thread_->Clear(this); | 172 manager_->thread_->Clear(this); |
| 172 } | 173 } |
| 173 delete msg_; | 174 delete msg_; |
| 174 } | 175 } |
| 175 | 176 |
| 176 void StunRequest::Construct() { | 177 void StunRequest::Construct() { |
| 177 if (msg_->type() == 0) { | 178 if (msg_->type() == 0) { |
| 178 if (!origin_.empty()) { | 179 if (!origin_.empty()) { |
| 179 msg_->AddAttribute(new StunByteStringAttribute(STUN_ATTR_ORIGIN, | 180 msg_->AddAttribute(new StunByteStringAttribute(STUN_ATTR_ORIGIN, |
| 180 origin_)); | 181 origin_)); |
| 181 } | 182 } |
| 182 Prepare(msg_); | 183 Prepare(msg_); |
| 183 ASSERT(msg_->type() != 0); | 184 RTC_DCHECK(msg_->type() != 0); |
| 184 } | 185 } |
| 185 } | 186 } |
| 186 | 187 |
| 187 int StunRequest::type() { | 188 int StunRequest::type() { |
| 188 ASSERT(msg_ != NULL); | 189 RTC_DCHECK(msg_ != NULL); |
| 189 return msg_->type(); | 190 return msg_->type(); |
| 190 } | 191 } |
| 191 | 192 |
| 192 const StunMessage* StunRequest::msg() const { | 193 const StunMessage* StunRequest::msg() const { |
| 193 return msg_; | 194 return msg_; |
| 194 } | 195 } |
| 195 | 196 |
| 196 int StunRequest::Elapsed() const { | 197 int StunRequest::Elapsed() const { |
| 197 return static_cast<int>(rtc::TimeMillis() - tstamp_); | 198 return static_cast<int>(rtc::TimeMillis() - tstamp_); |
| 198 } | 199 } |
| 199 | 200 |
| 200 | 201 |
| 201 void StunRequest::set_manager(StunRequestManager* manager) { | 202 void StunRequest::set_manager(StunRequestManager* manager) { |
| 202 ASSERT(!manager_); | 203 RTC_DCHECK(!manager_); |
| 203 manager_ = manager; | 204 manager_ = manager; |
| 204 } | 205 } |
| 205 | 206 |
| 206 void StunRequest::OnMessage(rtc::Message* pmsg) { | 207 void StunRequest::OnMessage(rtc::Message* pmsg) { |
| 207 ASSERT(manager_ != NULL); | 208 RTC_DCHECK(manager_ != NULL); |
| 208 ASSERT(pmsg->message_id == MSG_STUN_SEND); | 209 RTC_DCHECK(pmsg->message_id == MSG_STUN_SEND); |
| 209 | 210 |
| 210 if (timeout_) { | 211 if (timeout_) { |
| 211 OnTimeout(); | 212 OnTimeout(); |
| 212 delete this; | 213 delete this; |
| 213 return; | 214 return; |
| 214 } | 215 } |
| 215 | 216 |
| 216 tstamp_ = rtc::TimeMillis(); | 217 tstamp_ = rtc::TimeMillis(); |
| 217 | 218 |
| 218 rtc::ByteBufferWriter buf; | 219 rtc::ByteBufferWriter buf; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 234 } | 235 } |
| 235 | 236 |
| 236 int StunRequest::resend_delay() { | 237 int StunRequest::resend_delay() { |
| 237 if (count_ == 0) { | 238 if (count_ == 0) { |
| 238 return 0; | 239 return 0; |
| 239 } | 240 } |
| 240 return DELAY_UNIT * std::min(1 << (count_-1), DELAY_MAX_FACTOR); | 241 return DELAY_UNIT * std::min(1 << (count_-1), DELAY_MAX_FACTOR); |
| 241 } | 242 } |
| 242 | 243 |
| 243 } // namespace cricket | 244 } // namespace cricket |
| OLD | NEW |