Skip to content
Snippets Groups Projects
Commit 6f8cfc79 authored by Reinhold Kainhofer's avatar Reinhold Kainhofer
Browse files

magicolor wireshark plugin: Some more dissecting

parent 65ce06cf
No related branches found
No related tags found
No related merge requests found
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
static int proto_magicolor = -1; static int proto_magicolor = -1;
static gint ett_magicolor = -1; static gint ett_magicolor = -1;
static gint ett_argument = -1;
/* Variables for magicolor packets */ /* Variables for magicolor packets */
static int hf_magicolor_cmdtype = -1; static int hf_magicolor_cmdtype = -1;
...@@ -142,29 +143,51 @@ dissect_magicolor (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ...@@ -142,29 +143,51 @@ dissect_magicolor (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (cmdtype == 0x03) { if (cmdtype == 0x03) {
guint32 arglen = tvb_get_letohl (tvb, 2); guint32 arglen = tvb_get_letohl (tvb, 2);
col_add_fstr (pinfo->cinfo, COL_INFO, "Scanner cmd (%s), arglen=%d", col_add_fstr (pinfo->cinfo, COL_INFO, "Scanner cmd (%s), arglen=%d",
match_strval (command, scanner_commands), arglen); match_strval (command, scanner_commands), arglen);
proto_tree_add_item (magicolor_tree, hf_magicolor_arglen, tvb, offset, 4, ENC_LITTLE_ENDIAN); guint8 nritems = 0;
offset += 4; do {
proto_tree_add_item (magicolor_tree, hf_magicolor_arg, tvb, offset, arglen, ENC_LITTLE_ENDIAN); proto_item *argitem = NULL;
offset += arglen; proto_item *argtree = NULL;
switch (command) { arglen = tvb_get_letohl (tvb, offset);
case 0x08: if (arglen == 0) { /* Final 0x00000000 marker encountered */
case 0x09: proto_tree_add_item (magicolor_tree, hf_magicolor_final, tvb, offset, 4, ENC_LITTLE_ENDIAN);
case 0x0a: offset += 4;
case 0x0b: continue;
case 0x0c: } else {
case 0x0d: /* TODO: Somehow add the item number here */
case 0x0e: proto_tree_add_item (magicolor_tree, hf_magicolor_arglen, tvb, offset, 4, ENC_LITTLE_ENDIAN);
case 0x0f: offset += 4;
case 0x12: ++nritems;
case 0x10: }
break; /* TODO: Somehow add the item number here */
} argitem = proto_tree_add_item (magicolor_tree, hf_magicolor_arg, tvb, offset, arglen, ENC_LITTLE_ENDIAN);
proto_tree_add_item (magicolor_tree, hf_magicolor_final, tvb, offset, 4, ENC_LITTLE_ENDIAN); argtree = proto_item_add_subtree (argitem, ett_argument);
offset += 4; offset += arglen;
switch (command) {
case 0x08: /* start scan */
break;
case 0x09: /* poll for error */
break;
case 0x0a: /* stop scan / cleanup s*/
break;
case 0x0b: /* query image parameters */
break;
case 0x0c: /* scan settings */
break;
case 0x0d: /* get status */
break;
case 0x0e: /* read data */
break;
case 0x0f: /* unknown (get buttons?) */
break;
case 0x12: /* end of scan */
break;
case 0x10: /* Unknown: Set button wait */
break;
}
} while (arglen > 0);
/* TODO: Loop until we encounter a 0x00000000 arglen value, don't hardcode just one argument! */
/* return tvb_length(tvb); */ /* return tvb_length(tvb); */
return offset; return offset;
} }
...@@ -224,6 +247,70 @@ proto_register_magicolor(void) ...@@ -224,6 +247,70 @@ proto_register_magicolor(void)
NULL, 0x0, NULL, 0x0,
NULL, HFILL }, NULL, HFILL },
}, },
{ &hf_magicolor_expected_size,
{ "Expected data size", "magicolor.expected_size",
FT_UINT32, BASE_DEC_HEX,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_unknown,
{ "FIXME: UNKNOWN", "magicolor.unknown",
FT_BYTES, BASE_NONE,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_resolution,
{ "Scan resolution", "magicolor.resolution",
FT_UINT8, BASE_HEX,
VALS(strings_resolution), 0x0,
NULL, HFILL },
},
{ &hf_magicolor_color,
{ "Color type", "magicolor.color",
FT_UINT8, BASE_HEX,
VALS(strings_color), 0x0,
NULL, HFILL },
},
{ &hf_magicolor_brightness,
{ "Brightness (1-9)", "magicolor.brightnes",
FT_UINT8, BASE_DEX,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_xstart,
{ "X start", "magicolor.xstart",
FT_UINT16, BASE_DEC_HEX,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_ystart,
{ "X start", "magicolor.xstart",
FT_UINT16, BASE_DEC_HEX,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_xextent,
{ "X extent", "magicolor.xextent",
FT_UINT16, BASE_DEC_HEX,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_yextent,
{ "X extent", "magicolor.xextent",
FT_UINT16, BASE_DEC_HEX,
NULL, 0x0,
NULL, HFILL },
},
{ &hf_magicolor_source,
{ "Scan source", "magicolor.scansource",
FT_UINT8, BASE_HEX,
VALS(strings_scansource), 0x0,
NULL, HFILL },
},
}; };
static gint *ett_magicolor_arr[] = { /* protocol subtree array */ static gint *ett_magicolor_arr[] = { /* protocol subtree array */
&ett_magicolor &ett_magicolor
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment