181134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org/*
281134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * libjingle
35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2014 Google Inc.
481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *
581134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * Redistribution and use in source and binary forms, with or without
681134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * modification, are permitted provided that the following conditions are met:
781134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *
881134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
981134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *     this list of conditions and the following disclaimer.
1081134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
1181134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *     this list of conditions and the following disclaimer in the documentation
1281134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *     and/or other materials provided with the distribution.
1381134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *  3. The name of the author may not be used to endorse or promote products
1481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *     derived from this software without specific prior written permission.
1581134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org *
1681134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
1781134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1881134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
1981134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2081134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
2181134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
2281134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2381134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
2581134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2681134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org */
275f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org
2881134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org#ifndef TALK_APP_WEBRTC_PEERCONNECTIONFACTORYPROXY_H_
2981134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org#define TALK_APP_WEBRTC_PEERCONNECTIONFACTORYPROXY_H_
3081134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org
3181134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org#include <string>
320eb15ed7b806125774bd13fb214aeb403e2c6857kwiberg#include <utility>
3381134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org
3481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h"
3581134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org#include "talk/app/webrtc/proxy.h"
365e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström#include "webrtc/base/bind.h"
3781134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org
3881134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.orgnamespace webrtc {
3981134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org
4081134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.orgBEGIN_PROXY_MAP(PeerConnectionFactory)
4181134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org  PROXY_METHOD1(void, SetOptions, const Options&)
420eb15ed7b806125774bd13fb214aeb403e2c6857kwiberg  // Can't use PROXY_METHOD5 because scoped_ptr must be moved.
435e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström  // TODO(tommi,hbos): Use of templates to support scoped_ptr?
445e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström  rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection(
455e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström      const PeerConnectionInterface::RTCConfiguration& a1,
465e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström      const MediaConstraintsInterface* a2,
4741b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      rtc::scoped_ptr<cricket::PortAllocator> a3,
4841b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      rtc::scoped_ptr<DtlsIdentityStoreInterface> a4,
4941b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      PeerConnectionObserver* a5) override {
5041b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef    return owner_thread_->Invoke<rtc::scoped_refptr<PeerConnectionInterface>>(
510c7e9f540b282d60b94081f601a1694054d8646eTaylor Brandstetter        rtc::Bind(&PeerConnectionFactoryProxy::CreatePeerConnection_ot, this,
5241b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef                  a1, a2, a3.release(), a4.release(), a5));
5341b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef  }
5481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org  PROXY_METHOD1(rtc::scoped_refptr<MediaStreamInterface>,
5581134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org                CreateLocalMediaStream, const std::string&)
5681134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org  PROXY_METHOD1(rtc::scoped_refptr<AudioSourceInterface>,
5781134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org                CreateAudioSource, const MediaConstraintsInterface*)
5881134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org  PROXY_METHOD2(rtc::scoped_refptr<VideoSourceInterface>,
5981134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org                CreateVideoSource, cricket::VideoCapturer*,
6081134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org                const MediaConstraintsInterface*)
6181134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org  PROXY_METHOD2(rtc::scoped_refptr<VideoTrackInterface>,
6281134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org                CreateVideoTrack, const std::string&,  VideoSourceInterface*)
6381134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org  PROXY_METHOD2(rtc::scoped_refptr<AudioTrackInterface>,
6481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org                CreateAudioTrack, const std::string&,  AudioSourceInterface*)
65a4df27b6713583045e51e20c4eb93718d15ca33eivoc  PROXY_METHOD1(bool, StartAecDump, rtc::PlatformFile)
66797ef123249f793655640e8cb6ff1eb4fe7e3223ivoc  PROXY_METHOD0(void, StopAecDump)
67112a3d81db02d349af0ce6c0827da6d8fbc421a8ivoc  PROXY_METHOD1(bool, StartRtcEventLog, rtc::PlatformFile)
68112a3d81db02d349af0ce6c0827da6d8fbc421a8ivoc  PROXY_METHOD0(void, StopRtcEventLog)
695e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström
705e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström private:
710c7e9f540b282d60b94081f601a1694054d8646eTaylor Brandstetter  rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection_ot(
7241b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      const PeerConnectionInterface::RTCConfiguration& a1,
7341b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      const MediaConstraintsInterface* a2,
7441b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      cricket::PortAllocator* a3,
7541b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      DtlsIdentityStoreInterface* a4,
7641b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef      PeerConnectionObserver* a5) {
7741b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef    rtc::scoped_ptr<cricket::PortAllocator> ptr_a3(a3);
7841b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef    rtc::scoped_ptr<DtlsIdentityStoreInterface> ptr_a4(a4);
790eb15ed7b806125774bd13fb214aeb403e2c6857kwiberg    return c_->CreatePeerConnection(a1, a2, std::move(ptr_a3),
800eb15ed7b806125774bd13fb214aeb403e2c6857kwiberg                                    std::move(ptr_a4), a5);
8141b0798e1171a105404f6bc9dcb591cdc77d659fdeadbeef  }
8281134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.orgEND_PROXY()
8381134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org
8481134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org}  // namespace webrtc
8581134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org
8681134d019d1e3a9f7bfb4dc51d90e66e8d06b27dperkj@webrtc.org#endif  // TALK_APP_WEBRTC_PEERCONNECTIONFACTORYPROXY_H_
87