fix bug in snmp.variable_oid subdissector calling and call them at the end of snmp...
authorkukosa <kukosa@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 28 Aug 2007 07:59:35 +0000 (07:59 +0000)
committerkukosa <kukosa@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 28 Aug 2007 07:59:35 +0000 (07:59 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@22701 f5534014-38df-0310-8fa8-9805f1628bb7

asn1/snmp/packet-snmp-template.c
epan/dissectors/packet-snmp.c

index 2bd549286e7cdde5017d3a4cba5d2c22cbc222b1..b57fca3d81fd0136cf3f7551c683d5492f3ae0bc 100644 (file)
@@ -109,6 +109,7 @@ static int proto_snmp = -1;
 static int proto_smux = -1;
 
 static gboolean display_oid = TRUE;
+static gboolean snmp_var_in_tree = TRUE; 
 
 static gboolean snmp_usm_auth_md5(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
 static gboolean snmp_usm_auth_sha1(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
@@ -387,7 +388,6 @@ extern int dissect_snmp_VarBind(gboolean implicit_tag _U_,
        int hfid = -1;
        int min_len = 0, max_len = 0;
        gboolean oid_info_is_ok;
-       dissector_handle_t subdissector = NULL;
        const char* oid_string;
        seq_offset = offset;
        
@@ -500,7 +500,6 @@ extern int dissect_snmp_VarBind(gboolean implicit_tag _U_,
 
        if (oid_matched+oid_left) {
                oid_string = oid_subid2string(subids,oid_matched+oid_left);
-               subdissector = dissector_get_string_handle(value_sub_dissectors_table, oid_string);
        } else {
                oid_string = ".";
        }
@@ -660,10 +659,10 @@ extern int dissect_snmp_VarBind(gboolean implicit_tag _U_,
        }
 indexing_done:
        
-       if (value_len > 0 && subdissector) {
+       if (value_len > 0 && oid_string) {
                tvbuff_t* sub_tvb = tvb_new_subset(tvb, value_offset, value_len, value_len);
-               
-               call_dissector(subdissector, tvb, actx->pinfo, pt_varbind);
+
+               next_tvb_add_string(&var_list, sub_tvb, (snmp_var_in_tree) ? pt_varbind : NULL, value_sub_dissectors_table, oid_string);
                
                return seq_offset + seq_len;
        }
@@ -1922,7 +1921,6 @@ void proto_register_snmp(void) {
                &display_oid);
 
        prefs_register_obsolete_preference(snmp_module, "mib_modules");
-       prefs_register_obsolete_preference(snmp_module, "var_in_tree");
        prefs_register_obsolete_preference(snmp_module, "users_file");
 
        prefs_register_bool_preference(snmp_module, "desegment",
@@ -1931,6 +1929,10 @@ void proto_register_snmp(void) {
            " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
            &snmp_desegment);
 
+  prefs_register_bool_preference(snmp_module, "var_in_tree",
+               "Display dissected variables inside SNMP tree",
+               "ON - display dissected variables inside SNMP tree, OFF - display dissected variables in root tree after SNMP",
+               &snmp_var_in_tree); 
 
   prefs_register_uat_preference(snmp_module, "users_table",
                                                                "Users Table",
index 7154747736d7b3aabd4e529aaa489f98783d874b..260fcb92809effd816f604f42cbeb13bcaf582fa 100644 (file)
@@ -117,6 +117,7 @@ static int proto_snmp = -1;
 static int proto_smux = -1;
 
 static gboolean display_oid = TRUE;
+static gboolean snmp_var_in_tree = TRUE; 
 
 static gboolean snmp_usm_auth_md5(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
 static gboolean snmp_usm_auth_sha1(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
@@ -287,7 +288,7 @@ static int hf_snmp_priority = -1;                 /* INTEGER_M1_2147483647 */
 static int hf_snmp_operation = -1;                /* T_operation */
 
 /*--- End of included file: packet-snmp-hf.c ---*/
-#line 213 "packet-snmp-template.c"
+#line 214 "packet-snmp-template.c"
 
 static int hf_smux_version = -1;
 static int hf_smux_pdutype = -1;
@@ -329,7 +330,7 @@ static gint ett_snmp_SimpleOpen = -1;
 static gint ett_snmp_RReqPDU = -1;
 
 /*--- End of included file: packet-snmp-ett.c ---*/
-#line 231 "packet-snmp-template.c"
+#line 232 "packet-snmp-template.c"
 
 static const true_false_string auth_flags = {
        "OK",
@@ -489,7 +490,6 @@ extern int dissect_snmp_VarBind(gboolean implicit_tag _U_,
        int hfid = -1;
        int min_len = 0, max_len = 0;
        gboolean oid_info_is_ok;
-       dissector_handle_t subdissector = NULL;
        const char* oid_string;
        seq_offset = offset;
        
@@ -602,7 +602,6 @@ extern int dissect_snmp_VarBind(gboolean implicit_tag _U_,
 
        if (oid_matched+oid_left) {
                oid_string = oid_subid2string(subids,oid_matched+oid_left);
-               subdissector = dissector_get_string_handle(value_sub_dissectors_table, oid_string);
        } else {
                oid_string = ".";
        }
@@ -762,10 +761,10 @@ extern int dissect_snmp_VarBind(gboolean implicit_tag _U_,
        }
 indexing_done:
        
-       if (value_len > 0 && subdissector) {
+       if (value_len > 0 && oid_string) {
                tvbuff_t* sub_tvb = tvb_new_subset(tvb, value_offset, value_len, value_len);
-               
-               call_dissector(subdissector, tvb, actx->pinfo, pt_varbind);
+
+               next_tvb_add_string(&var_list, sub_tvb, (snmp_var_in_tree) ? pt_varbind : NULL, value_sub_dissectors_table, oid_string);
                
                return seq_offset + seq_len;
        }
@@ -2793,7 +2792,7 @@ static void dissect_SMUX_PDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro
 
 
 /*--- End of included file: packet-snmp-fn.c ---*/
-#line 1358 "packet-snmp-template.c"
+#line 1357 "packet-snmp-template.c"
 
 
 guint
@@ -3569,7 +3568,7 @@ void proto_register_snmp(void) {
         "snmp.T_operation", HFILL }},
 
 /*--- End of included file: packet-snmp-hfarr.c ---*/
-#line 1869 "packet-snmp-template.c"
+#line 1868 "packet-snmp-template.c"
   };
 
   /* List of subtrees */
@@ -3608,7 +3607,7 @@ void proto_register_snmp(void) {
     &ett_snmp_RReqPDU,
 
 /*--- End of included file: packet-snmp-ettarr.c ---*/
-#line 1884 "packet-snmp-template.c"
+#line 1883 "packet-snmp-template.c"
   };
   module_t *snmp_module;
   static uat_field_t users_fields[] = {
@@ -3650,7 +3649,6 @@ void proto_register_snmp(void) {
                &display_oid);
 
        prefs_register_obsolete_preference(snmp_module, "mib_modules");
-       prefs_register_obsolete_preference(snmp_module, "var_in_tree");
        prefs_register_obsolete_preference(snmp_module, "users_file");
 
        prefs_register_bool_preference(snmp_module, "desegment",
@@ -3659,6 +3657,10 @@ void proto_register_snmp(void) {
            " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
            &snmp_desegment);
 
+  prefs_register_bool_preference(snmp_module, "var_in_tree",
+               "Display dissected variables inside SNMP tree",
+               "ON - display dissected variables inside SNMP tree, OFF - display dissected variables in root tree after SNMP",
+               &snmp_var_in_tree); 
 
   prefs_register_uat_preference(snmp_module, "users_table",
                                                                "Users Table",