Port::GetStunMessage: Write to scoped_ptr instead of raw pointer
This is a good idea in general, because it makes ownership clearer, but will also be very convenient when scoped_ptr is gone, since unique_ptr doesn't have an .accept() method. BUG=webrtc:5520 Review URL: https://codereview.webrtc.org/1800753003 Cr-Commit-Position: refs/heads/master@{#12002}
This commit is contained in:
parent
0540242452
commit
6baec0351a
@ -288,7 +288,7 @@ void Port::OnReadPacket(
|
||||
// send back a proper binding response.
|
||||
rtc::scoped_ptr<IceMessage> msg;
|
||||
std::string remote_username;
|
||||
if (!GetStunMessage(data, size, addr, msg.accept(), &remote_username)) {
|
||||
if (!GetStunMessage(data, size, addr, &msg, &remote_username)) {
|
||||
LOG_J(LS_ERROR, this) << "Received non-STUN packet from unknown address ("
|
||||
<< addr.ToSensitiveString() << ")";
|
||||
} else if (!msg) {
|
||||
@ -330,15 +330,16 @@ size_t Port::AddPrflxCandidate(const Candidate& local) {
|
||||
return (candidates_.size() - 1);
|
||||
}
|
||||
|
||||
bool Port::GetStunMessage(const char* data, size_t size,
|
||||
bool Port::GetStunMessage(const char* data,
|
||||
size_t size,
|
||||
const rtc::SocketAddress& addr,
|
||||
IceMessage** out_msg, std::string* out_username) {
|
||||
rtc::scoped_ptr<IceMessage>* out_msg,
|
||||
std::string* out_username) {
|
||||
// NOTE: This could clearly be optimized to avoid allocating any memory.
|
||||
// However, at the data rates we'll be looking at on the client side,
|
||||
// this probably isn't worth worrying about.
|
||||
ASSERT(out_msg != NULL);
|
||||
ASSERT(out_username != NULL);
|
||||
*out_msg = NULL;
|
||||
out_username->clear();
|
||||
|
||||
// Don't bother parsing the packet if we can tell it's not STUN.
|
||||
@ -422,7 +423,7 @@ bool Port::GetStunMessage(const char* data, size_t size,
|
||||
}
|
||||
|
||||
// Return the STUN message found.
|
||||
*out_msg = stun_msg.release();
|
||||
*out_msg = std::move(stun_msg);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -902,7 +903,7 @@ void Connection::OnReadPacket(
|
||||
rtc::scoped_ptr<IceMessage> msg;
|
||||
std::string remote_ufrag;
|
||||
const rtc::SocketAddress& addr(remote_candidate_.address());
|
||||
if (!port_->GetStunMessage(data, size, addr, msg.accept(), &remote_ufrag)) {
|
||||
if (!port_->GetStunMessage(data, size, addr, &msg, &remote_ufrag)) {
|
||||
// The packet did not parse as a valid STUN message
|
||||
// This is a data packet, pass it along.
|
||||
set_receiving(true);
|
||||
|
||||
@ -332,9 +332,11 @@ class Port : public PortInterface, public rtc::MessageHandler,
|
||||
// with this port's username fragment, msg will contain the parsed STUN
|
||||
// message. Otherwise, the function may send a STUN response internally.
|
||||
// remote_username contains the remote fragment of the STUN username.
|
||||
bool GetStunMessage(const char* data, size_t size,
|
||||
bool GetStunMessage(const char* data,
|
||||
size_t size,
|
||||
const rtc::SocketAddress& addr,
|
||||
IceMessage** out_msg, std::string* out_username);
|
||||
rtc::scoped_ptr<IceMessage>* out_msg,
|
||||
std::string* out_username);
|
||||
|
||||
// Checks if the address in addr is compatible with the port's ip.
|
||||
bool IsCompatibleAddress(const rtc::SocketAddress& addr);
|
||||
|
||||
@ -1775,8 +1775,8 @@ TEST_F(PortTest, TestHandleStunMessage) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() != NULL);
|
||||
EXPECT_EQ("lfrag", username);
|
||||
|
||||
@ -1787,8 +1787,8 @@ TEST_F(PortTest, TestHandleStunMessage) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() != NULL);
|
||||
EXPECT_EQ("", username);
|
||||
|
||||
@ -1798,8 +1798,8 @@ TEST_F(PortTest, TestHandleStunMessage) {
|
||||
STUN_ERROR_SERVER_ERROR, STUN_ERROR_REASON_SERVER_ERROR));
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() != NULL);
|
||||
EXPECT_EQ("", username);
|
||||
ASSERT_TRUE(out_msg->GetErrorCode() != NULL);
|
||||
@ -1823,8 +1823,8 @@ TEST_F(PortTest, TestHandleStunMessageBadUsername) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_BAD_REQUEST, port->last_stun_error_code());
|
||||
@ -1834,8 +1834,8 @@ TEST_F(PortTest, TestHandleStunMessageBadUsername) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
|
||||
@ -1845,8 +1845,8 @@ TEST_F(PortTest, TestHandleStunMessageBadUsername) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
|
||||
@ -1857,8 +1857,8 @@ TEST_F(PortTest, TestHandleStunMessageBadUsername) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
|
||||
@ -1869,8 +1869,8 @@ TEST_F(PortTest, TestHandleStunMessageBadUsername) {
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
|
||||
@ -1893,8 +1893,8 @@ TEST_F(PortTest, TestHandleStunMessageBadMessageIntegrity) {
|
||||
"rfrag:lfrag"));
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_BAD_REQUEST, port->last_stun_error_code());
|
||||
@ -1906,8 +1906,8 @@ TEST_F(PortTest, TestHandleStunMessageBadMessageIntegrity) {
|
||||
in_msg->AddMessageIntegrity("invalid");
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() == NULL);
|
||||
EXPECT_EQ("", username);
|
||||
EXPECT_EQ(STUN_ERROR_UNAUTHORIZED, port->last_stun_error_code());
|
||||
@ -1934,16 +1934,16 @@ TEST_F(PortTest, TestHandleStunMessageBadFingerprint) {
|
||||
"rfrag:lfrag"));
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_EQ(0, port->last_stun_error_code());
|
||||
|
||||
// Now, add a fingerprint, but munge the message so it's not valid.
|
||||
in_msg->AddFingerprint();
|
||||
in_msg->SetTransactionID("TESTTESTBADD");
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_EQ(0, port->last_stun_error_code());
|
||||
|
||||
// Valid BINDING-RESPONSE, except no FINGERPRINT.
|
||||
@ -1952,16 +1952,16 @@ TEST_F(PortTest, TestHandleStunMessageBadFingerprint) {
|
||||
new StunXorAddressAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS, kLocalAddr2));
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_EQ(0, port->last_stun_error_code());
|
||||
|
||||
// Now, add a fingerprint, but munge the message so it's not valid.
|
||||
in_msg->AddFingerprint();
|
||||
in_msg->SetTransactionID("TESTTESTBADD");
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_EQ(0, port->last_stun_error_code());
|
||||
|
||||
// Valid BINDING-ERROR-RESPONSE, except no FINGERPRINT.
|
||||
@ -1970,16 +1970,16 @@ TEST_F(PortTest, TestHandleStunMessageBadFingerprint) {
|
||||
STUN_ERROR_SERVER_ERROR, STUN_ERROR_REASON_SERVER_ERROR));
|
||||
in_msg->AddMessageIntegrity("rpass");
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_EQ(0, port->last_stun_error_code());
|
||||
|
||||
// Now, add a fingerprint, but munge the message so it's not valid.
|
||||
in_msg->AddFingerprint();
|
||||
in_msg->SetTransactionID("TESTTESTBADD");
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_FALSE(port->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_EQ(0, port->last_stun_error_code());
|
||||
}
|
||||
|
||||
@ -2000,8 +2000,8 @@ TEST_F(PortTest, TestHandleStunBindingIndication) {
|
||||
in_msg.reset(CreateStunMessage(STUN_BINDING_INDICATION));
|
||||
in_msg->AddFingerprint();
|
||||
WriteStunMessage(in_msg.get(), buf.get());
|
||||
EXPECT_TRUE(lport->GetStunMessage(buf->Data(), buf->Length(), addr,
|
||||
out_msg.accept(), &username));
|
||||
EXPECT_TRUE(lport->GetStunMessage(buf->Data(), buf->Length(), addr, &out_msg,
|
||||
&username));
|
||||
EXPECT_TRUE(out_msg.get() != NULL);
|
||||
EXPECT_EQ(out_msg->type(), STUN_BINDING_INDICATION);
|
||||
EXPECT_EQ("", username);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user