| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2012 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 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 Conductor::Conductor(PeerConnectionClient* client, MainWindow* main_wnd) | 56 Conductor::Conductor(PeerConnectionClient* client, MainWindow* main_wnd) |
| 57 : peer_id_(-1), | 57 : peer_id_(-1), |
| 58 loopback_(false), | 58 loopback_(false), |
| 59 client_(client), | 59 client_(client), |
| 60 main_wnd_(main_wnd) { | 60 main_wnd_(main_wnd) { |
| 61 client_->RegisterObserver(this); | 61 client_->RegisterObserver(this); |
| 62 main_wnd->RegisterObserver(this); | 62 main_wnd->RegisterObserver(this); |
| 63 } | 63 } |
| 64 | 64 |
| 65 Conductor::~Conductor() { | 65 Conductor::~Conductor() { |
| 66 RTC_DCHECK(peer_connection_.get() == NULL); | 66 RTC_DCHECK(peer_connection_.get() == nullptr); |
| 67 } | 67 } |
| 68 | 68 |
| 69 bool Conductor::connection_active() const { | 69 bool Conductor::connection_active() const { |
| 70 return peer_connection_.get() != NULL; | 70 return peer_connection_.get() != nullptr; |
| 71 } | 71 } |
| 72 | 72 |
| 73 void Conductor::Close() { | 73 void Conductor::Close() { |
| 74 client_->SignOut(); | 74 client_->SignOut(); |
| 75 DeletePeerConnection(); | 75 DeletePeerConnection(); |
| 76 } | 76 } |
| 77 | 77 |
| 78 bool Conductor::InitializePeerConnection() { | 78 bool Conductor::InitializePeerConnection() { |
| 79 RTC_DCHECK(peer_connection_factory_.get() == NULL); | 79 RTC_DCHECK(peer_connection_factory_.get() == nullptr); |
| 80 RTC_DCHECK(peer_connection_.get() == NULL); | 80 RTC_DCHECK(peer_connection_.get() == nullptr); |
| 81 | 81 |
| 82 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(); | 82 peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(); |
| 83 | 83 |
| 84 if (!peer_connection_factory_.get()) { | 84 if (!peer_connection_factory_.get()) { |
| 85 main_wnd_->MessageBox("Error", | 85 main_wnd_->MessageBox("Error", |
| 86 "Failed to initialize PeerConnectionFactory", true); | 86 "Failed to initialize PeerConnectionFactory", true); |
| 87 DeletePeerConnection(); | 87 DeletePeerConnection(); |
| 88 return false; | 88 return false; |
| 89 } | 89 } |
| 90 | 90 |
| 91 if (!CreatePeerConnection(DTLS_ON)) { | 91 if (!CreatePeerConnection(DTLS_ON)) { |
| 92 main_wnd_->MessageBox("Error", | 92 main_wnd_->MessageBox("Error", |
| 93 "CreatePeerConnection failed", true); | 93 "CreatePeerConnection failed", true); |
| 94 DeletePeerConnection(); | 94 DeletePeerConnection(); |
| 95 } | 95 } |
| 96 AddStreams(); | 96 AddStreams(); |
| 97 return peer_connection_.get() != NULL; | 97 return peer_connection_.get() != nullptr; |
| 98 } | 98 } |
| 99 | 99 |
| 100 bool Conductor::ReinitializePeerConnectionForLoopback() { | 100 bool Conductor::ReinitializePeerConnectionForLoopback() { |
| 101 loopback_ = true; | 101 loopback_ = true; |
| 102 rtc::scoped_refptr<webrtc::StreamCollectionInterface> streams( | 102 rtc::scoped_refptr<webrtc::StreamCollectionInterface> streams( |
| 103 peer_connection_->local_streams()); | 103 peer_connection_->local_streams()); |
| 104 peer_connection_ = NULL; | 104 peer_connection_ = nullptr; |
| 105 if (CreatePeerConnection(DTLS_OFF)) { | 105 if (CreatePeerConnection(DTLS_OFF)) { |
| 106 for (size_t i = 0; i < streams->count(); ++i) | 106 for (size_t i = 0; i < streams->count(); ++i) |
| 107 peer_connection_->AddStream(streams->at(i)); | 107 peer_connection_->AddStream(streams->at(i)); |
| 108 peer_connection_->CreateOffer(this, NULL); | 108 peer_connection_->CreateOffer(this, nullptr); |
| 109 } | 109 } |
| 110 return peer_connection_.get() != NULL; | 110 return peer_connection_.get() != nullptr; |
| 111 } | 111 } |
| 112 | 112 |
| 113 bool Conductor::CreatePeerConnection(bool dtls) { | 113 bool Conductor::CreatePeerConnection(bool dtls) { |
| 114 RTC_DCHECK(peer_connection_factory_.get() != NULL); | 114 RTC_DCHECK(peer_connection_factory_.get() != nullptr); |
| 115 RTC_DCHECK(peer_connection_.get() == NULL); | 115 RTC_DCHECK(peer_connection_.get() == nullptr); |
| 116 | 116 |
| 117 webrtc::PeerConnectionInterface::RTCConfiguration config; | 117 webrtc::PeerConnectionInterface::RTCConfiguration config; |
| 118 webrtc::PeerConnectionInterface::IceServer server; | 118 webrtc::PeerConnectionInterface::IceServer server; |
| 119 server.uri = GetPeerConnectionString(); | 119 server.uri = GetPeerConnectionString(); |
| 120 config.servers.push_back(server); | 120 config.servers.push_back(server); |
| 121 | 121 |
| 122 webrtc::FakeConstraints constraints; | 122 webrtc::FakeConstraints constraints; |
| 123 if (dtls) { | 123 if (dtls) { |
| 124 constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, | 124 constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, |
| 125 "true"); | 125 "true"); |
| 126 } else { | 126 } else { |
| 127 constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, | 127 constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp, |
| 128 "false"); | 128 "false"); |
| 129 } | 129 } |
| 130 | 130 |
| 131 peer_connection_ = peer_connection_factory_->CreatePeerConnection( | 131 peer_connection_ = peer_connection_factory_->CreatePeerConnection( |
| 132 config, &constraints, NULL, NULL, this); | 132 config, &constraints, nullptr, nullptr, this); |
| 133 return peer_connection_.get() != NULL; | 133 return peer_connection_.get() != nullptr; |
| 134 } | 134 } |
| 135 | 135 |
| 136 void Conductor::DeletePeerConnection() { | 136 void Conductor::DeletePeerConnection() { |
| 137 peer_connection_ = NULL; | 137 peer_connection_ = nullptr; |
| 138 active_streams_.clear(); | 138 active_streams_.clear(); |
| 139 main_wnd_->StopLocalRenderer(); | 139 main_wnd_->StopLocalRenderer(); |
| 140 main_wnd_->StopRemoteRenderer(); | 140 main_wnd_->StopRemoteRenderer(); |
| 141 peer_connection_factory_ = NULL; | 141 peer_connection_factory_ = nullptr; |
| 142 peer_id_ = -1; | 142 peer_id_ = -1; |
| 143 loopback_ = false; | 143 loopback_ = false; |
| 144 } | 144 } |
| 145 | 145 |
| 146 void Conductor::EnsureStreamingUI() { | 146 void Conductor::EnsureStreamingUI() { |
| 147 RTC_DCHECK(peer_connection_.get() != NULL); | 147 RTC_DCHECK(peer_connection_.get() != nullptr); |
| 148 if (main_wnd_->IsWindow()) { | 148 if (main_wnd_->IsWindow()) { |
| 149 if (main_wnd_->current_ui() != MainWindow::STREAMING) | 149 if (main_wnd_->current_ui() != MainWindow::STREAMING) |
| 150 main_wnd_->SwitchToStreamingUI(); | 150 main_wnd_->SwitchToStreamingUI(); |
| 151 } | 151 } |
| 152 } | 152 } |
| 153 | 153 |
| 154 // | 154 // |
| 155 // PeerConnectionObserver implementation. | 155 // PeerConnectionObserver implementation. |
| 156 // | 156 // |
| 157 | 157 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 LOG(INFO) << __FUNCTION__; | 214 LOG(INFO) << __FUNCTION__; |
| 215 // Refresh the list if we're showing it. | 215 // Refresh the list if we're showing it. |
| 216 if (main_wnd_->current_ui() == MainWindow::LIST_PEERS) | 216 if (main_wnd_->current_ui() == MainWindow::LIST_PEERS) |
| 217 main_wnd_->SwitchToPeerList(client_->peers()); | 217 main_wnd_->SwitchToPeerList(client_->peers()); |
| 218 } | 218 } |
| 219 | 219 |
| 220 void Conductor::OnPeerDisconnected(int id) { | 220 void Conductor::OnPeerDisconnected(int id) { |
| 221 LOG(INFO) << __FUNCTION__; | 221 LOG(INFO) << __FUNCTION__; |
| 222 if (id == peer_id_) { | 222 if (id == peer_id_) { |
| 223 LOG(INFO) << "Our peer disconnected"; | 223 LOG(INFO) << "Our peer disconnected"; |
| 224 main_wnd_->QueueUIThreadCallback(PEER_CONNECTION_CLOSED, NULL); | 224 main_wnd_->QueueUIThreadCallback(PEER_CONNECTION_CLOSED, nullptr); |
| 225 } else { | 225 } else { |
| 226 // Refresh the list if we're showing it. | 226 // Refresh the list if we're showing it. |
| 227 if (main_wnd_->current_ui() == MainWindow::LIST_PEERS) | 227 if (main_wnd_->current_ui() == MainWindow::LIST_PEERS) |
| 228 main_wnd_->SwitchToPeerList(client_->peers()); | 228 main_wnd_->SwitchToPeerList(client_->peers()); |
| 229 } | 229 } |
| 230 } | 230 } |
| 231 | 231 |
| 232 void Conductor::OnMessageFromPeer(int peer_id, const std::string& message) { | 232 void Conductor::OnMessageFromPeer(int peer_id, const std::string& message) { |
| 233 RTC_DCHECK(peer_id_ == peer_id || peer_id_ == -1); | 233 RTC_DCHECK(peer_id_ == peer_id || peer_id_ == -1); |
| 234 RTC_DCHECK(!message.empty()); | 234 RTC_DCHECK(!message.empty()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 if (!session_description) { | 283 if (!session_description) { |
| 284 LOG(WARNING) << "Can't parse received session description message. " | 284 LOG(WARNING) << "Can't parse received session description message. " |
| 285 << "SdpParseError was: " << error.description; | 285 << "SdpParseError was: " << error.description; |
| 286 return; | 286 return; |
| 287 } | 287 } |
| 288 LOG(INFO) << " Received session description :" << message; | 288 LOG(INFO) << " Received session description :" << message; |
| 289 peer_connection_->SetRemoteDescription( | 289 peer_connection_->SetRemoteDescription( |
| 290 DummySetSessionDescriptionObserver::Create(), session_description); | 290 DummySetSessionDescriptionObserver::Create(), session_description); |
| 291 if (session_description->type() == | 291 if (session_description->type() == |
| 292 webrtc::SessionDescriptionInterface::kOffer) { | 292 webrtc::SessionDescriptionInterface::kOffer) { |
| 293 peer_connection_->CreateAnswer(this, NULL); | 293 peer_connection_->CreateAnswer(this, nullptr); |
| 294 } | 294 } |
| 295 return; | 295 return; |
| 296 } else { | 296 } else { |
| 297 std::string sdp_mid; | 297 std::string sdp_mid; |
| 298 int sdp_mlineindex = 0; | 298 int sdp_mlineindex = 0; |
| 299 std::string sdp; | 299 std::string sdp; |
| 300 if (!rtc::GetStringFromJsonObject(jmessage, kCandidateSdpMidName, | 300 if (!rtc::GetStringFromJsonObject(jmessage, kCandidateSdpMidName, |
| 301 &sdp_mid) || | 301 &sdp_mid) || |
| 302 !rtc::GetIntFromJsonObject(jmessage, kCandidateSdpMlineIndexName, | 302 !rtc::GetIntFromJsonObject(jmessage, kCandidateSdpMlineIndexName, |
| 303 &sdp_mlineindex) || | 303 &sdp_mlineindex) || |
| (...skipping 13 matching lines...) Expand all Loading... |
| 317 LOG(WARNING) << "Failed to apply the received candidate"; | 317 LOG(WARNING) << "Failed to apply the received candidate"; |
| 318 return; | 318 return; |
| 319 } | 319 } |
| 320 LOG(INFO) << " Received candidate :" << message; | 320 LOG(INFO) << " Received candidate :" << message; |
| 321 return; | 321 return; |
| 322 } | 322 } |
| 323 } | 323 } |
| 324 | 324 |
| 325 void Conductor::OnMessageSent(int err) { | 325 void Conductor::OnMessageSent(int err) { |
| 326 // Process the next pending message if any. | 326 // Process the next pending message if any. |
| 327 main_wnd_->QueueUIThreadCallback(SEND_MESSAGE_TO_PEER, NULL); | 327 main_wnd_->QueueUIThreadCallback(SEND_MESSAGE_TO_PEER, nullptr); |
| 328 } | 328 } |
| 329 | 329 |
| 330 void Conductor::OnServerConnectionFailure() { | 330 void Conductor::OnServerConnectionFailure() { |
| 331 main_wnd_->MessageBox("Error", ("Failed to connect to " + server_).c_str(), | 331 main_wnd_->MessageBox("Error", ("Failed to connect to " + server_).c_str(), |
| 332 true); | 332 true); |
| 333 } | 333 } |
| 334 | 334 |
| 335 // | 335 // |
| 336 // MainWndCallback implementation. | 336 // MainWndCallback implementation. |
| 337 // | 337 // |
| (...skipping 15 matching lines...) Expand all Loading... |
| 353 RTC_DCHECK(peer_id != -1); | 353 RTC_DCHECK(peer_id != -1); |
| 354 | 354 |
| 355 if (peer_connection_.get()) { | 355 if (peer_connection_.get()) { |
| 356 main_wnd_->MessageBox("Error", | 356 main_wnd_->MessageBox("Error", |
| 357 "We only support connecting to one peer at a time", true); | 357 "We only support connecting to one peer at a time", true); |
| 358 return; | 358 return; |
| 359 } | 359 } |
| 360 | 360 |
| 361 if (InitializePeerConnection()) { | 361 if (InitializePeerConnection()) { |
| 362 peer_id_ = peer_id; | 362 peer_id_ = peer_id; |
| 363 peer_connection_->CreateOffer(this, NULL); | 363 peer_connection_->CreateOffer(this, nullptr); |
| 364 } else { | 364 } else { |
| 365 main_wnd_->MessageBox("Error", "Failed to initialize PeerConnection", true); | 365 main_wnd_->MessageBox("Error", "Failed to initialize PeerConnection", true); |
| 366 } | 366 } |
| 367 } | 367 } |
| 368 | 368 |
| 369 cricket::VideoCapturer* Conductor::OpenVideoCaptureDevice() { | 369 cricket::VideoCapturer* Conductor::OpenVideoCaptureDevice() { |
| 370 std::vector<std::string> device_names; | 370 std::vector<std::string> device_names; |
| 371 { | 371 { |
| 372 std::unique_ptr<webrtc::VideoCaptureModule::DeviceInfo> info( | 372 std::unique_ptr<webrtc::VideoCaptureModule::DeviceInfo> info( |
| 373 webrtc::VideoCaptureFactory::CreateDeviceInfo()); | 373 webrtc::VideoCaptureFactory::CreateDeviceInfo()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 395 } | 395 } |
| 396 return capturer; | 396 return capturer; |
| 397 } | 397 } |
| 398 | 398 |
| 399 void Conductor::AddStreams() { | 399 void Conductor::AddStreams() { |
| 400 if (active_streams_.find(kStreamLabel) != active_streams_.end()) | 400 if (active_streams_.find(kStreamLabel) != active_streams_.end()) |
| 401 return; // Already added. | 401 return; // Already added. |
| 402 | 402 |
| 403 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( | 403 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
| 404 peer_connection_factory_->CreateAudioTrack( | 404 peer_connection_factory_->CreateAudioTrack( |
| 405 kAudioLabel, peer_connection_factory_->CreateAudioSource(NULL))); | 405 kAudioLabel, peer_connection_factory_->CreateAudioSource(nullptr))); |
| 406 | 406 |
| 407 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( | 407 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
| 408 peer_connection_factory_->CreateVideoTrack( | 408 peer_connection_factory_->CreateVideoTrack( |
| 409 kVideoLabel, | 409 kVideoLabel, peer_connection_factory_->CreateVideoSource( |
| 410 peer_connection_factory_->CreateVideoSource(OpenVideoCaptureDevice(), | 410 OpenVideoCaptureDevice(), nullptr))); |
| 411 NULL))); | |
| 412 main_wnd_->StartLocalRenderer(video_track); | 411 main_wnd_->StartLocalRenderer(video_track); |
| 413 | 412 |
| 414 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = | 413 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = |
| 415 peer_connection_factory_->CreateLocalMediaStream(kStreamLabel); | 414 peer_connection_factory_->CreateLocalMediaStream(kStreamLabel); |
| 416 | 415 |
| 417 stream->AddTrack(audio_track); | 416 stream->AddTrack(audio_track); |
| 418 stream->AddTrack(video_track); | 417 stream->AddTrack(video_track); |
| 419 if (!peer_connection_->AddStream(stream)) { | 418 if (!peer_connection_->AddStream(stream)) { |
| 420 LOG(LS_ERROR) << "Adding stream to PeerConnection failed"; | 419 LOG(LS_ERROR) << "Adding stream to PeerConnection failed"; |
| 421 } | 420 } |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 } | 536 } |
| 538 | 537 |
| 539 void Conductor::OnFailure(const std::string& error) { | 538 void Conductor::OnFailure(const std::string& error) { |
| 540 LOG(LERROR) << error; | 539 LOG(LERROR) << error; |
| 541 } | 540 } |
| 542 | 541 |
| 543 void Conductor::SendMessage(const std::string& json_object) { | 542 void Conductor::SendMessage(const std::string& json_object) { |
| 544 std::string* msg = new std::string(json_object); | 543 std::string* msg = new std::string(json_object); |
| 545 main_wnd_->QueueUIThreadCallback(SEND_MESSAGE_TO_PEER, msg); | 544 main_wnd_->QueueUIThreadCallback(SEND_MESSAGE_TO_PEER, msg); |
| 546 } | 545 } |
| OLD | NEW |