| Index: webrtc/api/objc/RTCPeerConnection.mm
|
| diff --git a/webrtc/api/objc/RTCPeerConnection.mm b/webrtc/api/objc/RTCPeerConnection.mm
|
| deleted file mode 100644
|
| index 657ba57e26a50f58b389c47d14b665580d639793..0000000000000000000000000000000000000000
|
| --- a/webrtc/api/objc/RTCPeerConnection.mm
|
| +++ /dev/null
|
| @@ -1,496 +0,0 @@
|
| -/*
|
| - * 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 "webrtc/api/objc/RTCPeerConnection.h"
|
| -
|
| -#include "webrtc/base/checks.h"
|
| -
|
| -#import "webrtc/api/objc/RTCPeerConnection+Private.h"
|
| -#import "webrtc/api/objc/RTCConfiguration+Private.h"
|
| -#import "webrtc/api/objc/RTCDataChannel+Private.h"
|
| -#import "webrtc/api/objc/RTCIceCandidate+Private.h"
|
| -#import "webrtc/api/objc/RTCMediaConstraints+Private.h"
|
| -#import "webrtc/api/objc/RTCMediaStream+Private.h"
|
| -#import "webrtc/api/objc/RTCPeerConnectionFactory+Private.h"
|
| -#import "webrtc/api/objc/RTCRtpSender+Private.h"
|
| -#import "webrtc/api/objc/RTCSessionDescription+Private.h"
|
| -#import "webrtc/api/objc/RTCStatsReport+Private.h"
|
| -#import "webrtc/base/objc/RTCLogging.h"
|
| -#import "webrtc/base/objc/NSString+StdString.h"
|
| -
|
| -NSString * const kRTCPeerConnectionErrorDomain =
|
| - @"org.webrtc.RTCPeerConnection";
|
| -int const kRTCPeerConnnectionSessionDescriptionError = -1;
|
| -
|
| -namespace webrtc {
|
| -
|
| -class CreateSessionDescriptionObserverAdapter
|
| - : public CreateSessionDescriptionObserver {
|
| - public:
|
| - CreateSessionDescriptionObserverAdapter(
|
| - void (^completionHandler)(RTCSessionDescription *sessionDescription,
|
| - NSError *error)) {
|
| - completion_handler_ = completionHandler;
|
| - }
|
| -
|
| - ~CreateSessionDescriptionObserverAdapter() {
|
| - completion_handler_ = nil;
|
| - }
|
| -
|
| - void OnSuccess(SessionDescriptionInterface *desc) override {
|
| - RTC_DCHECK(completion_handler_);
|
| - rtc::scoped_ptr<webrtc::SessionDescriptionInterface> description =
|
| - rtc::scoped_ptr<webrtc::SessionDescriptionInterface>(desc);
|
| - RTCSessionDescription* session =
|
| - [[RTCSessionDescription alloc] initWithNativeDescription:
|
| - description.get()];
|
| - completion_handler_(session, nil);
|
| - completion_handler_ = nil;
|
| - }
|
| -
|
| - void OnFailure(const std::string& error) override {
|
| - RTC_DCHECK(completion_handler_);
|
| - NSString* str = [NSString stringForStdString:error];
|
| - NSError* err =
|
| - [NSError errorWithDomain:kRTCPeerConnectionErrorDomain
|
| - code:kRTCPeerConnnectionSessionDescriptionError
|
| - userInfo:@{ NSLocalizedDescriptionKey : str }];
|
| - completion_handler_(nil, err);
|
| - completion_handler_ = nil;
|
| - }
|
| -
|
| - private:
|
| - void (^completion_handler_)
|
| - (RTCSessionDescription *sessionDescription, NSError *error);
|
| -};
|
| -
|
| -class SetSessionDescriptionObserverAdapter :
|
| - public SetSessionDescriptionObserver {
|
| - public:
|
| - SetSessionDescriptionObserverAdapter(void (^completionHandler)
|
| - (NSError *error)) {
|
| - completion_handler_ = completionHandler;
|
| - }
|
| -
|
| - ~SetSessionDescriptionObserverAdapter() {
|
| - completion_handler_ = nil;
|
| - }
|
| -
|
| - void OnSuccess() override {
|
| - RTC_DCHECK(completion_handler_);
|
| - completion_handler_(nil);
|
| - completion_handler_ = nil;
|
| - }
|
| -
|
| - void OnFailure(const std::string& error) override {
|
| - RTC_DCHECK(completion_handler_);
|
| - NSString* str = [NSString stringForStdString:error];
|
| - NSError* err =
|
| - [NSError errorWithDomain:kRTCPeerConnectionErrorDomain
|
| - code:kRTCPeerConnnectionSessionDescriptionError
|
| - userInfo:@{ NSLocalizedDescriptionKey : str }];
|
| - completion_handler_(err);
|
| - completion_handler_ = nil;
|
| - }
|
| -
|
| - private:
|
| - void (^completion_handler_)(NSError *error);
|
| -};
|
| -
|
| -PeerConnectionDelegateAdapter::PeerConnectionDelegateAdapter(
|
| - RTCPeerConnection *peerConnection) {
|
| - peer_connection_ = peerConnection;
|
| -}
|
| -
|
| -PeerConnectionDelegateAdapter::~PeerConnectionDelegateAdapter() {
|
| - peer_connection_ = nil;
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnSignalingChange(
|
| - PeerConnectionInterface::SignalingState new_state) {
|
| - RTCSignalingState state =
|
| - [[RTCPeerConnection class] signalingStateForNativeState:new_state];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didChangeSignalingState:state];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnAddStream(
|
| - MediaStreamInterface *stream) {
|
| - RTCMediaStream *mediaStream =
|
| - [[RTCMediaStream alloc] initWithNativeMediaStream:stream];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didAddStream:mediaStream];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnRemoveStream(
|
| - MediaStreamInterface *stream) {
|
| - RTCMediaStream *mediaStream =
|
| - [[RTCMediaStream alloc] initWithNativeMediaStream:stream];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didRemoveStream:mediaStream];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnDataChannel(
|
| - DataChannelInterface *data_channel) {
|
| - RTCDataChannel *dataChannel =
|
| - [[RTCDataChannel alloc] initWithNativeDataChannel:data_channel];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didOpenDataChannel:dataChannel];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnRenegotiationNeeded() {
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnectionShouldNegotiate:peer_connection];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnIceConnectionChange(
|
| - PeerConnectionInterface::IceConnectionState new_state) {
|
| - RTCIceConnectionState state =
|
| - [[RTCPeerConnection class] iceConnectionStateForNativeState:new_state];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didChangeIceConnectionState:state];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnIceGatheringChange(
|
| - PeerConnectionInterface::IceGatheringState new_state) {
|
| - RTCIceGatheringState state =
|
| - [[RTCPeerConnection class] iceGatheringStateForNativeState:new_state];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didChangeIceGatheringState:state];
|
| -}
|
| -
|
| -void PeerConnectionDelegateAdapter::OnIceCandidate(
|
| - const IceCandidateInterface *candidate) {
|
| - RTCIceCandidate *iceCandidate =
|
| - [[RTCIceCandidate alloc] initWithNativeCandidate:candidate];
|
| - RTCPeerConnection *peer_connection = peer_connection_;
|
| - [peer_connection.delegate peerConnection:peer_connection
|
| - didGenerateIceCandidate:iceCandidate];
|
| -}
|
| -} // namespace webrtc
|
| -
|
| -
|
| -@implementation RTCPeerConnection {
|
| - NSMutableArray *_localStreams;
|
| - rtc::scoped_ptr<webrtc::PeerConnectionDelegateAdapter> _observer;
|
| - rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection;
|
| -}
|
| -
|
| -@synthesize delegate = _delegate;
|
| -
|
| -- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
|
| - configuration:(RTCConfiguration *)configuration
|
| - constraints:(RTCMediaConstraints *)constraints
|
| - delegate:(id<RTCPeerConnectionDelegate>)delegate {
|
| - NSParameterAssert(factory);
|
| - if (self = [super init]) {
|
| - _observer.reset(new webrtc::PeerConnectionDelegateAdapter(self));
|
| - webrtc::PeerConnectionInterface::RTCConfiguration config =
|
| - configuration.nativeConfiguration;
|
| - rtc::scoped_ptr<webrtc::MediaConstraints> nativeConstraints =
|
| - constraints.nativeConstraints;
|
| - _peerConnection =
|
| - factory.nativeFactory->CreatePeerConnection(config,
|
| - nativeConstraints.get(),
|
| - nullptr,
|
| - nullptr,
|
| - _observer.get());
|
| - _localStreams = [[NSMutableArray alloc] init];
|
| - _delegate = delegate;
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (NSArray *)localStreams {
|
| - return [_localStreams copy];
|
| -}
|
| -
|
| -- (RTCSessionDescription *)localDescription {
|
| - const webrtc::SessionDescriptionInterface *description =
|
| - _peerConnection->local_description();
|
| - return description ?
|
| - [[RTCSessionDescription alloc] initWithNativeDescription:description]
|
| - : nil;
|
| -}
|
| -
|
| -- (RTCSessionDescription *)remoteDescription {
|
| - const webrtc::SessionDescriptionInterface *description =
|
| - _peerConnection->remote_description();
|
| - return description ?
|
| - [[RTCSessionDescription alloc] initWithNativeDescription:description]
|
| - : nil;
|
| -}
|
| -
|
| -- (RTCSignalingState)signalingState {
|
| - return [[self class]
|
| - signalingStateForNativeState:_peerConnection->signaling_state()];
|
| -}
|
| -
|
| -- (RTCIceConnectionState)iceConnectionState {
|
| - return [[self class] iceConnectionStateForNativeState:
|
| - _peerConnection->ice_connection_state()];
|
| -}
|
| -
|
| -- (RTCIceGatheringState)iceGatheringState {
|
| - return [[self class] iceGatheringStateForNativeState:
|
| - _peerConnection->ice_gathering_state()];
|
| -}
|
| -
|
| -- (BOOL)setConfiguration:(RTCConfiguration *)configuration {
|
| - return _peerConnection->SetConfiguration(configuration.nativeConfiguration);
|
| -}
|
| -
|
| -- (void)close {
|
| - _peerConnection->Close();
|
| -}
|
| -
|
| -- (void)addIceCandidate:(RTCIceCandidate *)candidate {
|
| - rtc::scoped_ptr<const webrtc::IceCandidateInterface> iceCandidate(
|
| - candidate.nativeCandidate);
|
| - _peerConnection->AddIceCandidate(iceCandidate.get());
|
| -}
|
| -
|
| -- (void)addStream:(RTCMediaStream *)stream {
|
| - if (!_peerConnection->AddStream(stream.nativeMediaStream)) {
|
| - RTCLogError(@"Failed to add stream: %@", stream);
|
| - return;
|
| - }
|
| - [_localStreams addObject:stream];
|
| -}
|
| -
|
| -- (void)removeStream:(RTCMediaStream *)stream {
|
| - _peerConnection->RemoveStream(stream.nativeMediaStream);
|
| - [_localStreams removeObject:stream];
|
| -}
|
| -
|
| -- (void)offerForConstraints:(RTCMediaConstraints *)constraints
|
| - completionHandler:
|
| - (void (^)(RTCSessionDescription *sessionDescription,
|
| - NSError *error))completionHandler {
|
| - rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter>
|
| - observer(new rtc::RefCountedObject
|
| - <webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler));
|
| - _peerConnection->CreateOffer(observer, constraints.nativeConstraints.get());
|
| -}
|
| -
|
| -- (void)answerForConstraints:(RTCMediaConstraints *)constraints
|
| - completionHandler:
|
| - (void (^)(RTCSessionDescription *sessionDescription,
|
| - NSError *error))completionHandler {
|
| - rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter>
|
| - observer(new rtc::RefCountedObject
|
| - <webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler));
|
| - _peerConnection->CreateAnswer(observer, constraints.nativeConstraints.get());
|
| -}
|
| -
|
| -- (void)setLocalDescription:(RTCSessionDescription *)sdp
|
| - completionHandler:(void (^)(NSError *error))completionHandler {
|
| - rtc::scoped_refptr<webrtc::SetSessionDescriptionObserverAdapter> observer(
|
| - new rtc::RefCountedObject<webrtc::SetSessionDescriptionObserverAdapter>(
|
| - completionHandler));
|
| - _peerConnection->SetLocalDescription(observer, sdp.nativeDescription);
|
| -}
|
| -
|
| -- (void)setRemoteDescription:(RTCSessionDescription *)sdp
|
| - completionHandler:(void (^)(NSError *error))completionHandler {
|
| - rtc::scoped_refptr<webrtc::SetSessionDescriptionObserverAdapter> observer(
|
| - new rtc::RefCountedObject<webrtc::SetSessionDescriptionObserverAdapter>(
|
| - completionHandler));
|
| - _peerConnection->SetRemoteDescription(observer, sdp.nativeDescription);
|
| -}
|
| -
|
| -- (NSArray<RTCRtpSender *> *)senders {
|
| - std::vector<rtc::scoped_refptr<webrtc::RtpSenderInterface>> nativeSenders(
|
| - _peerConnection->GetSenders());
|
| - NSMutableArray *senders = [[NSMutableArray alloc] init];
|
| - for (const auto &nativeSender : nativeSenders) {
|
| - RTCRtpSender *sender =
|
| - [[RTCRtpSender alloc] initWithNativeRtpSender:nativeSender];
|
| - [senders addObject:sender];
|
| - }
|
| - return senders;
|
| -}
|
| -
|
| -#pragma mark - Private
|
| -
|
| -+ (webrtc::PeerConnectionInterface::SignalingState)nativeSignalingStateForState:
|
| - (RTCSignalingState)state {
|
| - switch (state) {
|
| - case RTCSignalingStateStable:
|
| - return webrtc::PeerConnectionInterface::kStable;
|
| - case RTCSignalingStateHaveLocalOffer:
|
| - return webrtc::PeerConnectionInterface::kHaveLocalOffer;
|
| - case RTCSignalingStateHaveLocalPrAnswer:
|
| - return webrtc::PeerConnectionInterface::kHaveLocalPrAnswer;
|
| - case RTCSignalingStateHaveRemoteOffer:
|
| - return webrtc::PeerConnectionInterface::kHaveRemoteOffer;
|
| - case RTCSignalingStateHaveRemotePrAnswer:
|
| - return webrtc::PeerConnectionInterface::kHaveRemotePrAnswer;
|
| - case RTCSignalingStateClosed:
|
| - return webrtc::PeerConnectionInterface::kClosed;
|
| - }
|
| -}
|
| -
|
| -+ (RTCSignalingState)signalingStateForNativeState:
|
| - (webrtc::PeerConnectionInterface::SignalingState)nativeState {
|
| - switch (nativeState) {
|
| - case webrtc::PeerConnectionInterface::kStable:
|
| - return RTCSignalingStateStable;
|
| - case webrtc::PeerConnectionInterface::kHaveLocalOffer:
|
| - return RTCSignalingStateHaveLocalOffer;
|
| - case webrtc::PeerConnectionInterface::kHaveLocalPrAnswer:
|
| - return RTCSignalingStateHaveLocalPrAnswer;
|
| - case webrtc::PeerConnectionInterface::kHaveRemoteOffer:
|
| - return RTCSignalingStateHaveRemoteOffer;
|
| - case webrtc::PeerConnectionInterface::kHaveRemotePrAnswer:
|
| - return RTCSignalingStateHaveRemotePrAnswer;
|
| - case webrtc::PeerConnectionInterface::kClosed:
|
| - return RTCSignalingStateClosed;
|
| - }
|
| -}
|
| -
|
| -+ (NSString *)stringForSignalingState:(RTCSignalingState)state {
|
| - switch (state) {
|
| - case RTCSignalingStateStable:
|
| - return @"STABLE";
|
| - case RTCSignalingStateHaveLocalOffer:
|
| - return @"HAVE_LOCAL_OFFER";
|
| - case RTCSignalingStateHaveLocalPrAnswer:
|
| - return @"HAVE_LOCAL_PRANSWER";
|
| - case RTCSignalingStateHaveRemoteOffer:
|
| - return @"HAVE_REMOTE_OFFER";
|
| - case RTCSignalingStateHaveRemotePrAnswer:
|
| - return @"HAVE_REMOTE_PRANSWER";
|
| - case RTCSignalingStateClosed:
|
| - return @"CLOSED";
|
| - }
|
| -}
|
| -
|
| -+ (webrtc::PeerConnectionInterface::IceConnectionState)
|
| - nativeIceConnectionStateForState:(RTCIceConnectionState)state {
|
| - switch (state) {
|
| - case RTCIceConnectionStateNew:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionNew;
|
| - case RTCIceConnectionStateChecking:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionChecking;
|
| - case RTCIceConnectionStateConnected:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionConnected;
|
| - case RTCIceConnectionStateCompleted:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionCompleted;
|
| - case RTCIceConnectionStateFailed:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionFailed;
|
| - case RTCIceConnectionStateDisconnected:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionDisconnected;
|
| - case RTCIceConnectionStateClosed:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionClosed;
|
| - case RTCIceConnectionStateCount:
|
| - return webrtc::PeerConnectionInterface::kIceConnectionMax;
|
| - }
|
| -}
|
| -
|
| -+ (RTCIceConnectionState)iceConnectionStateForNativeState:
|
| - (webrtc::PeerConnectionInterface::IceConnectionState)nativeState {
|
| - switch (nativeState) {
|
| - case webrtc::PeerConnectionInterface::kIceConnectionNew:
|
| - return RTCIceConnectionStateNew;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionChecking:
|
| - return RTCIceConnectionStateChecking;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionConnected:
|
| - return RTCIceConnectionStateConnected;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionCompleted:
|
| - return RTCIceConnectionStateCompleted;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionFailed:
|
| - return RTCIceConnectionStateFailed;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionDisconnected:
|
| - return RTCIceConnectionStateDisconnected;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionClosed:
|
| - return RTCIceConnectionStateClosed;
|
| - case webrtc::PeerConnectionInterface::kIceConnectionMax:
|
| - return RTCIceConnectionStateCount;
|
| - }
|
| -}
|
| -
|
| -+ (NSString *)stringForIceConnectionState:(RTCIceConnectionState)state {
|
| - switch (state) {
|
| - case RTCIceConnectionStateNew:
|
| - return @"NEW";
|
| - case RTCIceConnectionStateChecking:
|
| - return @"CHECKING";
|
| - case RTCIceConnectionStateConnected:
|
| - return @"CONNECTED";
|
| - case RTCIceConnectionStateCompleted:
|
| - return @"COMPLETED";
|
| - case RTCIceConnectionStateFailed:
|
| - return @"FAILED";
|
| - case RTCIceConnectionStateDisconnected:
|
| - return @"DISCONNECTED";
|
| - case RTCIceConnectionStateClosed:
|
| - return @"CLOSED";
|
| - case RTCIceConnectionStateCount:
|
| - return @"COUNT";
|
| - }
|
| -}
|
| -
|
| -+ (webrtc::PeerConnectionInterface::IceGatheringState)
|
| - nativeIceGatheringStateForState:(RTCIceGatheringState)state {
|
| - switch (state) {
|
| - case RTCIceGatheringStateNew:
|
| - return webrtc::PeerConnectionInterface::kIceGatheringNew;
|
| - case RTCIceGatheringStateGathering:
|
| - return webrtc::PeerConnectionInterface::kIceGatheringGathering;
|
| - case RTCIceGatheringStateComplete:
|
| - return webrtc::PeerConnectionInterface::kIceGatheringComplete;
|
| - }
|
| -}
|
| -
|
| -+ (RTCIceGatheringState)iceGatheringStateForNativeState:
|
| - (webrtc::PeerConnectionInterface::IceGatheringState)nativeState {
|
| - switch (nativeState) {
|
| - case webrtc::PeerConnectionInterface::kIceGatheringNew:
|
| - return RTCIceGatheringStateNew;
|
| - case webrtc::PeerConnectionInterface::kIceGatheringGathering:
|
| - return RTCIceGatheringStateGathering;
|
| - case webrtc::PeerConnectionInterface::kIceGatheringComplete:
|
| - return RTCIceGatheringStateComplete;
|
| - }
|
| -}
|
| -
|
| -+ (NSString *)stringForIceGatheringState:(RTCIceGatheringState)state {
|
| - switch (state) {
|
| - case RTCIceGatheringStateNew:
|
| - return @"NEW";
|
| - case RTCIceGatheringStateGathering:
|
| - return @"GATHERING";
|
| - case RTCIceGatheringStateComplete:
|
| - return @"COMPLETE";
|
| - }
|
| -}
|
| -
|
| -+ (webrtc::PeerConnectionInterface::StatsOutputLevel)
|
| - nativeStatsOutputLevelForLevel:(RTCStatsOutputLevel)level {
|
| - switch (level) {
|
| - case RTCStatsOutputLevelStandard:
|
| - return webrtc::PeerConnectionInterface::kStatsOutputLevelStandard;
|
| - case RTCStatsOutputLevelDebug:
|
| - return webrtc::PeerConnectionInterface::kStatsOutputLevelDebug;
|
| - }
|
| -}
|
| -
|
| -- (rtc::scoped_refptr<webrtc::PeerConnectionInterface>)nativePeerConnection {
|
| - return _peerConnection;
|
| -}
|
| -
|
| -@end
|
|
|