# Codex Notes ## Network Direct Dial Findings: - HBP `RPTO` options are variable-length in DMRGateway and null-padded options are already trimmed in FreeDMR. - DMRGateway bounds normal Homebrew `DMRD` packets to fixed length and uses a 300-byte stack buffer for outbound `RPTO`; a 255-byte receive limit in FreeDMR is conservative and compatible. - FreeDMR can implement repeater-ID network direct dial without a new packet forwarding path by activating an existing `#` dial route and reusing the current TG9 rewrite logic. - FreeDMR1 still treats HBP `SLOTS` as repeater-advertised metadata from the RPTC config packet or legacy PEER config. It is not currently a master-side routing policy knob for dynamic/dial behavior. Assumptions: - `NETWORK_DIRECT_DIAL_SLOT=0` means disabled; `1` presents TG9 TS1; `2` presents TG9 TS2 for DMO/simplex clients. - Network direct dial is client/session-overridable through `OPTIONS`; the compact alias is `NDD_SLOT`. - RF-originated traffic must not activate network direct dial. - Invalid `NETWORK_DIRECT_DIAL_SLOT` values in config should fall back to `0` and log a warning; invalid OPTIONS values should leave the current session value unchanged. Unresolved questions: - Whether to add a later local CW `N` notification for blocked network direct dial attempts. - Whether a broader HBP bounds-validation pass should reject all non-exact `DMRD` lengths rather than only guarding short packets. - Whether FreeDMR2 should promote HBP `SLOTS`/DMO capability into an explicit access-session capability model. FreeDMR1 should not infer this for network direct dial. Protocol-sensitive areas: - Network direct dial is a narrow exception to the normal rule that network audio does not change local RF-facing dial state. - It must not override active or hangtime user-selected dial-a-TG state. - It must preserve existing packet rewrite boundaries by using the established TG9 reflector bridge path. Inferred invariants: - General private voice routing remains disabled. - Repeater/client-directed group-call access is allowed only when explicitly configured and the selected RF slot is idle. - Overlength `OPTIONS` should be acknowledged but ignored to avoid client reconnect loops while protecting parser state.