Files
chain33-dtalk/script/dtalk.lua
2022-03-17 15:59:24 +08:00

67 lines
1.9 KiB
Lua

local p_dtalk = Proto("dtalk", "dtalk layer protocal");
local f_data = ProtoField.bytes("dtalk.data", "Data")
local f_type = ProtoField.string("dtalk.type", "Type")
p_dtalk.fields = { f_data,f_type }
local protobuf_dissector = Dissector.get("protobuf")
DissectorTable.new('dtalk_dis', 'dtalk_dis', ftypes.UINT32, base.DEC, p_dtalk)
local msgtypes = {
[1] = 'chat33.comet.AuthMsg',
[2] = 'chat33.comet.AuthReply',
[3] = 'chat33.comet.Heartbeat',
[4] = 'chat33.comet.HeartbeatReply',
[5] = 'chat33.comet.Disconnect',
[6] = 'chat33.comet.DisconnectReply',
[7] = 'dtalk.proto.Proto',
[8] = 'dtalk.proto.Proto',
[9] = 'dtalk.proto.Proto',
[10] = 'dtalk.proto.Proto'
}
local option_name = {
[0] = 'Undefined',
[1] = 'Auth',
[2] = 'AuthReply',
[3] = 'Heartbeat',
[4] = 'HeartbeatReply',
[5] = 'Disconnect',
[6] = 'DisconnectReply',
[7] = 'SendMsg',
[8] = 'SendMsgReply',
[9] = 'ReceiveMsg',
[10] = 'ReceiveMsgReply',
[14] = 'SyncMsgReq',
[15] = 'SyncMsgReply'
}
--biz proto
local p_dtalk_biz = Proto("dtalk_biz", "dtalk biz layer protocal");
function p_dtalk.dissector(buf, pkt, tree)
local subtree = tree:add(p_dtalk, buf())
--Data
subtree:add(f_data, buf())
--Type
local opt_type = tonumber(pkt.private["dtalk_opt_type"])
subtree:add(f_type, option_name[opt_type])
pkt.private["pb_msg_type"] = "message," .. msgtypes[opt_type]
pcall(Dissector.call, protobuf_dissector, buf, pkt, subtree)
local protobuf_field_table = DissectorTable.get("protobuf_field")
protobuf_field_table:add("dtalk.proto.Proto.body", p_dtalk_biz)
end
function p_dtalk_biz.dissector(buf, pkt, tree)
for id, name in pairs(DissectorTable.list()) do
tree:add(id .. ':', name)
end
pkt.private["pb_msg_type"] = "message," .. 'dtalk.proto.CommonMsg'
pcall(Dissector.call, protobuf_dissector, buf, pkt, tree)
end