/* * libjingle * Copyright 2013, Google Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ #define TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_ #include "talk/app/webrtc/peerconnectioninterface.h" #include "talk/app/webrtc/test/fakeaudiocapturemodule.h" #include "talk/app/webrtc/test/fakeconstraints.h" #include "talk/app/webrtc/test/fakevideotrackrenderer.h" #include "talk/base/sigslot.h" #include "talk/base/thread.h" namespace webrtc { class PortAllocatorFactoryInterface; } class PeerConnectionTestWrapper : public webrtc::PeerConnectionObserver, public webrtc::CreateSessionDescriptionObserver, public sigslot::has_slots<> { public: static void Connect(PeerConnectionTestWrapper* caller, PeerConnectionTestWrapper* callee); explicit PeerConnectionTestWrapper(const std::string& name); virtual ~PeerConnectionTestWrapper(); bool CreatePc(const webrtc::MediaConstraintsInterface* constraints); // Implements PeerConnectionObserver. virtual void OnError() {} virtual void OnSignalingChange( webrtc::PeerConnectionInterface::SignalingState new_state) {} virtual void OnStateChange( webrtc::PeerConnectionObserver::StateType state_changed) {} virtual void OnAddStream(webrtc::MediaStreamInterface* stream); virtual void OnRemoveStream(webrtc::MediaStreamInterface* stream) {} virtual void OnDataChannel(webrtc::DataChannelInterface* data_channel) {} virtual void OnRenegotiationNeeded() {} virtual void OnIceConnectionChange( webrtc::PeerConnectionInterface::IceConnectionState new_state) {} virtual void OnIceGatheringChange( webrtc::PeerConnectionInterface::IceGatheringState new_state) {} virtual void OnIceCandidate(const webrtc::IceCandidateInterface* candidate); virtual void OnIceComplete() {} // Implements CreateSessionDescriptionObserver. virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc); virtual void OnFailure(const std::string& error) {} void CreateOffer(const webrtc::MediaConstraintsInterface* constraints); void CreateAnswer(const webrtc::MediaConstraintsInterface* constraints); void ReceiveOfferSdp(const std::string& sdp); void ReceiveAnswerSdp(const std::string& sdp); void AddIceCandidate(const std::string& sdp_mid, int sdp_mline_index, const std::string& candidate); void WaitForCallEstablished(); void WaitForConnection(); void WaitForAudio(); void WaitForVideo(); void GetAndAddUserMedia( bool audio, const webrtc::FakeConstraints& audio_constraints, bool video, const webrtc::FakeConstraints& video_constraints); // sigslots sigslot::signal1 SignalOnIceCandidateCreated; sigslot::signal3 SignalOnIceCandidateReady; sigslot::signal1 SignalOnSdpCreated; sigslot::signal1 SignalOnSdpReady; private: void SetLocalDescription(const std::string& type, const std::string& sdp); void SetRemoteDescription(const std::string& type, const std::string& sdp); bool CheckForConnection(); bool CheckForAudio(); bool CheckForVideo(); talk_base::scoped_refptr GetUserMedia( bool audio, const webrtc::FakeConstraints& audio_constraints, bool video, const webrtc::FakeConstraints& video_constraints); std::string name_; talk_base::Thread audio_thread_; talk_base::scoped_refptr allocator_factory_; talk_base::scoped_refptr peer_connection_; talk_base::scoped_refptr peer_connection_factory_; talk_base::scoped_refptr fake_audio_capture_module_; talk_base::scoped_ptr renderer_; }; #endif // TALK_APP_WEBRTC_TEST_PEERCONNECTIONTESTWRAPPER_H_