Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Not pretty but does it work for your captures with more bodyTypes?

message_type_all.lua (replaces message_type_v2x.lua)

do
    local protobuf_field_table = DissectorTable.get("protobuf_field") 
    local message_type_dissector = Dissector.get("protobuf")

    protobuf_names_f = Field.new("protobuf.field.name")
    protobuf_values_f = Field.new("protobuf.field.value")

    proto_message_type = Proto("message_type_dissector", "All types")
    proto_message_type.dissector = function(tvb, pinfo, subtree)

        local bodytypes = {
            ["00"] = "BodyType_UNSPECIFIED",
            ["01"] = "pb_resp.Response",
            ["02"] = "pb_hs.Handshake",
            ["03"] = "pb_v2x.V2X",
            ["04"] = "pb_rtk.RTK",
            ["05"] = "pb_sys.System"
        }

        finfo_names = { protobuf_names_f() }
        finfo_values = { protobuf_values_f() }

        if (#finfo_names > 0) then
            for k, v in pairs(finfo_names) do
                -- process data and add results to the tree
                if string.format("%s", v) == "bodyType" then
                    pinfo.cols.protocol = proto_message_type.name
                    local subsubtree = subtree:add(proto_message_type, tvb())
                    pinfo.private["pb_msg_type"] = "message," .. string.format("%s", bodytypes[finfo_values[k].display])

                    pcall(Dissector.call, message_type_dissector, tvb, pinfo, subsubtree)
                end
            end
        end


    end 
    protobuf_field_table:add("pb_pm.PacketMessage.body", proto_message_type) 
end