Fix a case where empty candidate id is used
BUG=4161 R=juberti@webrtc.org Review URL: https://webrtc-codereview.appspot.com/35749004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@8071 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
6c3855258d
commit
61c1247224
@ -100,8 +100,8 @@ class JsepSessionDescriptionTest : public testing::Test {
|
||||
virtual void SetUp() {
|
||||
int port = 1234;
|
||||
rtc::SocketAddress address("127.0.0.1", port++);
|
||||
cricket::Candidate candidate("rtp", cricket::ICE_CANDIDATE_COMPONENT_RTP,
|
||||
"udp", address, 1, "", "", "local", 0, "1");
|
||||
cricket::Candidate candidate(cricket::ICE_CANDIDATE_COMPONENT_RTP, "udp",
|
||||
address, 1, "", "", "local", 0, "1");
|
||||
candidate_ = candidate;
|
||||
const std::string session_id =
|
||||
rtc::ToString(rtc::CreateRandomId64());
|
||||
|
@ -1040,8 +1040,7 @@ TEST_F(StatsCollectorTest, IceCandidateReport) {
|
||||
uint32 priority = 1000;
|
||||
|
||||
cricket::Candidate c;
|
||||
const std::string& local_id = rtc::CreateRandomString(8);
|
||||
c.set_id(local_id);
|
||||
ASSERT(c.id().length() > 0);
|
||||
c.set_type(cricket::LOCAL_PORT_TYPE);
|
||||
c.set_protocol(cricket::UDP_PROTOCOL_NAME);
|
||||
c.set_address(local_address);
|
||||
@ -1049,15 +1048,18 @@ TEST_F(StatsCollectorTest, IceCandidateReport) {
|
||||
c.set_network_type(network_type);
|
||||
std::string report_id = AddCandidateReport(
|
||||
&stats, c, StatsReport::kStatsReportTypeIceLocalCandidate);
|
||||
EXPECT_EQ("Cand-" + local_id, report_id);
|
||||
EXPECT_EQ("Cand-" + c.id(), report_id);
|
||||
|
||||
const std::string& remote_id = rtc::CreateRandomString(8);
|
||||
c.set_id(remote_id);
|
||||
c = cricket::Candidate();
|
||||
ASSERT(c.id().length() > 0);
|
||||
c.set_type(cricket::PRFLX_PORT_TYPE);
|
||||
c.set_protocol(cricket::UDP_PROTOCOL_NAME);
|
||||
c.set_address(remote_address);
|
||||
c.set_priority(priority);
|
||||
c.set_network_type(network_type);
|
||||
report_id = AddCandidateReport(
|
||||
&stats, c, StatsReport::kStatsReportTypeIceRemoteCandidate);
|
||||
EXPECT_EQ("Cand-" + remote_id, report_id);
|
||||
EXPECT_EQ("Cand-" + c.id(), report_id);
|
||||
|
||||
stats.GetStats(NULL, &reports);
|
||||
|
||||
|
@ -1090,8 +1090,7 @@ bool ParseCandidate(const std::string& message, Candidate* candidate,
|
||||
}
|
||||
}
|
||||
|
||||
const std::string id;
|
||||
*candidate = Candidate(id, component_id, cricket::ProtoToString(protocol),
|
||||
*candidate = Candidate(component_id, cricket::ProtoToString(protocol),
|
||||
address, priority, username, password, candidate_type,
|
||||
generation, foundation);
|
||||
candidate->set_related_address(related_address);
|
||||
|
@ -588,41 +588,41 @@ class WebRtcSdpTest : public testing::Test {
|
||||
// v4 host
|
||||
int port = 1234;
|
||||
rtc::SocketAddress address("192.168.1.5", port++);
|
||||
Candidate candidate1("", ICE_CANDIDATE_COMPONENT_RTP, "udp", address,
|
||||
Candidate candidate1(ICE_CANDIDATE_COMPONENT_RTP, "udp", address,
|
||||
kCandidatePriority, "", "", LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation1);
|
||||
address.SetPort(port++);
|
||||
Candidate candidate2("", ICE_CANDIDATE_COMPONENT_RTCP, "udp", address,
|
||||
Candidate candidate2(ICE_CANDIDATE_COMPONENT_RTCP, "udp", address,
|
||||
kCandidatePriority, "", "", LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation1);
|
||||
address.SetPort(port++);
|
||||
Candidate candidate3("", ICE_CANDIDATE_COMPONENT_RTCP, "udp", address,
|
||||
Candidate candidate3(ICE_CANDIDATE_COMPONENT_RTCP, "udp", address,
|
||||
kCandidatePriority, "", "", LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation1);
|
||||
address.SetPort(port++);
|
||||
Candidate candidate4("", ICE_CANDIDATE_COMPONENT_RTP, "udp", address,
|
||||
Candidate candidate4(ICE_CANDIDATE_COMPONENT_RTP, "udp", address,
|
||||
kCandidatePriority, "", "", LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation1);
|
||||
|
||||
// v6 host
|
||||
rtc::SocketAddress v6_address("::1", port++);
|
||||
cricket::Candidate candidate5("", cricket::ICE_CANDIDATE_COMPONENT_RTP,
|
||||
"udp", v6_address, kCandidatePriority, "", "",
|
||||
cricket::Candidate candidate5(cricket::ICE_CANDIDATE_COMPONENT_RTP, "udp",
|
||||
v6_address, kCandidatePriority, "", "",
|
||||
cricket::LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation2);
|
||||
v6_address.SetPort(port++);
|
||||
cricket::Candidate candidate6("", cricket::ICE_CANDIDATE_COMPONENT_RTCP,
|
||||
"udp", v6_address, kCandidatePriority, "", "",
|
||||
cricket::Candidate candidate6(cricket::ICE_CANDIDATE_COMPONENT_RTCP, "udp",
|
||||
v6_address, kCandidatePriority, "", "",
|
||||
cricket::LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation2);
|
||||
v6_address.SetPort(port++);
|
||||
cricket::Candidate candidate7("", cricket::ICE_CANDIDATE_COMPONENT_RTCP,
|
||||
"udp", v6_address, kCandidatePriority, "", "",
|
||||
cricket::Candidate candidate7(cricket::ICE_CANDIDATE_COMPONENT_RTCP, "udp",
|
||||
v6_address, kCandidatePriority, "", "",
|
||||
cricket::LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation2);
|
||||
v6_address.SetPort(port++);
|
||||
cricket::Candidate candidate8("", cricket::ICE_CANDIDATE_COMPONENT_RTP,
|
||||
"udp", v6_address, kCandidatePriority, "", "",
|
||||
cricket::Candidate candidate8(cricket::ICE_CANDIDATE_COMPONENT_RTP, "udp",
|
||||
v6_address, kCandidatePriority, "", "",
|
||||
cricket::LOCAL_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation2);
|
||||
|
||||
@ -630,31 +630,31 @@ class WebRtcSdpTest : public testing::Test {
|
||||
int port_stun = 2345;
|
||||
rtc::SocketAddress address_stun("74.125.127.126", port_stun++);
|
||||
rtc::SocketAddress rel_address_stun("192.168.1.5", port_stun++);
|
||||
cricket::Candidate candidate9("", cricket::ICE_CANDIDATE_COMPONENT_RTP,
|
||||
"udp", address_stun, kCandidatePriority, "",
|
||||
"", STUN_PORT_TYPE, kCandidateGeneration,
|
||||
cricket::Candidate candidate9(cricket::ICE_CANDIDATE_COMPONENT_RTP, "udp",
|
||||
address_stun, kCandidatePriority, "", "",
|
||||
STUN_PORT_TYPE, kCandidateGeneration,
|
||||
kCandidateFoundation3);
|
||||
candidate9.set_related_address(rel_address_stun);
|
||||
|
||||
address_stun.SetPort(port_stun++);
|
||||
rel_address_stun.SetPort(port_stun++);
|
||||
cricket::Candidate candidate10("", cricket::ICE_CANDIDATE_COMPONENT_RTCP,
|
||||
"udp", address_stun, kCandidatePriority, "",
|
||||
"", STUN_PORT_TYPE, kCandidateGeneration,
|
||||
cricket::Candidate candidate10(cricket::ICE_CANDIDATE_COMPONENT_RTCP, "udp",
|
||||
address_stun, kCandidatePriority, "", "",
|
||||
STUN_PORT_TYPE, kCandidateGeneration,
|
||||
kCandidateFoundation3);
|
||||
candidate10.set_related_address(rel_address_stun);
|
||||
|
||||
// relay
|
||||
int port_relay = 3456;
|
||||
rtc::SocketAddress address_relay("74.125.224.39", port_relay++);
|
||||
cricket::Candidate candidate11("", cricket::ICE_CANDIDATE_COMPONENT_RTCP,
|
||||
"udp", address_relay, kCandidatePriority, "",
|
||||
"", cricket::RELAY_PORT_TYPE,
|
||||
cricket::Candidate candidate11(cricket::ICE_CANDIDATE_COMPONENT_RTCP, "udp",
|
||||
address_relay, kCandidatePriority, "", "",
|
||||
cricket::RELAY_PORT_TYPE,
|
||||
kCandidateGeneration, kCandidateFoundation4);
|
||||
address_relay.SetPort(port_relay++);
|
||||
cricket::Candidate candidate12("", cricket::ICE_CANDIDATE_COMPONENT_RTP,
|
||||
"udp", address_relay, kCandidatePriority, "",
|
||||
"", RELAY_PORT_TYPE, kCandidateGeneration,
|
||||
cricket::Candidate candidate12(cricket::ICE_CANDIDATE_COMPONENT_RTP, "udp",
|
||||
address_relay, kCandidatePriority, "", "",
|
||||
RELAY_PORT_TYPE, kCandidateGeneration,
|
||||
kCandidateFoundation4);
|
||||
|
||||
// voice
|
||||
@ -1612,7 +1612,7 @@ TEST_F(WebRtcSdpTest, SerializeCandidates) {
|
||||
// TODO(mallinath) : Enable this test once WebRTCSdp capable of parsing
|
||||
// RFC 6544.
|
||||
TEST_F(WebRtcSdpTest, SerializeTcpCandidates) {
|
||||
Candidate candidate("", ICE_CANDIDATE_COMPONENT_RTP, "tcp",
|
||||
Candidate candidate(ICE_CANDIDATE_COMPONENT_RTP, "tcp",
|
||||
rtc::SocketAddress("192.168.1.5", 9), kCandidatePriority,
|
||||
"", "", LOCAL_PORT_TYPE, kCandidateGeneration,
|
||||
kCandidateFoundation1);
|
||||
@ -1905,7 +1905,7 @@ TEST_F(WebRtcSdpTest, DeserializeCandidate) {
|
||||
sdp = kSdpTcpActiveCandidate;
|
||||
EXPECT_TRUE(SdpDeserializeCandidate(sdp, &jcandidate));
|
||||
// Make a cricket::Candidate equivalent to kSdpTcpCandidate string.
|
||||
Candidate candidate("", ICE_CANDIDATE_COMPONENT_RTP, "tcp",
|
||||
Candidate candidate(ICE_CANDIDATE_COMPONENT_RTP, "tcp",
|
||||
rtc::SocketAddress("192.168.1.5", 9), kCandidatePriority,
|
||||
"", "", LOCAL_PORT_TYPE, kCandidateGeneration,
|
||||
kCandidateFoundation1);
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include "webrtc/p2p/base/constants.h"
|
||||
#include "webrtc/base/basictypes.h"
|
||||
#include "webrtc/base/helpers.h"
|
||||
#include "webrtc/base/network.h"
|
||||
#include "webrtc/base/socketaddress.h"
|
||||
|
||||
@ -32,13 +33,13 @@ class Candidate {
|
||||
// TODO: Match the ordering and param list as per RFC 5245
|
||||
// candidate-attribute syntax. http://tools.ietf.org/html/rfc5245#section-15.1
|
||||
Candidate()
|
||||
: component_(0),
|
||||
: id_(rtc::CreateRandomString(8)),
|
||||
component_(0),
|
||||
priority_(0),
|
||||
network_type_(rtc::ADAPTER_TYPE_UNKNOWN),
|
||||
generation_(0) {}
|
||||
|
||||
Candidate(const std::string& id,
|
||||
int component,
|
||||
Candidate(int component,
|
||||
const std::string& protocol,
|
||||
const rtc::SocketAddress& address,
|
||||
uint32 priority,
|
||||
@ -47,7 +48,7 @@ class Candidate {
|
||||
const std::string& type,
|
||||
uint32 generation,
|
||||
const std::string& foundation)
|
||||
: id_(id),
|
||||
: id_(rtc::CreateRandomString(8)),
|
||||
component_(component),
|
||||
protocol_(protocol),
|
||||
address_(address),
|
||||
@ -154,15 +155,10 @@ class Candidate {
|
||||
// We ignore the network name, since that is just debug information, and
|
||||
// the priority, since that should be the same if the rest is (and it's
|
||||
// a float so equality checking is always worrisome).
|
||||
return (id_ == c.id_) &&
|
||||
(component_ == c.component_) &&
|
||||
(protocol_ == c.protocol_) &&
|
||||
(address_ == c.address_) &&
|
||||
(username_ == c.username_) &&
|
||||
(password_ == c.password_) &&
|
||||
(type_ == c.type_) &&
|
||||
(generation_ == c.generation_) &&
|
||||
(foundation_ == c.foundation_) &&
|
||||
return (component_ == c.component_) && (protocol_ == c.protocol_) &&
|
||||
(address_ == c.address_) && (username_ == c.username_) &&
|
||||
(password_ == c.password_) && (type_ == c.type_) &&
|
||||
(generation_ == c.generation_) && (foundation_ == c.foundation_) &&
|
||||
(related_address_ == c.related_address_);
|
||||
}
|
||||
|
||||
|
@ -505,14 +505,18 @@ void P2PTransportChannel::OnUnknownAddress(
|
||||
}
|
||||
}
|
||||
|
||||
std::string id = rtc::CreateRandomString(8);
|
||||
new_remote_candidate =
|
||||
Candidate(id, component(), ProtoToString(proto), address, 0,
|
||||
remote_username, remote_password, type, 0U,
|
||||
rtc::ToString<uint32>(rtc::ComputeCrc32(id)));
|
||||
new_remote_candidate.set_priority(
|
||||
new_remote_candidate.GetPriority(ICE_TYPE_PREFERENCE_SRFLX,
|
||||
port->Network()->preference(), 0));
|
||||
Candidate(component(), ProtoToString(proto), address, 0,
|
||||
remote_username, remote_password, type, 0U, "");
|
||||
|
||||
// From RFC 5245, section-7.2.1.3:
|
||||
// The foundation of the candidate is set to an arbitrary value, different
|
||||
// from the foundation for all other remote candidates.
|
||||
new_remote_candidate.set_foundation(
|
||||
rtc::ToString<uint32>(rtc::ComputeCrc32(new_remote_candidate.id())));
|
||||
|
||||
new_remote_candidate.set_priority(new_remote_candidate.GetPriority(
|
||||
ICE_TYPE_PREFERENCE_SRFLX, port->Network()->preference(), 0));
|
||||
}
|
||||
|
||||
if (port->IceProtocol() == ICEPROTO_RFC5245) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user