| Index: webrtc/p2p/base/stun.cc
|
| diff --git a/webrtc/p2p/base/stun.cc b/webrtc/p2p/base/stun.cc
|
| index af870d12d5975c9d7330daf92e5b1cb39541c048..4d6b21ba5465b0769f847aca5d984fd80166c581 100644
|
| --- a/webrtc/p2p/base/stun.cc
|
| +++ b/webrtc/p2p/base/stun.cc
|
| @@ -19,6 +19,7 @@
|
| #include "webrtc/base/crc32.h"
|
| #include "webrtc/base/logging.h"
|
| #include "webrtc/base/messagedigest.h"
|
| +#include "webrtc/base/ptr_util.h"
|
| #include "webrtc/base/stringencode.h"
|
|
|
| using rtc::ByteBufferReader;
|
| @@ -66,17 +67,18 @@ bool StunMessage::SetTransactionID(const std::string& str) {
|
| return true;
|
| }
|
|
|
| -void StunMessage::AddAttribute(StunAttribute* attr) {
|
| +void StunMessage::AddAttribute(std::unique_ptr<StunAttribute> attr) {
|
| // Fail any attributes that aren't valid for this type of message.
|
| RTC_DCHECK_EQ(attr->value_type(), GetAttributeValueType(attr->type()));
|
|
|
| - attrs_.emplace_back(attr);
|
| attr->SetOwner(this);
|
| size_t attr_length = attr->length();
|
| if (attr_length % 4 != 0) {
|
| attr_length += (4 - (attr_length % 4));
|
| }
|
| length_ += static_cast<uint16_t>(attr_length + 4);
|
| +
|
| + attrs_.push_back(std::move(attr));
|
| }
|
|
|
| const StunAddressAttribute* StunMessage::GetAddress(int type) const {
|
| @@ -207,10 +209,10 @@ bool StunMessage::AddMessageIntegrity(const char* key,
|
| size_t keylen) {
|
| // Add the attribute with a dummy value. Since this is a known attribute, it
|
| // can't fail.
|
| - StunByteStringAttribute* msg_integrity_attr =
|
| - new StunByteStringAttribute(STUN_ATTR_MESSAGE_INTEGRITY,
|
| - std::string(kStunMessageIntegritySize, '0'));
|
| - AddAttribute(msg_integrity_attr);
|
| + auto msg_integrity_attr_ptr = rtc::MakeUnique<StunByteStringAttribute>(
|
| + STUN_ATTR_MESSAGE_INTEGRITY, std::string(kStunMessageIntegritySize, '0'));
|
| + auto* msg_integrity_attr = msg_integrity_attr_ptr.get();
|
| + AddAttribute(std::move(msg_integrity_attr_ptr));
|
|
|
| // Calculate the HMAC for the message.
|
| ByteBufferWriter buf;
|
| @@ -269,9 +271,10 @@ bool StunMessage::ValidateFingerprint(const char* data, size_t size) {
|
| bool StunMessage::AddFingerprint() {
|
| // Add the attribute with a dummy value. Since this is a known attribute,
|
| // it can't fail.
|
| - StunUInt32Attribute* fingerprint_attr =
|
| - new StunUInt32Attribute(STUN_ATTR_FINGERPRINT, 0);
|
| - AddAttribute(fingerprint_attr);
|
| + auto fingerprint_attr_ptr =
|
| + rtc::MakeUnique<StunUInt32Attribute>(STUN_ATTR_FINGERPRINT, 0);
|
| + auto fingerprint_attr = fingerprint_attr_ptr.get();
|
| + AddAttribute(std::move(fingerprint_attr_ptr));
|
|
|
| // Calculate the CRC-32 for the message and insert it.
|
| ByteBufferWriter buf;
|
| @@ -453,33 +456,40 @@ StunAttribute* StunAttribute::Create(StunAttributeValueType value_type,
|
| }
|
| }
|
|
|
| -StunAddressAttribute* StunAttribute::CreateAddress(uint16_t type) {
|
| - return new StunAddressAttribute(type, 0);
|
| +std::unique_ptr<StunAddressAttribute> StunAttribute::CreateAddress(
|
| + uint16_t type) {
|
| + return rtc::MakeUnique<StunAddressAttribute>(type, 0);
|
| }
|
|
|
| -StunXorAddressAttribute* StunAttribute::CreateXorAddress(uint16_t type) {
|
| - return new StunXorAddressAttribute(type, 0, NULL);
|
| +std::unique_ptr<StunXorAddressAttribute> StunAttribute::CreateXorAddress(
|
| + uint16_t type) {
|
| + return rtc::MakeUnique<StunXorAddressAttribute>(type, 0, nullptr);
|
| }
|
|
|
| -StunUInt64Attribute* StunAttribute::CreateUInt64(uint16_t type) {
|
| - return new StunUInt64Attribute(type);
|
| +std::unique_ptr<StunUInt64Attribute> StunAttribute::CreateUInt64(
|
| + uint16_t type) {
|
| + return rtc::MakeUnique<StunUInt64Attribute>(type);
|
| }
|
|
|
| -StunUInt32Attribute* StunAttribute::CreateUInt32(uint16_t type) {
|
| - return new StunUInt32Attribute(type);
|
| +std::unique_ptr<StunUInt32Attribute> StunAttribute::CreateUInt32(
|
| + uint16_t type) {
|
| + return rtc::MakeUnique<StunUInt32Attribute>(type);
|
| }
|
|
|
| -StunByteStringAttribute* StunAttribute::CreateByteString(uint16_t type) {
|
| - return new StunByteStringAttribute(type, 0);
|
| +std::unique_ptr<StunByteStringAttribute> StunAttribute::CreateByteString(
|
| + uint16_t type) {
|
| + return rtc::MakeUnique<StunByteStringAttribute>(type, 0);
|
| }
|
|
|
| -StunErrorCodeAttribute* StunAttribute::CreateErrorCode() {
|
| - return new StunErrorCodeAttribute(
|
| +std::unique_ptr<StunErrorCodeAttribute> StunAttribute::CreateErrorCode() {
|
| + return rtc::MakeUnique<StunErrorCodeAttribute>(
|
| STUN_ATTR_ERROR_CODE, StunErrorCodeAttribute::MIN_SIZE);
|
| }
|
|
|
| -StunUInt16ListAttribute* StunAttribute::CreateUnknownAttributes() {
|
| - return new StunUInt16ListAttribute(STUN_ATTR_UNKNOWN_ATTRIBUTES, 0);
|
| +std::unique_ptr<StunUInt16ListAttribute>
|
| +StunAttribute::CreateUnknownAttributes() {
|
| + return rtc::MakeUnique<StunUInt16ListAttribute>(STUN_ATTR_UNKNOWN_ATTRIBUTES,
|
| + 0);
|
| }
|
|
|
| StunAddressAttribute::StunAddressAttribute(uint16_t type,
|
| @@ -756,6 +766,8 @@ void StunByteStringAttribute::SetBytes(char* bytes, size_t length) {
|
| SetLength(static_cast<uint16_t>(length));
|
| }
|
|
|
| +const uint16_t StunErrorCodeAttribute::MIN_SIZE = 4;
|
| +
|
| StunErrorCodeAttribute::StunErrorCodeAttribute(uint16_t type,
|
| int code,
|
| const std::string& reason)
|
|
|