/*
 *  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+Private.h"

#import "webrtc/api/objc/RTCDataChannel+Private.h"
#import "webrtc/api/objc/RTCDataChannelConfiguration+Private.h"
#import "webrtc/base/objc/NSString+StdString.h"

@implementation RTCPeerConnection (DataChannel)

- (RTCDataChannel *)dataChannelForLabel:(NSString *)label
                          configuration:
    (RTCDataChannelConfiguration *)configuration {
  std::string labelString = [NSString stdStringForString:label];
  const webrtc::DataChannelInit nativeInit =
      configuration.nativeDataChannelInit;
  rtc::scoped_refptr<webrtc::DataChannelInterface> dataChannel =
      self.nativePeerConnection->CreateDataChannel(labelString,
                                                   &nativeInit);
  return [[RTCDataChannel alloc] initWithNativeDataChannel:dataChannel];
}

@end
