TurnCustomizer - an interface for modifying stun messages sent by TurnPort
This patch adds an interface that allows modification of stun messages sent by TurnPort. A user can inject a TurnCustomizer on the RTCConfig and the TurnCustomizer will be invoked by TurnPort before sending message. This allows user to e.g add custom attributes as described in rtf5389. BUG=webrtc:8313 Change-Id: I6f4333e9f8ff7fd20f32677be19285f15e1180b6 Reviewed-on: https://webrtc-review.googlesource.com/7618 Reviewed-by: Guido Urdaneta <guidou@webrtc.org> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Commit-Queue: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20233}
This commit is contained in:
committed by
Commit Bot
parent
2ff7ecfceb
commit
bdcee28ee9
@ -67,9 +67,18 @@ bool StunMessage::SetTransactionID(const std::string& str) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool ImplementationDefinedRange(int attr_type)
|
||||
{
|
||||
return attr_type >= 0xC000 && attr_type <= 0xFFFF;
|
||||
}
|
||||
|
||||
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()));
|
||||
// Fail any attributes that aren't valid for this type of message,
|
||||
// but allow any type for the range that is "implementation defined"
|
||||
// in the RFC.
|
||||
if (!ImplementationDefinedRange(attr->type())) {
|
||||
RTC_DCHECK_EQ(attr->value_type(), GetAttributeValueType(attr->type()));
|
||||
}
|
||||
|
||||
attr->SetOwner(this);
|
||||
size_t attr_length = attr->length();
|
||||
@ -398,8 +407,16 @@ StunAttributeValueType StunMessage::GetAttributeValueType(int type) const {
|
||||
|
||||
StunAttribute* StunMessage::CreateAttribute(int type, size_t length) /*const*/ {
|
||||
StunAttributeValueType value_type = GetAttributeValueType(type);
|
||||
return StunAttribute::Create(value_type, type, static_cast<uint16_t>(length),
|
||||
this);
|
||||
if (value_type != STUN_VALUE_UNKNOWN) {
|
||||
return StunAttribute::Create(value_type, type,
|
||||
static_cast<uint16_t>(length), this);
|
||||
} else if (ImplementationDefinedRange(type)) {
|
||||
// Read unknown attributes as STUN_VALUE_BYTE_STRING
|
||||
return StunAttribute::Create(STUN_VALUE_BYTE_STRING, type,
|
||||
static_cast<uint16_t>(length), this);
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
const StunAttribute* StunMessage::GetAttribute(int type) const {
|
||||
|
||||
Reference in New Issue
Block a user