Skip to content

Send the MXP start command so strict clients like MUSHclient activate MXP. - #13

Merged
powerje merged 1 commit into
trunkfrom
mxp-start-subnegotiation
Aug 12, 2026
Merged

Send the MXP start command so strict clients like MUSHclient activate MXP.#13
powerje merged 1 commit into
trunkfrom
mxp-start-subnegotiation

Conversation

@powerje

@powerje powerje commented Aug 11, 2026

Copy link
Copy Markdown
Member

The server was treating the client's IAC DO MXP as full activation and immediately switching to escaped, tagged output, but the MXP handshake has a third step: after WILL/DO, the server must send the start command IAC SB MXP IAC SE. MUSHclient's default "Use MXP: on command" setting waits for exactly that subnegotiation before it turns its parser on, so it displayed everything literally. Mudlet-family clients activate on WILL/DO alone, which is why this never showed up in testing.

This sends the start command in processDoMxp() ahead of the ESC[7z locked-default line mode (a client that only starts parsing at the start command would otherwise miss the lock), and resends it from reassertMXP() on the copyover path. Same change mirrored into the C oracle and Kotlin implementations, with tests asserting the start command is sent, ordered before the lock, and not re-emitted on a duplicate DO.

@powerje
powerje force-pushed the mxp-start-subnegotiation branch from 02f0bf9 to b4b3ff3 Compare August 12, 2026 00:00
@powerje
powerje force-pushed the mxp-start-subnegotiation branch from b4b3ff3 to af03fae Compare August 12, 2026 00:01
@powerje
powerje merged commit 56c313e into trunk Aug 12, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant