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

Side by Side Diff: talk/session/media/channel.cc

Issue 1453523002: Allow remote fingerprint update during a call (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 5 years, 1 month 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
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 TransportController* transport_controller, 166 TransportController* transport_controller,
167 const std::string& content_name, 167 const std::string& content_name,
168 bool rtcp) 168 bool rtcp)
169 : worker_thread_(thread), 169 : worker_thread_(thread),
170 transport_controller_(transport_controller), 170 transport_controller_(transport_controller),
171 media_channel_(media_channel), 171 media_channel_(media_channel),
172 content_name_(content_name), 172 content_name_(content_name),
173 rtcp_transport_enabled_(rtcp), 173 rtcp_transport_enabled_(rtcp),
174 transport_channel_(nullptr), 174 transport_channel_(nullptr),
175 rtcp_transport_channel_(nullptr), 175 rtcp_transport_channel_(nullptr),
176 srtp_filter_(new SrtpFilter()),
176 enabled_(false), 177 enabled_(false),
177 writable_(false), 178 writable_(false),
178 rtp_ready_to_send_(false), 179 rtp_ready_to_send_(false),
179 rtcp_ready_to_send_(false), 180 rtcp_ready_to_send_(false),
180 was_ever_writable_(false), 181 was_ever_writable_(false),
181 local_content_direction_(MD_INACTIVE), 182 local_content_direction_(MD_INACTIVE),
182 remote_content_direction_(MD_INACTIVE), 183 remote_content_direction_(MD_INACTIVE),
183 has_received_packet_(false), 184 has_received_packet_(false),
184 dtls_keyed_(false), 185 dtls_keyed_(false),
185 secure_required_(false), 186 secure_required_(false),
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 UpdateWritableState_w(); 330 UpdateWritableState_w();
330 SetReadyToSend(true, new_tc && new_tc->writable()); 331 SetReadyToSend(true, new_tc && new_tc->writable());
331 } 332 }
332 333
333 void BaseChannel::ConnectToTransportChannel(TransportChannel* tc) { 334 void BaseChannel::ConnectToTransportChannel(TransportChannel* tc) {
334 ASSERT(worker_thread_ == rtc::Thread::Current()); 335 ASSERT(worker_thread_ == rtc::Thread::Current());
335 336
336 tc->SignalWritableState.connect(this, &BaseChannel::OnWritableState); 337 tc->SignalWritableState.connect(this, &BaseChannel::OnWritableState);
337 tc->SignalReadPacket.connect(this, &BaseChannel::OnChannelRead); 338 tc->SignalReadPacket.connect(this, &BaseChannel::OnChannelRead);
338 tc->SignalReadyToSend.connect(this, &BaseChannel::OnReadyToSend); 339 tc->SignalReadyToSend.connect(this, &BaseChannel::OnReadyToSend);
340 tc->SignalDtlsSrtpSetup.connect(this, &BaseChannel::OnDtlsSrtpSetup);
339 } 341 }
340 342
341 void BaseChannel::DisconnectFromTransportChannel(TransportChannel* tc) { 343 void BaseChannel::DisconnectFromTransportChannel(TransportChannel* tc) {
342 ASSERT(worker_thread_ == rtc::Thread::Current()); 344 ASSERT(worker_thread_ == rtc::Thread::Current());
343 345
344 tc->SignalWritableState.disconnect(this); 346 tc->SignalWritableState.disconnect(this);
345 tc->SignalReadPacket.disconnect(this); 347 tc->SignalReadPacket.disconnect(this);
346 tc->SignalReadyToSend.disconnect(this); 348 tc->SignalReadyToSend.disconnect(this);
347 } 349 }
348 350
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 } 411 }
410 412
411 bool BaseChannel::IsReadyToReceive() const { 413 bool BaseChannel::IsReadyToReceive() const {
412 // Receive data if we are enabled and have local content, 414 // Receive data if we are enabled and have local content,
413 return enabled() && IsReceiveContentDirection(local_content_direction_); 415 return enabled() && IsReceiveContentDirection(local_content_direction_);
414 } 416 }
415 417
416 bool BaseChannel::IsReadyToSend() const { 418 bool BaseChannel::IsReadyToSend() const {
417 // Send outgoing data if we are enabled, have local and remote content, 419 // Send outgoing data if we are enabled, have local and remote content,
418 // and we have had some form of connectivity. 420 // and we have had some form of connectivity.
419 return enabled() && 421 return enabled() && IsReceiveContentDirection(remote_content_direction_) &&
420 IsReceiveContentDirection(remote_content_direction_) &&
421 IsSendContentDirection(local_content_direction_) && 422 IsSendContentDirection(local_content_direction_) &&
422 was_ever_writable(); 423 was_ever_writable();
423 } 424 }
424 425
425 bool BaseChannel::SendPacket(rtc::Buffer* packet, 426 bool BaseChannel::SendPacket(rtc::Buffer* packet,
426 const rtc::PacketOptions& options) { 427 const rtc::PacketOptions& options) {
427 return SendPacket(false, packet, options); 428 return SendPacket(false, packet, options);
428 } 429 }
429 430
430 bool BaseChannel::SendRtcp(rtc::Buffer* packet, 431 bool BaseChannel::SendRtcp(rtc::Buffer* packet,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 bool rtcp = PacketIsRtcp(channel, data, len); 468 bool rtcp = PacketIsRtcp(channel, data, len);
468 rtc::Buffer packet(data, len); 469 rtc::Buffer packet(data, len);
469 HandlePacket(rtcp, &packet, packet_time); 470 HandlePacket(rtcp, &packet, packet_time);
470 } 471 }
471 472
472 void BaseChannel::OnReadyToSend(TransportChannel* channel) { 473 void BaseChannel::OnReadyToSend(TransportChannel* channel) {
473 ASSERT(channel == transport_channel_ || channel == rtcp_transport_channel_); 474 ASSERT(channel == transport_channel_ || channel == rtcp_transport_channel_);
474 SetReadyToSend(channel == rtcp_transport_channel_, true); 475 SetReadyToSend(channel == rtcp_transport_channel_, true);
475 } 476 }
476 477
478 void BaseChannel::OnDtlsSrtpSetup(TransportChannel* channel) {
pthatcher1 2015/11/18 20:42:43 Since this will be fired on the worker thread, we
479 // When the channel signals the DTLS-SRTP has been setup, set the
480 // |was_ever_writable| to false, allowing re-setup SRTP here.
481 LOG(LS_INFO) << "TransportChannel has DTLS-SRTP set up.";
482 was_ever_writable_ = false;
pthatcher1 2015/11/18 20:42:43 That's not what "was ever writable" means. It it
483 }
484
477 void BaseChannel::SetReadyToSend(bool rtcp, bool ready) { 485 void BaseChannel::SetReadyToSend(bool rtcp, bool ready) {
478 if (rtcp) { 486 if (rtcp) {
479 rtcp_ready_to_send_ = ready; 487 rtcp_ready_to_send_ = ready;
480 } else { 488 } else {
481 rtp_ready_to_send_ = ready; 489 rtp_ready_to_send_ = ready;
482 } 490 }
483 491
484 if (rtp_ready_to_send_ && 492 if (rtp_ready_to_send_ &&
485 // In the case of rtcp mux |rtcp_transport_channel_| will be null. 493 // In the case of rtcp mux |rtcp_transport_channel_| will be null.
486 (rtcp_ready_to_send_ || !rtcp_transport_channel_)) { 494 (rtcp_ready_to_send_ || !rtcp_transport_channel_)) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 if (!ValidPacket(rtcp, packet)) { 540 if (!ValidPacket(rtcp, packet)) {
533 LOG(LS_ERROR) << "Dropping outgoing " << content_name_ << " " 541 LOG(LS_ERROR) << "Dropping outgoing " << content_name_ << " "
534 << PacketType(rtcp) 542 << PacketType(rtcp)
535 << " packet: wrong size=" << packet->size(); 543 << " packet: wrong size=" << packet->size();
536 return false; 544 return false;
537 } 545 }
538 546
539 rtc::PacketOptions updated_options; 547 rtc::PacketOptions updated_options;
540 updated_options = options; 548 updated_options = options;
541 // Protect if needed. 549 // Protect if needed.
542 if (srtp_filter_.IsActive()) { 550 if (srtp_filter_->IsActive()) {
543 bool res; 551 bool res;
544 uint8_t* data = packet->data(); 552 uint8_t* data = packet->data();
545 int len = static_cast<int>(packet->size()); 553 int len = static_cast<int>(packet->size());
546 if (!rtcp) { 554 if (!rtcp) {
547 // If ENABLE_EXTERNAL_AUTH flag is on then packet authentication is not done 555 // If ENABLE_EXTERNAL_AUTH flag is on then packet authentication is not done
548 // inside libsrtp for a RTP packet. A external HMAC module will be writing 556 // inside libsrtp for a RTP packet. A external HMAC module will be writing
549 // a fake HMAC value. This is ONLY done for a RTP packet. 557 // a fake HMAC value. This is ONLY done for a RTP packet.
550 // Socket layer will update rtp sendtime extension header if present in 558 // Socket layer will update rtp sendtime extension header if present in
551 // packet with current time before updating the HMAC. 559 // packet with current time before updating the HMAC.
552 #if !defined(ENABLE_EXTERNAL_AUTH) 560 #if !defined(ENABLE_EXTERNAL_AUTH)
553 res = srtp_filter_.ProtectRtp( 561 res = srtp_filter_->ProtectRtp(
554 data, len, static_cast<int>(packet->capacity()), &len); 562 data, len, static_cast<int>(packet->capacity()), &len);
555 #else 563 #else
556 updated_options.packet_time_params.rtp_sendtime_extension_id = 564 updated_options.packet_time_params.rtp_sendtime_extension_id =
557 rtp_abs_sendtime_extn_id_; 565 rtp_abs_sendtime_extn_id_;
558 res = srtp_filter_.ProtectRtp( 566 res = srtp_filter_->ProtectRtp(
559 data, len, static_cast<int>(packet->capacity()), &len, 567 data, len, static_cast<int>(packet->capacity()), &len,
560 &updated_options.packet_time_params.srtp_packet_index); 568 &updated_options.packet_time_params.srtp_packet_index);
561 // If protection succeeds, let's get auth params from srtp. 569 // If protection succeeds, let's get auth params from srtp.
562 if (res) { 570 if (res) {
563 uint8_t* auth_key = NULL; 571 uint8_t* auth_key = NULL;
564 int key_len; 572 int key_len;
565 res = srtp_filter_.GetRtpAuthParams( 573 res = srtp_filter_->GetRtpAuthParams(
566 &auth_key, &key_len, 574 &auth_key, &key_len,
567 &updated_options.packet_time_params.srtp_auth_tag_len); 575 &updated_options.packet_time_params.srtp_auth_tag_len);
568 if (res) { 576 if (res) {
569 updated_options.packet_time_params.srtp_auth_key.resize(key_len); 577 updated_options.packet_time_params.srtp_auth_key.resize(key_len);
570 updated_options.packet_time_params.srtp_auth_key.assign( 578 updated_options.packet_time_params.srtp_auth_key.assign(
571 auth_key, auth_key + key_len); 579 auth_key, auth_key + key_len);
572 } 580 }
573 } 581 }
574 #endif 582 #endif
575 if (!res) { 583 if (!res) {
576 int seq_num = -1; 584 int seq_num = -1;
577 uint32_t ssrc = 0; 585 uint32_t ssrc = 0;
578 GetRtpSeqNum(data, len, &seq_num); 586 GetRtpSeqNum(data, len, &seq_num);
579 GetRtpSsrc(data, len, &ssrc); 587 GetRtpSsrc(data, len, &ssrc);
580 LOG(LS_ERROR) << "Failed to protect " << content_name_ 588 LOG(LS_ERROR) << "Failed to protect " << content_name_
581 << " RTP packet: size=" << len 589 << " RTP packet: size=" << len
582 << ", seqnum=" << seq_num << ", SSRC=" << ssrc; 590 << ", seqnum=" << seq_num << ", SSRC=" << ssrc;
583 return false; 591 return false;
584 } 592 }
585 } else { 593 } else {
586 res = srtp_filter_.ProtectRtcp(data, len, 594 res = srtp_filter_->ProtectRtcp(
587 static_cast<int>(packet->capacity()), 595 data, len, static_cast<int>(packet->capacity()), &len);
588 &len);
589 if (!res) { 596 if (!res) {
590 int type = -1; 597 int type = -1;
591 GetRtcpType(data, len, &type); 598 GetRtcpType(data, len, &type);
592 LOG(LS_ERROR) << "Failed to protect " << content_name_ 599 LOG(LS_ERROR) << "Failed to protect " << content_name_
593 << " RTCP packet: size=" << len << ", type=" << type; 600 << " RTCP packet: size=" << len << ", type=" << type;
594 return false; 601 return false;
595 } 602 }
596 } 603 }
597 604
598 // Update the length of the packet now that we've added the auth tag. 605 // Update the length of the packet now that we've added the auth tag.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 } 647 }
641 648
642 // We are only interested in the first rtp packet because that 649 // We are only interested in the first rtp packet because that
643 // indicates the media has started flowing. 650 // indicates the media has started flowing.
644 if (!has_received_packet_ && !rtcp) { 651 if (!has_received_packet_ && !rtcp) {
645 has_received_packet_ = true; 652 has_received_packet_ = true;
646 signaling_thread()->Post(this, MSG_FIRSTPACKETRECEIVED); 653 signaling_thread()->Post(this, MSG_FIRSTPACKETRECEIVED);
647 } 654 }
648 655
649 // Unprotect the packet, if needed. 656 // Unprotect the packet, if needed.
650 if (srtp_filter_.IsActive()) { 657 if (srtp_filter_->IsActive()) {
651 char* data = packet->data<char>(); 658 char* data = packet->data<char>();
652 int len = static_cast<int>(packet->size()); 659 int len = static_cast<int>(packet->size());
653 bool res; 660 bool res;
654 if (!rtcp) { 661 if (!rtcp) {
655 res = srtp_filter_.UnprotectRtp(data, len, &len); 662 res = srtp_filter_->UnprotectRtp(data, len, &len);
656 if (!res) { 663 if (!res) {
657 int seq_num = -1; 664 int seq_num = -1;
658 uint32_t ssrc = 0; 665 uint32_t ssrc = 0;
659 GetRtpSeqNum(data, len, &seq_num); 666 GetRtpSeqNum(data, len, &seq_num);
660 GetRtpSsrc(data, len, &ssrc); 667 GetRtpSsrc(data, len, &ssrc);
661 LOG(LS_ERROR) << "Failed to unprotect " << content_name_ 668 LOG(LS_ERROR) << "Failed to unprotect " << content_name_
662 << " RTP packet: size=" << len 669 << " RTP packet: size=" << len
663 << ", seqnum=" << seq_num << ", SSRC=" << ssrc; 670 << ", seqnum=" << seq_num << ", SSRC=" << ssrc;
664 return; 671 return;
665 } 672 }
666 } else { 673 } else {
667 res = srtp_filter_.UnprotectRtcp(data, len, &len); 674 res = srtp_filter_->UnprotectRtcp(data, len, &len);
668 if (!res) { 675 if (!res) {
669 int type = -1; 676 int type = -1;
670 GetRtcpType(data, len, &type); 677 GetRtcpType(data, len, &type);
671 LOG(LS_ERROR) << "Failed to unprotect " << content_name_ 678 LOG(LS_ERROR) << "Failed to unprotect " << content_name_
672 << " RTCP packet: size=" << len << ", type=" << type; 679 << " RTCP packet: size=" << len << ", type=" << type;
673 return; 680 return;
674 } 681 }
675 } 682 }
676 683
677 packet->SetSize(len); 684 packet->SetSize(len);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 for (std::vector<ConnectionInfo>::const_iterator it = infos.begin(); 776 for (std::vector<ConnectionInfo>::const_iterator it = infos.begin();
770 it != infos.end(); ++it) { 777 it != infos.end(); ++it) {
771 if (it->best_connection) { 778 if (it->best_connection) {
772 LOG(LS_INFO) << "Using " << it->local_candidate.ToSensitiveString() 779 LOG(LS_INFO) << "Using " << it->local_candidate.ToSensitiveString()
773 << "->" << it->remote_candidate.ToSensitiveString(); 780 << "->" << it->remote_candidate.ToSensitiveString();
774 break; 781 break;
775 } 782 }
776 } 783 }
777 784
778 // If we're doing DTLS-SRTP, now is the time. 785 // If we're doing DTLS-SRTP, now is the time.
779 if (!was_ever_writable_ && ShouldSetupDtlsSrtp()) { 786 if (!was_ever_writable_ && ShouldSetupDtlsSrtp() && IsUsingDtlsSrtp()) {
787 // If we're using DTLS-SRTP, instead of resetting the SRTP context, just
788 // recreate a SRTP context.
789 srtp_filter_.reset(new SrtpFilter());
790
780 if (!SetupDtlsSrtp(false)) { 791 if (!SetupDtlsSrtp(false)) {
781 SignalDtlsSetupFailure_w(false); 792 SignalDtlsSetupFailure_w(false);
782 return; 793 return;
783 } 794 }
784 795
785 if (rtcp_transport_channel_) { 796 if (rtcp_transport_channel_) {
786 if (!SetupDtlsSrtp(true)) { 797 if (!SetupDtlsSrtp(true)) {
787 SignalDtlsSetupFailure_w(true); 798 SignalDtlsSetupFailure_w(true);
788 return; 799 return;
789 } 800 }
(...skipping 25 matching lines...) Expand all
815 } else { 826 } else {
816 GetDefaultSrtpCryptoSuiteNames(&ciphers); 827 GetDefaultSrtpCryptoSuiteNames(&ciphers);
817 } 828 }
818 return tc->SetSrtpCiphers(ciphers); 829 return tc->SetSrtpCiphers(ciphers);
819 } 830 }
820 831
821 bool BaseChannel::ShouldSetupDtlsSrtp() const { 832 bool BaseChannel::ShouldSetupDtlsSrtp() const {
822 return true; 833 return true;
823 } 834 }
824 835
836 bool BaseChannel::IsUsingDtlsSrtp() const {
837 return (transport_channel_ && transport_channel_->IsDtlsActive()) ||
838 (rtcp_transport_channel_ && rtcp_transport_channel_->IsDtlsActive());
839 }
840
825 // This function returns true if either DTLS-SRTP is not in use 841 // This function returns true if either DTLS-SRTP is not in use
826 // *or* DTLS-SRTP is successfully set up. 842 // *or* DTLS-SRTP is successfully set up.
827 bool BaseChannel::SetupDtlsSrtp(bool rtcp_channel) { 843 bool BaseChannel::SetupDtlsSrtp(bool rtcp_channel) {
828 bool ret = false; 844 bool ret = false;
829 845
830 TransportChannel* channel = 846 TransportChannel* channel =
831 rtcp_channel ? rtcp_transport_channel_ : transport_channel_; 847 rtcp_channel ? rtcp_transport_channel_ : transport_channel_;
832 848
833 // No DTLS 849 // No DTLS
834 if (!channel->IsDtlsActive()) 850 if (!channel->IsDtlsActive())
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 902
887 if (role == rtc::SSL_SERVER) { 903 if (role == rtc::SSL_SERVER) {
888 send_key = &server_write_key; 904 send_key = &server_write_key;
889 recv_key = &client_write_key; 905 recv_key = &client_write_key;
890 } else { 906 } else {
891 send_key = &client_write_key; 907 send_key = &client_write_key;
892 recv_key = &server_write_key; 908 recv_key = &server_write_key;
893 } 909 }
894 910
895 if (rtcp_channel) { 911 if (rtcp_channel) {
896 ret = srtp_filter_.SetRtcpParams( 912 ret = srtp_filter_->SetRtcpParams(
897 selected_cipher, 913 selected_cipher, &(*send_key)[0], static_cast<int>(send_key->size()),
898 &(*send_key)[0], 914 selected_cipher, &(*recv_key)[0], static_cast<int>(recv_key->size()));
899 static_cast<int>(send_key->size()),
900 selected_cipher,
901 &(*recv_key)[0],
902 static_cast<int>(recv_key->size()));
903 } else { 915 } else {
904 ret = srtp_filter_.SetRtpParams( 916 ret = srtp_filter_->SetRtpParams(
905 selected_cipher, 917 selected_cipher, &(*send_key)[0], static_cast<int>(send_key->size()),
906 &(*send_key)[0], 918 selected_cipher, &(*recv_key)[0], static_cast<int>(recv_key->size()));
907 static_cast<int>(send_key->size()),
908 selected_cipher,
909 &(*recv_key)[0],
910 static_cast<int>(recv_key->size()));
911 } 919 }
912 920
913 if (!ret) 921 if (!ret)
914 LOG(LS_WARNING) << "DTLS-SRTP key installation failed"; 922 LOG(LS_WARNING) << "DTLS-SRTP key installation failed";
915 else 923 else
916 dtls_keyed_ = true; 924 dtls_keyed_ = true;
917 925
918 return ret; 926 return ret;
919 } 927 }
920 928
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 bool dtls = false; 988 bool dtls = false;
981 ret = CheckSrtpConfig(cryptos, &dtls, error_desc); 989 ret = CheckSrtpConfig(cryptos, &dtls, error_desc);
982 if (!ret) { 990 if (!ret) {
983 return false; 991 return false;
984 } 992 }
985 switch (action) { 993 switch (action) {
986 case CA_OFFER: 994 case CA_OFFER:
987 // If DTLS is already active on the channel, we could be renegotiating 995 // If DTLS is already active on the channel, we could be renegotiating
988 // here. We don't update the srtp filter. 996 // here. We don't update the srtp filter.
989 if (!dtls) { 997 if (!dtls) {
990 ret = srtp_filter_.SetOffer(cryptos, src); 998 ret = srtp_filter_->SetOffer(cryptos, src);
991 } 999 }
992 break; 1000 break;
993 case CA_PRANSWER: 1001 case CA_PRANSWER:
994 // If we're doing DTLS-SRTP, we don't want to update the filter 1002 // If we're doing DTLS-SRTP, we don't want to update the filter
995 // with an answer, because we already have SRTP parameters. 1003 // with an answer, because we already have SRTP parameters.
996 if (!dtls) { 1004 if (!dtls) {
997 ret = srtp_filter_.SetProvisionalAnswer(cryptos, src); 1005 ret = srtp_filter_->SetProvisionalAnswer(cryptos, src);
998 } 1006 }
999 break; 1007 break;
1000 case CA_ANSWER: 1008 case CA_ANSWER:
1001 // If we're doing DTLS-SRTP, we don't want to update the filter 1009 // If we're doing DTLS-SRTP, we don't want to update the filter
1002 // with an answer, because we already have SRTP parameters. 1010 // with an answer, because we already have SRTP parameters.
1003 if (!dtls) { 1011 if (!dtls) {
1004 ret = srtp_filter_.SetAnswer(cryptos, src); 1012 ret = srtp_filter_->SetAnswer(cryptos, src);
1005 } 1013 }
1006 break; 1014 break;
1007 default: 1015 default:
1008 break; 1016 break;
1009 } 1017 }
1010 if (!ret) { 1018 if (!ret) {
1011 SafeSetError("Failed to setup SRTP filter.", error_desc); 1019 SafeSetError("Failed to setup SRTP filter.", error_desc);
1012 return false; 1020 return false;
1013 } 1021 }
1014 return true; 1022 return true;
(...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after
2288 return (data_channel_type_ == DCT_RTP); 2296 return (data_channel_type_ == DCT_RTP);
2289 } 2297 }
2290 2298
2291 void DataChannel::OnStreamClosedRemotely(uint32_t sid) { 2299 void DataChannel::OnStreamClosedRemotely(uint32_t sid) {
2292 rtc::TypedMessageData<uint32_t>* message = 2300 rtc::TypedMessageData<uint32_t>* message =
2293 new rtc::TypedMessageData<uint32_t>(sid); 2301 new rtc::TypedMessageData<uint32_t>(sid);
2294 signaling_thread()->Post(this, MSG_STREAMCLOSEDREMOTELY, message); 2302 signaling_thread()->Post(this, MSG_STREAMCLOSEDREMOTELY, message);
2295 } 2303 }
2296 2304
2297 } // namespace cricket 2305 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698