Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / libjingle / source / talk / app / webrtc / mediastreamsignaling.h
index c730b46..d4b1be8 100644 (file)
 #ifndef TALK_APP_WEBRTC_MEDIASTREAMSIGNALING_H_
 #define TALK_APP_WEBRTC_MEDIASTREAMSIGNALING_H_
 
+#include <map>
 #include <string>
 #include <vector>
-#include <map>
 
 #include "talk/app/webrtc/datachannel.h"
 #include "talk/app/webrtc/mediastream.h"
 #include "talk/app/webrtc/peerconnectioninterface.h"
 #include "talk/app/webrtc/streamcollection.h"
-#include "talk/base/scoped_ref_ptr.h"
 #include "talk/session/media/mediasession.h"
+#include "webrtc/base/scoped_ref_ptr.h"
+#include "webrtc/base/sigslot.h"
 
-namespace talk_base {
+namespace rtc {
 class Thread;
-}  // namespace talk_base
+}  // namespace rtc
 
 namespace webrtc {
 
@@ -92,7 +93,8 @@ class MediaStreamSignalingObserver {
 
   // Triggered when the local SessionDescription has removed an audio track.
   virtual void OnRemoveLocalAudioTrack(MediaStreamInterface* stream,
-                                       AudioTrackInterface* audio_track) = 0;
+                                       AudioTrackInterface* audio_track,
+                                       uint32 ssrc) = 0;
 
   // Triggered when the local SessionDescription has removed a video track.
   virtual void OnRemoveLocalVideoTrack(MediaStreamInterface* stream,
@@ -156,9 +158,12 @@ class MediaStreamSignalingObserver {
 //    DataChannel label or SSRC. The DataChannel SSRC is updated with SSRC=0.
 //    The DataChannel change state to kClosed.
 
-class MediaStreamSignaling {
+class MediaStreamSignaling : public sigslot::has_slots<> {
  public:
-  MediaStreamSignaling(talk_base::Thread* signaling_thread,
+  typedef std::map<std::string, rtc::scoped_refptr<DataChannel> >
+      RtpDataChannels;
+
+  MediaStreamSignaling(rtc::Thread* signaling_thread,
                        MediaStreamSignalingObserver* stream_observer,
                        cricket::ChannelManager* channel_manager);
   virtual ~MediaStreamSignaling();
@@ -178,7 +183,7 @@ class MediaStreamSignaling {
 
   // Gets the first available SCTP id that is not assigned to any existing
   // data channels.
-  bool AllocateSctpSid(talk_base::SSLRole role, int* sid);
+  bool AllocateSctpSid(rtc::SSLRole role, int* sid);
 
   // Adds |local_stream| to the collection of known MediaStreams that will be
   // offered in a SessionDescription.
@@ -195,13 +200,14 @@ class MediaStreamSignaling {
   bool AddDataChannel(DataChannel* data_channel);
   // After we receive an OPEN message, create a data channel and add it.
   bool AddDataChannelFromOpenMessage(const cricket::ReceiveDataParams& params,
-                                     const talk_base::Buffer& payload);
+                                     const rtc::Buffer& payload);
+  void RemoveSctpDataChannel(int sid);
 
-  // Returns a MediaSessionOptions struct with options decided by |constraints|,
+  // Returns a MediaSessionOptions struct with options decided by |options|,
   // the local MediaStreams and DataChannels.
   virtual bool GetOptionsForOffer(
-      const MediaConstraintsInterface* constraints,
-      cricket::MediaSessionOptions* options);
+      const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options,
+      cricket::MediaSessionOptions* session_options);
 
   // Returns a MediaSessionOptions struct with options decided by
   // |constraints|, the local MediaStreams and DataChannels.
@@ -246,7 +252,8 @@ class MediaStreamSignaling {
     return remote_streams_.get();
   }
   void OnDataTransportCreatedForSctp();
-  void OnDtlsRoleReadyForSctp(talk_base::SSLRole role);
+  void OnDtlsRoleReadyForSctp(rtc::SSLRole role);
+  void OnRemoteSctpDataChannelClosed(uint32 sid);
 
  private:
   struct RemotePeerInfo {
@@ -285,8 +292,6 @@ class MediaStreamSignaling {
   };
   typedef std::vector<TrackInfo> TrackInfos;
 
-  void UpdateSessionOptions();
-
   // Makes sure a MediaStream Track is created for each StreamParam in
   // |streams|. |media_type| is the type of the |streams| and can be either
   // audio or video.
@@ -354,6 +359,7 @@ class MediaStreamSignaling {
   // MediaStreamTrack in a MediaStream in |local_streams_|.
   void OnLocalTrackRemoved(const std::string& stream_label,
                            const std::string& track_id,
+                           uint32 ssrc,
                            cricket::MediaType media_type);
 
   void UpdateLocalRtpDataChannels(const cricket::StreamParamsVec& streams);
@@ -366,14 +372,17 @@ class MediaStreamSignaling {
                                  const std::string& stream_label,
                                  const std::string track_id) const;
 
+  // Returns the index of the specified SCTP DataChannel in sctp_data_channels_,
+  // or -1 if not found.
+  int FindDataChannelBySid(int sid) const;
+
   RemotePeerInfo remote_info_;
-  talk_base::Thread* signaling_thread_;
+  rtc::Thread* signaling_thread_;
   DataChannelFactory* data_channel_factory_;
-  cricket::MediaSessionOptions options_;
   MediaStreamSignalingObserver* stream_observer_;
-  talk_base::scoped_refptr<StreamCollection> local_streams_;
-  talk_base::scoped_refptr<StreamCollection> remote_streams_;
-  talk_base::scoped_ptr<RemoteMediaStreamFactory> remote_stream_factory_;
+  rtc::scoped_refptr<StreamCollection> local_streams_;
+  rtc::scoped_refptr<StreamCollection> remote_streams_;
+  rtc::scoped_ptr<RemoteMediaStreamFactory> remote_stream_factory_;
 
   TrackInfos remote_audio_tracks_;
   TrackInfos remote_video_tracks_;
@@ -383,9 +392,8 @@ class MediaStreamSignaling {
   int last_allocated_sctp_even_sid_;
   int last_allocated_sctp_odd_sid_;
 
-  typedef std::map<std::string, talk_base::scoped_refptr<DataChannel> >
-      RtpDataChannels;
-  typedef std::vector<talk_base::scoped_refptr<DataChannel> > SctpDataChannels;
+  typedef std::vector<rtc::scoped_refptr<DataChannel> > SctpDataChannels;
+
   RtpDataChannels rtp_data_channels_;
   SctpDataChannels sctp_data_channels_;
 };