Commit Graph

609 Commits

Author SHA1 Message Date
84f6a3fc6b Move optional.h to webrtc/api/
We use Optional in our public API, so its header should be in
webrtc/api/.

BUG=webrtc:8205

Review-Url: https://codereview.webrtc.org/3011943002
Cr-Commit-Position: refs/heads/master@{#19693}
2017-09-05 15:43:13 +00:00
e683c6871f Completed the functionalities of SrtpTransport.
The SrtpTransport takes the SRTP responsibilities from the BaseChannel
and SrtpFilter. SrtpTransport is now responsible for setting the crypto
keys, protecting and unprotecting the packets. SrtpTransport doesn't know
if the keys are from SDES or DTLS handshake.

BaseChannel is now only responsible setting the offer/answer for SDES
or extracting the key from DtlsTransport and configuring the
SrtpTransport.

SrtpFilter is used by BaseChannel as a helper for SDES negotiation.

BUG=webrtc:7013

Review-Url: https://codereview.webrtc.org/2997983002
Cr-Commit-Position: refs/heads/master@{#19636}
2017-08-31 23:00:07 +00:00
16adf03d25 Recently we moved webrtc/base to webrtc/rtc_base, so these
directives in our DEPS files are not needed anymore.

Includes from webrtc/rtc_base are also whitelisted in webrtc/DEPS
so we don't have to whitelist it in all the others DEPS files.

BUG=webrtc:7634
NOTRY=True

Review-Url: https://codereview.webrtc.org/3006583002
Cr-Commit-Position: refs/heads/master@{#19601}
2017-08-30 11:45:58 +00:00
1dca9d513a Support a user-provided string for the TLS ALPN extension.
Fix source formatting
Add TLS ALPN extension.

Bug: webrtc:8086
Change-Id: I1f28ccd78760d3415e465f734744d2c2f93845e2
Reviewed-on: https://chromium-review.googlesource.com/611150
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Justin Uberti <juberti@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Commit-Queue: Diogo Real <diogor@google.com>
Cr-Commit-Position: refs/heads/master@{#19588}
2017-08-29 20:11:16 +00:00
e9ef907991 Revert of Add logging of host lookups made by TurnPort to the RtcEventLog. (patchset #11 id:200001 of https://codereview.webrtc.org/2996933003/ )
Reason for revert:
Breaks Chromium build due to the changed constructor in webrtc/p2p/client/basicportallocator.h.

Build (example): https://build.chromium.org/p/chromium.webrtc.fyi/builders/Linux%20Builder/builds/19739.

Log:
FAILED: obj/remoting/protocol/protocol/port_allocator.o
/b/c/goma_client/gomacc ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/remoting/protocol/protocol/port_allocator.o.d -DV8_DEPRECATION_WARNINGS -DUSE_UDEV -DUSE_AURA=1 -DUSE_PANGO=1 -DUSE_CAIRO=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_X11=1 -DFULL_SAFE_BROWSING -DSAFE_BROWSING_CSD -DSAFE_BROWSING_DB_LOCAL -DCHROMIUM_BUILD -DFIELDTRIAL_TESTING_ENABLED -DCR_CLANG_REVISION=\"310694-2\" -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DCOMPONENT_BUILD -D_DEBUG -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWTF_USE_DYNAMIC_ANNOTATIONS=1 -D_GLIBCXX_DEBUG=1 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26 -DEXPAT_RELATIVE_PATH -DGL_GLEXT_PROTOTYPES -DUSE_GLX -DUSE_EGL -DGOOGLE_PROTOBUF_NO_RTTI -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER -DHAVE_PTHREAD -DPROTOBUF_USE_DLLS -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0 -DFEATURE_ENABLE_VOICEMAIL -DGTEST_RELATIVE_PATH -DWEBRTC_CHROMIUM_BUILD -DWEBRTC_POSIX -DWEBRTC_LINUX -DBORINGSSL_SHARED_LIBRARY -I../.. -Igen -I../../build/linux/debian_jessie_amd64-sysroot/usr/include/glib-2.0 -I../../build/linux/debian_jessie_amd64-sysroot/usr/lib/x86_64-linux-gnu/glib-2.0/include -I../../third_party/libwebp/src -I../../third_party/khronos -I../../gpu -I../../third_party/protobuf/src -Igen/protoc_out -I../../third_party/protobuf/src -I../../third_party/webrtc_overrides -I../../testing/gtest/include -I../../third_party -I../../third_party/webrtc_overrides -I../../third_party -I../../third_party/boringssl/src/include -I../../build/linux/debian_jessie_amd64-sysroot/usr/include/nss -I../../build/linux/debian_jessie_amd64-sysroot/usr/include/nspr -I../../third_party/libyuv/include -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -funwind-tables -fPIC -pipe -B../../third_party/binutils/Linux_x64/Release/bin -pthread -fcolor-diagnostics -fdebug-prefix-map=/b/c/b/Linux_Builder__dbg_/src=. -m64 -march=x86-64 -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-covered-switch-default -Wno-unneeded-internal-declaration -Wno-inconsistent-missing-override -Wno-undefined-var-template -Wno-nonportable-include-path -Wno-address-of-packed-member -Wno-unused-lambda-capture -Wno-user-defined-warnings -Wno-enum-compare-switch -O0 -fno-omit-frame-pointer -g2 -gsplit-dwarf -fvisibility=hidden -Xclang -load -Xclang ../../third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.so -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang check-auto-raw-pointer -Xclang -plugin-arg-find-bad-constructs -Xclang check-ipc -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wexit-time-destructors -Wno-header-guard -Wno-undefined-bool-conversion -Wno-tautological-undefined-compare -std=gnu++14 -fno-rtti -nostdinc++ -isystem../../buildtools/third_party/libc++/trunk/include -isystem../../buildtools/third_party/libc++abi/trunk/include --sysroot=../../build/linux/debian_jessie_amd64-sysroot -fno-exceptions -fvisibility-inlines-hidden -c ../../remoting/protocol/port_allocator.cc -o obj/remoting/protocol/protocol/port_allocator.o
../../remoting/protocol/port_allocator.cc:48:7: error: no matching constructor for initialization of 'cricket::BasicPortAllocator'
    : BasicPortAllocator(network_manager.get(), socket_factory.get()),
      ^                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../third_party/webrtc/p2p/client/basicportallocator.h:35:12: note: candidate constructor not viable: requires single argument 'network_manager', but 2 arguments were provided
  explicit BasicPortAllocator(rtc::NetworkManager* network_manager);
           ^
../../third_party/webrtc/p2p/client/basicportallocator.h:30:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
class BasicPortAllocator : public PortAllocator {
      ^
../../third_party/webrtc/p2p/client/basicportallocator.h:32:3: note: candidate constructor not viable: requires 3 arguments, but 2 were provided
  BasicPortAllocator(rtc::NetworkManager* network_manager,
  ^
../../third_party/webrtc/p2p/client/basicportallocator.h:36:3: note: candidate constructor not viable: requires 3 arguments, but 2 were provided
  BasicPortAllocator(rtc::NetworkManager* network_manager,
  ^
../../third_party/webrtc/p2p/client/basicportallocator.h:39:3: note: candidate constructor not viable: requires 5 arguments, but 2 were provided
  BasicPortAllocator(rtc::NetworkManager* network_manager,
  ^
1 error generated.

Original issue's description:
> Add logging host lookups made by TurnPort to the RtcEventLog.
>
> The following fields are logged:
> - error, if there was an error.
> - elapsed time in milliseconds
>
> BUG=webrtc:8100
>
> Review-Url: https://codereview.webrtc.org/2996933003
> Cr-Commit-Position: refs/heads/master@{#19574}
> Committed: c251cb13c0

TBR=terelius@webrtc.org,pthatcher@webrtc.org,jonaso@google.com,pthatcher@google.com,solenberg@webrtc.org,deadbeef@webrtc.org,jonaso@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:8100

Review-Url: https://codereview.webrtc.org/3012473002
Cr-Commit-Position: refs/heads/master@{#19578}
2017-08-29 11:49:00 +00:00
c251cb13c0 Add logging host lookups made by TurnPort to the RtcEventLog.
The following fields are logged:
- error, if there was an error.
- elapsed time in milliseconds

BUG=webrtc:8100

Review-Url: https://codereview.webrtc.org/2996933003
Cr-Commit-Position: refs/heads/master@{#19574}
2017-08-29 10:20:58 +00:00
ca6d3b60b5 Renamed dtlstransportchannel.h/.cc/_unittest.cc.
Renamed the dtlstransportchannel.h/.cc to dtlstransport.h/.cc which are
the right names for those files because the concept of DtlsTransportChannel
no longer exists.

BUG=None

Review-Url: https://codereview.webrtc.org/3004503002
Cr-Commit-Position: refs/heads/master@{#19478}
2017-08-24 01:05:50 +00:00
786de70a59 Add TLS TURN tests.
This change extends the TurnPort tests to cover connections to
TURN servers over TLS.
As part of this, the TestTurnServer is extended to support
connections from clients over TLS.

Note that this also fixes the remaining bugs in webrtc:7562

Bug: webrtc:7584
Change-Id: If89ceae49d33417625464b5892d20eee4de7c3b5
Reviewed-on: https://chromium-review.googlesource.com/611520
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19397}
2017-08-17 23:03:04 +00:00
ed447aedb8 Refactor TurnPort tests.
This commit makes the following changes:
1. Splits TestReconstructedServerUrl into 3 tests that individually
   check the reconstructed URL for UDP IPv4, UDP IPv6, and TCP.
2. Factors out common code between protocols for release allocation and
   reconstructed URL tests.
3. Provides functions for getting the expected RTT of various operations
   based on the protocol used. TurnPort tests use a fake clock in part
   to check tight bounds on the number of network round trips it takes
   to complete operations like getting TURN candidates and trying
   alternate servers. These RTTs are highly dependent on the
   characteristics of the transport-layer protocol used, so these
   details have been moved to dedicated functions with comments
   explaining how the numbers are calculated.

Bug: webrtc:7584
Change-Id: I3b065e25446cb5ecd955f359625a35fb0ad46777
Reviewed-on: https://chromium-review.googlesource.com/611500
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19395}
2017-08-17 21:58:09 +00:00
ee89e7870c Replace CHECK(x && y) with two separate CHECK() calls
That way, the debug printout will tell us which of x and y that was false.

BUG=none

Review-Url: https://codereview.webrtc.org/2988153003
Cr-Commit-Position: refs/heads/master@{#19297}
2017-08-10 00:22:01 +00:00
5c3c104ba0 Make Port (and subclasses) fully "Network"-based, instead of IP-based.
For ICE, we want sockets that are bound to specific network interfaces,
rather than to specific IP addresses. So, a while ago, we added a
"Network" class that gets passed into the Port constructor, in
addition to the IP address as before.

But we never finished the job of removing the IP address field, such that
a Port only guarantees something about the network interface it's
associated with, and not the specific IP address it ends up with.

This CL does that, and as a consequence, if a port ends up bound to
an IP address other than the "best" one (returned by Network::GetBestIP),
this *won't* be treated as an error.

This is relevant to Android, where even though we pass an IP address
into "Bind" as a way of identifying the network, the socket actually
gets bound using "android_setsocknetwork", which doesn't provide any
guarantees about the IP address. So, if a network interface has multiple
IPv6 addresses (for instance), we may not correctly predict the one
the OS will choose, and that's ok.

This CL also moves "SetAlternateLocalAddress" from VirtualSocket to
VirtualSocketServer, which makes for much more readable test code.

The next step, if there is one, is to pass along the Network class all
the way to SocketServer::Bind. Then the socket server could do smart
things with the network information. We could even stick a platform-
specific network handle in the Network object, such that the socket
server could use it for the binding, or for "sendmsg", for example.
See bug 7026 for more context about the sendmsg idea.

BUG=webrtc:7715

Review-Url: https://codereview.webrtc.org/2989303002
Cr-Commit-Position: refs/heads/master@{#19251}
2017-08-04 22:01:57 +00:00
3427f538de Relanding: Move "max IPv6 networks" logic to BasicPortAllocator, and fix sorting.
Relanding because the broken chromium test has been fixed:
https://chromium-review.googlesource.com/582196

This CL moves the responsibility for restricting the number of IPv6
interfaces used for ICE to BasicPortAllocator. This is the right place
to do it in the first place; it's where all the rest of the filtering
occurs. And NetworkManager shouldn't need to know about ICE limitations;
only the ICE classes should.

Part of the reason I'm doing this is that I want to add a
"max_ipv6_networks" API to RTCConfiguration, so that applications can
override the default easily (see linked bug). But that means that
PeerConnection would need to be able to call "set_max_ipv6_networks" on
the underlying object that does the filtering, and that method isn't
available on the "NetworkManager" base class. So rather than adding
another method to a place it doesn't belong, I'm moving it to the place
it does belong.

In the process, I noticed that "CompareNetworks" is inconsistent with
"SortNetworks"; the former orders interfaces alphabetically, and the
latter reverse-alphabetically. I believe this was unintentional, and
results in undesirable behavior (like "eth1" being preferred over
"eth0"), so I'm fixing it and adding a test.

BUG=webrtc:7703

Review-Url: https://codereview.webrtc.org/2983213002
Cr-Original-Commit-Position: refs/heads/master@{#19112}
Committed: ad9561404c
Review-Url: https://codereview.webrtc.org/2983213002
Cr-Commit-Position: refs/heads/master@{#19159}
2017-07-26 23:09:33 +00:00
817c8af52a Revert of Move "max IPv6 networks" logic to BasicPortAllocator, and fix sorting. (patchset #2 id:20001 of https://codereview.webrtc.org/2983213002/ )
Reason for revert:
Breaks IpcNetworkManagerTest.TestMergeNetworkList, because it has built-in assumptions about network ordering that it shouldn't have. Will reland after fixing that test.

Original issue's description:
> Move "max IPv6 networks" logic to BasicPortAllocator, and fix sorting.
>
> This CL moves the responsibility for restricting the number of IPv6
> interfaces used for ICE to BasicPortAllocator. This is the right place
> to do it in the first place; it's where all the rest of the filtering
> occurs. And NetworkManager shouldn't need to know about ICE limitations;
> only the ICE classes should.
>
> Part of the reason I'm doing this is that I want to add a
> "max_ipv6_networks" API to RTCConfiguration, so that applications can
> override the default easily (see linked bug). But that means that
> PeerConnection would need to be able to call "set_max_ipv6_networks" on
> the underlying object that does the filtering, and that method isn't
> available on the "NetworkManager" base class. So rather than adding
> another method to a place it doesn't belong, I'm moving it to the place
> it does belong.
>
> In the process, I noticed that "CompareNetworks" is inconsistent with
> "SortNetworks"; the former orders interfaces alphabetically, and the
> latter reverse-alphabetically. I believe this was unintentional, and
> results in undesirable behavior (like "eth1" being preferred over
> "eth0"), so I'm fixing it and adding a test.
>
> BUG=webrtc:7703
>
> Review-Url: https://codereview.webrtc.org/2983213002
> Cr-Commit-Position: refs/heads/master@{#19112}
> Committed: ad9561404c

TBR=zhihuang@webrtc.org,pthatcher@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:7703

Review-Url: https://codereview.webrtc.org/2984853002
Cr-Commit-Position: refs/heads/master@{#19114}
2017-07-21 19:59:46 +00:00
ad9561404c Move "max IPv6 networks" logic to BasicPortAllocator, and fix sorting.
This CL moves the responsibility for restricting the number of IPv6
interfaces used for ICE to BasicPortAllocator. This is the right place
to do it in the first place; it's where all the rest of the filtering
occurs. And NetworkManager shouldn't need to know about ICE limitations;
only the ICE classes should.

Part of the reason I'm doing this is that I want to add a
"max_ipv6_networks" API to RTCConfiguration, so that applications can
override the default easily (see linked bug). But that means that
PeerConnection would need to be able to call "set_max_ipv6_networks" on
the underlying object that does the filtering, and that method isn't
available on the "NetworkManager" base class. So rather than adding
another method to a place it doesn't belong, I'm moving it to the place
it does belong.

In the process, I noticed that "CompareNetworks" is inconsistent with
"SortNetworks"; the former orders interfaces alphabetically, and the
latter reverse-alphabetically. I believe this was unintentional, and
results in undesirable behavior (like "eth1" being preferred over
"eth0"), so I'm fixing it and adding a test.

BUG=webrtc:7703

Review-Url: https://codereview.webrtc.org/2983213002
Cr-Commit-Position: refs/heads/master@{#19112}
2017-07-21 18:03:53 +00:00
f6a861ab6c Remove remains of webrtc/base
All downstream code have been updated to the new location.

In PRESUBMIT.py:
* Remove webrtc/rtc_base from CPP_BLACKLIST
* Add webrtc/rtc_base to LEGACY_API_DIRS

Fix some duplicated paths in
webrtc/modules/audio_processing/test/conversational_speech/BUILD.gn

BUG=webrtc:7634
TBR=kwiberg@webrtc.org

Review-Url: https://codereview.webrtc.org/2976293002
Cr-Commit-Position: refs/heads/master@{#19094}
2017-07-19 17:40:47 +00:00
038834f40c Reinstate "Add additional check when setting RTCConfiguration"
This reverts commit 26d5e2e2809558148dc1e977ec1bc8318a2047bc.

Reverted originally because it dependend on a CL which was reverted. That CL has been reinstated in: https://chromium-review.googlesource.com/#/c/572070/

Bug: webrtc:7969
Change-Id: I404c3a42ad447312d981646dca0aa4cf0ec3134e
Reviewed-on: https://chromium-review.googlesource.com/572403
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19034}
2017-07-14 23:40:53 +00:00
300bf8e14b Reinstate "API for periodically regathering ICE candidates"
Use rtc::SystemTimeNanos() instead of std::random_device() for PRNG seed
to avoid crashing when /dev/urandom is unavailable.

This reverts commit 3beb20720db349f651c2c04970c45b1b171c025c.

Bug: webrtc:7969
Change-Id: I5ed58a789939ee4caa99ac3abf9cab18e3e19c69
Reviewed-on: https://chromium-review.googlesource.com/572070
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19033}
2017-07-14 22:26:05 +00:00
3beb20720d Revert "API for periodically regathering ICE candidates"
This reverts commit aa41f0cfa64ece911ae2ecee83fc3190d4a42935.

Reason for revert:
Apparently, use of std::random_device() causes chromium on Linux to fail with this error:
terminating with uncaught exception of type std::__1::system_error: random_device failed to open /dev/urandom: Operation not permitted

Link to bot with failure:
https://build.chromium.org/p/chromium.webrtc.fyi/builders/Linux%20Tester/builds/37563

Original change's description:
> API for periodically regathering ICE candidates
> 
> Adds to the RTCConfiguration `ice_regather_interval_range` which, when
> set, specifies the randomized delay between automatic runs of ICE
> regathering. The regathering will occur on all networks and re-use the
> existing ICE ufrag/password. New connections are established once the
> candidates come back and WebRTC will automatically switch to the new
> connection that corresponds to the currently selected connection.
> 
> Bug: webrtc:7969
> Change-Id: I6bbf5439a48e285f704aed9f408631cba038c82b
> Reviewed-on: https://chromium-review.googlesource.com/562505
> Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#18978}

TBR=pthatcher@webrtc.org,deadbeef@webrtc.org,steveanton@webrtc.org

No-Try: true
Bug: webrtc:7969
Change-Id: I86ef99e9f1070d3ac265398831317b68f562c614
Reviewed-on: https://chromium-review.googlesource.com/571008
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19024}
2017-07-14 15:42:02 +00:00
26d5e2e280 Revert "Add additional check when setting RTCConfiguration"
This reverts commit 8110beda7f98623e4510f99ed51a05d126437642.

Reason for revert:
Blocks reverting https://chromium-review.googlesource.com/c/562505


Original change's description:
> Add additional check when setting RTCConfiguration
> 
> Check that ice_regather_interval_range is set only when continual
> regathering is also set.
> 
> Bug: webrtc:7969
> Change-Id: Ifcfeee744d817cf00914418d7e682f11528faf05
> Reviewed-on: https://chromium-review.googlesource.com/569358
> Commit-Queue: Steve Anton <steveanton@webrtc.org>
> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#19009}

TBR=pthatcher@webrtc.org,deadbeef@webrtc.org,steveanton@webrtc.org

Change-Id: I95955bb6ab0c5d0625e55a136e3773e9b90d74e2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:7969
Reviewed-on: https://chromium-review.googlesource.com/571009
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19022}
2017-07-14 14:26:45 +00:00
8110beda7f Add additional check when setting RTCConfiguration
Check that ice_regather_interval_range is set only when continual
regathering is also set.

Bug: webrtc:7969
Change-Id: Ifcfeee744d817cf00914418d7e682f11528faf05
Reviewed-on: https://chromium-review.googlesource.com/569358
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19009}
2017-07-13 21:05:28 +00:00
aa41f0cfa6 API for periodically regathering ICE candidates
Adds to the RTCConfiguration `ice_regather_interval_range` which, when
set, specifies the randomized delay between automatic runs of ICE
regathering. The regathering will occur on all networks and re-use the
existing ICE ufrag/password. New connections are established once the
candidates come back and WebRTC will automatically switch to the new
connection that corresponds to the currently selected connection.

Bug: webrtc:7969
Change-Id: I6bbf5439a48e285f704aed9f408631cba038c82b
Reviewed-on: https://chromium-review.googlesource.com/562505
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#18978}
2017-07-11 21:49:38 +00:00
c024740b5e Use relative paths in GN files.
BUG=webrtc:7952
TBR=kjellander@webrtc.org
NOTRY=True

Review-Url: https://codereview.webrtc.org/2974863003
Cr-Commit-Position: refs/heads/master@{#18970}
2017-07-11 13:20:45 +00:00
370dd47973 Revert of Remove remains of webrtc/base (patchset #7 id:120001 of https://codereview.webrtc.org/2973183002/ )
Reason for revert:
Breaks lots of downstream projects.

Original issue's description:
> Remove remains of webrtc/base
>
> All downstream code have been updated to the new location.
>
> In PRESUBMIT.py:
> * Remove webrtc/rtc_base from CPP_BLACKLIST
> * Add webrtc/rtc_base to LEGACY_API_DIRS
>
> Fix some duplicated paths in
> webrtc/modules/audio_processing/test/conversational_speech/BUILD.gn
>
> BUG=webrtc:7634
> TBR=kwiberg@webrtc.org
>
> Review-Url: https://codereview.webrtc.org/2973183002
> Cr-Commit-Position: refs/heads/master@{#18948}
> Committed:
9483b49baf

TBR=kwiberg@webrtc.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:7634

Review-Url: https://codereview.webrtc.org/2976633002
Cr-Commit-Position: refs/heads/master@{#18949}
2017-07-10 12:58:42 +00:00
9483b49baf Remove remains of webrtc/base
All downstream code have been updated to the new location.

In PRESUBMIT.py:
* Remove webrtc/rtc_base from CPP_BLACKLIST
* Add webrtc/rtc_base to LEGACY_API_DIRS

Fix some duplicated paths in
webrtc/modules/audio_processing/test/conversational_speech/BUILD.gn

BUG=webrtc:7634
TBR=kwiberg@webrtc.org

Review-Url: https://codereview.webrtc.org/2973183002
Cr-Commit-Position: refs/heads/master@{#18948}
2017-07-10 11:50:54 +00:00
7d0a77eef4 Handle case where UDP packet contains multiple DTLS records.
Our DTLS implementation doesn't do this, but other implementations may; see https://tools.ietf.org/html/rfc6347#section-4.1.1.

BUG=chromium:537189

Review-Url: https://codereview.webrtc.org/2970883005
Cr-Commit-Position: refs/heads/master@{#18934}
2017-07-07 20:44:07 +00:00
c20978e581 Rename webrtc/base -> webrtc/rtc_base
NOPRESUBMIT=True # cpplint errors that aren't caused by this CL.
NOTRY=True
NOTREECHECKS=True
TBR=kwiberg@webrtc.org, kjellander@webrtc.org

Bug: webrtc:7634
Change-Id: I3cca0fbaa807b563c95979cccd6d1bec32055f36
Reviewed-on: https://chromium-review.googlesource.com/562156
Commit-Queue: Edward Lemur <ehmaldonado@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#18919}
2017-07-06 19:11:40 +00:00
a80c16a67c Revert "Update includes for webrtc/{base => rtc_base} rename (2/3)"
This reverts commit c3771cc4d37f5573fe53b7c7cff295a4f0f9560f.
(breaks downstream internal project)

BUG=webrtc:7634
NOTRY=True
NOPRESUBMIT=True

Review-Url: https://codereview.webrtc.org/2972463002 .
Cr-Commit-Position: refs/heads/master@{#18873}
2017-07-01 14:48:18 +00:00
c3771cc4d3 Update includes for webrtc/{base => rtc_base} rename (2/3)
I used a command like this to update the paths:
perl -pi -e "s/webrtc\/base/webrtc\/rtc_base/g" `find webrtc/rtc_base -name "*.cc" -o -name "*.h"`

BUG=webrtc:7634
NOPRESUBMIT=True # cpplint errors that aren't caused by this CL.

Review-Url: https://codereview.webrtc.org/2969623003
Cr-Commit-Position: refs/heads/master@{#18870}
2017-06-30 20:42:44 +00:00
5869f50f7a Support encrypted RTP extensions (RFC 6904)
Can be enabled by setting "enable_encrypted_rtp_header_extensions" in
"crypto_options" of "PeerConnectionFactoryInterface::Options" and will
only be used if both peers support it.

BUG=webrtc:3411

Review-Url: https://codereview.webrtc.org/2761143002
Cr-Commit-Position: refs/heads/master@{#18842}
2017-06-29 19:31:36 +00:00
86c40a14b4 Fixing RTCIceCandidatePairStats.nominated for ICE controlling agent.
Was only working when the nonstandard "renomination" extension to ICE
is enabled, which chromium doesn't use.

BUG=chromium:734094

Review-Url: https://codereview.webrtc.org/2957303002
Cr-Commit-Position: refs/heads/master@{#18814}
2017-06-28 16:37:23 +00:00
696f8ca2fa Handle the PROTO_TSL when getting the protocol priority.
This bug breaks the internal project.

TBR=deadbeef@webrtc.org, pthacher@webrtc.org
BUG=webrtc:7889

Review-Url: https://codereview.webrtc.org/2959993002
Cr-Commit-Position: refs/heads/master@{#18792}
2017-06-27 22:11:24 +00:00
dab1d2d34e Enable SNI in ssl adapter.
Bug: webrtc:6973
Change-Id: I13d28cf41c586880bd7fea523005233921794cdf
Reviewed-on: https://chromium-review.googlesource.com/523024
Reviewed-by: Zeke Chin <tkchin@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Justin Uberti <juberti@chromium.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Commit-Queue: Emad Omara <emadomara@google.com>
Cr-Commit-Position: refs/heads/master@{#18640}
2017-06-16 23:30:48 +00:00
1ee2125909 Adding PortAllocator option to support cases where sockets can't be bound.
This CL adds the flag "PORTALLOCATOR_ENABLE_ANY_ADDRESS_PORTS", which will
force the creation of ports not bound to any specific network interface.
These are normally only used when network enumeration fails or is disabled,
but in some circumstances (such as the one the test case adds), they're the
only thing that works.

This will result in extra ports being gathered, which is why it's only enabled
behind a flag for now. In the future, we could probably introduce more
sophisticated "pruning" logic that would lessen the impact of the extra ports
when they're redundant, and make the flag the default.

Some other minor changes that were required to make this use case work:

* Allow a TCPPort to be used for outgoing connections even if it tries and
  fails to create a server socket.
* Allow Bind to fail if being called before Connect, and the IP is an "any"
  address (0.0.0.0 or ::), since this bind would have been mostly pointless
  anyway.
* Prevent P2PTransprotChannel from keeping a "backup" candidate pair using
  an "any address" network; we only want this for actual networks.

BUG=webrtc:7798

Review-Url: https://codereview.webrtc.org/2936553003
Cr-Commit-Position: refs/heads/master@{#18578}
2017-06-13 22:49:45 +00:00
0703856b53 Add SafeClamp(), which accepts args of different types
Specifically, just like SafeMin() and SafeMax() it handles all
combinations of integer and all
combinations of floating-point arguments by picking a
result type that is guaranteed to be able to hold the result.

This CL also replaces a bunch of std::min + std:max call pairs with
calls to SafeClamp()---the ones that could easily be found by grep
because "min" and "max" were on the same line. :-)

BUG=webrtc:7459

Review-Url: https://codereview.webrtc.org/2808513003
Cr-Commit-Position: refs/heads/master@{#18542}
2017-06-12 18:40:47 +00:00
b56671e051 Fix issue with send-side bandwidth estimation over TURN TCP connections.
AsyncStunTCPSocket wasn't firing SignalSentPacket, which the bandwidth
estimator requires for every packet in order to look up send times when
feedback arrives. If the signal isn't fired, it always assumes feedback
is arriving extremely late, and decreases the bandwidth by a factor of
2 until it reaches the minimum of 10kbps.

BUG=webrtc:7717
TBR=pthatcher@webrtc.org

Review-Url: https://codereview.webrtc.org/2912523003
Cr-Commit-Position: refs/heads/master@{#18279}
2017-05-27 01:40:05 +00:00
98e186c71c Remove VirtualSocketServer's dependency on PhysicalSocketServer.
The only thing the physical socket server was used for was
"Wait"/"WakeUp", but it could be replaced by a simple rtc::Event.

So, removing this dependency makes things less confusing; the fact that
VirtualSocketServer takes a PhysicalSocketServer may lead someone to
think it uses real sockets internally, when it doesn't.

BUG=None

Review-Url: https://codereview.webrtc.org/2883313003
Cr-Commit-Position: refs/heads/master@{#18172}
2017-05-17 01:00:06 +00:00
9a6f4d4316 Get tests working on systems that only support IPv6.
For every failing test, the solution was either to do a "has IPv4" check
before the test is run, or avoid depending on real network interfaces
altogether.

This specifically fixes rtc_unittests, peerconnection_unittests, and
webrtc_nonparallel_tests.

BUG=None

Review-Url: https://codereview.webrtc.org/2881973002
Cr-Commit-Position: refs/heads/master@{#18155}
2017-05-16 02:43:33 +00:00
7eaa4ea75f Delete method MessageQueue::set_socketserver
Instead, make the pointer to the associated socket server a
construction time const, and delete its lock.

Introduces a helper class AutoSocketServerThread for code
(mainly tests) which need a socket server associated with
the current thread.

BUG=webrtc:7501

Review-Url: https://codereview.webrtc.org/2828223002
Cr-Commit-Position: refs/heads/master@{#18047}
2017-05-08 12:25:41 +00:00
32f2505185 Refactor TestClient to use std::unique_ptr, and fix VirtualSocketServerTest leaks.
BUG=None

Review-Url: https://codereview.webrtc.org/2859373003
Cr-Commit-Position: refs/heads/master@{#18043}
2017-05-08 08:57:18 +00:00
bbe2a370f7 Fixing DCHECK in turnport.cc that was broken by refactoring.
"PROTO_TCP + secure bit" was turned into "PROTO_TLS" by this CL:
https://codereview.webrtc.org/2568833002

But a "DCHECK(proto == PROTO_TCP)" wasn't updated to take this into
account.

BUG=NONE
TBR=pthatcher@webrtc.org

Review-Url: https://codereview.webrtc.org/2859763003
Cr-Commit-Position: refs/heads/master@{#18000}
2017-05-03 16:48:35 +00:00
996fc6bdb7 Don't crash if STUN error message is missing ERROR-CODE attribute.
This is something a well-behaving STUN server shouldn't do, but we shouldn't
crash if it does happen.

Also adding helper function for the common operation of extracting just
the error code out of a STUN packet.

BUG=chromium:708469

Review-Url: https://codereview.webrtc.org/2837133003
Cr-Commit-Position: refs/heads/master@{#17892}
2017-04-26 16:21:22 +00:00
e0629c045e GN: Tighten up test target visibility + refactorings
Make all rtc_source_test target that contains tests that
are included in a test executable only be visible to the
rtc_test target. Doing this exposed a couple of errors and
dependency problems that were resolved. Having this could
have prevented duplicated execution of tests like the case that
was recently fixed by deadbeef@ in
https://codereview.webrtc.org/2820263004

New targets:
* //webrtc/modules/rtp_rtcp:fec_test_helper
* //webrtc/modules/rtp_rtcp:mock_rtp_rtcp
* //webrtc/modules/remote_bitrate_estimator:mock_remote_bitrate_observer

The mock files and targets should probably be moved into webrtc/test in
the future, but that's out of the scope of this CL.

BUG=webrtc:5716
NOTRY=True

Review-Url: https://codereview.webrtc.org/2828793003
Cr-Commit-Position: refs/heads/master@{#17863}
2017-04-25 11:04:50 +00:00
44d305a806 Remove the expat and jsoncpp dependencies to reduce binary size.
The dependency on third_party/expat/ is removed.

The dependency on third_party/jsoncpp is removed from
libjingle_peerconnection while peerconnection_client still
depends on it.

BUG=webrtc:7516

Review-Url: https://codereview.webrtc.org/2832283002
Cr-Commit-Position: refs/heads/master@{#17848}
2017-04-24 19:05:06 +00:00
0687829794 Fixing SignalSentPacket for TCP connections.
The signal was only being hooked up for incoming connections, not
outgoing connections.

As a result, the bandwidth estimator didn't know when packets were sent
and couldn't calculate delays.

BUG=webrtc:7509

Review-Url: https://codereview.webrtc.org/2834083002
Cr-Commit-Position: refs/heads/master@{#17817}
2017-04-21 21:22:23 +00:00
8a11663219 Enable GN check for webrtc/{p2p,system_wrappers}
Introduce new small header-only targets in system_wrappers:
:cpu_features_api
:field_trial_api
:metrics_api
to untangle and optimize dependencies but still satisfy GN check.

In webrtc/p2p, previously uncovered header "base/fakecandidatepair.h"
is added to :p2p_test_utils target.

Refactor system_wrappers so 'rtc_p2p' can depend on only
system_wrappers:field_trial_api instead of all of system_wrappers
(which led to a breakage in Chromium that called for the revert of
https://codereview.webrtc.org/2735583002).

BUG=webrtc:6828
NOTRY=True

Review-Url: https://codereview.webrtc.org/2739863002
Cr-Commit-Position: refs/heads/master@{#17812}
2017-04-21 12:17:08 +00:00
7914b8cb41 Negotiate the same SRTP crypto suites for every DTLS association formed.
Before this CL, we would negotiate:
- No crypto suites for data m= sections.
- A full set for audio m= sections.
- The full set, minus SRTP_AES128_CM_SHA1_32 for video m= sections.

However, this doesn't make sense with BUNDLE, since any DTLS
association could end up being used for any type of media. If
video is "bundled on" the audio transport (which is typical), it
will actually end up using SRTP_AES128_CM_SHA1_32.

So, this CL moves the responsibility of deciding SRTP crypto suites out
of BaseChannel and into DtlsTransport. The only two possibilities are
now "normal set" or "normal set + GCM", if enabled by the PC factory
options.

This fixes an issue (see linked bug) that was occurring when audio/video
were "bundled onto" the data transport. Since the data transport
wasn't negotiating any SRTP crypto suites, none were available to use
for audio/video, so the application would get black video/no audio.

This CL doesn't affect the SDES SRTP crypto suite negotiation;
it only affects the negotiation in the DLTS handshake, through
the use_srtp extension.

BUG=chromium:711243

Review-Url: https://codereview.webrtc.org/2815513012
Cr-Commit-Position: refs/heads/master@{#17810}
2017-04-21 10:23:33 +00:00
30952b460f Add "ice-option:trickle" to generated offers/answers.
BUG=webrtc:7443

Review-Url: https://codereview.webrtc.org/2808913003
Cr-Commit-Position: refs/heads/master@{#17809}
2017-04-21 09:41:29 +00:00
897d08ef1b Fixing bug that results in incorrect ICE role with ICE lite endpoints.
There's some code that resets the ICE role on an ICE restart (behavior
that's specified in ICE, but removed from ICEbis). And it wasn't taking
into account that the remote endpoint may be an ICE lite endpoint, in
which case the WebRTC endpoint's role should always be "controlling".

BUG=chromium:710760

Review-Url: https://codereview.webrtc.org/2812173003
Cr-Commit-Position: refs/heads/master@{#17779}
2017-04-20 07:57:25 +00:00
59edb9298e Relanding: Remove rtc_p2p_unittests from ortc_unittests and rtc_media_unittests
These tests are already built into rtc_unittests, so they end up being
run three times. Fixed by creating a "p2p_test_utils" target that
contains the test utils that ortc_unittests and rtc_media_unittests
depend on, but not the tests themselves.

BUG=None
TBR=kjellander@webrtc.org

Review-Url: https://codereview.webrtc.org/2820263004
Cr-Commit-Position: refs/heads/master@{#17752}
2017-04-18 22:49:09 +00:00
4b37127414 Fix compilation issues of std::unique_ptr
This patch fixes compilation issues related to usage of std::unique_ptr
and NULL instead of nullptr. This issue pops up once you would try to
compile whole webrtc with using C++14 and gcc-4.9

BUG=webrtc:7461

Review-Url: https://codereview.webrtc.org/2806693004
Cr-Commit-Position: refs/heads/master@{#17600}
2017-04-09 16:09:06 +00:00