| Index: webrtc/api/peerconnection.cc
|
| diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
|
| index 125300a3b50955624256b407647047eedb579be1..a381b51bec4471c2e8a0971c6f7ddc5173d1d91c 100644
|
| --- a/webrtc/api/peerconnection.cc
|
| +++ b/webrtc/api/peerconnection.cc
|
| @@ -452,6 +452,12 @@ bool ConvertRtcOptionsForOffer(
|
| return true;
|
| }
|
|
|
| +bool ConvertRtcOptionsForAnswer(
|
| + const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options,
|
| + cricket::MediaSessionOptions* session_options) {
|
| + return ConvertRtcOptionsForOffer(rtc_options, session_options);
|
| +}
|
| +
|
| bool ParseConstraintsForAnswer(const MediaConstraintsInterface* constraints,
|
| cricket::MediaSessionOptions* session_options) {
|
| bool value = false;
|
| @@ -565,8 +571,8 @@ PeerConnection::~PeerConnection() {
|
| }
|
|
|
| bool PeerConnection::Initialize(
|
| + const cricket::MediaConfig& media_config,
|
| const PeerConnectionInterface::RTCConfiguration& configuration,
|
| - const MediaConstraintsInterface* constraints,
|
| rtc::scoped_ptr<cricket::PortAllocator> allocator,
|
| rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store,
|
| PeerConnectionObserver* observer) {
|
| @@ -591,13 +597,10 @@ bool PeerConnection::Initialize(
|
| int portallocator_flags = port_allocator_->flags();
|
| portallocator_flags |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET |
|
| cricket::PORTALLOCATOR_ENABLE_IPV6;
|
| - bool value;
|
| - // If IPv6 flag was specified, we'll not override it by experiment.
|
| - if (FindConstraint(constraints, MediaConstraintsInterface::kEnableIPv6,
|
| - &value, nullptr)) {
|
| - if (!value) {
|
| - portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
| - }
|
| + // If the disable-IPv6 flag was specified, we'll not override it
|
| + // by experiment.
|
| + if (configuration.disable_ipv6) {
|
| + portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
| } else if (webrtc::field_trial::FindFullName("WebRTC-IPv6Default") ==
|
| "Disabled") {
|
| portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
|
| @@ -612,24 +615,6 @@ bool PeerConnection::Initialize(
|
| // No step delay is used while allocating ports.
|
| port_allocator_->set_step_delay(cricket::kMinimumStepDelay);
|
|
|
| - // We rely on default values when constraints aren't found.
|
| - cricket::MediaConfig media_config;
|
| -
|
| - media_config.video.disable_prerenderer_smoothing =
|
| - configuration.disable_prerenderer_smoothing;
|
| -
|
| - // Find DSCP constraint.
|
| - FindConstraint(constraints, MediaConstraintsInterface::kEnableDscp,
|
| - &media_config.enable_dscp, NULL);
|
| - // Find constraint for cpu overuse detection.
|
| - FindConstraint(constraints, MediaConstraintsInterface::kCpuOveruseDetection,
|
| - &media_config.video.enable_cpu_overuse_detection, NULL);
|
| -
|
| - // Find Suspend Below Min Bitrate constraint.
|
| - FindConstraint(constraints,
|
| - MediaConstraintsInterface::kEnableVideoSuspendBelowMinBitrate,
|
| - &media_config.video.suspend_below_min_bitrate, NULL);
|
| -
|
| media_controller_.reset(factory_->CreateMediaController(media_config));
|
|
|
| remote_stream_factory_.reset(new RemoteMediaStreamFactory(
|
| @@ -641,8 +626,8 @@ bool PeerConnection::Initialize(
|
| stats_.reset(new StatsCollector(this));
|
|
|
| // Initialize the WebRtcSession. It creates transport channels etc.
|
| - if (!session_->Initialize(factory_->options(), constraints,
|
| - std::move(dtls_identity_store), configuration)) {
|
| + if (!session_->Initialize(factory_->options(), std::move(dtls_identity_store),
|
| + configuration)) {
|
| return false;
|
| }
|
|
|
| @@ -1006,7 +991,26 @@ void PeerConnection::CreateAnswer(
|
| return;
|
| }
|
|
|
| - session_->CreateAnswer(observer, constraints, session_options);
|
| + session_->CreateAnswer(observer, session_options);
|
| +}
|
| +
|
| +void PeerConnection::CreateAnswer(CreateSessionDescriptionObserver* observer,
|
| + const RTCOfferAnswerOptions& options) {
|
| + TRACE_EVENT0("webrtc", "PeerConnection::CreateAnswer");
|
| + if (!VERIFY(observer != nullptr)) {
|
| + LOG(LS_ERROR) << "CreateAnswer - observer is NULL.";
|
| + return;
|
| + }
|
| +
|
| + cricket::MediaSessionOptions session_options;
|
| + if (!GetOptionsForAnswer(options, &session_options)) {
|
| + std::string error = "CreateAnswer called with invalid options.";
|
| + LOG(LS_ERROR) << error;
|
| + PostCreateSessionDescriptionFailure(observer, error);
|
| + return;
|
| + }
|
| +
|
| + session_->CreateAnswer(observer, session_options);
|
| }
|
|
|
| void PeerConnection::SetLocalDescription(
|
| @@ -1538,11 +1542,8 @@ bool PeerConnection::GetOptionsForOffer(
|
| return true;
|
| }
|
|
|
| -bool PeerConnection::GetOptionsForAnswer(
|
| - const MediaConstraintsInterface* constraints,
|
| +void PeerConnection::FinishOptionsForAnswer(
|
| cricket::MediaSessionOptions* session_options) {
|
| - session_options->recv_audio = false;
|
| - session_options->recv_video = false;
|
| // TODO(deadbeef): Once we have transceivers, enumerate them here instead of
|
| // ContentInfos.
|
| if (session_->remote_description()) {
|
| @@ -1553,10 +1554,6 @@ bool PeerConnection::GetOptionsForAnswer(
|
| cricket::TransportOptions();
|
| }
|
| }
|
| - if (!ParseConstraintsForAnswer(constraints, session_options)) {
|
| - return false;
|
| - }
|
| -
|
| AddSendStreams(session_options, senders_, rtp_data_channels_);
|
| session_options->bundle_enabled =
|
| session_options->bundle_enabled &&
|
| @@ -1569,6 +1566,29 @@ bool PeerConnection::GetOptionsForAnswer(
|
| if (session_->data_channel_type() == cricket::DCT_SCTP) {
|
| session_options->data_channel_type = cricket::DCT_SCTP;
|
| }
|
| +}
|
| +
|
| +bool PeerConnection::GetOptionsForAnswer(
|
| + const MediaConstraintsInterface* constraints,
|
| + cricket::MediaSessionOptions* session_options) {
|
| + session_options->recv_audio = false;
|
| + session_options->recv_video = false;
|
| + if (!ParseConstraintsForAnswer(constraints, session_options)) {
|
| + return false;
|
| + }
|
| + FinishOptionsForAnswer(session_options);
|
| + return true;
|
| +}
|
| +
|
| +bool PeerConnection::GetOptionsForAnswer(
|
| + const RTCOfferAnswerOptions& options,
|
| + cricket::MediaSessionOptions* session_options) {
|
| + session_options->recv_audio = false;
|
| + session_options->recv_video = false;
|
| + if (!ConvertRtcOptionsForAnswer(options, session_options)) {
|
| + return false;
|
| + }
|
| + FinishOptionsForAnswer(session_options);
|
| return true;
|
| }
|
|
|
|
|