From 88eaebaedf2e19c493ea696f633463e4f2a9a757 Mon Sep 17 00:00:00 2001 From: Jakub Zawadzki Date: Sat, 17 Aug 2013 08:59:19 +0000 Subject: Convert few more dissectors to new proto API. svn path=/trunk/; revision=51403 --- epan/dissectors/packet-jpeg.c | 330 ++++++++++++++++++++++-------------------- 1 file changed, 177 insertions(+), 153 deletions(-) (limited to 'epan/dissectors/packet-jpeg.c') diff --git a/epan/dissectors/packet-jpeg.c b/epan/dissectors/packet-jpeg.c index 11d3fd3fa5..b8f639f4dd 100644 --- a/epan/dissectors/packet-jpeg.c +++ b/epan/dissectors/packet-jpeg.c @@ -28,6 +28,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define NEW_PROTO_TREE_API + #include "config.h" #include @@ -37,30 +39,140 @@ #include "packet-ber.h" -/* JPEG header fields */ -static int hf_rtp_jpeg_main_hdr = -1; -static int hf_rtp_jpeg_main_hdr_ts = -1; -static int hf_rtp_jpeg_main_hdr_offs = -1; -static int hf_rtp_jpeg_main_hdr_type = -1; -static int hf_rtp_jpeg_main_hdr_q = -1; -static int hf_rtp_jpeg_main_hdr_width = -1; -static int hf_rtp_jpeg_main_hdr_height = -1; +static dissector_handle_t jpeg_handle; + +static header_field_info *hfi_jpeg = NULL; + +#define JPEG_HFI_INIT HFI_INIT(proto_jpeg) + +/* JPEG header fields */ +static header_field_info hfi_rtp_jpeg_main_hdr JPEG_HFI_INIT = { + "Main Header", + "jpeg.main_hdr", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_main_hdr_ts JPEG_HFI_INIT = { + "Type Specific", + "jpeg.main_hdr.ts", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_main_hdr_offs JPEG_HFI_INIT = { + "Fragment Offset", + "jpeg.main_hdr.offset", + FT_UINT24, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_main_hdr_type JPEG_HFI_INIT = { + "Type", + "jpeg.main_hdr.type", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_main_hdr_q JPEG_HFI_INIT = { + "Q", + "jpeg.main_hdr.q", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_main_hdr_width JPEG_HFI_INIT = { + "Width", + "jpeg.main_hdr.width", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_main_hdr_height JPEG_HFI_INIT = { + "Height", + "jpeg.main_hdr.height", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_restart_hdr JPEG_HFI_INIT = { + "Restart Marker Header", + "jpeg.restart_hdr", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_restart_hdr_interval JPEG_HFI_INIT = { + "Restart Interval", + "jpeg.restart_hdr.interval", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL +}; -static int hf_rtp_jpeg_restart_hdr = -1; -static int hf_rtp_jpeg_restart_hdr_interval = -1; -static int hf_rtp_jpeg_restart_hdr_f = -1; -static int hf_rtp_jpeg_restart_hdr_l = -1; -static int hf_rtp_jpeg_restart_hdr_count = -1; +static header_field_info hfi_rtp_jpeg_restart_hdr_f JPEG_HFI_INIT = { + "F", + "jpeg.restart_hdr.f", + FT_UINT16, BASE_DEC, NULL, 0x8000, + NULL, HFILL +}; -static int hf_rtp_jpeg_qtable_hdr = -1; -static int hf_rtp_jpeg_qtable_hdr_mbz = -1; -static int hf_rtp_jpeg_qtable_hdr_prec = -1; -static int hf_rtp_jpeg_qtable_hdr_length = -1; -static int hf_rtp_jpeg_qtable_hdr_data = -1; +static header_field_info hfi_rtp_jpeg_restart_hdr_l JPEG_HFI_INIT = { + "L", + "jpeg.restart_hdr.l", + FT_UINT16, BASE_DEC, NULL, 0x4000, + NULL, HFILL +}; -static int hf_rtp_jpeg_payload = -1; +static header_field_info hfi_rtp_jpeg_restart_hdr_count JPEG_HFI_INIT = { + "Restart Count", + "jpeg.restart_hdr.count", + FT_UINT16, BASE_DEC, NULL, 0x3FFF, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_qtable_hdr JPEG_HFI_INIT = { + "Quantization Table Header", + "jpeg.qtable_hdr", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_qtable_hdr_mbz JPEG_HFI_INIT = { + "MBZ", + "jpeg.qtable_hdr.mbz", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_qtable_hdr_prec JPEG_HFI_INIT = { + "Precision", + "jpeg.qtable_hdr.precision", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_qtable_hdr_length JPEG_HFI_INIT = { + "Length", + "jpeg.qtable_hdr.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL +}; + +static header_field_info hfi_rtp_jpeg_qtable_hdr_data JPEG_HFI_INIT = { + "Quantization Table Data", + "jpeg.qtable_hdr.data", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL +}; + + +static header_field_info hfi_rtp_jpeg_payload JPEG_HFI_INIT = { + "Payload", + "jpeg.payload", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL +}; -static int proto_jpeg = -1; /* JPEG fields defining a sub tree */ static gint ett_jpeg = -1; @@ -87,60 +199,60 @@ dissect_jpeg( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) col_set_str(pinfo->cinfo, COL_INFO, "JPEG message"); if ( tree ) { - ti = proto_tree_add_item( tree, proto_jpeg, tvb, offset, -1, ENC_NA ); + ti = proto_tree_add_item( tree, hfi_jpeg, tvb, offset, -1, ENC_NA ); jpeg_tree = proto_item_add_subtree( ti, ett_jpeg ); - ti = proto_tree_add_item(jpeg_tree, hf_rtp_jpeg_main_hdr, tvb, offset, 8, ENC_NA); + ti = proto_tree_add_item(jpeg_tree, &hfi_rtp_jpeg_main_hdr, tvb, offset, 8, ENC_NA); main_hdr_tree = proto_item_add_subtree(ti, ett_jpeg); - proto_tree_add_item(main_hdr_tree, hf_rtp_jpeg_main_hdr_ts, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(main_hdr_tree, &hfi_rtp_jpeg_main_hdr_ts, tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; - proto_tree_add_item(main_hdr_tree, hf_rtp_jpeg_main_hdr_offs, tvb, offset, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(main_hdr_tree, &hfi_rtp_jpeg_main_hdr_offs, tvb, offset, 3, ENC_BIG_ENDIAN); fragment_offset = tvb_get_ntoh24(tvb, offset); offset += 3; - proto_tree_add_item(main_hdr_tree, hf_rtp_jpeg_main_hdr_type, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(main_hdr_tree, &hfi_rtp_jpeg_main_hdr_type, tvb, offset, 1, ENC_BIG_ENDIAN); type = tvb_get_guint8(tvb, offset); offset += 1; - proto_tree_add_item(main_hdr_tree, hf_rtp_jpeg_main_hdr_q, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(main_hdr_tree, &hfi_rtp_jpeg_main_hdr_q, tvb, offset, 1, ENC_BIG_ENDIAN); q = tvb_get_guint8(tvb, offset); offset += 1; w = tvb_get_guint8(tvb, offset) * 8; - proto_tree_add_uint(main_hdr_tree, hf_rtp_jpeg_main_hdr_width, tvb, offset, 1, w); + proto_tree_add_uint(main_hdr_tree, &hfi_rtp_jpeg_main_hdr_width, tvb, offset, 1, w); offset += 1; h = tvb_get_guint8(tvb, offset) * 8; - proto_tree_add_uint(main_hdr_tree, hf_rtp_jpeg_main_hdr_height, tvb, offset, 1, h); + proto_tree_add_uint(main_hdr_tree, &hfi_rtp_jpeg_main_hdr_height, tvb, offset, 1, h); offset += 1; if (type >= 64 && type <= 127) { - ti = proto_tree_add_item(jpeg_tree, hf_rtp_jpeg_restart_hdr, tvb, offset, 4, ENC_NA); + ti = proto_tree_add_item(jpeg_tree, &hfi_rtp_jpeg_restart_hdr, tvb, offset, 4, ENC_NA); restart_hdr_tree = proto_item_add_subtree(ti, ett_jpeg); - proto_tree_add_item(restart_hdr_tree, hf_rtp_jpeg_restart_hdr_interval, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(restart_hdr_tree, &hfi_rtp_jpeg_restart_hdr_interval, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - proto_tree_add_item(restart_hdr_tree, hf_rtp_jpeg_restart_hdr_f, tvb, offset, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(restart_hdr_tree, hf_rtp_jpeg_restart_hdr_l, tvb, offset, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(restart_hdr_tree, hf_rtp_jpeg_restart_hdr_count, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(restart_hdr_tree, &hfi_rtp_jpeg_restart_hdr_f, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(restart_hdr_tree, &hfi_rtp_jpeg_restart_hdr_l, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(restart_hdr_tree, &hfi_rtp_jpeg_restart_hdr_count, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; } if (q >= 128 && fragment_offset == 0) { - ti = proto_tree_add_item(jpeg_tree, hf_rtp_jpeg_qtable_hdr, tvb, offset, -1, ENC_NA); + ti = proto_tree_add_item(jpeg_tree, &hfi_rtp_jpeg_qtable_hdr, tvb, offset, -1, ENC_NA); qtable_hdr_tree = proto_item_add_subtree(ti, ett_jpeg); - proto_tree_add_item(qtable_hdr_tree, hf_rtp_jpeg_qtable_hdr_mbz, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(qtable_hdr_tree, &hfi_rtp_jpeg_qtable_hdr_mbz, tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; - proto_tree_add_item(qtable_hdr_tree, hf_rtp_jpeg_qtable_hdr_prec, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(qtable_hdr_tree, &hfi_rtp_jpeg_qtable_hdr_prec, tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; - proto_tree_add_item(qtable_hdr_tree, hf_rtp_jpeg_qtable_hdr_length, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(qtable_hdr_tree, &hfi_rtp_jpeg_qtable_hdr_length, tvb, offset, 2, ENC_BIG_ENDIAN); len = tvb_get_ntohs(tvb, offset); offset += 2; if (len > 0) { - proto_tree_add_item(qtable_hdr_tree, hf_rtp_jpeg_qtable_hdr_data, tvb, offset, len, ENC_NA); + proto_tree_add_item(qtable_hdr_tree, &hfi_rtp_jpeg_qtable_hdr_data, tvb, offset, len, ENC_NA); offset += len; } proto_item_set_len(ti, len + 4); } /* The rest of the packet is the JPEG data */ - proto_tree_add_item( jpeg_tree, hf_rtp_jpeg_payload, tvb, offset, -1, ENC_NA ); + proto_tree_add_item( jpeg_tree, &hfi_rtp_jpeg_payload, tvb, offset, -1, ENC_NA ); } } @@ -148,116 +260,26 @@ void proto_register_jpeg(void) { - static hf_register_info hf[] = + static header_field_info *hfi[] = { - { &hf_rtp_jpeg_main_hdr, { - "Main Header", - "jpeg.main_hdr", - FT_NONE, BASE_NONE, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_main_hdr_ts, { - "Type Specific", - "jpeg.main_hdr.ts", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_main_hdr_offs, { - "Fragment Offset", - "jpeg.main_hdr.offset", - FT_UINT24, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_main_hdr_type, { - "Type", - "jpeg.main_hdr.type", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_main_hdr_q, { - "Q", - "jpeg.main_hdr.q", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_main_hdr_width, { - "Width", - "jpeg.main_hdr.width", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_main_hdr_height, { - "Height", - "jpeg.main_hdr.height", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_restart_hdr, { - "Restart Marker Header", - "jpeg.restart_hdr", - FT_NONE, BASE_NONE, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_restart_hdr_interval, { - "Restart Interval", - "jpeg.restart_hdr.interval", - FT_UINT16, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_restart_hdr_f, { - "F", - "jpeg.restart_hdr.f", - FT_UINT16, BASE_DEC, NULL, 0x8000, - NULL, HFILL - }}, - { &hf_rtp_jpeg_restart_hdr_l, { - "L", - "jpeg.restart_hdr.l", - FT_UINT16, BASE_DEC, NULL, 0x4000, - NULL, HFILL - }}, - { &hf_rtp_jpeg_restart_hdr_count, { - "Restart Count", - "jpeg.restart_hdr.count", - FT_UINT16, BASE_DEC, NULL, 0x3FFF, - NULL, HFILL - }}, - { &hf_rtp_jpeg_qtable_hdr, { - "Quantization Table Header", - "jpeg.qtable_hdr", - FT_NONE, BASE_NONE, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_qtable_hdr_mbz, { - "MBZ", - "jpeg.qtable_hdr.mbz", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_qtable_hdr_prec, { - "Precision", - "jpeg.qtable_hdr.precision", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_qtable_hdr_length, { - "Length", - "jpeg.qtable_hdr.length", - FT_UINT16, BASE_DEC, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_qtable_hdr_data, { - "Quantization Table Data", - "jpeg.qtable_hdr.data", - FT_BYTES, BASE_NONE, NULL, 0, - NULL, HFILL - }}, - { &hf_rtp_jpeg_payload, { - "Payload", - "jpeg.payload", - FT_BYTES, BASE_NONE, NULL, 0, - NULL, HFILL - }}, + &hfi_rtp_jpeg_main_hdr, + &hfi_rtp_jpeg_main_hdr_ts, + &hfi_rtp_jpeg_main_hdr_offs, + &hfi_rtp_jpeg_main_hdr_type, + &hfi_rtp_jpeg_main_hdr_q, + &hfi_rtp_jpeg_main_hdr_width, + &hfi_rtp_jpeg_main_hdr_height, + &hfi_rtp_jpeg_restart_hdr, + &hfi_rtp_jpeg_restart_hdr_interval, + &hfi_rtp_jpeg_restart_hdr_f, + &hfi_rtp_jpeg_restart_hdr_l, + &hfi_rtp_jpeg_restart_hdr_count, + &hfi_rtp_jpeg_qtable_hdr, + &hfi_rtp_jpeg_qtable_hdr_mbz, + &hfi_rtp_jpeg_qtable_hdr_prec, + &hfi_rtp_jpeg_qtable_hdr_length, + &hfi_rtp_jpeg_qtable_hdr_data, + &hfi_rtp_jpeg_payload, }; static gint *ett[] = @@ -265,20 +287,22 @@ proto_register_jpeg(void) &ett_jpeg, }; + int proto_jpeg; proto_jpeg = proto_register_protocol("RFC 2435 JPEG","JPEG","jpeg"); - proto_register_field_array(proto_jpeg, hf, array_length(hf)); + hfi_jpeg = proto_registrar_get_nth(proto_jpeg); + + proto_register_fields(proto_jpeg, hfi, array_length(hfi)); proto_register_subtree_array(ett, array_length(ett)); + jpeg_handle = create_dissector_handle(dissect_jpeg, proto_jpeg); + /* RFC 2798 */ - register_ber_oid_dissector("0.9.2342.19200300.100.1.60", dissect_jpeg, proto_jpeg, "jpegPhoto"); + register_ber_oid_dissector_handle("0.9.2342.19200300.100.1.60", jpeg_handle, proto_jpeg, "jpegPhoto"); } void proto_reg_handoff_jpeg(void) { - dissector_handle_t jpeg_handle; - - jpeg_handle = create_dissector_handle(dissect_jpeg, proto_jpeg); dissector_add_uint("rtp.pt", PT_JPEG, jpeg_handle); } -- cgit v1.2.3