15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2012, Google Inc. 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met: 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer. 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer in the documentation 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * and/or other materials provided with the distribution. 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * derived from this software without specific prior written permission. 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */ 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifndef TALK_APP_WEBRTC_WEBRTCSESSION_H_ 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#define TALK_APP_WEBRTC_WEBRTCSESSION_H_ 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h" 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/app/webrtc/dtmfsender.h" 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/app/webrtc/mediastreamprovider.h" 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/app/webrtc/datachannel.h" 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/app/webrtc/statstypes.h" 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/sigslot.h" 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/thread.h" 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/mediachannel.h" 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/p2p/base/session.h" 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/mediasession.h" 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace cricket { 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass ChannelManager; 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DataChannel; 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass StatsReport; 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass Transport; 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VideoCapturer; 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass BaseChannel; 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VideoChannel; 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VoiceChannel; 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // namespace cricket 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace webrtc { 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass IceRestartAnswerLatch; 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MediaStreamSignaling; 61e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.orgclass WebRtcSessionDescriptionFactory; 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kSetLocalSdpFailed[]; 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kSetRemoteSdpFailed[]; 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kCreateChannelFailed[]; 66c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.orgextern const char kBundleWithoutRtcpMux[]; 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kInvalidCandidates[]; 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kInvalidSdp[]; 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kMlineMismatch[]; 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kSdpWithoutCrypto[]; 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kSessionError[]; 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kUpdateStateFailed[]; 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kPushDownOfferTDFailed[]; 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kPushDownPranswerTDFailed[]; 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern const char kPushDownAnswerTDFailed[]; 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// ICE state callback interface. 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass IceObserver { 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Called any time the IceConnectionState changes 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnIceConnectionChange( 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org PeerConnectionInterface::IceConnectionState new_state) {} 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Called any time the IceGatheringState changes 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnIceGatheringChange( 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org PeerConnectionInterface::IceGatheringState new_state) {} 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // New Ice candidate have been found. 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnIceCandidate(const IceCandidateInterface* candidate) = 0; 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // All Ice candidates have been found. 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // TODO(bemasc): Remove this once callers transition to OnIceGatheringChange. 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // (via PeerConnectionObserver) 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnIceComplete() {} 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org protected: 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ~IceObserver() {} 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass WebRtcSession : public cricket::BaseSession, 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public AudioProviderInterface, 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public DataChannelFactory, 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public VideoProviderInterface, 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public DtmfProviderInterface { 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org WebRtcSession(cricket::ChannelManager* channel_manager, 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::Thread* signaling_thread, 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::Thread* worker_thread, 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::PortAllocator* port_allocator, 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreamSignaling* mediastream_signaling); 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual ~WebRtcSession(); 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 110e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org bool Initialize(const MediaConstraintsInterface* constraints, 111e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org DTLSIdentityServiceInterface* dtls_identity_service); 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Deletes the voice, video and data channel and changes the session state 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // to STATE_RECEIVEDTERMINATE. 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void Terminate(); 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void RegisterIceObserver(IceObserver* observer) { 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ice_observer_ = observer; 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual cricket::VoiceChannel* voice_channel() { 1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return voice_channel_.get(); 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual cricket::VideoChannel* video_channel() { 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return video_channel_.get(); 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual cricket::DataChannel* data_channel() { 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return data_channel_.get(); 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void set_secure_policy(cricket::SecureMediaPolicy secure_policy); 131e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org cricket::SecureMediaPolicy secure_policy() const; 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Generic error message callback from WebRtcSession. 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // TODO - It may be necessary to supply error code as well. 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal0<> SignalError; 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 137e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org void CreateOffer(CreateSessionDescriptionObserver* observer, 138e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org const MediaConstraintsInterface* constraints); 139e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org void CreateAnswer(CreateSessionDescriptionObserver* observer, 140e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org const MediaConstraintsInterface* constraints); 141b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org // The ownership of |desc| will be transferred after this call. 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool SetLocalDescription(SessionDescriptionInterface* desc, 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string* err_desc); 144b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org // The ownership of |desc| will be transferred after this call. 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool SetRemoteDescription(SessionDescriptionInterface* desc, 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string* err_desc); 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool ProcessIceMessage(const IceCandidateInterface* ice_candidate); 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const SessionDescriptionInterface* local_description() const { 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return local_desc_.get(); 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const SessionDescriptionInterface* remote_description() const { 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return remote_desc_.get(); 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 155e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org void set_secure(cricket::SecureMediaPolicy secure_policy); 156e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org cricket::SecureMediaPolicy secure(); 157e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Get the id used as a media stream track's "id" field from ssrc. 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetTrackIdBySsrc(uint32 ssrc, std::string* id); 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // AudioMediaProviderInterface implementation. 162c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org virtual void SetAudioPlayout(uint32 ssrc, bool enable, 163c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org cricket::AudioRenderer* renderer) OVERRIDE; 1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void SetAudioSend(uint32 ssrc, bool enable, 165c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org const cricket::AudioOptions& options, 166c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org cricket::AudioRenderer* renderer) OVERRIDE; 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Implements VideoMediaProviderInterface. 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool SetCaptureDevice(uint32 ssrc, 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoCapturer* camera) OVERRIDE; 1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void SetVideoPlayout(uint32 ssrc, 1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool enable, 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoRenderer* renderer) OVERRIDE; 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void SetVideoSend(uint32 ssrc, bool enable, 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::VideoOptions* options) OVERRIDE; 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Implements DtmfProviderInterface. 1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool CanInsertDtmf(const std::string& track_id); 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool InsertDtmf(const std::string& track_id, 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int code, int duration); 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual sigslot::signal0<>* GetOnDestroyedSignal(); 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_refptr<DataChannel> CreateDataChannel( 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::string& label, 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const DataChannelInit* config); 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::DataChannelType data_channel_type() const; 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 189e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org bool IceRestartPending() const; 190e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 191e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org void ResetIceRestartLatch(); 192e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 193e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org // Called when an SSLIdentity is generated or retrieved by 194e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org // WebRTCSessionDescriptionFactory. Should happen before setLocalDescription. 195e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org void OnIdentityReady(talk_base::SSLIdentity* identity); 196e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 197e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org // For unit test. 198e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org bool waiting_for_identity() const; 199e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private: 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Indicates the type of SessionDescription in a call to SetLocalDescription 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // and SetRemoteDescription. 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org enum Action { 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org kOffer, 2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org kPrAnswer, 2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org kAnswer, 2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org }; 208e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Invokes ConnectChannels() on transport proxies, which initiates ice 2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // candidates allocation. 2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool StartCandidatesAllocation(); 2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool UpdateSessionState(Action action, cricket::ContentSource source, 2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::SessionDescription* desc, 2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string* err_desc); 2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org static Action GetAction(const std::string& type); 2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Transport related callbacks, override from cricket::BaseSession. 2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnTransportRequestSignaling(cricket::Transport* transport); 2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnTransportConnecting(cricket::Transport* transport); 2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnTransportWritable(cricket::Transport* transport); 2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnTransportProxyCandidatesReady( 2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::TransportProxy* proxy, 2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::Candidates& candidates); 2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void OnCandidatesAllocationDone(); 2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Check if a call to SetLocalDescription is acceptable with |action|. 2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool ExpectSetLocalDescription(Action action); 2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Check if a call to SetRemoteDescription is acceptable with |action|. 2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool ExpectSetRemoteDescription(Action action); 2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Creates local session description with audio and video contents. 2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool CreateDefaultLocalDescription(); 2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Enables media channels to allow sending of media. 2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void EnableChannels(); 2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Creates a JsepIceCandidate and adds it to the local session description 2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // and notify observers. Called when a new local candidate have been found. 2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void ProcessNewLocalCandidate(const std::string& content_name, 2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::Candidates& candidates); 2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Returns the media index for a local ice candidate given the content name. 2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Returns false if the local session description does not have a media 2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // content called |content_name|. 2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool GetLocalCandidateMediaIndex(const std::string& content_name, 2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int* sdp_mline_index); 2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Uses all remote candidates in |remote_desc| in this session. 2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool UseCandidatesInSessionDescription( 2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const SessionDescriptionInterface* remote_desc); 2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Uses |candidate| in this session. 2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool UseCandidate(const IceCandidateInterface* candidate); 2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Deletes the corresponding channel of contents that don't exist in |desc|. 2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // |desc| can be null. This means that all channels are deleted. 2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void RemoveUnusedChannelsAndTransports( 2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::SessionDescription* desc); 2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Allocates media channels based on the |desc|. If |desc| doesn't have 2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // the BUNDLE option, this method will disable BUNDLE in PortAllocator. 2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // This method will also delete any existing media channels before creating. 2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool CreateChannels(const cricket::SessionDescription* desc); 2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Helper methods to create media channels. 259c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org bool CreateVoiceChannel(const cricket::ContentInfo* content); 260c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org bool CreateVideoChannel(const cricket::ContentInfo* content); 261c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org bool CreateDataChannel(const cricket::ContentInfo* content); 262c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org 2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Copy the candidates from |saved_candidates_| to |dest_desc|. 2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // The |saved_candidates_| will be cleared after this function call. 2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void CopySavedCandidates(SessionDescriptionInterface* dest_desc); 2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 267e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org void OnDataReceived( 268e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org cricket::DataChannel* channel, 269e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org const cricket::ReceiveDataParams& params, 270e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org const talk_base::Buffer& payload); 2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool GetLocalTrackId(uint32 ssrc, std::string* track_id); 2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool GetRemoteTrackId(uint32 ssrc, std::string* track_id); 2745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string BadStateErrMsg(const std::string& type, State state); 2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SetIceConnectionState(PeerConnectionInterface::IceConnectionState state); 2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 278c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org bool VerifyBundleSettings(const cricket::SessionDescription* desc); 279c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org bool HasRtcpMuxEnabled(const cricket::ContentInfo* content); 280c1c67e5a722135af4ca83ee4c7d2dbe3f26bae70henrike@webrtc.org 2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<cricket::VoiceChannel> voice_channel_; 2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<cricket::VideoChannel> video_channel_; 2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<cricket::DataChannel> data_channel_; 2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::ChannelManager* channel_manager_; 2855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreamSignaling* mediastream_signaling_; 2865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org IceObserver* ice_observer_; 2875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org PeerConnectionInterface::IceConnectionState ice_connection_state_; 2885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<SessionDescriptionInterface> local_desc_; 2895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<SessionDescriptionInterface> remote_desc_; 2905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Candidates that arrived before the remote description was set. 2915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<IceCandidateInterface*> saved_candidates_; 2925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // If the remote peer is using a older version of implementation. 2935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool older_version_remote_peer_; 2945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Specifies which kind of data channel is allowed. This is controlled 2955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // by the chrome command-line flag and constraints: 2965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // 1. If chrome command-line switch 'enable-sctp-data-channels' is enabled, 2975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // constraint kEnableDtlsSrtp is true, and constaint kEnableRtpDataChannels is 2985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // not set or false, SCTP is allowed (DCT_SCTP); 2995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // 2. If constraint kEnableRtpDataChannels is true, RTP is allowed (DCT_RTP); 3005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // 3. If both 1&2 are false, data channel is not allowed (DCT_NONE). 3015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::DataChannelType data_channel_type_; 3025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<IceRestartAnswerLatch> ice_restart_latch_; 303e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 304e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org talk_base::scoped_ptr<WebRtcSessionDescriptionFactory> 305e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org webrtc_session_desc_factory_; 306e6781b6279d20210a5050a3e55e9c7effd3b144ewu@webrtc.org 3075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal0<> SignalVoiceChannelDestroyed; 3085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal0<> SignalVideoChannelDestroyed; 3095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal0<> SignalDataChannelDestroyed; 3105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 3115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // namespace webrtc 3135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif // TALK_APP_WEBRTC_WEBRTCSESSION_H_ 315