Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Unified Diff: talk/app/webrtc/datachannel.h

Issue 1393563002: Moving MediaStreamSignaling logic into PeerConnection. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing copyright header Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | talk/app/webrtc/datachannel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/app/webrtc/datachannel.h
diff --git a/talk/app/webrtc/datachannel.h b/talk/app/webrtc/datachannel.h
index 4506f71b146c71f95ab22a04fbcffca97b43bb32..2713ae3b553ed7a79f32de9f34a214c3396e1877 100644
--- a/talk/app/webrtc/datachannel.h
+++ b/talk/app/webrtc/datachannel.h
@@ -29,6 +29,7 @@
#define TALK_APP_WEBRTC_DATACHANNEL_H_
#include <deque>
+#include <set>
#include <string>
#include "talk/app/webrtc/datachannelinterface.h"
@@ -83,6 +84,28 @@ struct InternalDataChannelInit : public DataChannelInit {
OpenHandshakeRole open_handshake_role;
};
+// Helper class to allocate unique IDs for SCTP DataChannels
+class SctpSidAllocator {
+ public:
+ // Gets the first unused odd/even id based on the DTLS role. If |role| is
+ // SSL_CLIENT, the allocated id starts from 0 and takes even numbers;
+ // otherwise, the id starts from 1 and takes odd numbers.
+ // Returns false if no id can be allocated.
+ bool AllocateSid(rtc::SSLRole role, int* sid);
+
+ // Attempts to reserve a specific sid. Returns false if it's unavailable.
+ bool ReserveSid(int sid);
+
+ // Indicates that |sid| isn't in use any more, and is thus available again.
+ void ReleaseSid(int sid);
+
+ private:
+ // Checks if |sid| is available to be assigned to a new SCTP data channel.
+ bool IsSidAvailable(int sid) const;
+
+ std::set<int> used_sids_;
+};
+
// DataChannel is a an implementation of the DataChannelInterface based on
// libjingle's data engine. It provides an implementation of unreliable or
// reliabledata channels. Currently this class is specifically designed to use
@@ -129,9 +152,6 @@ class DataChannel : public DataChannelInterface,
// rtc::MessageHandler override.
virtual void OnMessage(rtc::Message* msg);
- // Called if the underlying data engine is closing.
- void OnDataEngineClose();
-
// Called when the channel's ready to use. That can happen when the
// underlying DataMediaChannel becomes ready, or when this channel is a new
// stream on an existing DataMediaChannel, and we've finished negotiation.
@@ -141,6 +161,7 @@ class DataChannel : public DataChannelInterface,
void OnDataReceived(cricket::DataChannel* channel,
const cricket::ReceiveDataParams& params,
const rtc::Buffer& payload);
+ void OnStreamClosedRemotely(uint32_t sid);
// The remote peer request that this channel should be closed.
void RemotePeerRequestClose();
@@ -151,7 +172,10 @@ class DataChannel : public DataChannelInterface,
// be called once.
void SetSctpSid(int sid);
// Called when the transport channel is created.
+ // Only needs to be called for SCTP data channels.
void OnTransportChannelCreated();
+ // Called when the transport channel is destroyed.
+ void OnTransportChannelDestroyed();
// The following methods are for RTP only.
@@ -167,6 +191,11 @@ class DataChannel : public DataChannelInterface,
return data_channel_type_;
}
+ // Emitted when state transitions to kClosed.
+ // In the case of SCTP channels, this signal can be used to tell when the
+ // channel's sid is free.
+ sigslot::signal1<DataChannel*> SignalClosed;
+
protected:
DataChannel(DataChannelProviderInterface* client,
cricket::DataChannelType dct,
@@ -247,16 +276,6 @@ class DataChannel : public DataChannelInterface,
PacketQueue queued_send_data_;
};
-class DataChannelFactory {
- public:
- virtual rtc::scoped_refptr<DataChannel> CreateDataChannel(
- const std::string& label,
- const InternalDataChannelInit* config) = 0;
-
- protected:
- virtual ~DataChannelFactory() {}
-};
-
// Define proxy for DataChannelInterface.
BEGIN_PROXY_MAP(DataChannel)
PROXY_METHOD1(void, RegisterObserver, DataChannelObserver*)
« no previous file with comments | « no previous file | talk/app/webrtc/datachannel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698