OLD | NEW |
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 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 } | 454 } |
455 | 455 |
456 if (rtc_options.offer_to_receive_audio != RTCOfferAnswerOptions::kUndefined) { | 456 if (rtc_options.offer_to_receive_audio != RTCOfferAnswerOptions::kUndefined) { |
457 session_options->recv_audio = (rtc_options.offer_to_receive_audio > 0); | 457 session_options->recv_audio = (rtc_options.offer_to_receive_audio > 0); |
458 } | 458 } |
459 if (rtc_options.offer_to_receive_video != RTCOfferAnswerOptions::kUndefined) { | 459 if (rtc_options.offer_to_receive_video != RTCOfferAnswerOptions::kUndefined) { |
460 session_options->recv_video = (rtc_options.offer_to_receive_video > 0); | 460 session_options->recv_video = (rtc_options.offer_to_receive_video > 0); |
461 } | 461 } |
462 | 462 |
463 session_options->vad_enabled = rtc_options.voice_activity_detection; | 463 session_options->vad_enabled = rtc_options.voice_activity_detection; |
464 session_options->transport_options.ice_restart = rtc_options.ice_restart; | 464 session_options->audio_transport_options.ice_restart = |
| 465 rtc_options.ice_restart; |
| 466 session_options->video_transport_options.ice_restart = |
| 467 rtc_options.ice_restart; |
| 468 session_options->data_transport_options.ice_restart = rtc_options.ice_restart; |
465 session_options->bundle_enabled = rtc_options.use_rtp_mux; | 469 session_options->bundle_enabled = rtc_options.use_rtp_mux; |
466 | 470 |
467 return true; | 471 return true; |
468 } | 472 } |
469 | 473 |
470 bool ParseConstraintsForAnswer(const MediaConstraintsInterface* constraints, | 474 bool ParseConstraintsForAnswer(const MediaConstraintsInterface* constraints, |
471 cricket::MediaSessionOptions* session_options) { | 475 cricket::MediaSessionOptions* session_options) { |
472 bool value = false; | 476 bool value = false; |
473 size_t mandatory_constraints_satisfied = 0; | 477 size_t mandatory_constraints_satisfied = 0; |
474 | 478 |
(...skipping 25 matching lines...) Expand all Loading... |
500 if (FindConstraint(constraints, MediaConstraintsInterface::kUseRtpMux, &value, | 504 if (FindConstraint(constraints, MediaConstraintsInterface::kUseRtpMux, &value, |
501 &mandatory_constraints_satisfied)) { | 505 &mandatory_constraints_satisfied)) { |
502 session_options->bundle_enabled = value; | 506 session_options->bundle_enabled = value; |
503 } else { | 507 } else { |
504 // kUseRtpMux defaults to true according to spec. | 508 // kUseRtpMux defaults to true according to spec. |
505 session_options->bundle_enabled = true; | 509 session_options->bundle_enabled = true; |
506 } | 510 } |
507 | 511 |
508 if (FindConstraint(constraints, MediaConstraintsInterface::kIceRestart, | 512 if (FindConstraint(constraints, MediaConstraintsInterface::kIceRestart, |
509 &value, &mandatory_constraints_satisfied)) { | 513 &value, &mandatory_constraints_satisfied)) { |
510 session_options->transport_options.ice_restart = value; | 514 session_options->audio_transport_options.ice_restart = value; |
| 515 session_options->video_transport_options.ice_restart = value; |
| 516 session_options->data_transport_options.ice_restart = value; |
511 } else { | 517 } else { |
512 // kIceRestart defaults to false according to spec. | 518 // kIceRestart defaults to false according to spec. |
513 session_options->transport_options.ice_restart = false; | 519 session_options->audio_transport_options.ice_restart = false; |
| 520 session_options->video_transport_options.ice_restart = false; |
| 521 session_options->data_transport_options.ice_restart = false; |
514 } | 522 } |
515 | 523 |
516 if (!constraints) { | 524 if (!constraints) { |
517 return true; | 525 return true; |
518 } | 526 } |
519 return mandatory_constraints_satisfied == constraints->GetMandatory().size(); | 527 return mandatory_constraints_satisfied == constraints->GetMandatory().size(); |
520 } | 528 } |
521 | 529 |
522 bool ParseIceServers(const PeerConnectionInterface::IceServers& servers, | 530 bool ParseIceServers(const PeerConnectionInterface::IceServers& servers, |
523 cricket::ServerAddresses* stun_servers, | 531 cricket::ServerAddresses* stun_servers, |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 std::string error; | 963 std::string error; |
956 if (!session_->SetLocalDescription(desc, &error)) { | 964 if (!session_->SetLocalDescription(desc, &error)) { |
957 PostSetSessionDescriptionFailure(observer, error); | 965 PostSetSessionDescriptionFailure(observer, error); |
958 return; | 966 return; |
959 } | 967 } |
960 | 968 |
961 // If setting the description decided our SSL role, allocate any necessary | 969 // If setting the description decided our SSL role, allocate any necessary |
962 // SCTP sids. | 970 // SCTP sids. |
963 rtc::SSLRole role; | 971 rtc::SSLRole role; |
964 if (session_->data_channel_type() == cricket::DCT_SCTP && | 972 if (session_->data_channel_type() == cricket::DCT_SCTP && |
965 session_->GetSslRole(&role)) { | 973 session_->GetSslRole(session_->data_channel(), &role)) { |
966 AllocateSctpSids(role); | 974 AllocateSctpSids(role); |
967 } | 975 } |
968 | 976 |
969 // Update state and SSRC of local MediaStreams and DataChannels based on the | 977 // Update state and SSRC of local MediaStreams and DataChannels based on the |
970 // local session description. | 978 // local session description. |
971 const cricket::ContentInfo* audio_content = | 979 const cricket::ContentInfo* audio_content = |
972 GetFirstAudioContent(desc->description()); | 980 GetFirstAudioContent(desc->description()); |
973 if (audio_content) { | 981 if (audio_content) { |
974 if (audio_content->rejected) { | 982 if (audio_content->rejected) { |
975 RemoveTracks(cricket::MEDIA_TYPE_AUDIO); | 983 RemoveTracks(cricket::MEDIA_TYPE_AUDIO); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 std::string error; | 1041 std::string error; |
1034 if (!session_->SetRemoteDescription(desc, &error)) { | 1042 if (!session_->SetRemoteDescription(desc, &error)) { |
1035 PostSetSessionDescriptionFailure(observer, error); | 1043 PostSetSessionDescriptionFailure(observer, error); |
1036 return; | 1044 return; |
1037 } | 1045 } |
1038 | 1046 |
1039 // If setting the description decided our SSL role, allocate any necessary | 1047 // If setting the description decided our SSL role, allocate any necessary |
1040 // SCTP sids. | 1048 // SCTP sids. |
1041 rtc::SSLRole role; | 1049 rtc::SSLRole role; |
1042 if (session_->data_channel_type() == cricket::DCT_SCTP && | 1050 if (session_->data_channel_type() == cricket::DCT_SCTP && |
1043 session_->GetSslRole(&role)) { | 1051 session_->GetSslRole(session_->data_channel(), &role)) { |
1044 AllocateSctpSids(role); | 1052 AllocateSctpSids(role); |
1045 } | 1053 } |
1046 | 1054 |
1047 const cricket::SessionDescription* remote_desc = desc->description(); | 1055 const cricket::SessionDescription* remote_desc = desc->description(); |
1048 const cricket::ContentInfo* audio_content = GetFirstAudioContent(remote_desc); | 1056 const cricket::ContentInfo* audio_content = GetFirstAudioContent(remote_desc); |
1049 const cricket::ContentInfo* video_content = GetFirstVideoContent(remote_desc); | 1057 const cricket::ContentInfo* video_content = GetFirstVideoContent(remote_desc); |
1050 const cricket::AudioContentDescription* audio_desc = | 1058 const cricket::AudioContentDescription* audio_desc = |
1051 GetFirstAudioContentDescription(remote_desc); | 1059 GetFirstAudioContentDescription(remote_desc); |
1052 const cricket::VideoContentDescription* video_desc = | 1060 const cricket::VideoContentDescription* video_desc = |
1053 GetFirstVideoContentDescription(remote_desc); | 1061 GetFirstVideoContentDescription(remote_desc); |
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1826 if (session_->data_channel_type() == cricket::DCT_NONE) { | 1834 if (session_->data_channel_type() == cricket::DCT_NONE) { |
1827 LOG(LS_ERROR) | 1835 LOG(LS_ERROR) |
1828 << "InternalCreateDataChannel: Data is not supported in this call."; | 1836 << "InternalCreateDataChannel: Data is not supported in this call."; |
1829 return nullptr; | 1837 return nullptr; |
1830 } | 1838 } |
1831 InternalDataChannelInit new_config = | 1839 InternalDataChannelInit new_config = |
1832 config ? (*config) : InternalDataChannelInit(); | 1840 config ? (*config) : InternalDataChannelInit(); |
1833 if (session_->data_channel_type() == cricket::DCT_SCTP) { | 1841 if (session_->data_channel_type() == cricket::DCT_SCTP) { |
1834 if (new_config.id < 0) { | 1842 if (new_config.id < 0) { |
1835 rtc::SSLRole role; | 1843 rtc::SSLRole role; |
1836 if (session_->GetSslRole(&role) && | 1844 if ((session_->GetSslRole(session_->data_channel(), &role)) && |
1837 !sid_allocator_.AllocateSid(role, &new_config.id)) { | 1845 !sid_allocator_.AllocateSid(role, &new_config.id)) { |
1838 LOG(LS_ERROR) << "No id can be allocated for the SCTP data channel."; | 1846 LOG(LS_ERROR) << "No id can be allocated for the SCTP data channel."; |
1839 return nullptr; | 1847 return nullptr; |
1840 } | 1848 } |
1841 } else if (!sid_allocator_.ReserveSid(new_config.id)) { | 1849 } else if (!sid_allocator_.ReserveSid(new_config.id)) { |
1842 LOG(LS_ERROR) << "Failed to create a SCTP data channel " | 1850 LOG(LS_ERROR) << "Failed to create a SCTP data channel " |
1843 << "because the id is already in use or out of range."; | 1851 << "because the id is already in use or out of range."; |
1844 return nullptr; | 1852 return nullptr; |
1845 } | 1853 } |
1846 } | 1854 } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2007 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { | 2015 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { |
2008 for (const auto& channel : sctp_data_channels_) { | 2016 for (const auto& channel : sctp_data_channels_) { |
2009 if (channel->id() == sid) { | 2017 if (channel->id() == sid) { |
2010 return channel; | 2018 return channel; |
2011 } | 2019 } |
2012 } | 2020 } |
2013 return nullptr; | 2021 return nullptr; |
2014 } | 2022 } |
2015 | 2023 |
2016 } // namespace webrtc | 2024 } // namespace webrtc |
OLD | NEW |