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

Side by Side Diff: p2p/client/basicportallocator.cc

Issue 3018483002: Remove BasicPortAllocator::EnableProtocol. (Closed)
Patch Set: Rebase onto master Created 3 years, 3 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 | « p2p/client/basicportallocator.h ('k') | p2p/client/basicportallocator_unittest.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 /* 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
(...skipping 25 matching lines...) Expand all
36 MSG_CONFIG_READY, 36 MSG_CONFIG_READY,
37 MSG_ALLOCATE, 37 MSG_ALLOCATE,
38 MSG_ALLOCATION_PHASE, 38 MSG_ALLOCATION_PHASE,
39 MSG_SEQUENCEOBJECTS_CREATED, 39 MSG_SEQUENCEOBJECTS_CREATED,
40 MSG_CONFIG_STOP, 40 MSG_CONFIG_STOP,
41 }; 41 };
42 42
43 const int PHASE_UDP = 0; 43 const int PHASE_UDP = 0;
44 const int PHASE_RELAY = 1; 44 const int PHASE_RELAY = 1;
45 const int PHASE_TCP = 2; 45 const int PHASE_TCP = 2;
46 const int PHASE_SSLTCP = 3;
47 46
48 const int kNumPhases = 4; 47 const int kNumPhases = 3;
49 48
50 // Gets protocol priority: UDP > TCP > SSLTCP == TLS. 49 // Gets protocol priority: UDP > TCP > SSLTCP == TLS.
51 int GetProtocolPriority(cricket::ProtocolType protocol) { 50 int GetProtocolPriority(cricket::ProtocolType protocol) {
52 switch (protocol) { 51 switch (protocol) {
53 case cricket::PROTO_UDP: 52 case cricket::PROTO_UDP:
54 return 2; 53 return 2;
55 case cricket::PROTO_TCP: 54 case cricket::PROTO_TCP:
56 return 1; 55 return 1;
57 case cricket::PROTO_SSLTCP: 56 case cricket::PROTO_SSLTCP:
58 case cricket::PROTO_TLS: 57 case cricket::PROTO_TLS:
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 400 }
402 401
403 void BasicPortAllocatorSession::GetCandidatesFromPort( 402 void BasicPortAllocatorSession::GetCandidatesFromPort(
404 const PortData& data, 403 const PortData& data,
405 std::vector<Candidate>* candidates) const { 404 std::vector<Candidate>* candidates) const {
406 RTC_CHECK(candidates != nullptr); 405 RTC_CHECK(candidates != nullptr);
407 for (const Candidate& candidate : data.port()->Candidates()) { 406 for (const Candidate& candidate : data.port()->Candidates()) {
408 if (!CheckCandidateFilter(candidate)) { 407 if (!CheckCandidateFilter(candidate)) {
409 continue; 408 continue;
410 } 409 }
411 ProtocolType pvalue;
412 if (!StringToProto(candidate.protocol().c_str(), &pvalue) ||
413 !data.sequence()->ProtocolEnabled(pvalue)) {
414 continue;
415 }
416 candidates->push_back(SanitizeRelatedAddress(candidate)); 410 candidates->push_back(SanitizeRelatedAddress(candidate));
417 } 411 }
418 } 412 }
419 413
420 Candidate BasicPortAllocatorSession::SanitizeRelatedAddress( 414 Candidate BasicPortAllocatorSession::SanitizeRelatedAddress(
421 const Candidate& c) const { 415 const Candidate& c) const {
422 Candidate copy = c; 416 Candidate copy = c;
423 // If adapter enumeration is disabled or host candidates are disabled, 417 // If adapter enumeration is disabled or host candidates are disabled,
424 // clear the raddr of STUN candidates to avoid local address leakage. 418 // clear the raddr of STUN candidates to avoid local address leakage.
425 bool filter_stun_related_address = 419 bool filter_stun_related_address =
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 pruned = PruneTurnPorts(port); 804 pruned = PruneTurnPorts(port);
811 } 805 }
812 // If the current port is not pruned yet, SignalPortReady. 806 // If the current port is not pruned yet, SignalPortReady.
813 if (!data->pruned()) { 807 if (!data->pruned()) {
814 LOG_J(LS_INFO, port) << "Port ready."; 808 LOG_J(LS_INFO, port) << "Port ready.";
815 SignalPortReady(this, port); 809 SignalPortReady(this, port);
816 port->KeepAliveUntilPruned(); 810 port->KeepAliveUntilPruned();
817 } 811 }
818 } 812 }
819 813
820 ProtocolType pvalue; 814 if (data->ready() && CheckCandidateFilter(c)) {
821 bool candidate_protocol_enabled =
822 StringToProto(c.protocol().c_str(), &pvalue) &&
823 data->sequence()->ProtocolEnabled(pvalue);
824
825 if (data->ready() && CheckCandidateFilter(c) && candidate_protocol_enabled) {
826 std::vector<Candidate> candidates; 815 std::vector<Candidate> candidates;
827 candidates.push_back(SanitizeRelatedAddress(c)); 816 candidates.push_back(SanitizeRelatedAddress(c));
828 SignalCandidatesReady(this, candidates); 817 SignalCandidatesReady(this, candidates);
829 } else if (!candidate_protocol_enabled) {
830 LOG(LS_INFO)
831 << "Not yet signaling candidate because protocol is not yet enabled.";
832 } else { 818 } else {
833 LOG(LS_INFO) << "Discarding candidate because it doesn't match filter."; 819 LOG(LS_INFO) << "Discarding candidate because it doesn't match filter.";
834 } 820 }
835 821
836 // If we have pruned any port, maybe need to signal port allocation done. 822 // If we have pruned any port, maybe need to signal port allocation done.
837 if (pruned) { 823 if (pruned) {
838 MaybeSignalCandidatesAllocationDone(); 824 MaybeSignalCandidatesAllocationDone();
839 } 825 }
840 } 826 }
841 827
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 return; 904 return;
919 } 905 }
920 906
921 // SignalAddressError is currently sent from StunPort/TurnPort. 907 // SignalAddressError is currently sent from StunPort/TurnPort.
922 // But this signal itself is generic. 908 // But this signal itself is generic.
923 data->set_error(); 909 data->set_error();
924 // Send candidate allocation complete signal if this was the last port. 910 // Send candidate allocation complete signal if this was the last port.
925 MaybeSignalCandidatesAllocationDone(); 911 MaybeSignalCandidatesAllocationDone();
926 } 912 }
927 913
928 void BasicPortAllocatorSession::OnProtocolEnabled(AllocationSequence* seq,
929 ProtocolType proto) {
930 std::vector<Candidate> candidates;
931 for (std::vector<PortData>::iterator it = ports_.begin();
932 it != ports_.end(); ++it) {
933 if (it->sequence() != seq)
934 continue;
935
936 const std::vector<Candidate>& potentials = it->port()->Candidates();
937 for (size_t i = 0; i < potentials.size(); ++i) {
938 if (!CheckCandidateFilter(potentials[i])) {
939 continue;
940 }
941 ProtocolType pvalue;
942 bool candidate_protocol_enabled =
943 StringToProto(potentials[i].protocol().c_str(), &pvalue) &&
944 pvalue == proto;
945 if (candidate_protocol_enabled) {
946 LOG(LS_INFO) << "Signaling candidate because protocol was enabled: "
947 << potentials[i].ToSensitiveString();
948 candidates.push_back(potentials[i]);
949 }
950 }
951 }
952
953 if (!candidates.empty()) {
954 SignalCandidatesReady(this, candidates);
955 }
956 }
957
958 bool BasicPortAllocatorSession::CheckCandidateFilter(const Candidate& c) const { 914 bool BasicPortAllocatorSession::CheckCandidateFilter(const Candidate& c) const {
959 uint32_t filter = candidate_filter_; 915 uint32_t filter = candidate_filter_;
960 916
961 // When binding to any address, before sending packets out, the getsockname 917 // When binding to any address, before sending packets out, the getsockname
962 // returns all 0s, but after sending packets, it'll be the NIC used to 918 // returns all 0s, but after sending packets, it'll be the NIC used to
963 // send. All 0s is not a valid ICE candidate address and should be filtered 919 // send. All 0s is not a valid ICE candidate address and should be filtered
964 // out. 920 // out.
965 if (c.address().IsAnyIP()) { 921 if (c.address().IsAnyIP()) {
966 return false; 922 return false;
967 } 923 }
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 if (state_ == kRunning) { 1138 if (state_ == kRunning) {
1183 state_ = kStopped; 1139 state_ = kStopped;
1184 session_->network_thread()->Clear(this, MSG_ALLOCATION_PHASE); 1140 session_->network_thread()->Clear(this, MSG_ALLOCATION_PHASE);
1185 } 1141 }
1186 } 1142 }
1187 1143
1188 void AllocationSequence::OnMessage(rtc::Message* msg) { 1144 void AllocationSequence::OnMessage(rtc::Message* msg) {
1189 RTC_DCHECK(rtc::Thread::Current() == session_->network_thread()); 1145 RTC_DCHECK(rtc::Thread::Current() == session_->network_thread());
1190 RTC_DCHECK(msg->message_id == MSG_ALLOCATION_PHASE); 1146 RTC_DCHECK(msg->message_id == MSG_ALLOCATION_PHASE);
1191 1147
1192 const char* const PHASE_NAMES[kNumPhases] = { 1148 const char* const PHASE_NAMES[kNumPhases] = {"Udp", "Relay", "Tcp"};
1193 "Udp", "Relay", "Tcp", "SslTcp"
1194 };
1195 1149
1196 // Perform all of the phases in the current step. 1150 // Perform all of the phases in the current step.
1197 LOG_J(LS_INFO, network_) << "Allocation Phase=" 1151 LOG_J(LS_INFO, network_) << "Allocation Phase="
1198 << PHASE_NAMES[phase_]; 1152 << PHASE_NAMES[phase_];
1199 1153
1200 switch (phase_) { 1154 switch (phase_) {
1201 case PHASE_UDP: 1155 case PHASE_UDP:
1202 CreateUDPPorts(); 1156 CreateUDPPorts();
1203 CreateStunPorts(); 1157 CreateStunPorts();
1204 EnableProtocol(PROTO_UDP);
1205 break; 1158 break;
1206 1159
1207 case PHASE_RELAY: 1160 case PHASE_RELAY:
1208 CreateRelayPorts(); 1161 CreateRelayPorts();
1209 break; 1162 break;
1210 1163
1211 case PHASE_TCP: 1164 case PHASE_TCP:
1212 CreateTCPPorts(); 1165 CreateTCPPorts();
1213 EnableProtocol(PROTO_TCP);
1214 break;
1215
1216 case PHASE_SSLTCP:
1217 state_ = kCompleted; 1166 state_ = kCompleted;
1218 EnableProtocol(PROTO_SSLTCP);
1219 break; 1167 break;
1220 1168
1221 default: 1169 default:
1222 RTC_NOTREACHED(); 1170 RTC_NOTREACHED();
1223 } 1171 }
1224 1172
1225 if (state() == kRunning) { 1173 if (state() == kRunning) {
1226 ++phase_; 1174 ++phase_;
1227 session_->network_thread()->PostDelayed(RTC_FROM_HERE, 1175 session_->network_thread()->PostDelayed(RTC_FROM_HERE,
1228 session_->allocator()->step_delay(), 1176 session_->allocator()->step_delay(),
1229 this, MSG_ALLOCATION_PHASE); 1177 this, MSG_ALLOCATION_PHASE);
1230 } else { 1178 } else {
1231 // If all phases in AllocationSequence are completed, no allocation 1179 // If all phases in AllocationSequence are completed, no allocation
1232 // steps needed further. Canceling pending signal. 1180 // steps needed further. Canceling pending signal.
1233 session_->network_thread()->Clear(this, MSG_ALLOCATION_PHASE); 1181 session_->network_thread()->Clear(this, MSG_ALLOCATION_PHASE);
1234 SignalPortAllocationComplete(this); 1182 SignalPortAllocationComplete(this);
1235 } 1183 }
1236 } 1184 }
1237 1185
1238 void AllocationSequence::EnableProtocol(ProtocolType proto) {
1239 if (!ProtocolEnabled(proto)) {
1240 protocols_.push_back(proto);
1241 session_->OnProtocolEnabled(this, proto);
1242 }
1243 }
1244
1245 bool AllocationSequence::ProtocolEnabled(ProtocolType proto) const {
1246 for (ProtocolList::const_iterator it = protocols_.begin();
1247 it != protocols_.end(); ++it) {
1248 if (*it == proto)
1249 return true;
1250 }
1251 return false;
1252 }
1253
1254 void AllocationSequence::CreateUDPPorts() { 1186 void AllocationSequence::CreateUDPPorts() {
1255 if (IsFlagSet(PORTALLOCATOR_DISABLE_UDP)) { 1187 if (IsFlagSet(PORTALLOCATOR_DISABLE_UDP)) {
1256 LOG(LS_VERBOSE) << "AllocationSequence: UDP ports disabled, skipping."; 1188 LOG(LS_VERBOSE) << "AllocationSequence: UDP ports disabled, skipping.";
1257 return; 1189 return;
1258 } 1190 }
1259 1191
1260 // TODO(mallinath) - Remove UDPPort creating socket after shared socket 1192 // TODO(mallinath) - Remove UDPPort creating socket after shared socket
1261 // is enabled completely. 1193 // is enabled completely.
1262 UDPPort* port = NULL; 1194 UDPPort* port = NULL;
1263 bool emit_local_candidate_for_anyaddress = 1195 bool emit_local_candidate_for_anyaddress =
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 ServerAddresses servers; 1504 ServerAddresses servers;
1573 for (size_t i = 0; i < relays.size(); ++i) { 1505 for (size_t i = 0; i < relays.size(); ++i) {
1574 if (relays[i].type == turn_type && SupportsProtocol(relays[i], type)) { 1506 if (relays[i].type == turn_type && SupportsProtocol(relays[i], type)) {
1575 servers.insert(relays[i].ports.front().address); 1507 servers.insert(relays[i].ports.front().address);
1576 } 1508 }
1577 } 1509 }
1578 return servers; 1510 return servers;
1579 } 1511 }
1580 1512
1581 } // namespace cricket 1513 } // namespace cricket
OLDNEW
« no previous file with comments | « p2p/client/basicportallocator.h ('k') | p2p/client/basicportallocator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698