1 /* 2 * libjingle 3 * Copyright 2013 Google Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ 29 #define TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ 30 31 #include "talk/app/webrtc/peerconnectioninterface.h" 32 #include "talk/app/webrtc/test/fakeaudiocapturemodule.h" 33 #include "talk/app/webrtc/test/fakeconstraints.h" 34 #include "talk/app/webrtc/test/fakevideotrackrenderer.h" 35 #include "webrtc/base/sigslot.h" 36 37 class PeerConnectionTestWrapper 38 : public webrtc::PeerConnectionObserver, 39 public webrtc::CreateSessionDescriptionObserver, 40 public sigslot::has_slots<> { 41 public: 42 static void Connect(PeerConnectionTestWrapper* caller, 43 PeerConnectionTestWrapper* callee); 44 45 explicit PeerConnectionTestWrapper(const std::string& name); 46 virtual ~PeerConnectionTestWrapper(); 47 48 bool CreatePc(const webrtc::MediaConstraintsInterface* constraints); 49 50 rtc::scoped_refptr<webrtc::DataChannelInterface> CreateDataChannel( 51 const std::string& label, 52 const webrtc::DataChannelInit& init); 53 54 // Implements PeerConnectionObserver. OnSignalingChange(webrtc::PeerConnectionInterface::SignalingState new_state)55 virtual void OnSignalingChange( 56 webrtc::PeerConnectionInterface::SignalingState new_state) {} OnStateChange(webrtc::PeerConnectionObserver::StateType state_changed)57 virtual void OnStateChange( 58 webrtc::PeerConnectionObserver::StateType state_changed) {} 59 virtual void OnAddStream(webrtc::MediaStreamInterface* stream); OnRemoveStream(webrtc::MediaStreamInterface * stream)60 virtual void OnRemoveStream(webrtc::MediaStreamInterface* stream) {} 61 virtual void OnDataChannel(webrtc::DataChannelInterface* data_channel); OnRenegotiationNeeded()62 virtual void OnRenegotiationNeeded() {} OnIceConnectionChange(webrtc::PeerConnectionInterface::IceConnectionState new_state)63 virtual void OnIceConnectionChange( 64 webrtc::PeerConnectionInterface::IceConnectionState new_state) {} OnIceGatheringChange(webrtc::PeerConnectionInterface::IceGatheringState new_state)65 virtual void OnIceGatheringChange( 66 webrtc::PeerConnectionInterface::IceGatheringState new_state) {} 67 virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate); OnIceComplete()68 virtual void OnIceComplete() {} 69 70 // Implements CreateSessionDescriptionObserver. 71 virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc); OnFailure(const std::string & error)72 virtual void OnFailure(const std::string& error) {} 73 74 void CreateOffer(const webrtc::MediaConstraintsInterface* constraints); 75 void CreateAnswer(const webrtc::MediaConstraintsInterface* constraints); 76 void ReceiveOfferSdp(const std::string& sdp); 77 void ReceiveAnswerSdp(const std::string& sdp); 78 void AddIceCandidate(const std::string& sdp_mid, int sdp_mline_index, 79 const std::string& candidate); 80 void WaitForCallEstablished(); 81 void WaitForConnection(); 82 void WaitForAudio(); 83 void WaitForVideo(); 84 void GetAndAddUserMedia( 85 bool audio, const webrtc::FakeConstraints& audio_constraints, 86 bool video, const webrtc::FakeConstraints& video_constraints); 87 88 // sigslots 89 sigslot::signal1<std::string*> SignalOnIceCandidateCreated; 90 sigslot::signal3<const std::string&, 91 int, 92 const std::string&> SignalOnIceCandidateReady; 93 sigslot::signal1<std::string*> SignalOnSdpCreated; 94 sigslot::signal1<const std::string&> SignalOnSdpReady; 95 sigslot::signal1<webrtc::DataChannelInterface*> SignalOnDataChannel; 96 97 private: 98 void SetLocalDescription(const std::string& type, const std::string& sdp); 99 void SetRemoteDescription(const std::string& type, const std::string& sdp); 100 bool CheckForConnection(); 101 bool CheckForAudio(); 102 bool CheckForVideo(); 103 rtc::scoped_refptr<webrtc::MediaStreamInterface> GetUserMedia( 104 bool audio, const webrtc::FakeConstraints& audio_constraints, 105 bool video, const webrtc::FakeConstraints& video_constraints); 106 107 std::string name_; 108 rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_; 109 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> 110 peer_connection_factory_; 111 rtc::scoped_refptr<FakeAudioCaptureModule> fake_audio_capture_module_; 112 rtc::scoped_ptr<webrtc::FakeVideoTrackRenderer> renderer_; 113 }; 114 115 #endif // TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ 116