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_nb_references = ProtoField.uint64("nix.addtostore.nbreferences", "Number of References")
|
||||||
local op_addtostore_reference = ProtoField.string("nix.addtostore.reference", "Reference")
|
local op_addtostore_reference = ProtoField.string("nix.addtostore.reference", "Reference")
|
||||||
local op_addtostore_repairflag = ProtoField.bool("nix.addtostore.repairflag", "Repair Flag")
|
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 = {
|
nix_proto.fields = {
|
||||||
dst_field,
|
dst_field,
|
||||||
|
@ -38,6 +42,8 @@ nix_proto.fields = {
|
||||||
op_addtostore_nb_references,
|
op_addtostore_nb_references,
|
||||||
op_addtostore_reference,
|
op_addtostore_reference,
|
||||||
op_addtostore_repairflag,
|
op_addtostore_repairflag,
|
||||||
|
op_addtostore_payload,
|
||||||
|
op_addtostore_response,
|
||||||
}
|
}
|
||||||
|
|
||||||
local op_table = {
|
local op_table = {
|
||||||
|
@ -165,11 +171,25 @@ function parse_add_to_store(tvb, pinfo, tree, offset)
|
||||||
end
|
end
|
||||||
|
|
||||||
local repairflag = subtree:add(op_addtostore_repairflag, tvb(offset, 1))
|
local repairflag = subtree:add(op_addtostore_repairflag, tvb(offset, 1))
|
||||||
|
|
||||||
offset = offset + 8
|
offset = offset + 8
|
||||||
|
op_addtostore_step = 2
|
||||||
|
|
||||||
return offset
|
return offset
|
||||||
end
|
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)
|
function parse_op(tvb, pinfo, tree, offset, op)
|
||||||
tree:add(op_name_field, tvb(offset, 8), op_table[op])
|
tree:add(op_name_field, tvb(offset, 8), op_table[op])
|
||||||
offset = offset + 8
|
offset = offset + 8
|
||||||
|
@ -191,7 +211,10 @@ function nix_proto.dissector(tvb, pinfo, tree)
|
||||||
offset = offset + 8
|
offset = offset + 8
|
||||||
|
|
||||||
local first_word = tvb(offset, 4):le_uint()
|
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)
|
offset = parse_client_hello(tvb, pinfo, subtree, offset)
|
||||||
elseif first_word == 0x6478696f then
|
elseif first_word == 0x6478696f then
|
||||||
offset = parse_daemon_hello(tvb, pinfo, subtree, offset)
|
offset = parse_daemon_hello(tvb, pinfo, subtree, offset)
|
||||||
|
|
Loading…
Reference in a new issue