Commit Graph

103 Commits

Author SHA1 Message Date
37f664f6d5 Use backticks not vertical bars to denote variables in comments for /media
Bug: webrtc:12338
Change-Id: Ia800a4017ede1f647b36f809ef3c5b37a2616fdd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226949
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34567}
2021-07-27 17:11:33 +00:00
5e726da14b dcsctp: Extract logging packet observer as utility
It is useful for more than just the transport.

Bug: webrtc:12961
Change-Id: Iad064c8fb707ca589a1c232e17436338fb06623d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/225543
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34451}
2021-07-10 18:23:06 +00:00
dcb9ffc6f2 DataChannel: Propagate SCTP transport errors to the channels
When the transport is terminated, if an error has occured, it will
be propagated to the channels.
When such errors can happen at the SCTP level (e.g. out of resources),
RTCError may contain an error code matching the definition at
https://www.iana.org/assignments/sctp-parameters/sctp-parameters.xhtml#sctp-parameters-24
If the m= line is rejected or removed from SDP, an error will again be sent
to the data channels, signaling their unexpected transition to closed.

Bug: webrtc:12904
Change-Id: Iea3d8aba0a57bbedb5d03f0fb6f7aba292e92fe8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/223541
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34386}
2021-06-29 14:37:32 +00:00
6a11c844fd dcsctp: Add DcSctpSocketFactory
The factory allows us to isolate the implementation from users who only
need to depend directly on the public folder now.

Bug: webrtc:12614
Change-Id: Ied09cf772ed427eaf17a7b5705f587da57405640
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/220939
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34330}
2021-06-18 09:59:40 +00:00
236ac50628 dcsctp: Add public API for BufferedAmountLow
This adds native support for the RTCDataChannel properties:
https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel/bufferedAmount
https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel/bufferedAmountLowThreshold

And the RTCDataChannel event:
https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel/onbufferedamountlow

The old callback, NotifyOutgoingMessageBufferEmpty, is deprecated as it
didn't work very well. It will not be triggered and will be removed
as soon as all users of it are gone. There is a new callback,
OnTotalBufferedAmountLow, that serves the same purpose but also allows
setting an arbitrary limit when it should be triggered (See
DcSctpOptions::total_buffered_amount_low_threshold).

Bug: webrtc:12794
Change-Id: Ic1c92f174eff8a1acda0b5fd3dcc45bd1cfa2704
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219691
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34144}
2021-05-27 15:27:27 +00:00
af0dff0c7d dcsctp: start SCTP_DUMP on a new line
for consistency with usrsctp_dumppacket which prefixes its output with a newline.
This makes the packets easier to grep and process with text2pcap.

BUG=webrtc:12614

Change-Id: I67bc2e0026250b21b030daf967ebc697640f2d7e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/220102
Reviewed-by: Victor Boivie <boivie@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@nvidia.com>
Cr-Commit-Position: refs/heads/master@{#34114}
2021-05-25 12:43:55 +00:00
402ceffff1 sctp: Reduce logging level for common calls
Reduced the level so that the library can be run with INFO level without
a lot of spam. VERBOSE is still reserved for frequent logs.

Also, using WARNING for logs that are not fatal and which can easily
be triggered by the user.

Bug: webrtc:12614
Change-Id: If09c302b2b5bfc002471f86a8aeb74ba1172c705
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219465
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34054}
2021-05-19 13:22:43 +00:00
6174173f81 sctp: dcsctp: Print SCTP packets to logs
When verbose logs are enabled, SCTP packets will be dumped to debug
logs, allowing text2pcap to be used to generate PCAP files.

First start Chrome with verbose logs, and write those to file:

  /path/to/chrome --enable-logging=stderr --v=4 2> out.log

Then extract the SCTP_PACKET traces and run text2pcap:

  grep SCTP_PACKET out.log > sctp.log

  text2pcap -n -i 132 -D -t '%H:%M:%S.' sctp.log sctp.pcapng

You may have to cut away more from the beginning if the debug logs
contain additional timestamps and more, e.g. like:

  grep SCTP_PACKET out.log | cut -d ' ' -f 2- > sctp.log

Note that if there are multiple RTCPeerConnection objects created, each
will print out their packets to log, so to filter for a specific one:

  grep "SCTP_PACKET DcSctpTransport0" out.log > sctp.log

Bug: webrtc:12614
Change-Id: Ibbceaf33719d09e7606247cb0496ddd827ea58bb
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/218200
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33999}
2021-05-12 15:17:17 +00:00
78d5859bde sctp: dcsctp: Remove log statement
This log statement is quite spammy and isn't of any help, so remove it.

Bug: webrtc:12614
Change-Id: Ia087228e0a3f602d558fcb7cbd9ec5295f35dcb9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/218202
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33981}
2021-05-11 14:36:25 +00:00
56e4825413 Add boivie and orphis to media/sctp/OWNERS file
Bug: webrtc:12614
Change-Id: I394989bdddc5b1197bbd0c84f4ae3b4955459a8e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/218281
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33978}
2021-05-11 08:49:34 +00:00
d95b149141 datachannel: Merge SendDataParams and DMT types with webrtc equivalent
cricket::SendDataParams is replaced by webrtc::SendDataParams.
cricket::DataMessageType is replaced by webrtc::DataMessageType.
The sid member from cricket::SendDataParams is now passed as an argument
to functions that used one when necessary.

Bug: webrtc:7484
Change-Id: Ia4a89c9651fb54ab9a084a6098d49130b6319e1b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/217761
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33966}
2021-05-10 10:31:48 +00:00
5183f00d3a datachannel: Make SendDataParams reliability fields optional<int>
It doesn't make sense to use negative values or 0 to disable the
feature, so we use an optional int value.
Values bigger than 65535 are clamped down.

Bug: webrtc:12730
Change-Id: I6bd9cd92f7d0a70a78cf5a7c91dca52c28d08ba1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/217760
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33954}
2021-05-07 17:09:54 +00:00
a6983c6ea2 sctp: Add DcsctpTransport based on dcSCTP
Bug: webrtc:12614
Change-Id: Ie710621610fff9f8bb6c7d800419675892d6a70c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215680
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Victor Boivie <boivie@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33935}
2021-05-06 09:38:49 +00:00
88f4b33196 usrsctp: Support sending and receiving empty messages
Add new PPIDs 56 and 57. When sending an empty message,
we use the corresponding PPID with a single byte data chunk.
On the receiving side, when detecting such a PPID, we just
ignore the payload content.

Bug: webrtc:12697
Change-Id: I6af481e7281db10d9663e1c0aaf97b3e608432a1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215931
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33808}
2021-04-22 13:08:23 +00:00
63b01e19e9 Remove ReceiveDataParams::timestamp
This field was only used in RTP Data Channels and isn't needed anymore.

Bug: webrtc:6625
Change-Id: Ieaa7ae03ca3e90eb4ddec4d384f5a76cef1600cc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215687
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33791}
2021-04-20 14:29:49 +00:00
a80c3e5352 sctp: Reorganize build targets
Bug: webrtc:12614
Change-Id: I2d276139746bb8cafdd5c50fe4595e60a6b1c7fc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215234
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33745}
2021-04-15 17:00:56 +00:00
affd2196a9 Delete AsyncInvoker usage from SimulatedPacketTransport
Bug: webrtc:12339
Change-Id: Ic293f9c8791ec24025f9eac39cbc4fcf2583d3ea
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/212867
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33741}
2021-04-15 10:35:30 +00:00
17490b53d2 Fix regression in UsrSctpReliabilityTest
These tests, not run by default, were broken by
https://webrtc-review.googlesource.com/c/src/+/212862.

Bug: webrtc:12339
Change-Id: I442795d72d1a162f5b1abe80f466469b2bc32ed4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/213424
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33738}
2021-04-15 09:32:00 +00:00
22379fc8dc sctp: Rename SctpTransport to UsrSctpTransport
The rename ensures we don't confuse this implementation with
the new one based on the new dcSCTP library.

Bug: webrtc:12614
No-Presubmit: True
Change-Id: Ida08659bbea9c98aba8247d4368799ff7dd18729
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/214482
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33688}
2021-04-12 10:40:34 +00:00
6b0f19f9ef sctp: Move SctpTransportFactory to a separate file
Bug: webrtc:12614
Change-Id: Ifc0e96ed3262e6ca057cd73d736a7ac081493f53
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/214481
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33663}
2021-04-08 20:49:44 +00:00
128faf8a23 Delete AsyncInvoker usage from SctpDataSender
Bug: webrtc:12339
Change-Id: I018137103c45e380c89cd4bdeefd434c1d4252e0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/212862
Reviewed-by: Taylor <deadbeef@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33556}
2021-03-25 09:24:00 +00:00
cf93670a27 sctp: Finish sending partial messages before sending stream reset events
Bug: chromium:1182354
Change-Id: Ia4c88763308df88bff2a493fad2968f7f7594369
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/211840
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33489}
2021-03-17 14:52:51 +00:00
b2e71b8b35 Reland "Fix race between destroying SctpTransport and receiving notification on timer thread."
This reverts commit 8a38b1cf681cd77f0d59a68fb45d8dedbd7d4cee.

Reason for reland: Problem was identified; has something to do with
the unique_ptr with the custom deleter.

Original change's description:
> Revert "Fix race between destroying SctpTransport and receiving notification on timer thread."
>
> This reverts commit a88fe7be146b9b85575504d4d5193c007f2e3de4.
>
> Reason for revert: Breaks downstream test, still investigating.
>
> Original change's description:
> > Fix race between destroying SctpTransport and receiving notification on timer thread.
> >
> > This gets rid of the SctpTransportMap::Retrieve method and forces
> > everything to go through PostToTransportThread, which behaves safely
> > with relation to the transport's destruction.
> >
> > Bug: webrtc:12467
> > Change-Id: Id4a723c2c985be2a368d2cc5c5e62deb04c509ab
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/208800
> > Reviewed-by: Niels Moller <nisse@webrtc.org>
> > Commit-Queue: Taylor <deadbeef@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#33364}
>
> TBR=nisse@webrtc.org
>
> Bug: webrtc:12467
> Change-Id: Ib5d815a2cbca4feb25f360bff7ed62c02d1910a0
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209820
> Reviewed-by: Taylor <deadbeef@webrtc.org>
> Commit-Queue: Taylor <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#33386}

Bug: webrtc:12467
Change-Id: I5f9fcd6df7a211e6edfa64577fc953833f4d9b79
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/210040
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33427}
2021-03-11 00:58:33 +00:00
8a38b1cf68 Revert "Fix race between destroying SctpTransport and receiving notification on timer thread."
This reverts commit a88fe7be146b9b85575504d4d5193c007f2e3de4.

Reason for revert: Breaks downstream test, still investigating.

Original change's description:
> Fix race between destroying SctpTransport and receiving notification on timer thread.
>
> This gets rid of the SctpTransportMap::Retrieve method and forces
> everything to go through PostToTransportThread, which behaves safely
> with relation to the transport's destruction.
>
> Bug: webrtc:12467
> Change-Id: Id4a723c2c985be2a368d2cc5c5e62deb04c509ab
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/208800
> Reviewed-by: Niels Moller <nisse@webrtc.org>
> Commit-Queue: Taylor <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#33364}

TBR=nisse@webrtc.org

Bug: webrtc:12467
Change-Id: Ib5d815a2cbca4feb25f360bff7ed62c02d1910a0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209820
Reviewed-by: Taylor <deadbeef@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33386}
2021-03-05 03:06:38 +00:00
a88fe7be14 Fix race between destroying SctpTransport and receiving notification on timer thread.
This gets rid of the SctpTransportMap::Retrieve method and forces
everything to go through PostToTransportThread, which behaves safely
with relation to the transport's destruction.

Bug: webrtc:12467
Change-Id: Id4a723c2c985be2a368d2cc5c5e62deb04c509ab
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/208800
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33364}
2021-03-01 22:53:13 +00:00
c500977983 Change the safe SCTP MTU size to 1191
Bug: webrtc:12495
Change-Id: Ie149391a5a9f61095cf3f31db141c9bbc8be8bee
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/208642
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Philipp Hancke <philipp.hancke@googlemail.com>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33338}
2021-02-25 00:05:35 +00:00
d15a575ec3 Use SequenceChecker from public API
Bug: webrtc:12419
Change-Id: I00cca16a0ec70246156ba00b97aa7ae5ccbf5364
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/205323
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33220}
2021-02-10 15:04:55 +00:00
c8421c4c3e Replace rtc::ThreadChecker with webrtc::SequenceChecker
Bug: webrtc:12419
Change-Id: I825c014cc1c4b1dcba5ef300409d44859e971144
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/205002
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33136}
2021-02-02 14:56:27 +00:00
49b20f919a Fix race with SctpTransport destruction and usrsctp timer thread.
The race occurs if the transport is being destroyed at the same time as
a callback occurs on the usrsctp timer thread (for example, for a
retransmission). Fixed by slightly extending the scope of mutex
acquisition to include posting a task to the network thread, where it's
safe to do further work.

Bug: chromium:1162424
Change-Id: Ia25c96fa51cd4ba2d8690ba03de8af9e9f1605ea
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/202560
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33048}
2021-01-21 03:03:47 +00:00
c20e3332ed Update SCTP test to use C++ lambdas instead of rtc::Bind
Bug: webrtc:11339
Change-Id: Ibc6818f9d371c17bb6c3e41deee2b51e2b953de0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/201724
Reviewed-by: Taylor <deadbeef@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33018}
2021-01-18 09:18:31 +00:00
e15dc58f32 Use rtc::CopyOnWriteBuffer::MutableData through webrtc
where mutable access is required.

Bug: webrtc:12334
Change-Id: I4b2b74f836aaf7f12278c3569d0d49936297716b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/198846
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32936}
2021-01-11 11:31:33 +00:00
bff717e4f9 Remove dependency on AsyncInvoker in SctpTransport
Bug: webrtc:11988
Change-Id: I996aa220a00b61fb5080803bffe7a37c6b90aaec
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/193866
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32645}
2020-11-19 23:25:42 +00:00
37aaabbbe8 Free data if SCTP packet is delivered after transport destruction.
Follow up to:
https://webrtc-review.googlesource.com/c/src/+/184240

Bug: chromium:1127774
Change-Id: I1595d306f026f9d90cf71d8729133e46c2766c6f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190640
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32526}
2020-10-29 23:04:14 +00:00
4182b499b3 Avoid duplicate usrsctp_init if the last usrsctp_finish failed.
When deinitializing usrsctp, we attempt to call usrsctp_finish in a loop
for three seconds (it may fail because another sctp thread is holding a
reference to something). If the three seconds run out, usrsctp is left
in a still initialized state, and bad things happen down the road if
usrsctp_init is called in the state.

Bug: chromium:1138878
Change-Id: I9c24d51d5a274b06bdf4183261694fc2989136c5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/189940
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32467}
2020-10-21 22:18:20 +00:00
088a6f2192 Fix possible deadlock when handling SCTP_SEND_FAILED_EVENT notification.
When processing an INIT for existing SCTP association, which may happen
when transferring to a new remote endpoint, if there are chunks still on
the output queue, an SCTP_SEND_FAILED_EVENT notification will be
delivered while holding the INP lock. When processing this notification,
WebRTC was calling usrsctp_getladdrs in order to look up the
SctpTransport* associated with the socket, but this also tries to
acquire the INP lock, resulting in a deadlock.

The temporary fix is to simply not subscribe to the
SCTP_SEND_FAILED_EVENT notification; it was only used for logging
anyway.

Bug: chromium:1137936
Change-Id: I077efb4c769d6f7855d2fee2d266f19396b16f9d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188502
Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32427}
2020-10-16 22:44:19 +00:00
9def3ff4a3 Fix for OnSctpInboundPacket being called after transport destruction.
OnSctpInboundPacket is called not only for incoming packets, but for
notifications, which can be delivered on the usrsctp timer thread.

I suspect that these notifications can be delivered after we attempt to
close the socket, because if we attempt to close it while the timer
thread holds a reference, it isn't actually destroyed until the timer
thread finishes its operation.

Bug: chromium:1127774
Change-Id: Id6a883b14796e8f5bf1c2990f3d9d389d72c8a46
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184240
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32204}
2020-09-26 19:19:56 +00:00
7a7683567c Check length before dereferencing SCTP notifications.
Bug: chromium:1127774
Change-Id: I6ccf1f5246dfacb26f480bac899f295f89b53d08
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184283
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32189}
2020-09-24 23:39:46 +00:00
822283dbb7 Prepare for usrsctp being updated.
The signature of send_cb was changed, adding ulp_info. This change makes
it easier to retrieve the SctpTransport pointer from the callback.

Bug: webrtc:11899
Change-Id: I12a4ccd2d0deb329f6be17a4c7208449833dc188
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/182984
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32067}
2020-09-09 22:38:06 +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
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
702dcb6bc3 Reducing threshold for usrsctp "buffer low" callback.
A usrsctp regression is causing this callback to not be invoked, but
reducing the threshold (from 128KB to 64KB) seems to mitigate the issue.

Can set it back once the root cause is fixed, though this isn't
expected to have any performance implications.

Bug: webrtc:11824
Change-Id: I2f6a3183d298abf4d1ad3bbd3697b1879eb4d696
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180841
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31851}
2020-08-04 20:08:06 +00:00
0dd35d3732 Migrate to webrtc::GlobalMutex.
Bug: webrtc:11567
Change-Id: I853434745c427e54474739e9c573e0f6f4fcedef
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179283
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31732}
2020-07-15 10:32:20 +00:00
c7c412a36c Check for null before accessing SctpTransport map.
Bug: chromium:1104061
Change-Id: I52d44ff1603341777a873e747c625665bc11bfa5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179161
Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31720}
2020-07-13 19:46:30 +00:00
1e257cacbf Migrate media/ to webrtc::Mutex.
Bug: webrtc:11567
Change-Id: I69e4a1b37737ac8dd852a032612623c4c4f3a30b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176744
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31648}
2020-07-07 13:46:47 +00:00
c2128738a8 Relanding: Fix data channel message integrity violation
Patch originally submitted by Lennart Grahl:
https://webrtc-review.googlesource.com/c/src/+/177527

SCTP message chunks and notifications are being delivered interleaved.
However, the way the code was structured previously, a notification
would interrupt reassembly of a message chunk and hand out the partial
message, thereby violating message integrity. This patch separates the
handling of notifications and reassembly of messages.

Additional changes:

- Remove illegal cast from non-validated u32 to enum (PPID)
- Drop partial messages if the SID has been changed but EOR not yet
  received instead of delivering them. (This should never happen
  anyway.)
- Don't treat TSN as timestamp (wat)
- Replace "usrsctplib/usrsctp.h" with <usrsctp.h>, allowing a hack
  to be removed from media/BUILD.gn

Bug: webrtc:11708
Change-Id: I29733b03f67a3d840104b8608a7f0083466c2d0f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178469
Commit-Queue: Taylor <deadbeef@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31641}
2020-07-07 03:06:24 +00:00
51e08b8c19 Revert "Fix data channel message integrity violation"
This reverts commit 6cbff752f52bf3f70168d551c33ce719bd8e0663.

Reason for revert: breaking downstream projects, Win MSVC x86 dbg and Win x86 Clang rel

Original change's description:
> Fix data channel message integrity violation
> 
> SCTP message chunks and notifications are being delivered interleaved.
> However, the way the code was structured previously, a notification
> would interrupt reassembly of a message chunk and hand out the partial
> message, thereby violating message integrity. This patch separates the
> handling of notifications and reassembly of messages.
> 
> Additional changes:
> 
> - Remove illegal cast from non-validated u32 to enum (PPID)
> - Drop partial messages if the SID has been changed but EOR not yet
>   received instead of delivering them. (This should never happen
>   anyway.)
> - Don't treat TSN as timestamp (wat)
> 
> Bug: webrtc:11708
> Change-Id: I4e2fe2262feda2a96d2ae3f6ce9b06370d9878ae
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177527
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Reviewed-by: Taylor <deadbeef@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31605}

TBR=deadbeef@webrtc.org,kwiberg@webrtc.org,tommi@webrtc.org,hta@webrtc.org,lennart.grahl@gmail.com

Change-Id: I6d6c5a11835f155f8c449b996d034f43b8db452c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:11708
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178488
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31606}
2020-07-01 14:45:27 +00:00
6cbff752f5 Fix data channel message integrity violation
SCTP message chunks and notifications are being delivered interleaved.
However, the way the code was structured previously, a notification
would interrupt reassembly of a message chunk and hand out the partial
message, thereby violating message integrity. This patch separates the
handling of notifications and reassembly of messages.

Additional changes:

- Remove illegal cast from non-validated u32 to enum (PPID)
- Drop partial messages if the SID has been changed but EOR not yet
  received instead of delivering them. (This should never happen
  anyway.)
- Don't treat TSN as timestamp (wat)

Bug: webrtc:11708
Change-Id: I4e2fe2262feda2a96d2ae3f6ce9b06370d9878ae
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177527
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31605}
2020-07-01 14:03:44 +00:00
976faae028 Disable SCTP asconf and auth extensions.
WebRTC doesn't use these features, so disable them to reduce the
potential attack surface.

Bug: webrtc:11694
Change-Id: I093aa824c6da592852270534ae7415ceb19fca47
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177360
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31540}
2020-06-18 02:16:51 +00:00
301eb5370b Prevent pointer from being sent in the clear over SCTP.
We were using the address of the SctpTransport object as
the sconn_addr field in usrsctp, which is used to get access to
the SctpTransport object in various callbacks.

However, this address is sent in the clear in the SCTP cookie,
which is undesirable.

This change uses a monotonically increasing id instead, which
is mapped back to a SctpTransport using a SctpTransportMap helper
class.

Bug: chromium:1076703
Change-Id: Iffb23fdbfa13625e921a9fd5500fe772b4d4015f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176422
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Taylor <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31449}
2020-06-05 02:13:06 +00:00