This makes the following changes:
- Replaces ContentDescription with its only subclass,
MediaContentDescription
- Adds helpers to cast a MediaContentDescription to its
audio, video, and data subclasses.
- Changes ContentInfo.type to a new enum, MediaProtocolType.
Bug: webrtc:8620
Change-Id: I5eb0811cb16a51b0b9d73ecc4fe8edc7037f1aed
Reviewed-on: https://webrtc-review.googlesource.com/35100
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21401}
SDP is a detail of PeerConnection and is not used by anything in p2p, so
it belongs in the pc/ directory. This also allows
MediaContentDescription to be inlined in the future.
Bug: webrtc:8620
Change-Id: I38b65ede9942e29eb15035ab29f2be988da1e5ce
Reviewed-on: https://webrtc-review.googlesource.com/33781
Reviewed-by: Niklas Enbom <niklas.enbom@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21376}
This is a reland of 4770fd935ac92400487bddd3b755753572e6d692
Original change's description:
> Move JsepTransport from p2p/base to pc/.
>
> The JsepTransport class is moved to pc/ and the utility methods and
> enums are moved to where they are used.
>
> With JsepTransport moved to pc/, JsepTransport can depend on objects in
> pc/ including RtpTranport, SrtpTransport etc.
>
> Forked from https://webrtc-review.googlesource.com/c/src/+/31762/7
>
> Bug: webrtc:8636
> Change-Id: I4e8569fe3012946e87deb280f6139f0fd98de34d
> Reviewed-on: https://webrtc-review.googlesource.com/33701
> Reviewed-by: Steve Anton <steveanton@webrtc.org>
> Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
> Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21333}
Bug: webrtc:8636
Change-Id: Ibce42be898b96dd8e0266b595611d2ffc86581a8
Reviewed-on: https://webrtc-review.googlesource.com/34586
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21371}
The stats collectors would only ever call this on the signaling
thread, so they might as well just ask the voice/video channel
their transport_name directly.
Bug: None
Change-Id: I8dd36210ff22d222b45b5f5e22c253f601cdc79e
Reviewed-on: https://webrtc-review.googlesource.com/34581
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21339}
This reverts commit 4770fd935ac92400487bddd3b755753572e6d692.
Reason for revert: breaks downstream projects
Original change's description:
> Move JsepTransport from p2p/base to pc/.
>
> The JsepTransport class is moved to pc/ and the utility methods and
> enums are moved to where they are used.
>
> With JsepTransport moved to pc/, JsepTransport can depend on objects in
> pc/ including RtpTranport, SrtpTransport etc.
>
> Forked from https://webrtc-review.googlesource.com/c/src/+/31762/7
>
> Bug: webrtc:8636
> Change-Id: I4e8569fe3012946e87deb280f6139f0fd98de34d
> Reviewed-on: https://webrtc-review.googlesource.com/33701
> Reviewed-by: Steve Anton <steveanton@webrtc.org>
> Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
> Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21333}
TBR=steveanton@webrtc.org,deadbeef@webrtc.org,pthatcher@webrtc.org
Change-Id: Ia72c6d7f185a95b21fd0aec90e7fdc00cb1fb423
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8636
Reviewed-on: https://webrtc-review.googlesource.com/34600
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Commit-Queue: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21335}
Previously, the RTCStatsCollector needed to ask the voice/video
channel for its transport name in order to generate transport
level stats. That would happen on the networking thread which was
unsafe because the voice/video channel could have disappeared in
the duration of the asynchronous thread hop from the signaling
thread to the networking thread. This changes the networking stats
code to check a saved map that tracks the transport name for each
voice/video channel.
Bug: None
Change-Id: I1f03ba8c0526eaa4419f660f18b8b9da62c3f932
Reviewed-on: https://webrtc-review.googlesource.com/33660
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21332}
Removing enum that was left behind when the metric aec_quality_min was
removed.
Bug: webrtc:8563
Change-Id: I8a8c68659abc6465ef42f002f73bd2607e953ac5
Reviewed-on: https://webrtc-review.googlesource.com/33004
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21321}
The DtlsTransport tests worked by relying on JsepTransport (a helper
class used by higher layers to set everything up in response to SDP).
dtlstransport_unittest has been switched to just calling SetSslRole and
SetRemoteFingerprint directly instead, which were really the only parts
that were necessary.
Some refactoring was also done, and some test coverage was moved to
jseptransport_unittest. jseptransport_unittests has more coverage to
ensure that negotiated parameters are propagated to the DtlsTransport
underneath, which were previously covered by the tests in
dtlstransport_unittest. It also has a test that covers RTP/RTCP not
being multiplexed, which dtlstransport_unittests really doesn't need
to be concerned about.
BUG=NONE
Change-Id: I1d67e9a06486ade39a255555af4052d76191d238
Reviewed-on: https://webrtc-review.googlesource.com/32941
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21309}
One reason for the circular deps is that common_types.h is a
historical dumping ground for various structs and defines that
are believed to be generally useful. I tried moving things out
that did not appear to be used downstream (StreamCounters,
RtpCounters etc) and moved the things that seemed used
(RtpHeader + supporting structs) to a new file api/rtp_headers.h.
This makes their place in the api more clear while moving out
the things that don't belong in the API in the first place.
I had to extract out typedefs.h from webrtc_common to resolve
another circular dependency. I believe checks includes typedefs,
but common depends on checks.
Bug: webrtc:7745
Change-Id: I725d49616b1ec0cdc8b74be7c078f7a4d46f084b
Reviewed-on: https://webrtc-review.googlesource.com/33001
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21295}
This splits things out of rtc_base and makes dependencies explicit.
Bug: webrtc:6828
Change-Id: Id521896c3c43595349021c857bec216e429a0c8d
Reviewed-on: https://webrtc-review.googlesource.com/32780
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21264}
This splits things out of rtc_base and makes dependencies explicit.
Bug: webrtc:6828
Change-Id: Ib813c7bd9e4de7ab015acb917bc09ee7204ba7bd
Reviewed-on: https://webrtc-review.googlesource.com/31940
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21245}
Control Flow Integrity [1] indirect call checking verifies that function
pointers only call valid functions with a matching type signature.
webrtc casts the function pointers for external_hmac causing a cfi-icall
failure when they are later called in libsrtp. Refactor the functions to
match the correct type signatures to avoid this failure.
[1] https://www.chromium.org/developers/testing/control-flow-integrity
Bug: chromium:776905
Change-Id: I419028be02e6c151c497e3ec64f10f35e07cdb0f
Reviewed-on: https://webrtc-review.googlesource.com/26721
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21220}
Add methods to TransportController so that it can create RTP level transports
(RtpTransport, SrtpTransport and DtlsSrtpTransport.).
The RTP level transports are ref-counted since they could be shared by multiple
BaseChannels and TransportController manages the life time of the transports.
Bug: webrtc:7013
Change-Id: Ifd31062426e513d95473e257c9c9ff84a8c537fd
Reviewed-on: https://webrtc-review.googlesource.com/5080
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21196}
This moves all WebRTC internal code from using
SessionDescriptionInterface::type() which returns a string and
from using CreateSessionDescription with a string type parameter.
Bug: webrtc:8613
Change-Id: I1cdd93dc4b26dec157e22476fdac569d5da2810a
Reviewed-on: https://webrtc-review.googlesource.com/29500
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21147}
This change introduces a new method |GetType()| in
SessionDescriptionInterface which returns an enum for the SDP type
rather than a string. Additionally, new overloads were added for
CreateSessionDescription to take SdpType instead of a type string.
Bug: webrtc:8613
Change-Id: I52b342f12155daf8d623646b0c21b7562f69d101
Reviewed-on: https://webrtc-review.googlesource.com/29380
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21100}
This change allows EnableBundle and PushdownMediaDescription to
work with RtpTransceivers, which means they can be reused in the
Unified Plan version of SetLocalDescription.
Bug: webrtc:8587
Change-Id: I4d862556879c14cea06fdf9d5c7c29cc32e1057a
Reviewed-on: https://webrtc-review.googlesource.com/27762
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@{#21092}
This rewrites UpdateSessionState to better show the logic common
to all description types and the logic specific to
offers/answers/etc. Separating these will allow more code to be
reused with the Unified Plan implementation.
Bug: webrtc:8587
Change-Id: I56e0370dcb8bb4b59af2a5209edcad4606480e1c
Reviewed-on: https://webrtc-review.googlesource.com/27322
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21065}
PeerConnection had an Action enum as a holdover from the
WebRtcSession merge with the same members as
cricket::ContentAction. Since ContentAction is used in more places
outside of PeerConnection, this change removes the Action enum and
replaces its use with cricket::ContentAction.
Bug: webrtc:8587
Change-Id: I3e825fe285dbaf6b3f128eccde0f38864171af13
Reviewed-on: https://webrtc-review.googlesource.com/27321
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21063}
Calls to SetLocalDescription and SetRemoteDescription in
PeerConnection delegate to many different internal helper methods
which can fail. The error ultimately needs to propagate to the
caller and cause the SetXXXDescription to fail. Right now these
methods signal errors by returning false and copying the error
message into an out parameter. This changes these methods to
return RTCError instead and avoid the use of the out parameter.
Bug: webrtc:8587
Change-Id: Ib1d31622be742718b74780110c1bbe273d66444e
Reviewed-on: https://webrtc-review.googlesource.com/27241
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21061}
Also renames methods for interacting with the session error. This
clarifies the scope of this error type and lets methods have a
local variable named |error| without confusing it with the
|error()| getter.
Bug: webrtc:8587
Change-Id: I90e6eed24d961abbce15e56a76a8793ff1a806ea
Reviewed-on: https://webrtc-review.googlesource.com/27124
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21060}
Eventually we want BaseChannel to depend on the RtpTransportInternal
instead of DtlsTransportInternal and share RtpTransport when bundling.
This CL is the first step.
Add SetRtpTransport and Init_w(RtptransportInternal*) to BaseChannel.
These two methods would replace the existing SetTransports and Init_w
methods.
Add new CreateVoice/VideoChannel methods to the ChannelManager which
take RtpTransportInternal instead of Dtls/PacketTransportInternal.
|cotnent_name| is removed from the SrtpTransport to simplify to code
since it is only used for debugging.
InitNetwork_n is removed from BaseChannel in CL as well.
Bug: webrtc:7013
Change-Id: I35b1565958548bd4896854c49e61d3ee160b7634
Reviewed-on: https://webrtc-review.googlesource.com/27840
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21057}
When the initial offer side uses the ICE lite implementation, and
initiates a peer connection with an endpoint with the full
implementation, the offer side assumes the controlled ICE role per
RFC5245 and the remote endpoint MUST take the controlling role.
This logic was partially implemented in SetRemoteTransportDescription in
reflection where the endpoint switches its role to the controlling after
receiving the offer. The bug was caused by the following
SetLocalDescription at the remote endpoint after creating the answer,
which overrides the role to the controlled since it has no initial offer
and the role is not reflected in SetLocalTransportDescription. This
results in no nomination of candidate pairs and timeout of establishing
the peer connection.
The fix adds reflection on one's ICE role in SetLocalTransportDescription.
This fix also takes into account the case when both sides use the lite
implementation of ICE and the initial offer side MUST take the controlling
role per RFC5245 in this case, which is the default behavior in the
current implementation.
Bug: webrtc:8531
Change-Id: I65edd296c155bff51fcdb28709975e6837f302d5
Reviewed-on: https://webrtc-review.googlesource.com/26780
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Commit-Queue: Qingsi Wang <qingsi@google.com>
Cr-Commit-Position: refs/heads/master@{#21053}
This refactoring reduces code duplication in PeerConnection and
will make it easier to use these methods with the Unified Plan
implementation.
Bug: webrtc:8587
Change-Id: I6afd44fff702290903555cbe7703198b6b091da6
Reviewed-on: https://webrtc-review.googlesource.com/26822
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21052}
This changes the CreateVoiceChannel/CreateVideoChannel helper
methods in PeerConnection to return the created channel instead of
setting it directly. That allows the Unified Plan version of
SetLocalDescription to use the same factory methods without the
assumption that there is at most one voice and one video channel.
Also simplifies and deduplicates the logic for determining the
transport name for a given channel in the presence of BUNDLE.
Bug: webrtc:8587
Change-Id: I1f156f45309ce2d08d6d5d5ed3c6e01fbf094b36
Reviewed-on: https://webrtc-review.googlesource.com/26821
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21050}
When enabling SDES in BaseChannel, SrtpTransport::EnableExternalAuth
should be called if the external authenication is enabled which is
not covered by the current test set.
TBR=pthatcher@webrtc.org
Bug: webrtc:7013
Change-Id: Ibbf458516a521a488e8e3bb4a5a29fca70a627f5
Reviewed-on: https://webrtc-review.googlesource.com/27761
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20960}
Add a method to DtlsSrtpTransport to cache the RTP Absolute Send Time
extension id. The method would be called when using DTLS-SRTP with
external authentication.
TBR=pthatcher@webrtc.org
Bug: webrtc:7013
Change-Id: Ie9edb9382cbb4cf43eea5da3030991a0d20293a5
Reviewed-on: https://webrtc-review.googlesource.com/27260
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20947}
This was only used to ensure compatibility with external projects.
Now that everyone has moved to RtpTransceiverDirection, these
methods are redundant.
Bug: webrtc:8558
Change-Id: Iff5a8d13f9a4300d06902fa0441ceaeebf6809a2
Reviewed-on: https://webrtc-review.googlesource.com/24746
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20945}
The DtlsSrtpTransport takes the reponsiblity of setting up DTLS-SRTP from
the BaseChannel.
The BaseChannel doesn't handle the signals from the P2P layer transport anymore.
The RtpTransport handles the signals from the PacketTransportInternal and the
DtlsSrtpTransport handles the DTLS-specific signals and determines when to extract
the keys and setting the parameters.
In channel_unittests.cc, call from DTLS to SDES is expected to fail since the
fallback from DTLS to SDES is not supported.
Bug: webrtc:7013
Change-Id: I0a54e017986f5a8ae9710e79643a4651bef3c38f
Reviewed-on: https://webrtc-review.googlesource.com/24702
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20941}
This is causing compilation issues in a chromium cl because of type conflicts.
BUG=none
TBR=henrikg@webrtc.org
Tbr-ing to fix build issue upstream and because there's no code change.
Change-Id: Ia34ae3844fe3f57f047cb44422fa591f752b7bda
Reviewed-on: https://webrtc-review.googlesource.com/26680
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20921}
This change adds |transceiver_direction()| and
|set_transceiver_direction()| to MediaContentDescription so that
external users can switch off of MediaContentDirection.
This deprecates the use of |direction()| and |set_direction()|
for external users. Once everyone has moved off of those methods,
the signiture will change to return/set RtpTransceiverDirection.
Then external users can move back to these methods with the new
signature.
Bug: webrtc:8558
Change-Id: I7e3ba289d3a0ac738b364b0388621cc3e7bcf5d3
Reviewed-on: https://webrtc-review.googlesource.com/24743
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20900}