15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2004 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_SESSION_MEDIA_CALL_H_ 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#define TALK_SESSION_MEDIA_CALL_H_ 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <deque> 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <map> 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <vector> 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/messagequeue.h" 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/mediachannel.h" 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/screencastid.h" 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/streamparams.h" 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/videocommon.h" 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/p2p/base/session.h" 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/p2p/client/socketmonitor.h" 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/audiomonitor.h" 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/currentspeakermonitor.h" 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/mediamessages.h" 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/session/media/mediasession.h" 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/jid.h" 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace cricket { 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass MediaSessionClient; 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass BaseChannel; 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VoiceChannel; 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VideoChannel; 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DataChannel; 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Can't typedef this easily since it's forward declared as struct elsewhere. 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct CallOptions : public MediaSessionOptions { 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass Call : public talk_base::MessageHandler, public sigslot::has_slots<> { 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org explicit Call(MediaSessionClient* session_client); 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ~Call(); 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // |initiator| can be empty. 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Session* InitiateSession(const buzz::Jid& to, const buzz::Jid& initiator, 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const CallOptions& options); 69c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org Session* InitiateSession(const std::string& id, const buzz::Jid& to, 70c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org const CallOptions& options); 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void AcceptSession(Session* session, const CallOptions& options); 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void RejectSession(Session* session); 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void TerminateSession(Session* session); 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void Terminate(); 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool SendViewRequest(Session* session, 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const ViewRequest& view_request); 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SetLocalRenderer(VideoRenderer* renderer); 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SetVideoRenderer(Session* session, uint32 ssrc, 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoRenderer* renderer); 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void StartConnectionMonitor(Session* session, int cms); 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void StopConnectionMonitor(Session* session); 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void StartAudioMonitor(Session* session, int cms); 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void StopAudioMonitor(Session* session); 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool IsAudioMonitorRunning(Session* session); 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void StartSpeakerMonitor(Session* session); 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void StopSpeakerMonitor(Session* session); 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void Mute(bool mute); 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void MuteVideo(bool mute); 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool SendData(Session* session, 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const SendDataParams& params, 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const talk_base::Buffer& payload, 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SendDataResult* result); 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void PressDTMF(int event); 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool StartScreencast(Session* session, 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::string& stream_name, uint32 ssrc, 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const ScreencastId& screencastid, int fps); 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool StopScreencast(Session* session, 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::string& stream_name, uint32 ssrc); 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<Session*> sessions(); 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org uint32 id(); 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool has_video() const { return has_video_; } 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool has_data() const { return has_data_; } 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool muted() const { return muted_; } 105c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org bool video() const { return has_video_; } 106c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org bool secure() const; 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool video_muted() const { return video_muted_; } 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<StreamParams>* GetDataRecvStreams(Session* session) const { 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreams* recv_streams = GetMediaStreams(session); 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return recv_streams ? &recv_streams->data() : NULL; 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<StreamParams>* GetVideoRecvStreams(Session* session) const { 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreams* recv_streams = GetMediaStreams(session); 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return recv_streams ? &recv_streams->video() : NULL; 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<StreamParams>* GetAudioRecvStreams(Session* session) const { 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreams* recv_streams = GetMediaStreams(session); 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return recv_streams ? &recv_streams->audio() : NULL; 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 120e73fa366a56d0c3c46860c534db19fffe110f167mallinath@webrtc.org VoiceChannel* GetVoiceChannel(Session* session) const; 121e73fa366a56d0c3c46860c534db19fffe110f167mallinath@webrtc.org VideoChannel* GetVideoChannel(Session* session) const; 122e73fa366a56d0c3c46860c534db19fffe110f167mallinath@webrtc.org DataChannel* GetDataChannel(Session* session) const; 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Public just for unit tests 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoContentDescription* CreateVideoStreamUpdate(const StreamParams& stream); 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Takes ownership of video. 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SendVideoStreamUpdate(Session* session, VideoContentDescription* video); 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Setting this to false will cause the call to have a longer timeout and 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // for the SignalSetupToCallVoicemail to never fire. 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void set_send_to_voicemail(bool send_to_voicemail) { 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org send_to_voicemail_ = send_to_voicemail; 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool send_to_voicemail() { return send_to_voicemail_; } 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const VoiceMediaInfo& last_voice_media_info() const { 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return last_voice_media_info_; 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Sets a flag on the chatapp that will redirect the call to voicemail once 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // the call has been terminated 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal0<> SignalSetupToCallVoicemail; 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, Session*> SignalAddSession; 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, Session*> SignalRemoveSession; 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal3<Call*, Session*, Session::State> 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalSessionState; 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal3<Call*, Session*, Session::Error> 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalSessionError; 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal3<Call*, Session*, const std::string &> 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalReceivedTerminateReason; 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, const std::vector<ConnectionInfo> &> 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalConnectionMonitor; 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, const VoiceMediaInfo&> SignalMediaMonitor; 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, const AudioInfo&> SignalAudioMonitor; 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Empty nick on StreamParams means "unknown". 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // No ssrcs in StreamParams means "no current speaker". 1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal3<Call*, 1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Session*, 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const StreamParams&> SignalSpeakerMonitor; 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, const std::vector<ConnectionInfo> &> 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalVideoConnectionMonitor; 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal2<Call*, const VideoMediaInfo&> SignalVideoMediaMonitor; 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Gives added streams and removed streams, in that order. 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal4<Call*, 1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Session*, 1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const MediaStreams&, 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const MediaStreams&> SignalMediaStreamsUpdate; 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sigslot::signal3<Call*, 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const ReceiveDataParams&, 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const talk_base::Buffer&> SignalDataReceived; 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private: 1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnMessage(talk_base::Message* message); 1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnSessionState(BaseSession* base_session, BaseSession::State state); 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnSessionError(BaseSession* base_session, Session::Error error); 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnSessionInfoMessage( 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Session* session, const buzz::XmlElement* action_elem); 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnViewRequest( 1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Session* session, const ViewRequest& view_request); 1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnRemoteDescriptionUpdate( 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org BaseSession* base_session, const ContentInfos& updated_contents); 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnReceivedTerminateReason(Session* session, const std::string &reason); 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void IncomingSession(Session* session, const SessionDescription* offer); 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Returns true on success. 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool AddSession(Session* session, const SessionDescription* offer); 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void RemoveSession(Session* session); 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void EnableChannels(bool enable); 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void EnableSessionChannels(Session* session, bool enable); 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void Join(Call* call, bool enable); 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnConnectionMonitor(VoiceChannel* channel, 1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<ConnectionInfo> &infos); 1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnMediaMonitor(VoiceChannel* channel, const VoiceMediaInfo& info); 1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnAudioMonitor(VoiceChannel* channel, const AudioInfo& info); 1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnSpeakerMonitor(CurrentSpeakerMonitor* monitor, uint32 ssrc); 1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnConnectionMonitor(VideoChannel* channel, 1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<ConnectionInfo> &infos); 1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnMediaMonitor(VideoChannel* channel, const VideoMediaInfo& info); 1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnDataReceived(DataChannel* channel, 1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const ReceiveDataParams& params, 1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const talk_base::Buffer& payload); 1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreams* GetMediaStreams(Session* session) const; 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void UpdateRemoteMediaStreams(Session* session, 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const ContentInfos& updated_contents, 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool update_channels); 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool UpdateVoiceChannelRemoteContent(Session* session, 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const AudioContentDescription* audio); 2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool UpdateVideoChannelRemoteContent(Session* session, 2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const VideoContentDescription* video); 2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool UpdateDataChannelRemoteContent(Session* session, 2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const DataContentDescription* data); 2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void UpdateRecvStreams(const std::vector<StreamParams>& update_streams, 2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org BaseChannel* channel, 2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* recv_streams, 2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* added_streams, 2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* removed_streams); 2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void AddRecvStreams(const std::vector<StreamParams>& added_streams, 2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org BaseChannel* channel, 2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* recv_streams); 2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void AddRecvStream(const StreamParams& stream, 2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org BaseChannel* channel, 2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* recv_streams); 2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void RemoveRecvStreams(const std::vector<StreamParams>& removed_streams, 2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org BaseChannel* channel, 2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* recv_streams); 2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void RemoveRecvStream(const StreamParams& stream, 2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org BaseChannel* channel, 2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<StreamParams>* recv_streams); 2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void ContinuePlayDTMF(); 2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool StopScreencastWithoutSendingUpdate(Session* session, uint32 ssrc); 2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool StopAllScreencastsWithoutSendingUpdate(Session* session); 229c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org bool SessionDescriptionContainsCrypto(const SessionDescription* sdesc) const; 230c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org Session* InternalInitiateSession(const std::string& id, 231c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org const buzz::Jid& to, 232c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org const std::string& initiator_name, 233c237f0ad875cde990bf9d89f41424b18809cc345henrike@webrtc.org const CallOptions& options); 2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org uint32 id_; 2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaSessionClient* session_client_; 2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org struct StartedCapture { 2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org StartedCapture(cricket::VideoCapturer* capturer, 2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::VideoFormat& format) : 2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer(capturer), 2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org format(format) { 2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoCapturer* capturer; 2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoFormat format; 2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org }; 2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org typedef std::map<uint32, StartedCapture> StartedScreencastMap; 2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org struct MediaSession { 2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Session* session; 2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VoiceChannel* voice_channel; 2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoChannel* video_channel; 2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org DataChannel* data_channel; 2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaStreams* recv_streams; 2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org StartedScreencastMap started_screencasts; 2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org }; 2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Create a map of media sessions, keyed off session->id(). 2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org typedef std::map<std::string, MediaSession> MediaSessionMap; 2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org MediaSessionMap media_session_map_; 2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::map<std::string, CurrentSpeakerMonitor*> speaker_monitor_map_; 2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoRenderer* local_renderer_; 2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool has_video_; 2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool has_data_; 2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool muted_; 2675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool video_muted_; 2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool send_to_voicemail_; 2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // DTMF tones have to be queued up so that we don't flood the call. We 2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // keep a deque (doubely ended queue) of them around. While one is playing we 2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // set the playing_dtmf_ bit and schedule a message in XX msec to clear that 2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // bit or start the next tone playing. 2745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::deque<int> queued_dtmf_; 2755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool playing_dtmf_; 2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VoiceMediaInfo last_voice_media_info_; 2785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org friend class MediaSessionClient; 2805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // namespace cricket 2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif // TALK_SESSION_MEDIA_CALL_H_ 285