imsd/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jorijn van der Graaf 92fba40da0
sdp, engine, imsd: SendDtmf sends the tones as RFC 4733 events over the media leg
SendDtmf was a stub: GNOME Calls' SendTones and Plasma Dialer's sendDtmf
reached imsd and went nowhere. The SDP parser reads the telephone-event
payload type at the chosen codec's clock into the answer, among the
m-line's formats only — an rtpmap the line does not list is not
negotiated, and nothing is sent with a format the answer does not carry
(RFC 3264 §8.3.2); an event's rate is its rtpmap clock (RFC 4733
§2.4.1), an offer with two codec clocks lists telephone-event at each,
and the name is matched as every encoding name is, case-insensitively,
with the clock whole. The media leg carries it, and imsd-media gets it
as DTMF_PT with its stdin on a pipe from imsd, the control pipe. The
SDP answer imsd sends to an inbound offer carries telephone-event by the
same rule, where it echoed any telephone-event rtpmap with a lower-case
name and a clock prefix before: an rtpmap off the offer's m-line is no
longer echoed, an upper-case name now is. The decision is the engine's:
OnDtmf lets the tones through on an active call that negotiated
telephone-event (the answer's number on a call we placed, the offer's on
one we answered) and drops them otherwise with a line that says why:
before the answer, after the call, no telephone-event at the codec's
clock in the SDP, a character that is no tone or more than 128 tones
(then the whole string, never part of what was pressed); letters are
upper-cased. The shell writes one `dtmf <tones>` line per SendDtmf,
whole or not at all: the bound keeps the line within one atomic pipe
write, the write end is non-blocking so that a leg that stopped reading
fails the write instead of holding the engine thread, and a longer line
is refused; SIGPIPE is ignored so that a write after the leg died fails
with EPIPE instead of ending the daemon. The command queue's one
argument is `arg` now — the number to dial, or the tones. The `media …`
start line gains the telephone-event pt at its end.

Tested: tests/Sdp and tests/Engine (the eight suites pass); the dev
phone's dtmf benches ran in builds of this series
(journal/ims/captures/2026-10-14-dtmf-bench-1/ onward).
2026-10-16 22:25:49 +02:00
..
Aka imsd 0.2.7 — initial public snapshot 2026-07-22 23:04:21 +02:00
Engine sdp, engine, imsd: SendDtmf sends the tones as RFC 4733 events over the media leg 2026-10-16 22:25:49 +02:00
Ipsec ipsec, engine, imsd: the state file records the P-CSCF and a resume follows the kernel's SA peer 2026-10-13 22:28:02 +02:00
Messages engine, messages, util, imsd: the reregistration carries the last challenge answer and new SA parameters 2026-10-10 21:43:07 +02:00
Qmi qmi, imsd-pcscf: read the ims PDN's P-CSCF list from the modem's runtime settings 2026-10-13 22:28:02 +02:00
Sdp sdp, engine, imsd: SendDtmf sends the tones as RFC 4733 events over the media leg 2026-10-16 22:25:49 +02:00
Sip engine: keep the reg-event subscription alive and act on a terminated binding 2026-10-06 14:01:33 +02:00
Util util: canonical IPv6 text (RFC 5952 §4) and an address-list parser 2026-10-13 22:28:02 +02:00