mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-01 23:35:28 +00:00
Add wireshark dissector for control protocol
This commit is contained in:
parent
adf6b1a01b
commit
0bb19e6199
86
LuaScripts/gridctl.lua
Normal file
86
LuaScripts/gridctl.lua
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
local pf_type = ProtoField.uint16("gridctl.type", "Packet Type", base.HEX)
|
||||||
|
local pf_paylen = ProtoField.uint32("gridctl.paylen", "Payload Length", base.DEC)
|
||||||
|
local pf_payload = ProtoField.bytes("gridctl.payload", "Payload bytes")
|
||||||
|
local pf_payload32 = ProtoField.uint32("gridctl.payload32", "Payload as 32-bit LE integer", base.DEC)
|
||||||
|
local pf_payload16 = ProtoField.uint16("gridctl.payload16", "Payload as 16-bit LE integer", base.HEX)
|
||||||
|
local pf_response = ProtoField.uint16("gridctl.response", "Response code", base.HEX)
|
||||||
|
local pf_origtype = ProtoField.uint16("gridctl.origtype", "Original request type", base.HEX)
|
||||||
|
|
||||||
|
p_gridctl = Proto ("GridCtl", "Nvidia GRID Control Protocol")
|
||||||
|
|
||||||
|
p_gridctl.fields = {
|
||||||
|
pf_type,
|
||||||
|
pf_paylen,
|
||||||
|
pf_payload,
|
||||||
|
pf_payload16,
|
||||||
|
pf_payload32,
|
||||||
|
pf_response,
|
||||||
|
pf_origtype
|
||||||
|
}
|
||||||
|
|
||||||
|
function p_gridctl.dissector(buf, pkt, root)
|
||||||
|
pkt.cols.protocol = p_gridctl.name
|
||||||
|
|
||||||
|
subtree = root:add(p_gridctl, buf(0))
|
||||||
|
|
||||||
|
-- We can have multiple GRID control packets in one TCP datagram
|
||||||
|
i = 0
|
||||||
|
while i < buf:len() do
|
||||||
|
-- Make sure we have a full header
|
||||||
|
if buf:len() - i < 4 then
|
||||||
|
-- We need more data
|
||||||
|
pkt.desegment_len = DESEGMENT_ONE_MORE_SEGMENT
|
||||||
|
pkt.desegment_offset = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Read the packet type field
|
||||||
|
ptype = buf(i, 2):le_uint()
|
||||||
|
subtree:add(pf_type, buf(i, 2), ptype)
|
||||||
|
i = i + 2
|
||||||
|
|
||||||
|
-- Read the payload length field
|
||||||
|
paylen = buf(i, 2):le_uint()
|
||||||
|
subtree:add(pf_paylen, buf(i, 2), paylen)
|
||||||
|
i = i + 2
|
||||||
|
|
||||||
|
-- Make sure we have the full payload
|
||||||
|
if buf:len() - i < paylen then
|
||||||
|
-- We need more data
|
||||||
|
pkt.desegment_len = DESEGMENT_ONE_MORE_SEGMENT
|
||||||
|
pkt.desegment_offset = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Decode responses differently
|
||||||
|
if ptype == 0x0204 then
|
||||||
|
origtype = buf(i, 2):le_uint()
|
||||||
|
subtree:add(pf_origtype, buf(i, 2), origtype)
|
||||||
|
i = i + 2
|
||||||
|
response = buf(i, 2):le_uint()
|
||||||
|
subtree:add(pf_response, buf(i, 2), response)
|
||||||
|
i = i + 2
|
||||||
|
else
|
||||||
|
if paylen == 4 then
|
||||||
|
-- Display the payload as a uint32 (LE)
|
||||||
|
payload32 = buf(i, 4):le_uint()
|
||||||
|
subtree:add(pf_payload32, buf(i, 4), payload32)
|
||||||
|
elseif paylen == 2 then
|
||||||
|
-- Display the payload as a uint16 (LE)
|
||||||
|
payload16 = buf(i, 2):le_uint()
|
||||||
|
subtree:add(pf_payload16, buf(i, 2), payload16)
|
||||||
|
elseif paylen ~= 0 then
|
||||||
|
subtree:add(pf_payload, buf(i, paylen))
|
||||||
|
end
|
||||||
|
i = i + paylen
|
||||||
|
end
|
||||||
|
|
||||||
|
if i ~= buf:len() then
|
||||||
|
subtree:add("")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function p_gridctl.init()
|
||||||
|
end
|
||||||
|
|
||||||
|
local tcp_dissector_table = DissectorTable.get("tcp.port")
|
||||||
|
tcp_dissector_table:add(47995, p_gridctl)
|
Loading…
x
Reference in New Issue
Block a user