Summary
A 1:1 audio call placed with PlanetTransport connects and audio reaches the callee, but LINE ends the call with error T103 roughly 10 seconds after the peer answers. Reproducible on main.
Environment
- linejs
main, Deno 2.9
- Android primary auth token,
device: "ANDROID"
- 1:1
AUDIO call; callee answering on a mobile (iOS) LINE client
What works
client.call.acquireRoute({ to, callType: "AUDIO" }) returns a valid CallRoute (fakeCall: false)
connect() → inviteDetailed() (ringing) → waitForAnswerDetailed({ autoConnRsp: true })
conn_req is parsed, mediaReady: true, SRTP send/recv contexts are established
- Streaming Opus (48 kHz mono, 20 ms frames,
0x00 payload prefix, timestampStep: 960) with mediaKeyMode: "audio-reverse-stage" — the callee hears the audio, and inbound peer media packets are received and decrypted (2-way at the packet level)
Problem
~10 s after answer, the callee's client shows T103 and the call ends, even though RTP keeps being sent.
Findings during investigation
- No RTCP is emitted on the 1:1 path.
buildRtcpCompound() (rtcp.ts) has no call sites; RTCP is only sent for group calls (#sendGroupRtcpFeedback, gated on #groupJoined). Wiring in a periodic 1:1 RTCP sender report (plaintext, mirroring the group feedback send) did not prevent T103.
- After
conn_req, the relay emits a rapid stream (~100+/s) of Cassini cc messages whose bodyTag is not present in CC_MSG; they surface as planet_msg cc:"" ccTag:0. linejs does not respond to them. The ~10 s T103 timeout is consistent with the relay waiting on a response that is never sent.
- Non-mobile callee: when the peer answers on a desktop (Windows) LINE client,
conn_req.answer is ~248 bytes and decodeNativeSetupOffer produces no keying, so mediaReady stays false. A mobile (iOS, ~275-byte answer) yields mediaReady: true.
Question
Which mid-call Cassini cc message (the unmapped flood that follows conn_req) must be answered to keep a 1:1 call alive past ~10 s and avoid T103? Decoded captures of the unmapped messages can be provided.
Summary
A 1:1 audio call placed with
PlanetTransportconnects and audio reaches the callee, but LINE ends the call with error T103 roughly 10 seconds after the peer answers. Reproducible onmain.Environment
main, Deno 2.9device: "ANDROID"AUDIOcall; callee answering on a mobile (iOS) LINE clientWhat works
client.call.acquireRoute({ to, callType: "AUDIO" })returns a validCallRoute(fakeCall: false)connect()→inviteDetailed()(ringing) →waitForAnswerDetailed({ autoConnRsp: true })conn_reqis parsed,mediaReady: true, SRTP send/recv contexts are established0x00payload prefix,timestampStep: 960) withmediaKeyMode: "audio-reverse-stage"— the callee hears the audio, and inbound peer media packets are received and decrypted (2-way at the packet level)Problem
~10 s after answer, the callee's client shows T103 and the call ends, even though RTP keeps being sent.
Findings during investigation
buildRtcpCompound()(rtcp.ts) has no call sites; RTCP is only sent for group calls (#sendGroupRtcpFeedback, gated on#groupJoined). Wiring in a periodic 1:1 RTCP sender report (plaintext, mirroring the group feedback send) did not prevent T103.conn_req, the relay emits a rapid stream (~100+/s) of Cassiniccmessages whosebodyTagis not present inCC_MSG; they surface asplanet_msg cc:"" ccTag:0. linejs does not respond to them. The ~10 s T103 timeout is consistent with the relay waiting on a response that is never sent.conn_req.answeris ~248 bytes anddecodeNativeSetupOfferproduces no keying, somediaReadystaysfalse. A mobile (iOS, ~275-byte answer) yieldsmediaReady: true.Question
Which mid-call Cassini
ccmessage (the unmapped flood that followsconn_req) must be answered to keep a 1:1 call alive past ~10 s and avoid T103? Decoded captures of the unmapped messages can be provided.