• v1.1.0 547361a4d4

    imsd 1.1.0
    All checks were successful
    package / package (push) Successful in 1m48s
    Stable

    jorijnvdgraaf released this 2026-10-16 20:36:32 +00:00 | 1 commits to main since this release

    Signed by jorijnvdgraaf
    GPG key ID: 2937E59CDCC1BCFB

    New

    • The keypad works during a call and the tones travel as RFC 4733 telephone-event packets, the other side's key presses are heard as tones.

    Fixes

    • The SDP answer to an incoming call echoes telephone-event only when the offer's m-line lists it at the codec's clock, before any a=rtpmap line counted.
  • v1.0.0 d4a0759e57

    imsd 1.0.0
    All checks were successful
    package / package (push) Successful in 1m54s
    Stable

    jorijnvdgraaf released this 2026-10-13 20:34:54 +00:00 | 7 commits to main since this release

    Signed by jorijnvdgraaf
    GPG key ID: 2937E59CDCC1BCFB

    New

    • The P-CSCF comes from the network. At every start imsd reads the list the carrier put in the ims PDN's PCO from the modem, so PCSCF= in /etc/imsd.env is no longer needed; set it only to override what the network says, or where discovery finds nothing.
    • imsd-pcscf --mux <rmnet mux id> prints the PDN's P-CSCF list for diagnosis.
    • GNOME Calls' oFono backend (imsd-ofono) no longer waits for the IMS bring-up at boot or at an upgrade: it starts at once and picks imsd up when it appears.

    Fixes

    • A fresh registration used to flush the host's whole xfrm state and policy, taking a policy-based VPN's SAs and policies with it. imsd now deletes its own entries by key and installs the new pair.
    • A registration is resumed on the P-CSCF it was made to even when the configured or discovered address differs; the next fresh registration moves there.

    Breaking

    • VoLTE registers without any configuration on every phone where registration is possible. The existence of /etc/imsd.env no longer changes behaviour.
    • PCSCF= has one accepted spelling: RFC 5952 form (what ip prints for a plain IPv6 address). An upper-case, zero-padded or uncompressed value used to be taken silently and then made every restart register fresh. LOCAL= is compared in RFC 5952 form whatever its spelling.
  • v0.3.12 a7caceb1b0

    imsd 0.3.12
    All checks were successful
    package / package (push) Successful in 1m37s
    Stable

    jorijnvdgraaf released this 2026-10-11 12:09:57 +00:00 | 17 commits to main since this release

    Signed by jorijnvdgraaf
    GPG key ID: 2937E59CDCC1BCFB

    Fixes

    • Restarting imsd on a carrier that checks the security negotiation. When imsd resumed a registration after a restart, it told the network it had agreed to one security mechanism instead of mirroring the whole list the network had offered as the SIP security-agreement standard requires. A network that compares the two refuses the resumed registration which then cost a fresh register. The resume now repeats the list.
  • v0.3.11 53b8c5c8e7

    imsd 0.3.11
    All checks were successful
    package / package (push) Successful in 1m37s
    Stable

    jorijnvdgraaf released this 2026-10-10 19:47:22 +00:00 | 20 commits to main since this release

    Signed by jorijnvdgraaf
    GPG key ID: 2937E59CDCC1BCFB

    Fixes

    • Carriers that refused imsd's periodic re-registration. On O2 UK every 30-minute refresh was answered 503, followed by up to 20 minutes without service while imsd waited out the network's Retry-After. The re-REGISTER now carries the registration's authentication answer and proposes new IPsec parameters, as 3GPP TS 24.229 requires. A registration carried over from before the upgrade keeps the old form until its next fresh registration.
    • One wait, not two. A refused re-registration that comes with a Retry-After goes straight to a fresh registration once that wait has passed, instead of retrying the refresh first and waiting a second time.
  • v0.3.10 7583ee3606

    imsd 0.3.10
    All checks were successful
    package / package (push) Successful in 1m57s
    Stable

    jorijnvdgraaf released this 2026-10-06 16:04:31 +00:00 | 23 commits to main since this release

    Signed by jorijnvdgraaf
    GPG key ID: 2937E59CDCC1BCFB

    New

    • Call control is behind polkit (net.catcrafts.IMS1.Voice): the active local session and root may place, answer and end calls; an ssh login or a background service may not. Scripts that dial over ssh need sudo or a polkit rule. polkit is now a runtime dependency: without a running polkitd every call request is refused, emergency calls included.
    • apk upgrade restarts imsd and imsd-ofonod. A call in progress ends, an emergency call included; the registration is back within about a minute.
    • Call audio goes to the session logged in at the seat, whatever the account is called. On a UI that logind does not report as the seat's user session there is no call audio: set AUDIO_USER=<account> in /etc/imsd.env.
    • A refused REGISTER or SUBSCRIBE is logged with its status line and reason headers (Retry-After, Warning, Reason, Server).
    • The README is the user documentation again, configuration variables included; building, internals and packaging are in AGENTS.md.
    • imsd builds with crafter-build only: the Makefile and the from-source APKBUILD are gone.

    Fixes

    • Registration recovers by itself. When the network refuses a refresh or the P-CSCF stops answering, imsd registers fresh in place; it used to retry the old registration until someone restarted the service (O2 UK: 70 minutes of refusals, then hours of silence). A refused fresh registration waits 21 minutes, growing to an hour, or as long as the network's Retry-After says, and a restart no longer cuts that wait short.
    • The registration no longer dies after about two days. imsd registered on the kernel's temporary IPv6 address, which the kernel retires; it now uses the address ModemManager assigned to the ims PDN. An upgraded phone moves at its next fresh registration.
    • The dialer works whatever the account is called. The bus policy admitted only user and root, so under any other account name every call was refused without a word.
    • GNOME Calls dials again after imsd-ofonod restarts. Calls 50.0 dials nothing once its oFono origin has gone away and come back, so its daemon is restarted along with imsd-ofonod.
    • A registration the network terminates is replaced by a fresh one, and the reg-event subscription that reports it is kept alive.
    • At boot, an ims profile list without the ims APN is no longer taken as final before the modem is registered.
    • imsd no longer tries to bring the ims bearer up while the modem's radio is off (airplane mode). Such an attempt left the modem in low power when the radio was switched on again: no mobile service until the modem was disabled and enabled again. In 0.3.9 this needed a boot or a restart of imsd in airplane mode.

    Known issue

    • New in 0.3.10: when a start of imsd fails during a network outage, the next start registers fresh instead of resuming. KPN refuses that while the old registration is still alive: 21 minutes without VoLTE, where 0.3.9 resumed.