AddToStore: implement payload/response
The AddToStore operation is performed in 3 packets: 1. AddToStore request metadata. 2. AddToStore payload. 3. Response from the daemon. This means we need to keep some sort of processing state for the operation.
This commit is contained in:
parent
980fa64065
commit
5b3c9427a8
|
@ -19,6 +19,10 @@ local op_addtostore_camstr = ProtoField.string("nix.addtostore.camstr", "Add to
|
|||
local op_addtostore_nb_references = ProtoField.uint64("nix.addtostore.nbreferences", "Number of References")
|
||||
local op_addtostore_reference = ProtoField.string("nix.addtostore.reference", "Reference")
|
||||
local op_addtostore_repairflag = ProtoField.bool("nix.addtostore.repairflag", "Repair Flag")
|
||||
local op_addtostore_payload = ProtoField.bytes("nix.addtostore.payload", "Request Payload")
|
||||
local op_addtostore_response = ProtoField.bytes("nix.addtostore.response", "Response")
|
||||
|
||||
op_addtostore_step = 0
|
||||
|
||||
nix_proto.fields = {
|
||||
dst_field,
|
||||
|
@ -38,6 +42,8 @@ nix_proto.fields = {
|
|||
op_addtostore_nb_references,
|
||||
op_addtostore_reference,
|
||||
op_addtostore_repairflag,
|
||||
op_addtostore_payload,
|
||||
op_addtostore_response,
|
||||
}
|
||||
|
||||
local op_table = {
|
||||
|
@ -165,11 +171,25 @@ function parse_add_to_store(tvb, pinfo, tree, offset)
|
|||
end
|
||||
|
||||
local repairflag = subtree:add(op_addtostore_repairflag, tvb(offset, 1))
|
||||
|
||||
offset = offset + 8
|
||||
op_addtostore_step = 2
|
||||
|
||||
return offset
|
||||
end
|
||||
|
||||
function process_op_addtostore_step(tvb, pinfo, tree, offset)
|
||||
if op_addtostore_step == 2 then
|
||||
local subtree = tree:add(op_addtostore, tvb(offset, tvb:len() - offset))
|
||||
subtree:add(op_addtostore_payload, tvb(offset, tvb:len() - offset))
|
||||
elseif op_addtostore_step == 1 then
|
||||
local subtree = tree:add(op_addtostore, tvb(offset, tvb:len() - offset))
|
||||
subtree:add(op_addtostore_response, tvb(offset, tvb:len() - offset))
|
||||
end
|
||||
|
||||
op_addtostore_step = op_addtostore_step - 1
|
||||
end
|
||||
|
||||
function parse_op(tvb, pinfo, tree, offset, op)
|
||||
tree:add(op_name_field, tvb(offset, 8), op_table[op])
|
||||
offset = offset + 8
|
||||
|
@ -191,7 +211,10 @@ function nix_proto.dissector(tvb, pinfo, tree)
|
|||
offset = offset + 8
|
||||
|
||||
local first_word = tvb(offset, 4):le_uint()
|
||||
if first_word == 0x6e697863 then
|
||||
|
||||
if op_addtostore_step > 0 then
|
||||
process_op_addtostore_step(tvb, pinfo, subtree, offset)
|
||||
elseif first_word == 0x6e697863 then
|
||||
offset = parse_client_hello(tvb, pinfo, subtree, offset)
|
||||
elseif first_word == 0x6478696f then
|
||||
offset = parse_daemon_hello(tvb, pinfo, subtree, offset)
|
||||
|
|
Loading…
Reference in New Issue