webrtc/sdk/objc/api/peerconnection/RTCSessionDescription.mm
Kári Tristan Helgason 682f7945d5 Deprecate bad signature for CreateSessionDescription.
Bug: webrtc:360909068
Change-Id: I8640dcf3cb89b1e07ea6745887d152fdeb7479c9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/360020
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42932}
2024-09-03 12:14:54 +00:00

118 lines
3.5 KiB
Text

/*
* Copyright 2015 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#import "RTCSessionDescription+Private.h"
#import "base/RTCLogging.h"
#import "helpers/NSString+StdString.h"
#include "api/jsep.h"
#include "rtc_base/checks.h"
@implementation RTC_OBJC_TYPE (RTCSessionDescription)
@synthesize type = _type;
@synthesize sdp = _sdp;
+ (NSString *)stringForType:(RTCSdpType)type {
std::string string = [[self class] stdStringForType:type];
return [NSString stringForStdString:string];
}
+ (RTCSdpType)typeForString:(NSString *)string {
std::string typeString = string.stdString;
return [[self class] typeForStdString:typeString];
}
- (instancetype)initWithType:(RTCSdpType)type sdp:(NSString *)sdp {
self = [super init];
if (self) {
_type = type;
_sdp = [sdp copy];
}
return self;
}
- (NSString *)description {
return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCSessionDescription):\n%@\n%@",
[[self class] stringForType:_type],
_sdp];
}
#pragma mark - Private
- (std::unique_ptr<webrtc::SessionDescriptionInterface>)nativeDescription {
webrtc::SdpParseError error;
std::unique_ptr<webrtc::SessionDescriptionInterface> description(webrtc::CreateSessionDescription(
[[self class] nativeTypeForType:_type], _sdp.stdString, &error));
if (!description) {
RTCLogError(@"Failed to create session description: %s\nline: %s",
error.description.c_str(),
error.line.c_str());
}
return description;
}
- (instancetype)initWithNativeDescription:
(const webrtc::SessionDescriptionInterface *)nativeDescription {
NSParameterAssert(nativeDescription);
std::string sdp;
nativeDescription->ToString(&sdp);
RTCSdpType type = [[self class] typeForStdString:nativeDescription->type()];
return [self initWithType:type
sdp:[NSString stringForStdString:sdp]];
}
+ (std::string)stdStringForType:(RTCSdpType)type {
switch (type) {
case RTCSdpTypeOffer:
return webrtc::SessionDescriptionInterface::kOffer;
case RTCSdpTypePrAnswer:
return webrtc::SessionDescriptionInterface::kPrAnswer;
case RTCSdpTypeAnswer:
return webrtc::SessionDescriptionInterface::kAnswer;
case RTCSdpTypeRollback:
return webrtc::SessionDescriptionInterface::kRollback;
}
}
+ (RTCSdpType)typeForStdString:(const std::string &)string {
if (string == webrtc::SessionDescriptionInterface::kOffer) {
return RTCSdpTypeOffer;
} else if (string == webrtc::SessionDescriptionInterface::kPrAnswer) {
return RTCSdpTypePrAnswer;
} else if (string == webrtc::SessionDescriptionInterface::kAnswer) {
return RTCSdpTypeAnswer;
} else if (string == webrtc::SessionDescriptionInterface::kRollback) {
return RTCSdpTypeRollback;
} else {
RTC_DCHECK_NOTREACHED();
return RTCSdpTypeOffer;
}
}
+ (webrtc::SdpType)nativeTypeForType:(RTCSdpType)type {
switch (type) {
case RTCSdpTypeOffer:
return webrtc::SdpType::kOffer;
case RTCSdpTypePrAnswer:
return webrtc::SdpType::kPrAnswer;
case RTCSdpTypeAnswer:
return webrtc::SdpType::kAnswer;
case RTCSdpTypeRollback:
return webrtc::SdpType::kRollback;
}
}
@end