Add MSP media protocol support

This commit is contained in:
2026-09-17 17:53:08 +02:00
parent 3fd28c2e0b
commit 573f1b7acb
14 changed files with 357 additions and 51 deletions
+18
View File
@@ -66,6 +66,24 @@ module MeowTelnetTest
MeowTest.assert_equal([bytes(Telnet::IAC, Telnet::WONT, 43)], local_unknown.replies)
end
MeowTest.test("Telnet negotiates MSP only when media is enabled") do
disabled = Telnet::Parser.new.feed(bytes(Telnet::IAC, Telnet::WILL, Telnet::MSP))
enabled = Telnet::Parser.new(:enable_msp => true).feed(bytes(Telnet::IAC, Telnet::WILL, Telnet::MSP))
MeowTest.assert_equal([bytes(Telnet::IAC, Telnet::DONT, Telnet::MSP)], disabled.replies)
MeowTest.assert_empty(disabled.events)
MeowTest.assert_equal([bytes(Telnet::IAC, Telnet::DO, Telnet::MSP)], enabled.replies)
MeowTest.assert_equal([[:msp_enabled, true]], enabled.events)
end
MeowTest.test("Telnet emits negotiated MSP subnegotiation payloads") do
parser = Telnet::Parser.new(:enable_msp => true)
parser.feed(bytes(Telnet::IAC, Telnet::WILL, Telnet::MSP))
body = "SOUND(chime.wav U=http://media.example/)".b
packet = bytes(Telnet::IAC, Telnet::SB, Telnet::MSP) + body + bytes(Telnet::IAC, Telnet::SE)
result = collect(parser, packet.bytes.map { |byte| bytes(byte) })
MeowTest.assert_equal([[:msp, body]], result[:events])
end
MeowTest.test("Telnet sends terminal type only after accepting the option") do
request = bytes(Telnet::IAC, Telnet::SB, Telnet::TERMINAL_TYPE, Telnet::TTYPE_SEND, Telnet::IAC, Telnet::SE)
parser = Telnet::Parser.new