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

Side by Side Diff: webrtc/api/test/fakedatachannelprovider.h

Issue 2514883002: Create //webrtc/api:libjingle_peerconnection_api + refactorings. (Closed)
Patch Set: Rebase Created 3 years, 11 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
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #ifndef WEBRTC_API_TEST_FAKEDATACHANNELPROVIDER_H_
12 #define WEBRTC_API_TEST_FAKEDATACHANNELPROVIDER_H_
13
14 #include "webrtc/api/datachannel.h"
15 #include "webrtc/base/checks.h"
16
17 class FakeDataChannelProvider : public webrtc::DataChannelProviderInterface {
18 public:
19 FakeDataChannelProvider()
20 : send_blocked_(false),
21 transport_available_(false),
22 ready_to_send_(false),
23 transport_error_(false) {}
24 virtual ~FakeDataChannelProvider() {}
25
26 bool SendData(const cricket::SendDataParams& params,
27 const rtc::CopyOnWriteBuffer& payload,
28 cricket::SendDataResult* result) override {
29 RTC_CHECK(ready_to_send_ && transport_available_);
30 if (send_blocked_) {
31 *result = cricket::SDR_BLOCK;
32 return false;
33 }
34
35 if (transport_error_ || payload.size() == 0) {
36 *result = cricket::SDR_ERROR;
37 return false;
38 }
39
40 last_send_data_params_ = params;
41 return true;
42 }
43
44 bool ConnectDataChannel(webrtc::DataChannel* data_channel) override {
45 RTC_CHECK(connected_channels_.find(data_channel) ==
46 connected_channels_.end());
47 if (!transport_available_) {
48 return false;
49 }
50 LOG(LS_INFO) << "DataChannel connected " << data_channel;
51 connected_channels_.insert(data_channel);
52 return true;
53 }
54
55 void DisconnectDataChannel(webrtc::DataChannel* data_channel) override {
56 RTC_CHECK(connected_channels_.find(data_channel) !=
57 connected_channels_.end());
58 LOG(LS_INFO) << "DataChannel disconnected " << data_channel;
59 connected_channels_.erase(data_channel);
60 }
61
62 void AddSctpDataStream(int sid) override {
63 RTC_CHECK(sid >= 0);
64 if (!transport_available_) {
65 return;
66 }
67 send_ssrcs_.insert(sid);
68 recv_ssrcs_.insert(sid);
69 }
70
71 void RemoveSctpDataStream(int sid) override {
72 RTC_CHECK(sid >= 0);
73 send_ssrcs_.erase(sid);
74 recv_ssrcs_.erase(sid);
75 }
76
77 bool ReadyToSendData() const override { return ready_to_send_; }
78
79 // Set true to emulate the SCTP stream being blocked by congestion control.
80 void set_send_blocked(bool blocked) {
81 send_blocked_ = blocked;
82 if (!blocked) {
83 // Take a snapshot of the connected channels and check to see whether
84 // each value is still in connected_channels_ before calling
85 // OnChannelReady(). This avoids problems where the set gets modified
86 // in response to OnChannelReady().
87 for (webrtc::DataChannel *ch : std::set<webrtc::DataChannel*>(
88 connected_channels_.begin(), connected_channels_.end())) {
89 if (connected_channels_.count(ch)) {
90 ch->OnChannelReady(true);
91 }
92 }
93 }
94 }
95
96 // Set true to emulate the transport channel creation, e.g. after
97 // setLocalDescription/setRemoteDescription called with data content.
98 void set_transport_available(bool available) {
99 transport_available_ = available;
100 }
101
102 // Set true to emulate the transport ReadyToSendData signal when the transport
103 // becomes writable for the first time.
104 void set_ready_to_send(bool ready) {
105 RTC_CHECK(transport_available_);
106 ready_to_send_ = ready;
107 if (ready) {
108 std::set<webrtc::DataChannel*>::iterator it;
109 for (it = connected_channels_.begin();
110 it != connected_channels_.end();
111 ++it) {
112 (*it)->OnChannelReady(true);
113 }
114 }
115 }
116
117 void set_transport_error() {
118 transport_error_ = true;
119 }
120
121 cricket::SendDataParams last_send_data_params() const {
122 return last_send_data_params_;
123 }
124
125 bool IsConnected(webrtc::DataChannel* data_channel) const {
126 return connected_channels_.find(data_channel) != connected_channels_.end();
127 }
128
129 bool IsSendStreamAdded(uint32_t stream) const {
130 return send_ssrcs_.find(stream) != send_ssrcs_.end();
131 }
132
133 bool IsRecvStreamAdded(uint32_t stream) const {
134 return recv_ssrcs_.find(stream) != recv_ssrcs_.end();
135 }
136
137 private:
138 cricket::SendDataParams last_send_data_params_;
139 bool send_blocked_;
140 bool transport_available_;
141 bool ready_to_send_;
142 bool transport_error_;
143 std::set<webrtc::DataChannel*> connected_channels_;
144 std::set<uint32_t> send_ssrcs_;
145 std::set<uint32_t> recv_ssrcs_;
146 };
147 #endif // WEBRTC_API_TEST_FAKEDATACHANNELPROVIDER_H_
OLDNEW
« no previous file with comments | « webrtc/api/test/fakeaudiocapturemodule_unittest.cc ('k') | webrtc/api/test/fakeperiodicvideocapturer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698