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

Side by Side Diff: webrtc/p2p/base/turnport.cc

Issue 1458013004: Make it extra safe when deleting a turn entry. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 5 years, 1 month 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 | « webrtc/p2p/base/turnport.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2012 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
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 900
901 static bool MatchesChannelId(TurnEntry* e, int id) { 901 static bool MatchesChannelId(TurnEntry* e, int id) {
902 return e->channel_id() == id; 902 return e->channel_id() == id;
903 } 903 }
904 TurnEntry* TurnPort::FindEntry(int channel_id) const { 904 TurnEntry* TurnPort::FindEntry(int channel_id) const {
905 EntryList::const_iterator it = std::find_if(entries_.begin(), entries_.end(), 905 EntryList::const_iterator it = std::find_if(entries_.begin(), entries_.end(),
906 std::bind2nd(std::ptr_fun(MatchesChannelId), channel_id)); 906 std::bind2nd(std::ptr_fun(MatchesChannelId), channel_id));
907 return (it != entries_.end()) ? *it : NULL; 907 return (it != entries_.end()) ? *it : NULL;
908 } 908 }
909 909
910 bool TurnPort::EntryExists(TurnEntry* e) {
911 auto it = std::find(entries_.begin(), entries_.end(), e);
912 return it != entries_.end();
913 }
914
910 void TurnPort::CreateOrRefreshEntry(const rtc::SocketAddress& addr) { 915 void TurnPort::CreateOrRefreshEntry(const rtc::SocketAddress& addr) {
911 TurnEntry* entry = FindEntry(addr); 916 TurnEntry* entry = FindEntry(addr);
912 if (entry == nullptr) { 917 if (entry == nullptr) {
913 entry = new TurnEntry(this, next_channel_number_++, addr); 918 entry = new TurnEntry(this, next_channel_number_++, addr);
914 entries_.push_back(entry); 919 entries_.push_back(entry);
915 } else { 920 } else {
916 // The channel binding request for the entry will be refreshed automatically 921 // The channel binding request for the entry will be refreshed automatically
917 // until the entry is destroyed. 922 // until the entry is destroyed.
918 CancelEntryDestruction(entry); 923 CancelEntryDestruction(entry);
919 } 924 }
920 } 925 }
921 926
922 void TurnPort::DestroyEntry(TurnEntry* entry) { 927 void TurnPort::DestroyEntry(TurnEntry* entry) {
923 ASSERT(entry != NULL); 928 ASSERT(entry != NULL);
924 entry->SignalDestroyed(entry); 929 entry->SignalDestroyed(entry);
925 entries_.remove(entry); 930 entries_.remove(entry);
926 delete entry; 931 delete entry;
927 } 932 }
928 933
929 void TurnPort::DestroyEntryIfNotCancelled(TurnEntry* entry, 934 void TurnPort::DestroyEntryIfNotCancelled(TurnEntry* entry,
930 uint32_t timestamp) { 935 uint32_t timestamp) {
936 if (!EntryExists(entry)) {
937 return;
938 }
931 bool cancelled = timestamp != entry->destruction_timestamp(); 939 bool cancelled = timestamp != entry->destruction_timestamp();
932 if (!cancelled) { 940 if (!cancelled) {
933 DestroyEntry(entry); 941 DestroyEntry(entry);
934 } 942 }
935 } 943 }
936 944
937 void TurnPort::OnConnectionDestroyed(Connection* conn) { 945 void TurnPort::OnConnectionDestroyed(Connection* conn) {
938 // Schedule an event to destroy TurnEntry for the connection, which is 946 // Schedule an event to destroy TurnEntry for the connection, which is
939 // already destroyed. 947 // already destroyed.
940 const rtc::SocketAddress& remote_address = conn->remote_candidate().address(); 948 const rtc::SocketAddress& remote_address = conn->remote_candidate().address();
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 // bind request as per http://tools.ietf.org/html/rfc5766#section-11.3 1421 // bind request as per http://tools.ietf.org/html/rfc5766#section-11.3
1414 if (code == STUN_ERROR_STALE_NONCE) { 1422 if (code == STUN_ERROR_STALE_NONCE) {
1415 if (port_->UpdateNonce(response)) { 1423 if (port_->UpdateNonce(response)) {
1416 // Send channel bind request with fresh nonce. 1424 // Send channel bind request with fresh nonce.
1417 SendChannelBindRequest(0); 1425 SendChannelBindRequest(0);
1418 } 1426 }
1419 } 1427 }
1420 } 1428 }
1421 1429
1422 } // namespace cricket 1430 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/p2p/base/turnport.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698