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

Side by Side Diff: talk/app/webrtc/datachannel.h

Issue 1403633005: Revert of Moving MediaStreamSignaling logic into PeerConnection. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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') | no next file with comments »
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>
33 #include <string> 32 #include <string>
34 33
35 #include "talk/app/webrtc/datachannelinterface.h" 34 #include "talk/app/webrtc/datachannelinterface.h"
36 #include "talk/app/webrtc/proxy.h" 35 #include "talk/app/webrtc/proxy.h"
37 #include "talk/media/base/mediachannel.h" 36 #include "talk/media/base/mediachannel.h"
38 #include "talk/session/media/channel.h" 37 #include "talk/session/media/channel.h"
39 #include "webrtc/base/messagehandler.h" 38 #include "webrtc/base/messagehandler.h"
40 #include "webrtc/base/scoped_ref_ptr.h" 39 #include "webrtc/base/scoped_ref_ptr.h"
41 #include "webrtc/base/sigslot.h" 40 #include "webrtc/base/sigslot.h"
42 41
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 : DataChannelInit(base), open_handshake_role(kOpener) { 76 : DataChannelInit(base), open_handshake_role(kOpener) {
78 // If the channel is externally negotiated, do not send the OPEN message. 77 // If the channel is externally negotiated, do not send the OPEN message.
79 if (base.negotiated) { 78 if (base.negotiated) {
80 open_handshake_role = kNone; 79 open_handshake_role = kNone;
81 } 80 }
82 } 81 }
83 82
84 OpenHandshakeRole open_handshake_role; 83 OpenHandshakeRole open_handshake_role;
85 }; 84 };
86 85
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 AllocateSid(rtc::SSLRole role, int* sid);
95
96 // Attempts to reserve a specific sid. Returns false if it's unavailable.
97 bool ReserveSid(int sid);
98
99 // Indicates that |sid| isn't in use any more, and is thus available again.
100 void ReleaseSid(int sid);
101
102 private:
103 // Checks if |sid| is available to be assigned to a new SCTP data channel.
104 bool IsSidAvailable(int sid) const;
105
106 std::set<int> used_sids_;
107 };
108
109 // DataChannel is a an implementation of the DataChannelInterface based on 86 // DataChannel is a an implementation of the DataChannelInterface based on
110 // libjingle's data engine. It provides an implementation of unreliable or 87 // libjingle's data engine. It provides an implementation of unreliable or
111 // reliabledata channels. Currently this class is specifically designed to use 88 // reliabledata channels. Currently this class is specifically designed to use
112 // both RtpDataEngine and SctpDataEngine. 89 // both RtpDataEngine and SctpDataEngine.
113 90
114 // DataChannel states: 91 // DataChannel states:
115 // kConnecting: The channel has been created the transport might not yet be 92 // kConnecting: The channel has been created the transport might not yet be
116 // ready. 93 // ready.
117 // kOpen: The channel have a local SSRC set by a call to UpdateSendSsrc 94 // kOpen: The channel have a local SSRC set by a call to UpdateSendSsrc
118 // and a remote SSRC set by call to UpdateReceiveSsrc and the transport 95 // and a remote SSRC set by call to UpdateReceiveSsrc and the transport
(...skipping 26 matching lines...) Expand all
145 virtual bool negotiated() const { return config_.negotiated; } 122 virtual bool negotiated() const { return config_.negotiated; }
146 virtual int id() const { return config_.id; } 123 virtual int id() const { return config_.id; }
147 virtual uint64_t buffered_amount() const; 124 virtual uint64_t buffered_amount() const;
148 virtual void Close(); 125 virtual void Close();
149 virtual DataState state() const { return state_; } 126 virtual DataState state() const { return state_; }
150 virtual bool Send(const DataBuffer& buffer); 127 virtual bool Send(const DataBuffer& buffer);
151 128
152 // rtc::MessageHandler override. 129 // rtc::MessageHandler override.
153 virtual void OnMessage(rtc::Message* msg); 130 virtual void OnMessage(rtc::Message* msg);
154 131
132 // Called if the underlying data engine is closing.
133 void OnDataEngineClose();
134
155 // Called when the channel's ready to use. That can happen when the 135 // Called when the channel's ready to use. That can happen when the
156 // underlying DataMediaChannel becomes ready, or when this channel is a new 136 // underlying DataMediaChannel becomes ready, or when this channel is a new
157 // stream on an existing DataMediaChannel, and we've finished negotiation. 137 // stream on an existing DataMediaChannel, and we've finished negotiation.
158 void OnChannelReady(bool writable); 138 void OnChannelReady(bool writable);
159 139
160 // Sigslots from cricket::DataChannel 140 // Sigslots from cricket::DataChannel
161 void OnDataReceived(cricket::DataChannel* channel, 141 void OnDataReceived(cricket::DataChannel* channel,
162 const cricket::ReceiveDataParams& params, 142 const cricket::ReceiveDataParams& params,
163 const rtc::Buffer& payload); 143 const rtc::Buffer& payload);
164 void OnStreamClosedRemotely(uint32_t sid);
165 144
166 // The remote peer request that this channel should be closed. 145 // The remote peer request that this channel should be closed.
167 void RemotePeerRequestClose(); 146 void RemotePeerRequestClose();
168 147
169 // The following methods are for SCTP only. 148 // The following methods are for SCTP only.
170 149
171 // Sets the SCTP sid and adds to transport layer if not set yet. Should only 150 // Sets the SCTP sid and adds to transport layer if not set yet. Should only
172 // be called once. 151 // be called once.
173 void SetSctpSid(int sid); 152 void SetSctpSid(int sid);
174 // Called when the transport channel is created. 153 // Called when the transport channel is created.
175 // Only needs to be called for SCTP data channels.
176 void OnTransportChannelCreated(); 154 void OnTransportChannelCreated();
177 // Called when the transport channel is destroyed.
178 void OnTransportChannelDestroyed();
179 155
180 // The following methods are for RTP only. 156 // The following methods are for RTP only.
181 157
182 // Set the SSRC this channel should use to send data on the 158 // Set the SSRC this channel should use to send data on the
183 // underlying data engine. |send_ssrc| == 0 means that the channel is no 159 // underlying data engine. |send_ssrc| == 0 means that the channel is no
184 // longer part of the session negotiation. 160 // longer part of the session negotiation.
185 void SetSendSsrc(uint32_t send_ssrc); 161 void SetSendSsrc(uint32_t send_ssrc);
186 // Set the SSRC this channel should use to receive data from the 162 // Set the SSRC this channel should use to receive data from the
187 // underlying data engine. 163 // underlying data engine.
188 void SetReceiveSsrc(uint32_t receive_ssrc); 164 void SetReceiveSsrc(uint32_t receive_ssrc);
189 165
190 cricket::DataChannelType data_channel_type() const { 166 cricket::DataChannelType data_channel_type() const {
191 return data_channel_type_; 167 return data_channel_type_;
192 } 168 }
193 169
194 // Emitted when state transitions to kClosed.
195 // In the case of SCTP channels, this signal can be used to tell when the
196 // channel's sid is free.
197 sigslot::signal1<DataChannel*> SignalClosed;
198
199 protected: 170 protected:
200 DataChannel(DataChannelProviderInterface* client, 171 DataChannel(DataChannelProviderInterface* client,
201 cricket::DataChannelType dct, 172 cricket::DataChannelType dct,
202 const std::string& label); 173 const std::string& label);
203 virtual ~DataChannel(); 174 virtual ~DataChannel();
204 175
205 private: 176 private:
206 // A packet queue which tracks the total queued bytes. Queued packets are 177 // A packet queue which tracks the total queued bytes. Queued packets are
207 // owned by this class. 178 // owned by this class.
208 class PacketQueue { 179 class PacketQueue {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 bool writable_; 240 bool writable_;
270 uint32_t send_ssrc_; 241 uint32_t send_ssrc_;
271 uint32_t receive_ssrc_; 242 uint32_t receive_ssrc_;
272 // Control messages that always have to get sent out before any queued 243 // Control messages that always have to get sent out before any queued
273 // data. 244 // data.
274 PacketQueue queued_control_data_; 245 PacketQueue queued_control_data_;
275 PacketQueue queued_received_data_; 246 PacketQueue queued_received_data_;
276 PacketQueue queued_send_data_; 247 PacketQueue queued_send_data_;
277 }; 248 };
278 249
250 class DataChannelFactory {
251 public:
252 virtual rtc::scoped_refptr<DataChannel> CreateDataChannel(
253 const std::string& label,
254 const InternalDataChannelInit* config) = 0;
255
256 protected:
257 virtual ~DataChannelFactory() {}
258 };
259
279 // Define proxy for DataChannelInterface. 260 // Define proxy for DataChannelInterface.
280 BEGIN_PROXY_MAP(DataChannel) 261 BEGIN_PROXY_MAP(DataChannel)
281 PROXY_METHOD1(void, RegisterObserver, DataChannelObserver*) 262 PROXY_METHOD1(void, RegisterObserver, DataChannelObserver*)
282 PROXY_METHOD0(void, UnregisterObserver) 263 PROXY_METHOD0(void, UnregisterObserver)
283 PROXY_CONSTMETHOD0(std::string, label) 264 PROXY_CONSTMETHOD0(std::string, label)
284 PROXY_CONSTMETHOD0(bool, reliable) 265 PROXY_CONSTMETHOD0(bool, reliable)
285 PROXY_CONSTMETHOD0(bool, ordered) 266 PROXY_CONSTMETHOD0(bool, ordered)
286 PROXY_CONSTMETHOD0(uint16_t, maxRetransmitTime) 267 PROXY_CONSTMETHOD0(uint16_t, maxRetransmitTime)
287 PROXY_CONSTMETHOD0(uint16_t, maxRetransmits) 268 PROXY_CONSTMETHOD0(uint16_t, maxRetransmits)
288 PROXY_CONSTMETHOD0(std::string, protocol) 269 PROXY_CONSTMETHOD0(std::string, protocol)
289 PROXY_CONSTMETHOD0(bool, negotiated) 270 PROXY_CONSTMETHOD0(bool, negotiated)
290 PROXY_CONSTMETHOD0(int, id) 271 PROXY_CONSTMETHOD0(int, id)
291 PROXY_CONSTMETHOD0(DataState, state) 272 PROXY_CONSTMETHOD0(DataState, state)
292 PROXY_CONSTMETHOD0(uint64_t, buffered_amount) 273 PROXY_CONSTMETHOD0(uint64_t, buffered_amount)
293 PROXY_METHOD0(void, Close) 274 PROXY_METHOD0(void, Close)
294 PROXY_METHOD1(bool, Send, const DataBuffer&) 275 PROXY_METHOD1(bool, Send, const DataBuffer&)
295 END_PROXY() 276 END_PROXY()
296 277
297 } // namespace webrtc 278 } // namespace webrtc
298 279
299 #endif // TALK_APP_WEBRTC_DATACHANNEL_H_ 280 #endif // TALK_APP_WEBRTC_DATACHANNEL_H_
OLDNEW
« 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