fix(nestsClient): token-parse hardening, mint timeout, IPv6 [], broadcaster-bail signal
- NestsTokenResponse.parse catch list now includes IllegalStateException so a malformed escape from a misbehaving auth server surfaces as NestsException instead of crashing the listener. - OkHttpNestsClient gains a configurable callTimeoutMs (default 90 s) enforcing an upper bound on the entire mintToken round-trip including retries. Without it a stalled server suspends the reconnect orchestrator indefinitely (the orchestrator's openOnce step parks on mintToken). 90 s leaves headroom over the worst-case 63 s 429 retry chain documented in MAX_RATE_LIMIT_RETRIES. - parseEndpoint tightens IPv6 bracket check from `closeBracket > 0` to `> 1`, rejecting the empty `[]` literal. - NestBroadcaster + NestMoqLiteBroadcaster gain an `onTerminalFailure` callback that fires once when the consecutive-send-error guard bails. MoqLiteNestsSpeaker wires this to flip the speaker state to Failed, giving ReconnectingNestsSpeaker the signal it needs to recycle the session — without this hook the broadcaster bailed silently and the outward speaker state stayed on Broadcasting forever. Adds regression test: - onTerminalFailure_fires_once_after_consecutive_send_failures 225 tests pass, 0 failures. Android target compiles clean.
This commit is contained in:
@@ -372,7 +372,10 @@ internal fun parseEndpoint(endpoint: String): Pair<String, String> {
|
||||
val (hostPart, portStr) =
|
||||
if (authorityRaw.startsWith('[')) {
|
||||
val closeBracket = authorityRaw.indexOf(']')
|
||||
require(closeBracket > 0) { "malformed IPv6 authority: '$authorityRaw'" }
|
||||
// closeBracket==1 would mean the literal "[]" — empty IPv6
|
||||
// address. Reject so callers can't accidentally pass an
|
||||
// unconfigured placeholder.
|
||||
require(closeBracket > 1) { "malformed IPv6 authority: '$authorityRaw'" }
|
||||
val host = authorityRaw.substring(0, closeBracket + 1)
|
||||
val tail = authorityRaw.substring(closeBracket + 1)
|
||||
when {
|
||||
|
||||
Reference in New Issue
Block a user