1364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org/* 2364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2013 Google Inc. 4364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * 5364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * Redistribution and use in source and binary forms, with or without 6364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * modification, are permitted provided that the following conditions are met: 7364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * 8364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 9364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * this list of conditions and the following disclaimer. 10364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 11364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * this list of conditions and the following disclaimer in the documentation 12364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * and/or other materials provided with the distribution. 13364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * 3. The name of the author may not be used to endorse or promote products 14364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * derived from this software without specific prior written permission. 15364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * 16364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org */ 27364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 28364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#ifndef TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ 29364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#define TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ 30364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 31364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h" 32364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#include "talk/app/webrtc/test/fakeaudiocapturemodule.h" 33364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#include "talk/app/webrtc/test/fakeconstraints.h" 34364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#include "talk/app/webrtc/test/fakevideotrackrenderer.h" 35d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/sigslot.h" 36364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 37364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.orgclass PeerConnectionTestWrapper 38364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org : public webrtc::PeerConnectionObserver, 39364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org public webrtc::CreateSessionDescriptionObserver, 40364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org public sigslot::has_slots<> { 41364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org public: 42364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org static void Connect(PeerConnectionTestWrapper* caller, 43364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org PeerConnectionTestWrapper* callee); 44364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 45364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org explicit PeerConnectionTestWrapper(const std::string& name); 46364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual ~PeerConnectionTestWrapper(); 47364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 48364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool CreatePc(const webrtc::MediaConstraintsInterface* constraints); 49364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 50d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<webrtc::DataChannelInterface> CreateDataChannel( 511a6c6281ca028e4fbba5c015ed7166ffc34bae9cjiayl@webrtc.org const std::string& label, 521a6c6281ca028e4fbba5c015ed7166ffc34bae9cjiayl@webrtc.org const webrtc::DataChannelInit& init); 531a6c6281ca028e4fbba5c015ed7166ffc34bae9cjiayl@webrtc.org 54364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org // Implements PeerConnectionObserver. 55364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnSignalingChange( 56364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org webrtc::PeerConnectionInterface::SignalingState new_state) {} 57364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnStateChange( 58364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org webrtc::PeerConnectionObserver::StateType state_changed) {} 59364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnAddStream(webrtc::MediaStreamInterface* stream); 60364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnRemoveStream(webrtc::MediaStreamInterface* stream) {} 611a6c6281ca028e4fbba5c015ed7166ffc34bae9cjiayl@webrtc.org virtual void OnDataChannel(webrtc::DataChannelInterface* data_channel); 62364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnRenegotiationNeeded() {} 63364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnIceConnectionChange( 64364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org webrtc::PeerConnectionInterface::IceConnectionState new_state) {} 65364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnIceGatheringChange( 66364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org webrtc::PeerConnectionInterface::IceGatheringState new_state) {} 67364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate); 68364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnIceComplete() {} 69364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 70364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org // Implements CreateSessionDescriptionObserver. 71364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc); 72364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org virtual void OnFailure(const std::string& error) {} 73364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 74364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void CreateOffer(const webrtc::MediaConstraintsInterface* constraints); 75364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void CreateAnswer(const webrtc::MediaConstraintsInterface* constraints); 76364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void ReceiveOfferSdp(const std::string& sdp); 77364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void ReceiveAnswerSdp(const std::string& sdp); 78364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void AddIceCandidate(const std::string& sdp_mid, int sdp_mline_index, 79364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org const std::string& candidate); 80364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void WaitForCallEstablished(); 81364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void WaitForConnection(); 82364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void WaitForAudio(); 83364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void WaitForVideo(); 84364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void GetAndAddUserMedia( 85364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool audio, const webrtc::FakeConstraints& audio_constraints, 86364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool video, const webrtc::FakeConstraints& video_constraints); 87364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 88364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org // sigslots 89364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org sigslot::signal1<std::string*> SignalOnIceCandidateCreated; 90364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org sigslot::signal3<const std::string&, 91364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org int, 92364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org const std::string&> SignalOnIceCandidateReady; 93364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org sigslot::signal1<std::string*> SignalOnSdpCreated; 94364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org sigslot::signal1<const std::string&> SignalOnSdpReady; 951a6c6281ca028e4fbba5c015ed7166ffc34bae9cjiayl@webrtc.org sigslot::signal1<webrtc::DataChannelInterface*> SignalOnDataChannel; 96364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 97364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org private: 98364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void SetLocalDescription(const std::string& type, const std::string& sdp); 99364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org void SetRemoteDescription(const std::string& type, const std::string& sdp); 100364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool CheckForConnection(); 101364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool CheckForAudio(); 102364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool CheckForVideo(); 103d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<webrtc::MediaStreamInterface> GetUserMedia( 104364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool audio, const webrtc::FakeConstraints& audio_constraints, 105364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org bool video, const webrtc::FakeConstraints& video_constraints); 106364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 107364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org std::string name_; 108d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_; 109d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> 110364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org peer_connection_factory_; 111d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_; 112d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_ptr<webrtc::FakeVideoTrackRenderer> renderer_; 113364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org}; 114364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org 115364f204d16d1f10cf01b1b5543ce020c3e9961b8wu@webrtc.org#endif // TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ 116