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

Side by Side 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: Cleaning up comments, fixing naming, etc. 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 unified diff | Download patch
« no previous file with comments | « no previous file | talk/app/webrtc/datachannel.cc » ('j') | talk/app/webrtc/datachannel.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 11 matching lines...) Expand all
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28 #ifndef TALK_APP_WEBRTC_DATACHANNEL_H_ 28 #ifndef TALK_APP_WEBRTC_DATACHANNEL_H_
29 #define TALK_APP_WEBRTC_DATACHANNEL_H_ 29 #define TALK_APP_WEBRTC_DATACHANNEL_H_
30 30
31 #include <deque> 31 #include <deque>
32 #include <set>
32 #include <string> 33 #include <string>
33 34
34 #include "talk/app/webrtc/datachannelinterface.h" 35 #include "talk/app/webrtc/datachannelinterface.h"
35 #include "talk/app/webrtc/proxy.h" 36 #include "talk/app/webrtc/proxy.h"
36 #include "talk/media/base/mediachannel.h" 37 #include "talk/media/base/mediachannel.h"
37 #include "talk/session/media/channel.h" 38 #include "talk/session/media/channel.h"
38 #include "webrtc/base/messagehandler.h" 39 #include "webrtc/base/messagehandler.h"
39 #include "webrtc/base/scoped_ref_ptr.h" 40 #include "webrtc/base/scoped_ref_ptr.h"
40 #include "webrtc/base/sigslot.h" 41 #include "webrtc/base/sigslot.h"
41 42
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 : DataChannelInit(base), open_handshake_role(kOpener) { 77 : DataChannelInit(base), open_handshake_role(kOpener) {
77 // If the channel is externally negotiated, do not send the OPEN message. 78 // If the channel is externally negotiated, do not send the OPEN message.
78 if (base.negotiated) { 79 if (base.negotiated) {
79 open_handshake_role = kNone; 80 open_handshake_role = kNone;
80 } 81 }
81 } 82 }
82 83
83 OpenHandshakeRole open_handshake_role; 84 OpenHandshakeRole open_handshake_role;
84 }; 85 };
85 86
87 // Helper class to allocate unique IDs for SCTP DataChannels
88 class SctpSidAllocator {
89 public:
90 // Gets the first unused odd/even id based on the DTLS role. If |role| is
91 // SSL_CLIENT, the allocated id starts from 0 and takes even numbers;
92 // otherwise, the id starts from 1 and takes odd numbers.
93 // Returns false if no id can be allocated.
94 bool AllocateSctpSid(rtc::SSLRole role, int* sid);
95
96 // Attempts to reserve a specific sid. Returns false if it's unavailable.
97 bool ReserveSctpSid(int sid);
98
99 // Indicates that |sid| isn't in use any more, and is thus available again.
100 void ReleaseSctpSid(int sid);
101
102 private:
103 // Checks if |sid| is available to be assigned to a new SCTP data channel.
104 bool IsSctpSidAvailable(int sid) const;
105
106 std::set<int> used_sids_;
107 };
108
86 // DataChannel is a an implementation of the DataChannelInterface based on 109 // DataChannel is a an implementation of the DataChannelInterface based on
87 // libjingle's data engine. It provides an implementation of unreliable or 110 // libjingle's data engine. It provides an implementation of unreliable or
88 // reliabledata channels. Currently this class is specifically designed to use 111 // reliabledata channels. Currently this class is specifically designed to use
89 // both RtpDataEngine and SctpDataEngine. 112 // both RtpDataEngine and SctpDataEngine.
90 113
91 // DataChannel states: 114 // DataChannel states:
92 // kConnecting: The channel has been created the transport might not yet be 115 // kConnecting: The channel has been created the transport might not yet be
93 // ready. 116 // ready.
94 // kOpen: The channel have a local SSRC set by a call to UpdateSendSsrc 117 // kOpen: The channel have a local SSRC set by a call to UpdateSendSsrc
95 // and a remote SSRC set by call to UpdateReceiveSsrc and the transport 118 // and a remote SSRC set by call to UpdateReceiveSsrc and the transport
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 159
137 // Called when the channel's ready to use. That can happen when the 160 // Called when the channel's ready to use. That can happen when the
138 // underlying DataMediaChannel becomes ready, or when this channel is a new 161 // underlying DataMediaChannel becomes ready, or when this channel is a new
139 // stream on an existing DataMediaChannel, and we've finished negotiation. 162 // stream on an existing DataMediaChannel, and we've finished negotiation.
140 void OnChannelReady(bool writable); 163 void OnChannelReady(bool writable);
141 164
142 // Sigslots from cricket::DataChannel 165 // Sigslots from cricket::DataChannel
143 void OnDataReceived(cricket::DataChannel* channel, 166 void OnDataReceived(cricket::DataChannel* channel,
144 const cricket::ReceiveDataParams& params, 167 const cricket::ReceiveDataParams& params,
145 const rtc::Buffer& payload); 168 const rtc::Buffer& payload);
169 void OnStreamClosedRemotely(uint32 sid);
146 170
147 // The remote peer request that this channel should be closed. 171 // The remote peer request that this channel should be closed.
148 void RemotePeerRequestClose(); 172 void RemotePeerRequestClose();
149 173
150 // The following methods are for SCTP only. 174 // The following methods are for SCTP only.
151 175
152 // Sets the SCTP sid and adds to transport layer if not set yet. Should only 176 // Sets the SCTP sid and adds to transport layer if not set yet. Should only
153 // be called once. 177 // be called once.
154 void SetSctpSid(int sid); 178 void SetSctpSid(int sid);
155 // Called when the transport channel is created. 179 // Called when the transport channel is created.
156 void OnTransportChannelCreated(); 180 void OnTransportChannelCreated();
157 181
158 // The following methods are for RTP only. 182 // The following methods are for RTP only.
159 183
160 // Set the SSRC this channel should use to send data on the 184 // Set the SSRC this channel should use to send data on the
161 // underlying data engine. |send_ssrc| == 0 means that the channel is no 185 // underlying data engine. |send_ssrc| == 0 means that the channel is no
162 // longer part of the session negotiation. 186 // longer part of the session negotiation.
163 void SetSendSsrc(uint32 send_ssrc); 187 void SetSendSsrc(uint32 send_ssrc);
164 // Set the SSRC this channel should use to receive data from the 188 // Set the SSRC this channel should use to receive data from the
165 // underlying data engine. 189 // underlying data engine.
166 void SetReceiveSsrc(uint32 receive_ssrc); 190 void SetReceiveSsrc(uint32 receive_ssrc);
167 191
168 cricket::DataChannelType data_channel_type() const { 192 cricket::DataChannelType data_channel_type() const {
169 return data_channel_type_; 193 return data_channel_type_;
170 } 194 }
171 195
196 // Emitted when state transitions to kClosed.
197 // In the case of SCTP channels, this signal can be used to tell when the
198 // channel's sid is free.
199 sigslot::signal1<DataChannel*> SignalClosed;
200
172 protected: 201 protected:
173 DataChannel(DataChannelProviderInterface* client, 202 DataChannel(DataChannelProviderInterface* client,
174 cricket::DataChannelType dct, 203 cricket::DataChannelType dct,
175 const std::string& label); 204 const std::string& label);
176 virtual ~DataChannel(); 205 virtual ~DataChannel();
177 206
178 private: 207 private:
179 // A packet queue which tracks the total queued bytes. Queued packets are 208 // A packet queue which tracks the total queued bytes. Queued packets are
180 // owned by this class. 209 // owned by this class.
181 class PacketQueue { 210 class PacketQueue {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 bool writable_; 271 bool writable_;
243 uint32 send_ssrc_; 272 uint32 send_ssrc_;
244 uint32 receive_ssrc_; 273 uint32 receive_ssrc_;
245 // Control messages that always have to get sent out before any queued 274 // Control messages that always have to get sent out before any queued
246 // data. 275 // data.
247 PacketQueue queued_control_data_; 276 PacketQueue queued_control_data_;
248 PacketQueue queued_received_data_; 277 PacketQueue queued_received_data_;
249 PacketQueue queued_send_data_; 278 PacketQueue queued_send_data_;
250 }; 279 };
251 280
252 class DataChannelFactory {
253 public:
254 virtual rtc::scoped_refptr<DataChannel> CreateDataChannel(
255 const std::string& label,
256 const InternalDataChannelInit* config) = 0;
257
258 protected:
259 virtual ~DataChannelFactory() {}
260 };
261
262 // Define proxy for DataChannelInterface. 281 // Define proxy for DataChannelInterface.
263 BEGIN_PROXY_MAP(DataChannel) 282 BEGIN_PROXY_MAP(DataChannel)
264 PROXY_METHOD1(void, RegisterObserver, DataChannelObserver*) 283 PROXY_METHOD1(void, RegisterObserver, DataChannelObserver*)
265 PROXY_METHOD0(void, UnregisterObserver) 284 PROXY_METHOD0(void, UnregisterObserver)
266 PROXY_CONSTMETHOD0(std::string, label) 285 PROXY_CONSTMETHOD0(std::string, label)
267 PROXY_CONSTMETHOD0(bool, reliable) 286 PROXY_CONSTMETHOD0(bool, reliable)
268 PROXY_CONSTMETHOD0(bool, ordered) 287 PROXY_CONSTMETHOD0(bool, ordered)
269 PROXY_CONSTMETHOD0(uint16, maxRetransmitTime) 288 PROXY_CONSTMETHOD0(uint16, maxRetransmitTime)
270 PROXY_CONSTMETHOD0(uint16, maxRetransmits) 289 PROXY_CONSTMETHOD0(uint16, maxRetransmits)
271 PROXY_CONSTMETHOD0(std::string, protocol) 290 PROXY_CONSTMETHOD0(std::string, protocol)
272 PROXY_CONSTMETHOD0(bool, negotiated) 291 PROXY_CONSTMETHOD0(bool, negotiated)
273 PROXY_CONSTMETHOD0(int, id) 292 PROXY_CONSTMETHOD0(int, id)
274 PROXY_CONSTMETHOD0(DataState, state) 293 PROXY_CONSTMETHOD0(DataState, state)
275 PROXY_CONSTMETHOD0(uint64, buffered_amount) 294 PROXY_CONSTMETHOD0(uint64, buffered_amount)
276 PROXY_METHOD0(void, Close) 295 PROXY_METHOD0(void, Close)
277 PROXY_METHOD1(bool, Send, const DataBuffer&) 296 PROXY_METHOD1(bool, Send, const DataBuffer&)
278 END_PROXY() 297 END_PROXY()
279 298
280 } // namespace webrtc 299 } // namespace webrtc
281 300
282 #endif // TALK_APP_WEBRTC_DATACHANNEL_H_ 301 #endif // TALK_APP_WEBRTC_DATACHANNEL_H_
OLDNEW
« no previous file with comments | « no previous file | talk/app/webrtc/datachannel.cc » ('j') | talk/app/webrtc/datachannel.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698