Use actual arg parser for @ part too
1623f650 — Jaco Kroon 3 years ago
AC_HEADER_STDC causes a compile failure with autoconf 2.70

From https://www.mail-archive.com/bug-autoconf@gnu.org/msg04408.html

> ... the long-obsolete AC_HEADER_STDC, previously used internally by
> is now a no-op (and is not used at all within Autoconf anymore), so
> that change is likely what made the first use of AC_EGREP_HEADER the
> one inside the if condition, causing the observed results.

The implication is that the test does nothing anyway, and due to it
being a no-op from 2.70 onwards, results in the required not being set
to yes, resulting in ./configure to fail.

Change-Id: Ic1ff38d87f791fbf1f2a80512f81bb7110392460
Signed-off-by: Jaco Kroon <jaco at uls.co.za>

[Retrieved from:
Signed-off-by: Fabrice Fontaine <fontaine.fabrice at gmail.com>
Reduce fragmentation in DTLS handshake

Thanks larma
DTLS Fingerprint and IKS CDATA

Turns out the function wasn't really being used right, but we never
noticed because we never actually ran this code before.
Rename Transport to Fingerprint

This code is looking for the wrong tag, which was leading to issues with
DTLS session initiation.

Thanks to mar-v-in in the Dino community for finding the problem!
Content Created By Initiator 2: Electric Boogaloo

I previously had a patch that changed this logic to always have content
be created by the initiator, but it turns out there's a third place
where this happens.

Apparently it wasn't important at the time I first made this patch, but
it has become important at some point, so I'm changing this for
Debian Stable and Buster

A new verison of Debian was released, but our prod is still Buster.
We're planning on moving to stable, though.

So for now we'll build for stable and buster.
Git-Based Debian Versions

Augment the changelog in the build phase so we can tell which version
we're running by asking dpkg, etc.
Always allow checking for payload 101

101 is the asterisk default rtp payload number for DTMF.  It is also hard-coded
into motif for at least outbound.  I think it should be registered with the
dynamic PT stuff when it is used, but in tests we would hit this code path --
allowing it to look up 101's default assignment when otherwise unassigned at
least makes it work for now.
Hacky "support" for Renomination

This is a feature libwebrtc supports, that's barely standardized.
But if a client uses it, then it uses an alternative attribute for
nomination, and the value of this attribute is taken as a monotonically
increasing number, telling us to choose whichever option they nominated
"most recently", ignoring priority.

Since it's an alternative attribute, if we don't understand it then we
think the controlling side hasn't nominated anything.
So it's a bigger change to actually implement the storage of nomination
counter and use that instead of priority.
But if we just treat it as a normal "USE-CANDIDATE"... then it should at
least work better than nothing.

I'm hoping the other side will be tolerant to our limited understanding
of nomination.
Ignore Candidates for RTCP Component

We happen to know that all of our clients support rtcp-mux, which means
both kinds of traffic will flow over the same port.
This means that we'll only use component 1.

But, the offerer doesn't technically know that yet, since we don't
advertise that until our session-accept.

So in the meantime it may have generated candidates for component 2.

Our ICE setup is practically on the edge of not working at all, given
the way Jingle trickles candidates in contrast to the spec asterisk was
written against.

So it's a miracle it works at all, since it sees each individual
candidate as the only one.
But when it sees a candidate list that appears to _only_ contain
candidates for component 2, that is rtcp and not rtp, then it doesn't
even try to run the checklists, since it thinks there's no actual media.

So that's apparently one problem too many and nothing works.
This change just ignores candidates for component 2.
There's already code that doesn't _actually_ restart anything if there's
not actually any new candidates, so if that's the only one then it'll
just be ignored.
For candidates for component 1, it should do the same thing it's already
doing, which is limping over the finish-line.
Content Transport is Always Created by Initiator

The original code declared the content to be created by the "initiator"
if this is an outgoing call, and "responder" if it's an incoming call,
which makes sense if we assume we're always the content creator.

But actually, in the clients I've looked at, that's not the case.
In all cases, the initiator includes the initial content description in
their session-initiate message.

So actually, the creator is always the initiator, either us if we
initiated, or them if they did.

Most clients didn't seem to care who the creator was, but Gajim seems
grumpy about it.
Set Longer STUN Timeout

We were having an issue with outbound Jingle calls where it would fail
to establish a connection.

It appeared to be a bug in pjproject, specifically that they don't
retrigger failed triggered checks, and the call receiver started sending
checks before the call initiator (because they receive that info on call
acceptance), so there was plenty of time for things to fail before we
even had a chance.

This does not fix that bug, but by extending the window of time it
retries before declaring failure, we can step around it a little.
Use Nominated Pair

We were seeing Chromium choose to nominate a pair that was not highest
priority, and then get stuck trying to convince us to use it.

While it's true it's a bit weird to do that, that's its right as
"controlling" agent, and our job as "controlled" agent is to do what it
asks of us.

It's possible it was just looking for the handshake to complete to
renegotiate with the higher priority one, or maybe it is planning on
just sticking with it. Either way, talking to the same interfaces is
better than making up our own answer.

The difference in this case is that if a component has multiple valid
options, then the highest priority one will be the one that's chosen as
"most valid"

But it's possible that, again, for some reason the controlling entity
chose to pick a different pair as the one to nominate.
In that case, the nominated and valid checks will differ, and we are
currently using the wrong one.
Commit Debian 3.0 (quilt) metadata

[dgit (8.5) quilt-fixup]
DTLS support for video
Commit Debian 3.0 (quilt) metadata

[dgit (8.5) quilt-fixup]
Allow @ in user part of fromuser_and_domain
Commit Debian 3.0 (quilt) metadata

[dgit (8.5) quilt-fixup]