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

Side by Side Diff: webrtc/p2p/base/session.cc

Issue 1397973002: Merging BaseSession code into WebRtcSession. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Merging with master (MediaStreamSignaling removal affected WebRtcSession). 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 | « webrtc/p2p/base/session.h ('k') | webrtc/p2p/p2p.gyp » ('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 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/p2p/base/session.h" 11 // TODO(deadbeef): Remove this file when Chrome build files no longer reference
12 12 // it.
13 #include "webrtc/base/bind.h"
14 #include "webrtc/base/common.h"
15 #include "webrtc/base/helpers.h"
16 #include "webrtc/base/logging.h"
17 #include "webrtc/base/scoped_ptr.h"
18 #include "webrtc/base/stringencode.h"
19 #include "webrtc/base/sslstreamadapter.h"
20 #include "webrtc/p2p/base/transport.h"
21 #include "webrtc/p2p/base/transportinfo.h"
22 #include "webrtc/p2p/base/transportcontroller.h"
23 #include "webrtc/p2p/base/constants.h"
24
25 namespace cricket {
26
27 using rtc::Bind;
28
29 std::string BaseSession::StateToString(State state) {
30 switch (state) {
31 case STATE_INIT:
32 return "STATE_INIT";
33 case STATE_SENTINITIATE:
34 return "STATE_SENTINITIATE";
35 case STATE_RECEIVEDINITIATE:
36 return "STATE_RECEIVEDINITIATE";
37 case STATE_SENTPRACCEPT:
38 return "STATE_SENTPRACCEPT";
39 case STATE_SENTACCEPT:
40 return "STATE_SENTACCEPT";
41 case STATE_RECEIVEDPRACCEPT:
42 return "STATE_RECEIVEDPRACCEPT";
43 case STATE_RECEIVEDACCEPT:
44 return "STATE_RECEIVEDACCEPT";
45 case STATE_SENTMODIFY:
46 return "STATE_SENTMODIFY";
47 case STATE_RECEIVEDMODIFY:
48 return "STATE_RECEIVEDMODIFY";
49 case STATE_SENTREJECT:
50 return "STATE_SENTREJECT";
51 case STATE_RECEIVEDREJECT:
52 return "STATE_RECEIVEDREJECT";
53 case STATE_SENTREDIRECT:
54 return "STATE_SENTREDIRECT";
55 case STATE_SENTTERMINATE:
56 return "STATE_SENTTERMINATE";
57 case STATE_RECEIVEDTERMINATE:
58 return "STATE_RECEIVEDTERMINATE";
59 case STATE_INPROGRESS:
60 return "STATE_INPROGRESS";
61 case STATE_DEINIT:
62 return "STATE_DEINIT";
63 default:
64 break;
65 }
66 return "STATE_" + rtc::ToString(state);
67 }
68
69 BaseSession::BaseSession(rtc::Thread* signaling_thread,
70 rtc::Thread* worker_thread,
71 PortAllocator* port_allocator,
72 const std::string& sid,
73 bool initiator)
74 : state_(STATE_INIT),
75 error_(ERROR_NONE),
76 signaling_thread_(signaling_thread),
77 worker_thread_(worker_thread),
78 port_allocator_(port_allocator),
79 sid_(sid),
80 transport_controller_(new TransportController(signaling_thread,
81 worker_thread,
82 port_allocator)) {
83 ASSERT(signaling_thread->IsCurrent());
84 set_initiator(initiator);
85 }
86
87 BaseSession::~BaseSession() {
88 ASSERT(signaling_thread()->IsCurrent());
89
90 ASSERT(state_ != STATE_DEINIT);
91 LogState(state_, STATE_DEINIT);
92 state_ = STATE_DEINIT;
93 SignalState(this, state_);
94 }
95
96 const SessionDescription* BaseSession::local_description() const {
97 // TODO(tommi): Assert on thread correctness.
98 return local_description_.get();
99 }
100
101 const SessionDescription* BaseSession::remote_description() const {
102 // TODO(tommi): Assert on thread correctness.
103 return remote_description_.get();
104 }
105
106 SessionDescription* BaseSession::remote_description() {
107 // TODO(tommi): Assert on thread correctness.
108 return remote_description_.get();
109 }
110
111 void BaseSession::set_local_description(const SessionDescription* sdesc) {
112 // TODO(tommi): Assert on thread correctness.
113 if (sdesc != local_description_.get())
114 local_description_.reset(sdesc);
115 }
116
117 void BaseSession::set_remote_description(SessionDescription* sdesc) {
118 // TODO(tommi): Assert on thread correctness.
119 if (sdesc != remote_description_)
120 remote_description_.reset(sdesc);
121 }
122
123 void BaseSession::set_initiator(bool initiator) {
124 initiator_ = initiator;
125
126 IceRole ice_role = initiator ? ICEROLE_CONTROLLING : ICEROLE_CONTROLLED;
127 transport_controller_->SetIceRole(ice_role);
128 }
129
130 const SessionDescription* BaseSession::initiator_description() const {
131 // TODO(tommi): Assert on thread correctness.
132 return initiator_ ? local_description_.get() : remote_description_.get();
133 }
134
135 bool BaseSession::PushdownTransportDescription(ContentSource source,
136 ContentAction action,
137 std::string* error_desc) {
138 ASSERT(signaling_thread()->IsCurrent());
139
140 if (source == CS_LOCAL) {
141 return PushdownLocalTransportDescription(local_description(),
142 action,
143 error_desc);
144 }
145 return PushdownRemoteTransportDescription(remote_description(),
146 action,
147 error_desc);
148 }
149
150 bool BaseSession::PushdownLocalTransportDescription(
151 const SessionDescription* sdesc,
152 ContentAction action,
153 std::string* err) {
154 ASSERT(signaling_thread()->IsCurrent());
155
156 if (!sdesc) {
157 return false;
158 }
159
160 for (const TransportInfo& tinfo : sdesc->transport_infos()) {
161 if (!transport_controller_->SetLocalTransportDescription(
162 tinfo.content_name, tinfo.description, action, err)) {
163 return false;
164 }
165 }
166
167 return true;
168 }
169
170 bool BaseSession::PushdownRemoteTransportDescription(
171 const SessionDescription* sdesc,
172 ContentAction action,
173 std::string* err) {
174 ASSERT(signaling_thread()->IsCurrent());
175
176 if (!sdesc) {
177 return false;
178 }
179
180 for (const TransportInfo& tinfo : sdesc->transport_infos()) {
181 if (!transport_controller_->SetRemoteTransportDescription(
182 tinfo.content_name, tinfo.description, action, err)) {
183 return false;
184 }
185 }
186
187 return true;
188 }
189
190 void BaseSession::SetState(State state) {
191 ASSERT(signaling_thread_->IsCurrent());
192 if (state != state_) {
193 LogState(state_, state);
194 state_ = state;
195 SignalState(this, state_);
196 signaling_thread_->Post(this, MSG_STATE);
197 }
198 }
199
200 void BaseSession::SetError(Error error, const std::string& error_desc) {
201 ASSERT(signaling_thread_->IsCurrent());
202 if (error != error_) {
203 error_ = error;
204 error_desc_ = error_desc;
205 SignalError(this, error);
206 }
207 }
208
209 void BaseSession::SetIceConfig(const IceConfig& config) {
210 transport_controller_->SetIceConfig(config);
211 }
212
213 void BaseSession::MaybeStartGathering() {
214 transport_controller_->MaybeStartGathering();
215 }
216
217 void BaseSession::LogState(State old_state, State new_state) {
218 LOG(LS_INFO) << "Session:" << id()
219 << " Old state:" << StateToString(old_state)
220 << " New state:" << StateToString(new_state);
221 }
222
223 // static
224 bool BaseSession::GetTransportDescription(const SessionDescription* description,
225 const std::string& content_name,
226 TransportDescription* tdesc) {
227 if (!description || !tdesc) {
228 return false;
229 }
230 const TransportInfo* transport_info =
231 description->GetTransportInfoByName(content_name);
232 if (!transport_info) {
233 return false;
234 }
235 *tdesc = transport_info->description;
236 return true;
237 }
238
239 void BaseSession::OnMessage(rtc::Message *pmsg) {
240 switch (pmsg->message_id) {
241 case MSG_TIMEOUT:
242 // Session timeout has occured.
243 SetError(ERROR_TIME, "Session timeout has occured.");
244 break;
245
246 case MSG_STATE:
247 switch (state_) {
248 case STATE_SENTACCEPT:
249 case STATE_RECEIVEDACCEPT:
250 SetState(STATE_INPROGRESS);
251 break;
252
253 default:
254 // Explicitly ignoring some states here.
255 break;
256 }
257 break;
258 }
259 }
260
261 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/p2p/base/session.h ('k') | webrtc/p2p/p2p.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698