| Index: webrtc/api/webrtcsdp.cc
|
| diff --git a/webrtc/api/webrtcsdp.cc b/webrtc/api/webrtcsdp.cc
|
| index 4a296d9ce2e28a274377e3ca79e727f45c5b6e91..93d4acc6c3fad5fd2e2612ff22af02de2554baeb 100644
|
| --- a/webrtc/api/webrtcsdp.cc
|
| +++ b/webrtc/api/webrtcsdp.cc
|
| @@ -127,6 +127,7 @@ static const char kAttributeCandidateRport[] = "rport";
|
| static const char kAttributeCandidateUfrag[] = "ufrag";
|
| static const char kAttributeCandidatePwd[] = "pwd";
|
| static const char kAttributeCandidateGeneration[] = "generation";
|
| +static const char kAttributeCandidateNetworkId[] = "network-id";
|
| static const char kAttributeCandidateNetworkCost[] = "network-cost";
|
| static const char kAttributeFingerprint[] = "fingerprint";
|
| static const char kAttributeSetup[] = "setup";
|
| @@ -1092,7 +1093,8 @@ bool ParseCandidate(const std::string& message, Candidate* candidate,
|
| std::string username;
|
| std::string password;
|
| uint32_t generation = 0;
|
| - uint32_t network_cost = 0;
|
| + uint16_t network_id = 0;
|
| + uint16_t network_cost = 0;
|
| for (size_t i = current_position; i + 1 < fields.size(); ++i) {
|
| // RFC 5245
|
| // *(SP extension-att-name SP extension-att-value)
|
| @@ -1104,10 +1106,15 @@ bool ParseCandidate(const std::string& message, Candidate* candidate,
|
| username = fields[++i];
|
| } else if (fields[i] == kAttributeCandidatePwd) {
|
| password = fields[++i];
|
| + } else if (fields[i] == kAttributeCandidateNetworkId) {
|
| + if (!GetValueFromString(first_line, fields[++i], &network_id, error)) {
|
| + return false;
|
| + }
|
| } else if (fields[i] == kAttributeCandidateNetworkCost) {
|
| if (!GetValueFromString(first_line, fields[++i], &network_cost, error)) {
|
| return false;
|
| }
|
| + network_cost = std::min(network_cost, cricket::kMaxNetworkCost);
|
| } else {
|
| // Skip the unknown extension.
|
| ++i;
|
| @@ -1116,10 +1123,9 @@ bool ParseCandidate(const std::string& message, Candidate* candidate,
|
|
|
| *candidate = Candidate(component_id, cricket::ProtoToString(protocol),
|
| address, priority, username, password, candidate_type,
|
| - generation, foundation);
|
| + generation, foundation, network_id, network_cost);
|
| candidate->set_related_address(related_address);
|
| candidate->set_tcptype(tcptype);
|
| - candidate->set_network_cost(std::min(network_cost, cricket::kMaxNetworkCost));
|
| return true;
|
| }
|
|
|
| @@ -1814,6 +1820,9 @@ void BuildCandidate(const std::vector<Candidate>& candidates,
|
| if (include_ufrag && !it->username().empty()) {
|
| os << " " << kAttributeCandidateUfrag << " " << it->username();
|
| }
|
| + if (it->network_id() > 0) {
|
| + os << " " << kAttributeCandidateNetworkId << " " << it->network_id();
|
| + }
|
| if (it->network_cost() > 0) {
|
| os << " " << kAttributeCandidateNetworkCost << " " << it->network_cost();
|
| }
|
|
|