| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2011 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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 static const char kSSrcAttributeLabel[] = "label"; | 120 static const char kSSrcAttributeLabel[] = "label"; |
| 121 static const char kAttributeSsrcGroup[] = "ssrc-group"; | 121 static const char kAttributeSsrcGroup[] = "ssrc-group"; |
| 122 static const char kAttributeCrypto[] = "crypto"; | 122 static const char kAttributeCrypto[] = "crypto"; |
| 123 static const char kAttributeCandidate[] = "candidate"; | 123 static const char kAttributeCandidate[] = "candidate"; |
| 124 static const char kAttributeCandidateTyp[] = "typ"; | 124 static const char kAttributeCandidateTyp[] = "typ"; |
| 125 static const char kAttributeCandidateRaddr[] = "raddr"; | 125 static const char kAttributeCandidateRaddr[] = "raddr"; |
| 126 static const char kAttributeCandidateRport[] = "rport"; | 126 static const char kAttributeCandidateRport[] = "rport"; |
| 127 static const char kAttributeCandidateUfrag[] = "ufrag"; | 127 static const char kAttributeCandidateUfrag[] = "ufrag"; |
| 128 static const char kAttributeCandidatePwd[] = "pwd"; | 128 static const char kAttributeCandidatePwd[] = "pwd"; |
| 129 static const char kAttributeCandidateGeneration[] = "generation"; | 129 static const char kAttributeCandidateGeneration[] = "generation"; |
| 130 static const char kAttributeCandidateNetworkId[] = "network-id"; |
| 130 static const char kAttributeCandidateNetworkCost[] = "network-cost"; | 131 static const char kAttributeCandidateNetworkCost[] = "network-cost"; |
| 131 static const char kAttributeFingerprint[] = "fingerprint"; | 132 static const char kAttributeFingerprint[] = "fingerprint"; |
| 132 static const char kAttributeSetup[] = "setup"; | 133 static const char kAttributeSetup[] = "setup"; |
| 133 static const char kAttributeFmtp[] = "fmtp"; | 134 static const char kAttributeFmtp[] = "fmtp"; |
| 134 static const char kAttributeRtpmap[] = "rtpmap"; | 135 static const char kAttributeRtpmap[] = "rtpmap"; |
| 135 static const char kAttributeSctpmap[] = "sctpmap"; | 136 static const char kAttributeSctpmap[] = "sctpmap"; |
| 136 static const char kAttributeRtcp[] = "rtcp"; | 137 static const char kAttributeRtcp[] = "rtcp"; |
| 137 static const char kAttributeIceUfrag[] = "ice-ufrag"; | 138 static const char kAttributeIceUfrag[] = "ice-ufrag"; |
| 138 static const char kAttributeIcePwd[] = "ice-pwd"; | 139 static const char kAttributeIcePwd[] = "ice-pwd"; |
| 139 static const char kAttributeIceLite[] = "ice-lite"; | 140 static const char kAttributeIceLite[] = "ice-lite"; |
| (...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 } | 1086 } |
| 1086 } | 1087 } |
| 1087 | 1088 |
| 1088 // Extension | 1089 // Extension |
| 1089 // Though non-standard, we support the ICE ufrag and pwd being signaled on | 1090 // Though non-standard, we support the ICE ufrag and pwd being signaled on |
| 1090 // the candidate to avoid issues with confusing which generation a candidate | 1091 // the candidate to avoid issues with confusing which generation a candidate |
| 1091 // belongs to when trickling multiple generations at the same time. | 1092 // belongs to when trickling multiple generations at the same time. |
| 1092 std::string username; | 1093 std::string username; |
| 1093 std::string password; | 1094 std::string password; |
| 1094 uint32_t generation = 0; | 1095 uint32_t generation = 0; |
| 1095 uint32_t network_cost = 0; | 1096 uint16_t network_id = 0; |
| 1097 uint16_t network_cost = 0; |
| 1096 for (size_t i = current_position; i + 1 < fields.size(); ++i) { | 1098 for (size_t i = current_position; i + 1 < fields.size(); ++i) { |
| 1097 // RFC 5245 | 1099 // RFC 5245 |
| 1098 // *(SP extension-att-name SP extension-att-value) | 1100 // *(SP extension-att-name SP extension-att-value) |
| 1099 if (fields[i] == kAttributeCandidateGeneration) { | 1101 if (fields[i] == kAttributeCandidateGeneration) { |
| 1100 if (!GetValueFromString(first_line, fields[++i], &generation, error)) { | 1102 if (!GetValueFromString(first_line, fields[++i], &generation, error)) { |
| 1101 return false; | 1103 return false; |
| 1102 } | 1104 } |
| 1103 } else if (fields[i] == kAttributeCandidateUfrag) { | 1105 } else if (fields[i] == kAttributeCandidateUfrag) { |
| 1104 username = fields[++i]; | 1106 username = fields[++i]; |
| 1105 } else if (fields[i] == kAttributeCandidatePwd) { | 1107 } else if (fields[i] == kAttributeCandidatePwd) { |
| 1106 password = fields[++i]; | 1108 password = fields[++i]; |
| 1109 } else if (fields[i] == kAttributeCandidateNetworkId) { |
| 1110 if (!GetValueFromString(first_line, fields[++i], &network_id, error)) { |
| 1111 return false; |
| 1112 } |
| 1107 } else if (fields[i] == kAttributeCandidateNetworkCost) { | 1113 } else if (fields[i] == kAttributeCandidateNetworkCost) { |
| 1108 if (!GetValueFromString(first_line, fields[++i], &network_cost, error)) { | 1114 if (!GetValueFromString(first_line, fields[++i], &network_cost, error)) { |
| 1109 return false; | 1115 return false; |
| 1110 } | 1116 } |
| 1117 network_cost = std::min(network_cost, cricket::kMaxNetworkCost); |
| 1111 } else { | 1118 } else { |
| 1112 // Skip the unknown extension. | 1119 // Skip the unknown extension. |
| 1113 ++i; | 1120 ++i; |
| 1114 } | 1121 } |
| 1115 } | 1122 } |
| 1116 | 1123 |
| 1117 *candidate = Candidate(component_id, cricket::ProtoToString(protocol), | 1124 *candidate = Candidate(component_id, cricket::ProtoToString(protocol), |
| 1118 address, priority, username, password, candidate_type, | 1125 address, priority, username, password, candidate_type, |
| 1119 generation, foundation); | 1126 generation, foundation, network_id, network_cost); |
| 1120 candidate->set_related_address(related_address); | 1127 candidate->set_related_address(related_address); |
| 1121 candidate->set_tcptype(tcptype); | 1128 candidate->set_tcptype(tcptype); |
| 1122 candidate->set_network_cost(std::min(network_cost, cricket::kMaxNetworkCost)); | |
| 1123 return true; | 1129 return true; |
| 1124 } | 1130 } |
| 1125 | 1131 |
| 1126 bool ParseIceOptions(const std::string& line, | 1132 bool ParseIceOptions(const std::string& line, |
| 1127 std::vector<std::string>* transport_options, | 1133 std::vector<std::string>* transport_options, |
| 1128 SdpParseError* error) { | 1134 SdpParseError* error) { |
| 1129 std::string ice_options; | 1135 std::string ice_options; |
| 1130 if (!GetValue(line, kAttributeIceOption, &ice_options, error)) { | 1136 if (!GetValue(line, kAttributeIceOption, &ice_options, error)) { |
| 1131 return false; | 1137 return false; |
| 1132 } | 1138 } |
| (...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1807 | 1813 |
| 1808 if (it->protocol() == cricket::TCP_PROTOCOL_NAME) { | 1814 if (it->protocol() == cricket::TCP_PROTOCOL_NAME) { |
| 1809 os << kTcpCandidateType << " " << it->tcptype() << " "; | 1815 os << kTcpCandidateType << " " << it->tcptype() << " "; |
| 1810 } | 1816 } |
| 1811 | 1817 |
| 1812 // Extensions | 1818 // Extensions |
| 1813 os << kAttributeCandidateGeneration << " " << it->generation(); | 1819 os << kAttributeCandidateGeneration << " " << it->generation(); |
| 1814 if (include_ufrag && !it->username().empty()) { | 1820 if (include_ufrag && !it->username().empty()) { |
| 1815 os << " " << kAttributeCandidateUfrag << " " << it->username(); | 1821 os << " " << kAttributeCandidateUfrag << " " << it->username(); |
| 1816 } | 1822 } |
| 1823 if (it->network_id() > 0) { |
| 1824 os << " " << kAttributeCandidateNetworkId << " " << it->network_id(); |
| 1825 } |
| 1817 if (it->network_cost() > 0) { | 1826 if (it->network_cost() > 0) { |
| 1818 os << " " << kAttributeCandidateNetworkCost << " " << it->network_cost(); | 1827 os << " " << kAttributeCandidateNetworkCost << " " << it->network_cost(); |
| 1819 } | 1828 } |
| 1820 | 1829 |
| 1821 AddLine(os.str(), message); | 1830 AddLine(os.str(), message); |
| 1822 } | 1831 } |
| 1823 } | 1832 } |
| 1824 | 1833 |
| 1825 void BuildIceOptions(const std::vector<std::string>& transport_options, | 1834 void BuildIceOptions(const std::vector<std::string>& transport_options, |
| 1826 std::string* message) { | 1835 std::string* message) { |
| (...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3147 UpdateCodec<AudioContentDescription, cricket::AudioCodec>( | 3156 UpdateCodec<AudioContentDescription, cricket::AudioCodec>( |
| 3148 media_desc, payload_type, feedback_param); | 3157 media_desc, payload_type, feedback_param); |
| 3149 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { | 3158 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { |
| 3150 UpdateCodec<VideoContentDescription, cricket::VideoCodec>( | 3159 UpdateCodec<VideoContentDescription, cricket::VideoCodec>( |
| 3151 media_desc, payload_type, feedback_param); | 3160 media_desc, payload_type, feedback_param); |
| 3152 } | 3161 } |
| 3153 return true; | 3162 return true; |
| 3154 } | 3163 } |
| 3155 | 3164 |
| 3156 } // namespace webrtc | 3165 } // namespace webrtc |
| OLD | NEW |