Commit Graph

131 Commits

Author SHA1 Message Date
844c759766 fix variable naming in ReportSdpFormatReceived
it no longer reports just offers.

BUG=chromium:857004

Change-Id: Idf35b6fa98f3ee6637aeef6b11553947fea3ee25
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/202249
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Cr-Commit-Position: refs/heads/master@{#33024}
2021-01-18 12:44:26 +00:00
a3dd772e7a Add create function for PeerConnection that can return an error.
Needed in order to return different codes for different failures
in initialization.

Sideswipe: Check TURN URL hostnames for illegal characters.

Bug: webrtc:12238
Change-Id: I1af3a37b9654b83b268304f7356049f9f3786b7a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195541
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32710}
2020-11-27 11:08:10 +00:00
4da4a87d97 Move "options" from ConnectionContext to PeerConnectionFactory
and pass it as an argument to PeerConnection::Create

This makes it obvious that 1) options only affect peerconnections
if they are set on the factory before creating the PeerConnection,
and 2) options are unchangeable after PeerConnection creation.

Bug: webrtc:11967
Change-Id: I052eaa3975ac97dccbedde610110f32bf1a17c98
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/191487
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32549}
2020-11-04 11:10:53 +00:00
f598e49c2f tls_cert_verifier_ is now const and only network thread accessed
After recent refactorings, PeerConnection.tls_cert_verifier_ is
now both const and only accessed on the network thread, so it is
doubly thread-safe. Marking as such.

Bug: webrtc:9987
Change-Id: I2f924ecf2afe364d1e4b7f740435443bc53e4d0c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/191486
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32545}
2020-11-04 09:25:59 +00:00
4efa9d0a5f Remove obsolete GetRemoteAudioSSL* functions.
Bug: webrtc:12054
Change-Id: I56d198cfa2c336155c5173ccd524107d12e6a382
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190921
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32528}
2020-10-30 08:27:31 +00:00
9cd199dfe1 Make SdpOfferAnswerHandler be owned, not contained.
And add a Create() method to the class.
This makes it possible to experiment with subclassing the
SdpOfferAnswer object without modifying the PeerConnection.

Bug: webrtc:11995
Change-Id: I0a7c91a8999858ddcb1ea59ac4eb9a3b0663b0f6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190288
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32501}
2020-10-27 08:45:07 +00:00
fd9a8f8e23 Const-declare 3 more PC member variables
These can now be initialized in the constructor and are not touched
explicitly in the destructor.

Bug: none
Change-Id: I3d294b15463a8d02bbe7e37fb14eefd017d5c1e4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190284
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32494}
2020-10-26 15:09:46 +00:00
6216693363 Change PeerConnection creation to use a static "Create" method
This allows making more members (including IsUnifiedPlan) const in a future CL.

Also revises the test for ReportUsageHistogram to use a configuration member
variable rather than a hook function in PeerConnectionFactory.

Bug: webrtc:12079
Change-Id: I6f1af7d6164c8a0d8466f76378a925d72d57d685
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190280
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32485}
2020-10-26 10:04:06 +00:00
763f5a9a8d Move initialization of WebRtcSessionDescriptionFactory to SdpHandler
Also move ssrc_generator and audio/video options, as well as some
signal handling that's related.

These variables were not referenced in peer_connection.cc any more.

Bug: webrtc:11995
Change-Id: I29f8661afad488380d256220b35330233e8233e8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/189967
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32471}
2020-10-22 13:20:28 +00:00
653429c5b3 Remove friendship between PeerConnection and SdpOfferAnswerHandler
Add multiple accessors to PeerConnection, and make multiple
formerly private functions public for access from SdpOfferAnswerHandler.

Reducing the surface of PeerConnection is a job to be done iteratively.

Bug: webrtc:11995
Change-Id: Iab176824ae557af84ac934e40ff674a1008a29d1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/189540
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32459}
2020-10-21 09:30:03 +00:00
e15fb15035 Separate RTP object handling (senders, receivers, transceivers)
This is part of the PeerConnection disassembly project.

Bug: webrtc:11995
Change-Id: I4f207c8af39e267c4b5752c0828b84e221e1f080
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188624
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32443}
2020-10-19 14:56:38 +00:00
1f7eab68c0 Remove superfluous #includes from peer_connection.cc, and add IWYU
Also adds a script that runs iwyu to the tools_webrtc directory.

Bug: webrtc:11995
Change-Id: I2185a9957e3578c2ec6d0d306061a48fcfe840d4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188800
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32431}
2020-10-18 18:48:10 +00:00
88329b9266 Deprecate GetRemoteAudioSSLCertificate
This CL adds the RTC_DEPRECATED markers.

Bug: webrtc:12054
Change-Id: Id7d0b49caa39d64f3e768922293230e50a2a8f08
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188821
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32424}
2020-10-16 16:33:39 +00:00
a39689cc98 Separate PC resources required at runtime from PCfactory
This enables modules that share the resources to reuse the connection
context object but not take a dependency on PeerConnectionFactory.

Bug: webrtc:11967
Change-Id: Ic68cbf061b3226f02f8638abd79ad881e89951d4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188120
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32412}
2020-10-15 11:31:23 +00:00
6f04b653ae Move the streams concept into sdp_offer_answer
This makes it easier to see that the tying of tracks
to streams affects only the SDP negotiation, and not
what's sent on the wire.

Bug: webrtc:11995
Change-Id: I8ca5adf0050e4a2be55d164a6d0e4d5811582476
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187359
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32368}
2020-10-09 13:06:51 +00:00
44d0dff7a9 Move the PeerConnection's usage pattern concept to its own file.
This makes it easier to use it from multiple other modules.

Bug: webrtc:11995
Change-Id: Id23843ae4600ebe46aed7465e873d107089fd50b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187347
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32361}
2020-10-09 08:29:45 +00:00
bc9ca25ac9 Move (phase 3) more functions called only in sdp_offer_answer
This is starting to get near the end of code moves.

Bug: webrtc:11995
Change-Id: I2f98e1025970db823c8c51bd9ab9f91f380d78a2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186520
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32320}
2020-10-05 22:10:08 +00:00
1090e44ac0 Separate PeerConnection's self-message functions to a new file
This prevents having to have sdp_offer_answer depend on peer_connection
for the messaging functions.

Bug: webrtc:11995
Change-Id: Icad7c9c0e6149bd1b8d78e37eff5f9786b74692e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186662
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32310}
2020-10-05 12:41:23 +00:00
a474fbf413 Move more functions called only in sdp_offer_answer into that file.
After this CL, sdp_offer_answer is bigger than peer_connection.

Bug: webrtc:11995
Change-Id: Ie923fabf836de46fa939fe6fd7b3d936bbc85dab
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186380
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32301}
2020-10-02 21:03:37 +00:00
75b9ab6751 Move have_pending_rtp_data_channel_ to sdp_offer_answer
Also use accessors for the last few member variable references
in PeerConnection.

This completes removing the variable accesses from SdpOfferAnswerHandler
to PeerConnection.

Bug: webrtc:11995
Change-Id: I70c78b43035c15f20559f7a6a5b50c3a613fe907
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186200
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32272}
2020-10-01 12:28:09 +00:00
c06e374a55 Move more functions from PeerConnection to SdpOfferAnswer
These are functions that are called only from SdpOfferAnswer,
or that logically belong in the SdpOfferAnswer class.

Bug: webrtc:11995
Change-Id: I92136ee84e20e50957814c21b041ca152a2acca4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186268
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32271}
2020-10-01 12:25:59 +00:00
38b768c588 Factor out the transceiver list into a separate object.
This component is heavily referenced by both PeerConnection and
SdpOfferAnswerHandler; it's likely that it will end up in
SdpOfferAnswerHandler.

Encapsulation makes it easier to move around.

Bug: webrtc:11995
Change-Id: I5329d9a90159d203510bf3698962cd246eea7324
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185880
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32229}
2020-09-29 13:23:26 +00:00
cdcfab0a52 Refactor webrtc::PeerConnection to split out offer/answer
This reduces the size of peer_connection.cc by more than 2000 lines.

Design doc for refatoring (available on request):
https://docs.google.com/document/d/1ETeUhon9sJihEUpA9ZZHpOGhzDqlZGLQOk3cD_CjKDM/edit

Bug: webrtc:11995
Change-Id: I9ed8603807b45bb192a01df026755cb6b5365291
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185801
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32212}
2020-09-28 14:27:51 +00:00
b2995a1e57 Delete dead signal code in pc/channel.*
SignalDtlsSrtpSetupFailure is never fired, so the setup code for it,
is dead code. Also removing declarations for methods that have no
implementation.

For other public signals in BaseChannel I've added an accessor which
has revealed a threading problem due to the member variable being public.

Bug: webrtc:11994
Change-Id: Iec6046c6a598066b92c956002ba4160708ae7dcc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185802
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32211}
2020-09-28 14:24:41 +00:00
1e40a0cabd Remove asyncinvoker from PeerConnection.
The callback that the asyncinvoker was being used for, will now use
a safety flag to check if call_ is valid before issuing calls.
Using the flag is a step towards removing the call_ptr_ variable
but in this CL we're just looking at replacing use of the async invoker.

The safety flag is cleared at the same time as call_ is, which prevents
pending callbacks for that call instance from running.

Also adding TODOs related to this change that will be
followed upon in other CLs.

Bug: webrtc:11988, webrtc:11992, webrtc:11993
Change-Id: If3986758af6d01d39b2db0cce82e57fc48be9d7f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185508
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32208}
2020-09-28 11:56:59 +00:00
936f1af3bb Reland "Remove stopped transceivers at both local and remote SetDescription"
This is a reland of 6f4de80ddddcc05beaced31146ffb753258bc7be

The blocking issue in Chromium is fixed.

Original change's description:
> Remove stopped transceivers at both local and remote SetDescription
>
> This should ensure that the correct number of senders and receivers
> are shown.
>
> Bug: webtc:11840
> Change-Id: Id57f8f9b1ceb8900abb3f92bcae79e5f0341de15
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184606
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32158}

Bug: webtc:11840
Change-Id: Iae8ca01e3f834694dacb36320858096b26f0996b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185120
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32181}
2020-09-24 08:03:50 +00:00
c253cb84aa Revert "Remove stopped transceivers at both local and remote SetDescription"
This reverts commit 6f4de80ddddcc05beaced31146ffb753258bc7be.

Reason for revert: Causes breakage in WebRTC roll (WPT tests)

Original change's description:
> Remove stopped transceivers at both local and remote SetDescription
> 
> This should ensure that the correct number of senders and receivers
> are shown.
> 
> Bug: webtc:11840
> Change-Id: Id57f8f9b1ceb8900abb3f92bcae79e5f0341de15
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184606
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32158}

TBR=hbos@webrtc.org,hta@webrtc.org

Change-Id: Ib91d59f506087dd96c5678262bac7c1580736dcf
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webtc:11840
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185053
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32166}
2020-09-22 21:06:30 +00:00
6f4de80ddd Remove stopped transceivers at both local and remote SetDescription
This should ensure that the correct number of senders and receivers
are shown.

Bug: webtc:11840
Change-Id: Id57f8f9b1ceb8900abb3f92bcae79e5f0341de15
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184606
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32158}
2020-09-22 09:22:47 +00:00
dd68063976 rename "sdp" to description in a few places
renames the RTCSessionDescription object from "ѕdp" to "desc" in a few places.
The term SDP should generally refer to the blob of text described in
RFC 4566 while the RTCSessionDescription specified in
  https://w3c.github.io/webrtc-pc/#rtcsessiondescription-class
contains both a type and a sdp.

BUG=None

Change-Id: Iacf332d02b03134e49c2b4147dc5725affa89741
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183882
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32080}
2020-09-11 12:36:54 +00:00
c03a187391 Default streams: don't block media even if on different transceiver.
This fixes some edge cases where early media could cause default
stream that block the actual signaled media from beind delivered.

Bug: webrtc:11477
Change-Id: I8b26df63a690861bd19f083102d1395e882f8733
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183120
Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32030}
2020-09-02 22:28:55 +00:00
2bca008914 Reland "Make cricket::SctpTransportInternalFactory injectable through PeerConnectionFactory Deps"
This is to allow testing without using the singleton sctp library.
cricket::SctpTransportInternalFactory is renamed to webrtc::SctpTransportFactoryInterface and moved to the API folder to follow the API structure.
Tests can use test/pc/sctp/fake_sctp_transport.h to inject a faked data channel implementation.

patch 1 contain the original cl.
patch 2 modifications

Bug: none
Change-Id: Ic088da3eb7d9aada79e6d601dbf2d1aa2be777f6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182840
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32024}
2020-09-01 12:17:00 +00:00
9e02f4716a Fix destruction order of PortAllocator and PacketSocketFactory.
PortAllocator depends on PacketSocketFactory, so it should be deleted
afterwords in case its created sockets depend on the resources owned
by the factory.

Bug: None
Change-Id: I7716c552d371b78360db656cc2f4fd03415d0e00
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182881
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32020}
2020-08-31 21:52:27 +00:00
1f580a97e5 Revert "Make cricket::SctpTransportInternalFactory injectable through PeerConnectionFactory Deps"
This reverts commit 4c0a381137c04fd80830af8a041e25e3428dd33f.

Reason for revert: Breaks downstream test

Original change's description:
> Make cricket::SctpTransportInternalFactory injectable through PeerConnectionFactory Deps
> 
> This is to allow testing without using the singleton sctp library. 
> cricket::SctpTransportInternalFactory is renamed to webrtc::SctpTransportFactoryInterface and moved to the API folder to follow the API structure.
> Tests can use test/pc/sctp/fake_sctp_transport.h to inject a faked data channel implementation.
> 
> Bug: none
> Change-Id: I482241269463595062548870750d33f31238c6b1
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182082
> Commit-Queue: Per Kjellander <perkj@webrtc.org>
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Reviewed-by: Taylor <deadbeef@webrtc.org>
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32007}

TBR=deadbeef@webrtc.org,mbonadei@webrtc.org,kwiberg@webrtc.org,perkj@webrtc.org

Change-Id: I46d5ba89fe723caccd065b0ac41d77ed45373838
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: none
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182802
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32008}
2020-08-27 13:59:57 +00:00
4c0a381137 Make cricket::SctpTransportInternalFactory injectable through PeerConnectionFactory Deps
This is to allow testing without using the singleton sctp library. 
cricket::SctpTransportInternalFactory is renamed to webrtc::SctpTransportFactoryInterface and moved to the API folder to follow the API structure.
Tests can use test/pc/sctp/fake_sctp_transport.h to inject a faked data channel implementation.

Bug: none
Change-Id: I482241269463595062548870750d33f31238c6b1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182082
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32007}
2020-08-27 13:19:14 +00:00
e574a31c50 [Perfect Negotiation] Fire onnegotiationneeded when chain is empty.
This CL generates "negotiationneeded" events if negotiation is needed
when the Operations Chain becomes empty. This is only implemented in
Unified Plan to avoid Plan B regressions (the event is pretty useless
in Plan B as it fires repeatedly).

In order to implement the spec-compliant behavior of only firing the
event when the chain is empty, this CL introduces
PeerConnectionObserver::OnNegotiationNeededEvent() and
PeerConnectionInterface::ShouldFireNegotiationNeededEvent() to allow
validating the event before firing it. This is needed because the event
must not be fired until a task has been posted and subsequently chained
operations could invalidate it in the meantime.

Test coverage is added for both legacy and modern "negotiationneeded"
events.

Bug: chromium:1060083
Change-Id: I1dbaa8f6ddb1c6e7c8abd8da3b92efcb64060383
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180620
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31989}
2020-08-25 09:56:39 +00:00
c88fe70a8d Make Android/iOS local/remote description accessors thread safe.
Since the descriptions can be modified on the signaling thread,
ToString can only be safely called on that thread.

Bug: webrtc:11791
Change-Id: Icf6aada8aa66d00be94c6bda7b22e41b5d3bbc17
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180541
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31862}
2020-08-05 22:34:46 +00:00
831ae4ef65 Reland "[Perfect Negotiation] Implement non-racy version of SetLocalDescription."
This is a reland of d4089cae47334a4228b69d6bb23f2e49ebb7496e
with the following fix:

Invoke MaybeStartGathering as the last step of DoSetLocalDescription.
This ensures that candidates and onicegatheringstatechange does not
happen before SLD is resolved. This is important for passing
external/wpt/webrtc/RTCPeerConnection-iceGatheringState.html.

Original change's description:
> [Perfect Negotiation] Implement non-racy version of SetLocalDescription.
>
> BACKGROUND
>
> When SLD is invoked with SetSessionDescriptionObserver, the observer is
> called by posting a message back to the execution thread, delaying the
> call. This delay is "artificial" - it's not necessary; the operation is
> already complete. It's a post from the signaling thread to the signaling
> thread. The rationale for the post was to avoid the observer making
> recursive calls back into the PeerConnection. The problem with this is
> that by the time the observer is called, the PeerConnection could
> already have executed other operations and modified its states.
>
> This causes the referenced bug: one can have a race where SLD is
> resolved "too late" (after a pending SRD is executed) and the signaling
> state observed when SLD resolves doesn't make sense.
>
> When implementing Unified Plan, we fixed similar issues for SRD by
> adding a version that takes SetRemoteDescriptionObserverInterface as
> argument instead of SetSessionDescriptionObserver. The new version did
> not have the delay. The old version had to be kept around not to break
> downstream projects that had dependencies both on he delay and on
> allowing the PC to be destroyed midst-operation without informing its
> observers.
>
> THIS CL
>
> This does the old SRD fix for SLD as well: A new observer interface is
> added, SetLocalDescriptionObserverInterface, and
> PeerConnection::SetLocalDescription() is overloaded. If you call it with
> the old observer, you get the delay, but if you call it with the new
> observer, you don't get a delay.
>
> - SetLocalDescriptionObserverInterface is added.
> - SetLocalDescription is overloaded.
> - The adapter for SetSessionDescriptionObserver that causes the delay
>   previously only used for SRD is updated to handle both SLD and SRD.
> - FakeSetLocalDescriptionObserver is added and
>   MockSetRemoteDescriptionObserver is renamed "Fake...".
>
> Bug: chromium:1071733
> Change-Id: I920368e648bede481058ac22f5b8794752a220b3
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179100
> Commit-Queue: Henrik Boström <hbos@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31798}

TBR=hta@webrtc.org

Bug: chromium:1071733
Change-Id: Ic6e8d96afa1c19604762f373716c08dbfa9d178c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180481
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31804}
2020-07-29 11:27:43 +00:00
4c9c75a2a6 Revert "[Perfect Negotiation] Implement non-racy version of SetLocalDescription."
This reverts commit d4089cae47334a4228b69d6bb23f2e49ebb7496e.

Reason for revert: Breaks chromium WPT that is timing sensitive to onicegatheringstatechanges.
This CL accidentally moved the MaybeStartGatheringIceCandidates to after completing the SLD call. The fix is to move it back. I'll do that in a re-land.

Original change's description:
> [Perfect Negotiation] Implement non-racy version of SetLocalDescription.
> 
> BACKGROUND
> 
> When SLD is invoked with SetSessionDescriptionObserver, the observer is
> called by posting a message back to the execution thread, delaying the
> call. This delay is "artificial" - it's not necessary; the operation is
> already complete. It's a post from the signaling thread to the signaling
> thread. The rationale for the post was to avoid the observer making
> recursive calls back into the PeerConnection. The problem with this is
> that by the time the observer is called, the PeerConnection could
> already have executed other operations and modified its states.
> 
> This causes the referenced bug: one can have a race where SLD is
> resolved "too late" (after a pending SRD is executed) and the signaling
> state observed when SLD resolves doesn't make sense.
> 
> When implementing Unified Plan, we fixed similar issues for SRD by
> adding a version that takes SetRemoteDescriptionObserverInterface as
> argument instead of SetSessionDescriptionObserver. The new version did
> not have the delay. The old version had to be kept around not to break
> downstream projects that had dependencies both on he delay and on
> allowing the PC to be destroyed midst-operation without informing its
> observers.
> 
> THIS CL
> 
> This does the old SRD fix for SLD as well: A new observer interface is
> added, SetLocalDescriptionObserverInterface, and
> PeerConnection::SetLocalDescription() is overloaded. If you call it with
> the old observer, you get the delay, but if you call it with the new
> observer, you don't get a delay.
> 
> - SetLocalDescriptionObserverInterface is added.
> - SetLocalDescription is overloaded.
> - The adapter for SetSessionDescriptionObserver that causes the delay
>   previously only used for SRD is updated to handle both SLD and SRD.
> - FakeSetLocalDescriptionObserver is added and
>   MockSetRemoteDescriptionObserver is renamed "Fake...".
> 
> Bug: chromium:1071733
> Change-Id: I920368e648bede481058ac22f5b8794752a220b3
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179100
> Commit-Queue: Henrik Boström <hbos@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31798}

TBR=hbos@webrtc.org,hta@webrtc.org

Change-Id: Ie1e1ecc49f3b1d7a7e230db6d36decbc4cbe8c86
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:1071733
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180480
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31802}
2020-07-29 09:46:56 +00:00
d4089cae47 [Perfect Negotiation] Implement non-racy version of SetLocalDescription.
BACKGROUND

When SLD is invoked with SetSessionDescriptionObserver, the observer is
called by posting a message back to the execution thread, delaying the
call. This delay is "artificial" - it's not necessary; the operation is
already complete. It's a post from the signaling thread to the signaling
thread. The rationale for the post was to avoid the observer making
recursive calls back into the PeerConnection. The problem with this is
that by the time the observer is called, the PeerConnection could
already have executed other operations and modified its states.

This causes the referenced bug: one can have a race where SLD is
resolved "too late" (after a pending SRD is executed) and the signaling
state observed when SLD resolves doesn't make sense.

When implementing Unified Plan, we fixed similar issues for SRD by
adding a version that takes SetRemoteDescriptionObserverInterface as
argument instead of SetSessionDescriptionObserver. The new version did
not have the delay. The old version had to be kept around not to break
downstream projects that had dependencies both on he delay and on
allowing the PC to be destroyed midst-operation without informing its
observers.

THIS CL

This does the old SRD fix for SLD as well: A new observer interface is
added, SetLocalDescriptionObserverInterface, and
PeerConnection::SetLocalDescription() is overloaded. If you call it with
the old observer, you get the delay, but if you call it with the new
observer, you don't get a delay.

- SetLocalDescriptionObserverInterface is added.
- SetLocalDescription is overloaded.
- The adapter for SetSessionDescriptionObserver that causes the delay
  previously only used for SRD is updated to handle both SLD and SRD.
- FakeSetLocalDescriptionObserver is added and
  MockSetRemoteDescriptionObserver is renamed "Fake...".

Bug: chromium:1071733
Change-Id: I920368e648bede481058ac22f5b8794752a220b3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179100
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31798}
2020-07-28 10:05:57 +00:00
0800010dd6 peerconnection: remove old helper function
the TODO is obsolete, that code is only supported in plan-b mode and is a
one-liner.

BUG=webrtc:7600

Change-Id: I4e6c52c3a5b4cfff1b2d9185dedc786df9f474a4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179066
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Cr-Commit-Position: refs/heads/master@{#31701}
2020-07-10 12:35:59 +00:00
3a034e15b4 Split DataChannel into two separate classes for RTP and SCTP.
Done in preparation for some threading changes that would be quite
messy if implemented with the class as-is.

This results in some code duplication, but is preferable to
one class having two completely different modes of operation.

RTP data channels are in the process of being removed anyway,
so the duplicated code won't last forever.

Bug: webrtc:9883
Change-Id: Idfd41a669b56a4bb4819572e4a264a4ffaaba9c0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178940
Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31691}
2020-07-10 00:03:21 +00:00
2a70703eb8 Delete MediaTransportInterface and DatagramTransportInterface
Bug: webrtc:9719
Change-Id: Ic9936a78ab42f4a9bb4cc3265f0a2cf36946558f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176500
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31536}
2020-06-17 08:41:14 +00:00
2e94de596e Add GetSctpStats to PeerConnectionInternal, remove sctp_data_channels()
This removes code from DataChannelController that exposes
an internal vector of data channels and puts the onus of
returning stats for a data channel, on the data channel
object itself. This will come in handy as we make threading
changes to the data channel object.

Change-Id: Ie164cc5823cd5f9782fc5c9a63aa4c76b8229639
Bug: webrtc:11547, webrtc:11687
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177244
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31533}
2020-06-16 16:36:42 +00:00
4c1e7cc19b [Adaptation] Add ability to inject resources on the PeerConnection.
This unblocks injecting platform-specific resources, such as power
usage signals in Chrome.

This CL adds AddAdaptationResource to PeerConnectionInterface and
integration tests verifying that if an injected resource is overusing,
resolution will soon be reduced.

To aid testing, some testing-only classes have been updated.

Bug: webrtc:11525
Change-Id: I820099e79f18d910fd641ee1412ad064b99ebce9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177003
Reviewed-by: Evan Shrubsole <eshr@google.com>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31505}
2020-06-11 14:17:01 +00:00
00b46f7f2a PeerConnection owns the PacketSocketFactory dependency.
The PacketSocketFactory dependency (if present on the object passed to
CreatePeerConnection(...)) is given as a raw pointer to the
PortAllocator, but the unique_ptr remains in the dependencies object
which is destroyed at the end of the Initialize call.

Bug: webrtc:11467
Change-Id: I2ccb22b6313fc6b2887bb581704f73a703092af3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/172043
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Commit-Queue: Jorge Moreira Broche <jemoreira@google.com>
Cr-Commit-Position: refs/heads/master@{#30953}
2020-03-31 22:11:37 +00:00
d9ebe01540 Improve rollback for rtp data channel
Bug: chromium:1057333
Change-Id: I4df21bc183a8df398033ebf29a8407bacf873fac
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/170621
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Eldar Rello <elrello@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#30824}
2020-03-18 21:03:20 +00:00
61f74d91f8 Reland "Expose can_trickle_ice_candidates on PeerConnection"
This reverts commit cb8c40138ca170f841bc45fa6771cdfc4b966e5f.

Reason for revert: Added missing default.

Original change's description:
> Revert "Expose can_trickle_ice_candidates on PeerConnection"
>
> This reverts commit c6a65c8866487c6adc0a7bb472d3bad9389501f9.
>
> Reason for revert: Breaks downstream due to missing default
>
> Original change's description:
> > Expose can_trickle_ice_candidates on PeerConnection
> >
> > Bug: chromium:708484
> > Change-Id: I9a40e75066341f0d9f965bd3718bfcb3f0459533
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169450
> > Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> > Reviewed-by: Taylor <deadbeef@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#30653}
>
> TBR=deadbeef@webrtc.org,hta@webrtc.org
>
> Change-Id: Iaa5b977c4237715a8a5127cf167cf6512a3f7059
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: chromium:708484
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169540
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#30655}

TBR=deadbeef@webrtc.org,hta@webrtc.org

Change-Id: I608da7781f158b4b02dd226d4dcd5615c4935fa8
Bug: chromium:708484
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169541
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30656}
2020-03-02 11:35:53 +00:00
cb8c40138c Revert "Expose can_trickle_ice_candidates on PeerConnection"
This reverts commit c6a65c8866487c6adc0a7bb472d3bad9389501f9.

Reason for revert: Breaks downstream due to missing default

Original change's description:
> Expose can_trickle_ice_candidates on PeerConnection
> 
> Bug: chromium:708484
> Change-Id: I9a40e75066341f0d9f965bd3718bfcb3f0459533
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169450
> Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> Reviewed-by: Taylor <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#30653}

TBR=deadbeef@webrtc.org,hta@webrtc.org

Change-Id: Iaa5b977c4237715a8a5127cf167cf6512a3f7059
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:708484
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169540
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30655}
2020-03-02 10:14:14 +00:00
c6a65c8866 Expose can_trickle_ice_candidates on PeerConnection
Bug: chromium:708484
Change-Id: I9a40e75066341f0d9f965bd3718bfcb3f0459533
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169450
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30653}
2020-03-02 05:19:16 +00:00
7a829a8563 Sort threading for sctp_mid_ variable
Split the sctp_mid_ variable into two variables,
sctp_mid_n_ and sctp_mid_s_, each of which is only accessed
by one thread.

Bug: webrtc:9987
Change-Id: I4dce944b920f4698e2606a7b85776791cbf55c28
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168243
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30503}
2020-02-12 08:34:12 +00:00