About this project
jiofiber-bridge is a template project for using a JioFiber (Jio Fiber Voice / JioCall over broadband) landline from anywhere on an ordinary SIP softphone, for both outbound and inbound calls. Jio delivers voice through its IMS core via a proprietary client called JUICE that normally runs only on the ISP router or the JioCall app. This project runs a small headless bridge on the same LAN as the router, registers to the IMS core the way a genuine JioCall device does, and re-presents the line as a plain SIP trunk. Point Asterisk at that trunk and softphones such as Zoiper, Groundwire or Linphone can place and receive calls on the landline from any network.
Architecture: the bridge is a B2BUA that must sit on the home LAN because the IMS core only talks to the router and RTP must originate on the LAN interface. One leg speaks JUICE/IMS (TLS signalling, AMR/AMR-WB audio) to the router; the other is a plain SIP/PCMU trunk, with AMR-to-PCMU transcoding through pjproject's conference bridge. Asterisk runs on a small public VPS where phones register; it normalizes dialed numbers, rings phones on inbound and carries caller-ID. Bridge and Asterisk connect over a private overlay network (Tailscale or WireGuard), so no SIP port is exposed from home and the VPS only exposes the phone-facing registrar.
The README highlights three hard problems. First, identity: JUICE registration uses RFC 5626 outbound with a +sip.instance in a specific shape (uppercase, no urn:uuid: prefix), plus a rotating per-device password and a device whitelisted via an OTP flow; stock pjsua formats the instance differently and the core silently drops the REGISTER. Second, media: the core offers AMR/AMR-WB with a mode-set and expects it echoed in SDP, otherwise calls are torn down after roughly one to two minutes. Third, inbound forking: the core only rings contacts whose registration advertised the full RCS/MMTEL feature tag set and a JioCall-like User-Agent; registering with only mmtel makes outbound work but inbound never ring.
Requirements include an always-on Linux machine on the home LAN with root, a small public VPS for Asterisk 18+, an overlay network, build tools plus AMR codec dev headers, IMS account details (public identity, auth username, realm, registrar/router address), and the ability to trigger the provider's device-add OTP. The repo provides a B2BUA source file, three pjproject patches (AMR mode-set, +sip.instance format, contact_params accumulation guard), a build config, bridge.env.example, registration and healthcheck scripts, a credential-recovery helper for the static upstream IMS digest password, Asterisk pjsip/extensions/rtp configs, and systemd units for the bridge and a two-minute health timer.
Setup steps cover building the patched pjproject, configuring bridge.env, provisioning the device (whitelist plus fetching the rotating password at each start), running the bridge as a service, configuring Asterisk endpoints and trunk, registering softphones, and monitoring with a healthcheck that restarts the bridge and can post ntfy alerts. The README also documents number normalization (off-net mobiles need the STD 0 prefix or the core returns 484 Address Incomplete), RFC 4733 DTMF relay, inbound caller-ID via X-Jio-Caller and P-Asserted-Identity/Remote-Party-ID headers, an optional inbound IVR with WAV format and absolute-path caveats, guidance for other PBXes such as Grandstream UCM and FreePBX (IVRs must answer rather than play early media), and an EARLY_ANSWER escape hatch. A quirks section maps symptoms to causes, including silent REGISTER drops, calls dying at one to two minutes, PJ_ETOOSMALL after long uptimes, one-way audio from multi-homed RTP, and inbound not ringing due to missing feature tags. Everything is a template with no real numbers, IPs, passwords or provider hostnames; the project is MIT licensed and includes a disclaimer.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.