Index: webrtc/libjingle/session/media/call.h |
diff --git a/webrtc/libjingle/session/media/call.h b/webrtc/libjingle/session/media/call.h |
deleted file mode 100644 |
index 48b31b6df6207383855850145c9a1b73b467b398..0000000000000000000000000000000000000000 |
--- a/webrtc/libjingle/session/media/call.h |
+++ /dev/null |
@@ -1,308 +0,0 @@ |
-/* |
- * libjingle |
- * Copyright 2004 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 WEBRTC_LIBJINGLE_SESSION_MEDIA_CALL_H_ |
-#define WEBRTC_LIBJINGLE_SESSION_MEDIA_CALL_H_ |
- |
-#include <deque> |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "talk/media/base/mediachannel.h" |
-#include "talk/media/base/screencastid.h" |
-#include "talk/media/base/streamparams.h" |
-#include "talk/media/base/videocommon.h" |
-#include "talk/session/media/audiomonitor.h" |
-#include "talk/session/media/currentspeakermonitor.h" |
-#include "talk/session/media/mediasession.h" |
-#include "webrtc/base/messagequeue.h" |
-#include "webrtc/libjingle/session/media/mediamessages.h" |
-#include "webrtc/libjingle/session/sessionmanager.h" |
-#include "webrtc/libjingle/xmpp/jid.h" |
-#include "webrtc/p2p/client/socketmonitor.h" |
-#include "webrtc/p2p/client/socketmonitor.h" |
- |
-namespace cricket { |
- |
-struct AudioInfo; |
-class Call; |
-class MediaSessionClient; |
-class BaseChannel; |
-class VoiceChannel; |
-class VideoChannel; |
-class DataChannel; |
- |
-// Can't typedef this easily since it's forward declared as struct elsewhere. |
-struct CallOptions : public MediaSessionOptions { |
-}; |
- |
-// CurrentSpeakerMonitor used to have a dependency on Call. To remove this |
-// dependency, we create AudioSourceContext. CurrentSpeakerMonitor depends on |
-// AudioSourceContext. |
-// AudioSourceProxy acts as a proxy so that when SignalAudioMonitor |
-// in Call is triggered, SignalAudioMonitor in AudioSourceContext is triggered. |
-// Likewise, when OnMediaStreamsUpdate in Call is triggered, |
-// OnMediaStreamsUpdate in AudioSourceContext is triggered. |
-class AudioSourceProxy: public AudioSourceContext, public sigslot::has_slots<> { |
- public: |
- explicit AudioSourceProxy(Call* call); |
- |
- private: |
- void OnAudioMonitor(Call* call, const AudioInfo& info); |
- void OnMediaStreamsUpdate(Call* call, cricket::Session*, |
- const cricket::MediaStreams&, const cricket::MediaStreams&); |
- |
- Call* call_; |
-}; |
- |
-class Call : public rtc::MessageHandler, public sigslot::has_slots<> { |
- public: |
- explicit Call(MediaSessionClient* session_client); |
- ~Call(); |
- |
- // |initiator| can be empty. |
- Session* InitiateSession(const buzz::Jid& to, const buzz::Jid& initiator, |
- const CallOptions& options); |
- Session* InitiateSession(const std::string& id, const buzz::Jid& to, |
- const CallOptions& options); |
- void AcceptSession(Session* session, const CallOptions& options); |
- void RejectSession(Session* session); |
- void TerminateSession(Session* session); |
- void Terminate(); |
- bool SendViewRequest(Session* session, |
- const ViewRequest& view_request); |
- void SetVideoRenderer(Session* session, uint32 ssrc, |
- VideoRenderer* renderer); |
- void StartConnectionMonitor(Session* session, int cms); |
- void StopConnectionMonitor(Session* session); |
- void StartAudioMonitor(Session* session, int cms); |
- void StopAudioMonitor(Session* session); |
- bool IsAudioMonitorRunning(Session* session); |
- void StartSpeakerMonitor(Session* session); |
- void StopSpeakerMonitor(Session* session); |
- void Mute(bool mute); |
- void MuteVideo(bool mute); |
- bool SendData(Session* session, |
- const SendDataParams& params, |
- const rtc::Buffer& payload, |
- SendDataResult* result); |
- void PressDTMF(int event); |
- bool StartScreencast(Session* session, |
- const std::string& stream_name, uint32 ssrc, |
- const ScreencastId& screenid, int fps); |
- bool StopScreencast(Session* session, |
- const std::string& stream_name, uint32 ssrc); |
- |
- std::vector<Session*> sessions(); |
- uint32 id(); |
- bool has_video() const { return has_video_; } |
- bool has_data() const { return has_data_; } |
- bool muted() const { return muted_; } |
- bool video() const { return has_video_; } |
- bool secure() const; |
- bool video_muted() const { return video_muted_; } |
- const std::vector<StreamParams>* GetDataRecvStreams(Session* session) const { |
- MediaStreams* recv_streams = GetMediaStreams(session); |
- return recv_streams ? &recv_streams->data() : NULL; |
- } |
- const std::vector<StreamParams>* GetVideoRecvStreams(Session* session) const { |
- MediaStreams* recv_streams = GetMediaStreams(session); |
- return recv_streams ? &recv_streams->video() : NULL; |
- } |
- const std::vector<StreamParams>* GetAudioRecvStreams(Session* session) const { |
- MediaStreams* recv_streams = GetMediaStreams(session); |
- return recv_streams ? &recv_streams->audio() : NULL; |
- } |
- VoiceChannel* GetVoiceChannel(Session* session) const; |
- VideoChannel* GetVideoChannel(Session* session) const; |
- DataChannel* GetDataChannel(Session* session) const; |
- // Public just for unit tests |
- VideoContentDescription* CreateVideoStreamUpdate(const StreamParams& stream); |
- // Takes ownership of video. |
- void SendVideoStreamUpdate(Session* session, VideoContentDescription* video); |
- |
- // Setting this to false will cause the call to have a longer timeout and |
- // for the SignalSetupToCallVoicemail to never fire. |
- void set_send_to_voicemail(bool send_to_voicemail) { |
- send_to_voicemail_ = send_to_voicemail; |
- } |
- bool send_to_voicemail() { return send_to_voicemail_; } |
- const VoiceMediaInfo& last_voice_media_info() const { |
- return last_voice_media_info_; |
- } |
- |
- // Sets a flag on the chatapp that will redirect the call to voicemail once |
- // the call has been terminated |
- sigslot::signal0<> SignalSetupToCallVoicemail; |
- sigslot::signal2<Call*, Session*> SignalAddSession; |
- sigslot::signal2<Call*, Session*> SignalRemoveSession; |
- sigslot::signal3<Call*, Session*, Session::State> |
- SignalSessionState; |
- sigslot::signal3<Call*, Session*, Session::Error> |
- SignalSessionError; |
- sigslot::signal3<Call*, Session*, const std::string &> |
- SignalReceivedTerminateReason; |
- sigslot::signal2<Call*, const std::vector<ConnectionInfo> &> |
- SignalConnectionMonitor; |
- sigslot::signal2<Call*, const VoiceMediaInfo&> SignalMediaMonitor; |
- sigslot::signal2<Call*, const AudioInfo&> SignalAudioMonitor; |
- // Empty nick on StreamParams means "unknown". |
- // No ssrcs in StreamParams means "no current speaker". |
- sigslot::signal3<Call*, |
- Session*, |
- const StreamParams&> SignalSpeakerMonitor; |
- sigslot::signal2<Call*, const std::vector<ConnectionInfo> &> |
- SignalVideoConnectionMonitor; |
- sigslot::signal2<Call*, const VideoMediaInfo&> SignalVideoMediaMonitor; |
- // Gives added streams and removed streams, in that order. |
- sigslot::signal4<Call*, |
- Session*, |
- const MediaStreams&, |
- const MediaStreams&> SignalMediaStreamsUpdate; |
- sigslot::signal3<Call*, |
- const ReceiveDataParams&, |
- const rtc::Buffer&> SignalDataReceived; |
- |
- AudioSourceProxy* GetAudioSourceProxy(); |
- |
- private: |
- void OnMessage(rtc::Message* message); |
- void OnSessionState(BaseSession* base_session, BaseSession::State state); |
- void OnSessionError(BaseSession* base_session, BaseSession::Error error); |
- void OnSessionInfoMessage( |
- Session* session, const buzz::XmlElement* action_elem); |
- void OnViewRequest( |
- Session* session, const ViewRequest& view_request); |
- void OnRemoteDescriptionUpdate( |
- BaseSession* base_session, const ContentInfos& updated_contents); |
- void OnReceivedTerminateReason(Session* session, const std::string &reason); |
- void IncomingSession(Session* session, const SessionDescription* offer); |
- // Returns true on success. |
- bool AddSession(Session* session, const SessionDescription* offer); |
- void RemoveSession(Session* session); |
- void EnableChannels(bool enable); |
- void EnableSessionChannels(Session* session, bool enable); |
- void Join(Call* call, bool enable); |
- void OnConnectionMonitor(VoiceChannel* channel, |
- const std::vector<ConnectionInfo> &infos); |
- void OnMediaMonitor(VoiceChannel* channel, const VoiceMediaInfo& info); |
- void OnAudioMonitor(VoiceChannel* channel, const AudioInfo& info); |
- void OnSpeakerMonitor(CurrentSpeakerMonitor* monitor, uint32 ssrc); |
- void OnConnectionMonitor(VideoChannel* channel, |
- const std::vector<ConnectionInfo> &infos); |
- void OnMediaMonitor(VideoChannel* channel, const VideoMediaInfo& info); |
- void OnDataReceived(DataChannel* channel, |
- const ReceiveDataParams& params, |
- const rtc::Buffer& payload); |
- MediaStreams* GetMediaStreams(Session* session) const; |
- void UpdateRemoteMediaStreams(Session* session, |
- const ContentInfos& updated_contents, |
- bool update_channels); |
- bool UpdateVoiceChannelRemoteContent(Session* session, |
- const AudioContentDescription* audio); |
- bool UpdateVideoChannelRemoteContent(Session* session, |
- const VideoContentDescription* video); |
- bool UpdateDataChannelRemoteContent(Session* session, |
- const DataContentDescription* data); |
- void UpdateRecvStreams(const std::vector<StreamParams>& update_streams, |
- BaseChannel* channel, |
- std::vector<StreamParams>* recv_streams, |
- std::vector<StreamParams>* added_streams, |
- std::vector<StreamParams>* removed_streams); |
- void AddRecvStreams(const std::vector<StreamParams>& added_streams, |
- BaseChannel* channel, |
- std::vector<StreamParams>* recv_streams); |
- void AddRecvStream(const StreamParams& stream, |
- BaseChannel* channel, |
- std::vector<StreamParams>* recv_streams); |
- void RemoveRecvStreams(const std::vector<StreamParams>& removed_streams, |
- BaseChannel* channel, |
- std::vector<StreamParams>* recv_streams); |
- void RemoveRecvStream(const StreamParams& stream, |
- BaseChannel* channel, |
- std::vector<StreamParams>* recv_streams); |
- void ContinuePlayDTMF(); |
- bool StopScreencastWithoutSendingUpdate(Session* session, uint32 ssrc); |
- bool StopAllScreencastsWithoutSendingUpdate(Session* session); |
- bool SessionDescriptionContainsCrypto(const SessionDescription* sdesc) const; |
- Session* InternalInitiateSession(const std::string& id, |
- const buzz::Jid& to, |
- const std::string& initiator_name, |
- const CallOptions& options); |
- |
- uint32 id_; |
- MediaSessionClient* session_client_; |
- |
- struct StartedCapture { |
- StartedCapture(cricket::VideoCapturer* capturer, |
- const cricket::VideoFormat& format) : |
- capturer(capturer), |
- format(format) { |
- } |
- cricket::VideoCapturer* capturer; |
- cricket::VideoFormat format; |
- }; |
- typedef std::map<uint32, StartedCapture> StartedScreencastMap; |
- |
- struct MediaSession { |
- Session* session; |
- VoiceChannel* voice_channel; |
- VideoChannel* video_channel; |
- DataChannel* data_channel; |
- MediaStreams* recv_streams; |
- StartedScreencastMap started_screencasts; |
- }; |
- |
- // Create a map of media sessions, keyed off session->id(). |
- typedef std::map<std::string, MediaSession> MediaSessionMap; |
- MediaSessionMap media_session_map_; |
- |
- std::map<std::string, CurrentSpeakerMonitor*> speaker_monitor_map_; |
- bool has_video_; |
- bool has_data_; |
- bool muted_; |
- bool video_muted_; |
- bool send_to_voicemail_; |
- |
- // DTMF tones have to be queued up so that we don't flood the call. We |
- // keep a deque (doubely ended queue) of them around. While one is playing we |
- // set the playing_dtmf_ bit and schedule a message in XX msec to clear that |
- // bit or start the next tone playing. |
- std::deque<int> queued_dtmf_; |
- bool playing_dtmf_; |
- |
- VoiceMediaInfo last_voice_media_info_; |
- |
- rtc::scoped_ptr<AudioSourceProxy> audio_source_proxy_; |
- |
- friend class MediaSessionClient; |
-}; |
- |
-} // namespace cricket |
- |
-#endif // WEBRTC_LIBJINGLE_SESSION_MEDIA_CALL_H_ |