Minor cleanup mostly related to proto_reg_handoff
[obnox/wireshark/wip.git] / asn1 / qsig / packet-qsig-template.c
index cd1aeb3c4ea56c0219577ac3b2e71a75e0c7a841..0cb0a96937be5007154c67157d0b91c3b5ff1e3f 100644 (file)
@@ -307,15 +307,16 @@ static int *hf_qsig_ie_type_arr[] = {
 /* Initialize the subtree pointers */
 static gint ett_qsig = -1;
 static gint ett_qsig_ie = -1;
+static gint ett_qsig_unknown_extension = -1;
 #include "packet-qsig-ett.c"
 
 /* Preferences */
 
-/* Subdissectors */
-static dissector_handle_t data_handle = NULL; 
-
-/* Gloabl variables */
+/* Global variables */
+static const char *extension_oid = NULL;
 
+/* Dissector tables */
+static dissector_table_t extension_dissector_table;
 
 #include "packet-qsig-fn.c"
 
@@ -531,13 +532,14 @@ dissect_qsig_party_category_ie(tvbuff_t *tvb, int offset, packet_info *pinfo  _U
 static void
 dissect_qsig_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int codeset) {
   gint offset;
-  proto_item *ti, *ti_ie;
+  proto_item *ti, *ti_ie, *hidden_item;
   proto_tree *ie_tree;
   guint8 ie_type, ie_len;
 
   offset = 0;
 
-  ti = proto_tree_add_item_hidden(tree, proto_qsig, tvb, offset, -1, FALSE);
+  ti = proto_tree_add_item(tree, proto_qsig, tvb, offset, -1, FALSE);
+  PROTO_ITEM_SET_HIDDEN(ti);
 
   ie_type = tvb_get_guint8(tvb, offset);
   ie_len = tvb_get_guint8(tvb, offset + 1);
@@ -546,7 +548,8 @@ dissect_qsig_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int codeset
             val_to_str(ie_type, VALS(qsig_str_ie_type[codeset]), "unknown (0x%02X)"));
   ie_tree = proto_item_add_subtree(ti_ie, ett_qsig_ie); 
   proto_tree_add_item(ie_tree, *hf_qsig_ie_type_arr[codeset], tvb, offset, 1, FALSE);
-  proto_tree_add_item_hidden(ie_tree, hf_qsig_ie_type, tvb, offset, 1, FALSE);
+  hidden_item = proto_tree_add_item(ie_tree, hf_qsig_ie_type, tvb, offset, 1, FALSE);
+  PROTO_ITEM_SET_HIDDEN(hidden_item);
   proto_tree_add_item(ie_tree, hf_qsig_ie_len, tvb, offset + 1, 1, FALSE);
   offset += 2;
   if (tvb_length_remaining(tvb, offset) <= 0)
@@ -617,6 +620,7 @@ void proto_register_qsig(void) {
   static gint *ett[] = {
     &ett_qsig,
     &ett_qsig_ie,
+    &ett_qsig_unknown_extension,
 #include "packet-qsig-ettarr.c"
   };
 
@@ -627,18 +631,21 @@ void proto_register_qsig(void) {
   proto_register_field_array(proto_qsig, hf, array_length(hf));
   proto_register_subtree_array(ett, array_length(ett));
 
+  /* Register dissector tables */
+  extension_dissector_table = register_dissector_table("qsig.ext", "QSIG Extension", FT_STRING, BASE_NONE);
 }
 
 
 /*--- proto_reg_handoff_qsig ------------------------------------------------*/
 void proto_reg_handoff_qsig(void) {
   int i;
+  dissector_handle_t q931_handle; 
   dissector_handle_t qsig_arg_handle;
   dissector_handle_t qsig_res_handle;
   dissector_handle_t qsig_err_handle;
   dissector_handle_t qsig_ie_handle;
 
-  data_handle = find_dissector("data");
+  q931_handle = find_dissector("q931");
 
   qsig_arg_handle = new_create_dissector_handle(dissect_qsig_arg, proto_qsig);
   qsig_res_handle = new_create_dissector_handle(dissect_qsig_res, proto_qsig);
@@ -659,6 +666,9 @@ void proto_reg_handoff_qsig(void) {
   /* SSIG-BC - Party category */
   dissector_add("q931.ie", CS5 | QSIG_IE_PARTY_CATEGORY, qsig_ie_handle);
 
+  /* RFC 3204, 3.2 QSIG Media Type */
+  dissector_add_string("media_type", "application/qsig", q931_handle);
+
 }
 
 /*---------------------------------------------------------------------------*/