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 |
(...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
984 bool all_connections_timedout = true; | 984 bool all_connections_timedout = true; |
985 for (size_t i = 0; i < connections_.size(); ++i) { | 985 for (size_t i = 0; i < connections_.size(); ++i) { |
986 if (connections_[i]->write_state() != Connection::STATE_WRITE_TIMEOUT) { | 986 if (connections_[i]->write_state() != Connection::STATE_WRITE_TIMEOUT) { |
987 all_connections_timedout = false; | 987 all_connections_timedout = false; |
988 break; | 988 break; |
989 } | 989 } |
990 } | 990 } |
991 | 991 |
992 // Now update the writable state of the channel with the information we have | 992 // Now update the writable state of the channel with the information we have |
993 // so far. | 993 // so far. |
994 if (best_connection_ && best_connection_->writable()) { | 994 if (all_connections_timedout) { |
995 HandleWritable(); | |
996 } else if (all_connections_timedout) { | |
997 HandleAllTimedOut(); | 995 HandleAllTimedOut(); |
998 } else { | |
999 HandleNotWritable(); | |
1000 } | 996 } |
1001 | 997 |
1002 // Update the state of this channel. This method is called whenever the | 998 // Update the state of this channel. This method is called whenever the |
1003 // state of any connection changes, so this is a good place to do this. | 999 // state of any connection changes, so this is a good place to do this. |
1004 UpdateChannelState(); | 1000 UpdateChannelState(); |
1005 } | 1001 } |
1006 | 1002 |
1007 Connection* P2PTransportChannel::best_nominated_connection() const { | 1003 Connection* P2PTransportChannel::best_nominated_connection() const { |
1008 return (best_connection_ && best_connection_->nominated()) ? best_connection_ | 1004 return (best_connection_ && best_connection_->nominated()) ? best_connection_ |
1009 : nullptr; | 1005 : nullptr; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1055 } | 1051 } |
1056 LOG_J(LS_INFO, this) << "New best connection: " | 1052 LOG_J(LS_INFO, this) << "New best connection: " |
1057 << best_connection_->ToString(); | 1053 << best_connection_->ToString(); |
1058 SignalRouteChange(this, best_connection_->remote_candidate()); | 1054 SignalRouteChange(this, best_connection_->remote_candidate()); |
1059 } else { | 1055 } else { |
1060 LOG_J(LS_INFO, this) << "No best connection"; | 1056 LOG_J(LS_INFO, this) << "No best connection"; |
1061 } | 1057 } |
1062 } | 1058 } |
1063 | 1059 |
1064 void P2PTransportChannel::UpdateChannelState() { | 1060 void P2PTransportChannel::UpdateChannelState() { |
1065 // The Handle* functions already set the writable state. We'll just double- | |
1066 // check it here. | |
1067 bool writable = best_connection_ && best_connection_->writable(); | 1061 bool writable = best_connection_ && best_connection_->writable(); |
1068 ASSERT(writable == this->writable()); | 1062 set_writable(writable); |
1069 if (writable != this->writable()) | |
1070 LOG(LS_ERROR) << "UpdateChannelState: writable state mismatch"; | |
1071 | 1063 |
1072 bool receiving = false; | 1064 bool receiving = false; |
1073 for (const Connection* connection : connections_) { | 1065 for (const Connection* connection : connections_) { |
1074 if (connection->receiving()) { | 1066 if (connection->receiving()) { |
1075 receiving = true; | 1067 receiving = true; |
1076 break; | 1068 break; |
1077 } | 1069 } |
1078 } | 1070 } |
1079 set_receiving(receiving); | 1071 set_receiving(receiving); |
1080 } | 1072 } |
(...skipping 10 matching lines...) Expand all Loading... |
1091 // If gathering continually, keep the last session running so that it | 1083 // If gathering continually, keep the last session running so that it |
1092 // will gather candidates if the networks change. | 1084 // will gather candidates if the networks change. |
1093 if (gather_continually_ && session == allocator_sessions_.back()) { | 1085 if (gather_continually_ && session == allocator_sessions_.back()) { |
1094 session->ClearGettingPorts(); | 1086 session->ClearGettingPorts(); |
1095 break; | 1087 break; |
1096 } | 1088 } |
1097 session->StopGettingPorts(); | 1089 session->StopGettingPorts(); |
1098 } | 1090 } |
1099 } | 1091 } |
1100 | 1092 |
1101 // Go into the writable state and notify upper layer if it was not before. | |
1102 void P2PTransportChannel::HandleWritable() { | |
1103 ASSERT(worker_thread_ == rtc::Thread::Current()); | |
1104 if (!writable()) { | |
1105 set_writable(true); | |
1106 } | |
1107 } | |
1108 | |
1109 // Notify upper layer about channel not writable state, if it was before. | |
1110 void P2PTransportChannel::HandleNotWritable() { | |
1111 ASSERT(worker_thread_ == rtc::Thread::Current()); | |
1112 if (writable()) { | |
1113 set_writable(false); | |
1114 } | |
1115 } | |
1116 | |
1117 // If all connections timed out, delete them all. | 1093 // If all connections timed out, delete them all. |
1118 void P2PTransportChannel::HandleAllTimedOut() { | 1094 void P2PTransportChannel::HandleAllTimedOut() { |
1119 for (Connection* connection : connections_) { | 1095 for (Connection* connection : connections_) { |
1120 connection->Destroy(); | 1096 connection->Destroy(); |
1121 } | 1097 } |
1122 } | 1098 } |
1123 | 1099 |
1124 bool P2PTransportChannel::weak() const { | 1100 bool P2PTransportChannel::weak() const { |
1125 return !best_connection_ || best_connection_->weak(); | 1101 return !best_connection_ || best_connection_->weak(); |
1126 } | 1102 } |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1385 SignalSentPacket(this, sent_packet); | 1361 SignalSentPacket(this, sent_packet); |
1386 } | 1362 } |
1387 | 1363 |
1388 void P2PTransportChannel::OnReadyToSend(Connection* connection) { | 1364 void P2PTransportChannel::OnReadyToSend(Connection* connection) { |
1389 if (connection == best_connection_ && writable()) { | 1365 if (connection == best_connection_ && writable()) { |
1390 SignalReadyToSend(this); | 1366 SignalReadyToSend(this); |
1391 } | 1367 } |
1392 } | 1368 } |
1393 | 1369 |
1394 } // namespace cricket | 1370 } // namespace cricket |
OLD | NEW |