Use value_string_ext fcns to access certain value_string arrays.
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 29 Oct 2010 20:22:02 +0000 (20:22 +0000)
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 29 Oct 2010 20:22:02 +0000 (20:22 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@34692 f5534014-38df-0310-8fa8-9805f1628bb7

epan/dissectors/packet-smb.c
epan/dissectors/packet-smb.h
epan/dissectors/packet-smb2.c
epan/dissectors/packet-smb2.h
epan/libwireshark.def
gtk/smb2_stat.c
gtk/smb_stat.c
tap-smbstat.c

index ff7c355ab4993b4527300e5dbb8d5770e9eb9d80..393b1274ebc34634c7c6f77c55b1db6503911f06 100644 (file)
@@ -7843,7 +7843,7 @@ dissect_tree_connect_andx_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree
 #define NT_TRANS_QSD           6
 #define NT_TRANS_GET_USER_QUOTA        7
 #define NT_TRANS_SET_USER_QUOTA 8
-const value_string nt_cmd_vals[] = {
+static const value_string nt_cmd_vals[] = {
        {NT_TRANS_CREATE,               "NT CREATE"},
        {NT_TRANS_IOCTL,                "NT IOCTL"},
        {NT_TRANS_SSD,                  "NT SET SECURITY DESC"},
@@ -7855,6 +7855,8 @@ const value_string nt_cmd_vals[] = {
        {0, NULL}
 };
 
+value_string_ext nt_cmd_vals_ext = VALUE_STRING_EXT_INIT(nt_cmd_vals);
+
 static const value_string nt_ioctl_isfsctl_vals[] = {
        {0,     "Device IOCTL"},
        {1,     "FS control : FSCTL"},
@@ -8483,7 +8485,7 @@ dissect_nt_trans_data_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pro
                tvb_ensure_bytes_exist(tvb, offset, bc);
                item = proto_tree_add_text(parent_tree, tvb, offset, bc,
                                "%s Data",
-                               val_to_str(ntd->subcmd, nt_cmd_vals, "Unknown NT transaction (%u)"));
+                               val_to_str_ext(ntd->subcmd, &nt_cmd_vals_ext, "Unknown NT transaction (%u)"));
                tree = proto_item_add_subtree(item, ett_smb_nt_trans_data);
        }
 
@@ -8578,7 +8580,7 @@ dissect_nt_trans_param_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pr
        if(parent_tree){
                item = proto_tree_add_text(parent_tree, tvb, offset, len,
                                "%s Parameters",
-                               val_to_str(ntd->subcmd, nt_cmd_vals, "Unknown NT transaction (%u)"));
+                               val_to_str_ext(ntd->subcmd, &nt_cmd_vals_ext, "Unknown NT transaction (%u)"));
                tree = proto_item_add_subtree(item, ett_smb_nt_trans_param);
        }
 
@@ -8741,7 +8743,7 @@ dissect_nt_trans_setup_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pr
                tvb_ensure_bytes_exist(tvb, offset, len);
                item = proto_tree_add_text(parent_tree, tvb, offset, len,
                                "%s Setup",
-                               val_to_str(ntd->subcmd, nt_cmd_vals, "Unknown NT transaction (%u)"));
+                               val_to_str_ext(ntd->subcmd, &nt_cmd_vals_ext, "Unknown NT transaction (%u)"));
                tree = proto_item_add_subtree(item, ett_smb_nt_trans_setup);
        }
 
@@ -8925,7 +8927,7 @@ dissect_nt_transaction_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
                proto_tree_add_uint(tree, hf_smb_nt_trans_subcmd, tvb, offset, 2, subcmd);
                if(check_col(pinfo->cinfo, COL_INFO)){
                        col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
-                               val_to_str(subcmd, nt_cmd_vals, "<unknown>"));
+                               val_to_str_ext(subcmd, &nt_cmd_vals_ext, "<unknown>"));
                }
                ntd.subcmd = subcmd;
                if (!si->unidir && sip) {
@@ -9028,7 +9030,7 @@ dissect_nt_trans_data_response(tvbuff_t *tvb, packet_info *pinfo,
                if(nti != NULL){
                        item = proto_tree_add_text(parent_tree, tvb, offset, len,
                                "%s Data",
-                               val_to_str(nti->subcmd, nt_cmd_vals, "Unknown NT Transaction (%u)"));
+                               val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "Unknown NT Transaction (%u)"));
                } else {
                        /*
                         * We never saw the request to which this is a
@@ -9120,7 +9122,7 @@ dissect_nt_trans_param_response(tvbuff_t *tvb, packet_info *pinfo,
                if(nti != NULL){
                        item = proto_tree_add_text(parent_tree, tvb, offset, len,
                                "%s Parameters",
-                               val_to_str(nti->subcmd, nt_cmd_vals, "Unknown NT Transaction (%u)"));
+                               val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "Unknown NT Transaction (%u)"));
                } else {
                        /*
                         * We never saw the request to which this is a
@@ -9332,7 +9334,7 @@ dissect_nt_trans_setup_response(tvbuff_t *tvb, packet_info *pinfo,
                if(nti != NULL){
                        item = proto_tree_add_text(parent_tree, tvb, offset, len,
                                "%s Setup",
-                               val_to_str(nti->subcmd, nt_cmd_vals, "Unknown NT Transaction (%u)"));
+                               val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "Unknown NT Transaction (%u)"));
                } else {
                        /*
                         * We never saw the request to which this is a
@@ -9401,7 +9403,7 @@ dissect_nt_transaction_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
                proto_tree_add_uint(tree, hf_smb_nt_trans_subcmd, tvb, 0, 0, nti->subcmd);
                if(check_col(pinfo->cinfo, COL_INFO)){
                        col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
-                               val_to_str(nti->subcmd, nt_cmd_vals, "<unknown (%u)>"));
+                               val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "<unknown (%u)>"));
                }
        } else {
                proto_tree_add_text(tree, tvb, offset, 0,
@@ -10270,7 +10272,7 @@ dissect_nt_cancel_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
 
 
-const value_string trans2_cmd_vals[] = {
+static const value_string trans2_cmd_vals[] = {
        { 0x00,         "OPEN2" },
        { 0x01,         "FIND_FIRST2" },
        { 0x02,         "FIND_NEXT2" },
@@ -10286,11 +10288,14 @@ const value_string trans2_cmd_vals[] = {
        { 0x0C,         "FIND_NOTIFY_NEXT" },
        { 0x0D,         "CREATE_DIRECTORY" },
        { 0x0E,         "SESSION_SETUP" },
+        { 0x0F,         "Unknown (0x0f)" },  /* dummy so val_to_str_ext can do indexed lookup */
        { 0x10,         "GET_DFS_REFERRAL" },
        { 0x11,         "REPORT_DFS_INCONSISTENCY" },
        { 0,    NULL }
 };
 
+value_string_ext trans2_cmd_vals_ext = VALUE_STRING_EXT_INIT(trans2_cmd_vals);
+
 static const true_false_string tfs_tf_dtid = {
        "Also DISCONNECT TID",
        "Do NOT disconnect TID"
@@ -10706,8 +10711,8 @@ dissect_transaction2_request_parameters(tvbuff_t *tvb, packet_info *pinfo,
                tvb_ensure_bytes_exist(tvb, offset, bc);
                item = proto_tree_add_text(parent_tree, tvb, offset, bc,
                                "%s Parameters",
-                               val_to_str(subcmd, trans2_cmd_vals,
-                                          "Unknown (0x%02x)"));
+                               val_to_str_ext(subcmd, &trans2_cmd_vals_ext,
+                                              "Unknown (0x%02x)"));
                tree = proto_item_add_subtree(item, ett_smb_transaction_params);
        }
 
@@ -13042,8 +13047,8 @@ dissect_transaction2_request_data(tvbuff_t *tvb, packet_info *pinfo,
                tvb_ensure_bytes_exist(tvb, offset, dc);
                item = proto_tree_add_text(parent_tree, tvb, offset, dc,
                                "%s Data",
-                               val_to_str(subcmd, trans2_cmd_vals,
-                                               "Unknown (0x%02x)"));
+                               val_to_str_ext(subcmd, &trans2_cmd_vals_ext,
+                                              "Unknown (0x%02x)"));
                tree = proto_item_add_subtree(item, ett_smb_transaction_data);
        }
 
@@ -13389,8 +13394,8 @@ dissect_transaction_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
                                    tvb, offset, 2, subcmd);
                                if (check_col(pinfo->cinfo, COL_INFO)) {
                                        col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
-                                           val_to_str(subcmd, trans2_cmd_vals,
-                                               "Unknown (0x%02x)"));
+                                           val_to_str_ext(subcmd, &trans2_cmd_vals_ext,
+                                                          "Unknown (0x%02x)"));
                                }
                                if (!si->unidir) {
                                        if(!pinfo->fd->flags.visited && si->sip){
@@ -15233,8 +15238,8 @@ dissect_transaction2_response_data(tvbuff_t *tvb, packet_info *pinfo,
                if (t2i != NULL && t2i->subcmd != -1) {
                        item = proto_tree_add_text(parent_tree, tvb, offset, dc,
                                "%s Data",
-                               val_to_str(t2i->subcmd, trans2_cmd_vals,
-                                       "Unknown (0x%02x)"));
+                               val_to_str_ext(t2i->subcmd, &trans2_cmd_vals_ext,
+                                              "Unknown (0x%02x)"));
                        tree = proto_item_add_subtree(item, ett_smb_transaction_data);
                } else {
                        item = proto_tree_add_text(parent_tree, tvb, offset, dc,
@@ -15408,8 +15413,8 @@ dissect_transaction2_response_parameters(tvbuff_t *tvb, packet_info *pinfo, prot
                if (t2i != NULL && t2i->subcmd != -1) {
                        item = proto_tree_add_text(parent_tree, tvb, offset, pc,
                                "%s Parameters",
-                               val_to_str(t2i->subcmd, trans2_cmd_vals,
-                                               "Unknown (0x%02x)"));
+                               val_to_str_ext(t2i->subcmd, &trans2_cmd_vals_ext,
+                                              "Unknown (0x%02x)"));
                        tree = proto_item_add_subtree(item, ett_smb_transaction_params);
                } else {
                        item = proto_tree_add_text(parent_tree, tvb, offset, pc,
@@ -15722,9 +15727,9 @@ dissect_transaction_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *
 
                                if (t2i && check_col(pinfo->cinfo, COL_INFO)) {
                                        col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
-                                               val_to_str(t2i->subcmd,
-                                                       trans2_cmd_vals,
-                                                       "<unknown (0x%02x)>"));
+                                               val_to_str_ext(t2i->subcmd,
+                                                              &trans2_cmd_vals_ext,
+                                                              "<unknown (0x%02x)>"));
                                }
                        }
                }
@@ -16385,8 +16390,10 @@ dissect_smb_command(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *s
  * This means that this value_string array MUST always
  * 1, contain all entries 0x00 to 0xff
  * 2, all entries must be in order.
+ * Note: This value_string array can also be accessed directly via the use of value_string_ext
+ * ToDo?: use val_to_str_ext instead of decode_smb_name() ?
  */
-const value_string smb_cmd_vals[] = {
+static const value_string smb_cmd_vals[] = {
   { 0x00, "Create Directory" },
   { 0x01, "Delete Directory" },
   { 0x02, "Open" },
@@ -16646,6 +16653,8 @@ const value_string smb_cmd_vals[] = {
   { 0x00, NULL },
 };
 
+value_string_ext smb_cmd_vals_ext = VALUE_STRING_EXT_INIT(smb_cmd_vals);
+
 static const char *decode_smb_name(guint8 cmd)
 {
   return(smb_cmd_vals[cmd].strptr);
@@ -17490,16 +17499,16 @@ proto_register_smb(void)
 {
        static hf_register_info hf[] = {
        { &hf_smb_cmd,
-               { "SMB Command", "smb.cmd", FT_UINT8, BASE_HEX,
-               VALS(smb_cmd_vals), 0x0, NULL, HFILL }},
+               { "SMB Command", "smb.cmd", FT_UINT8, BASE_HEX|BASE_EXT_STRING,
+               &smb_cmd_vals, 0x0, NULL, HFILL }},
 
        { &hf_smb_trans2_subcmd,
-               { "Subcommand", "smb.trans2.cmd", FT_UINT16, BASE_HEX,
-               VALS(trans2_cmd_vals), 0, "Subcommand for TRANSACTION2", HFILL }},
+               { "Subcommand", "smb.trans2.cmd", FT_UINT16, BASE_HEX|BASE_EXT_STRING,
+               &trans2_cmd_vals_ext, 0, "Subcommand for TRANSACTION2", HFILL }},
 
        { &hf_smb_nt_trans_subcmd,
-               { "Function", "smb.nt.function", FT_UINT16, BASE_DEC,
-               VALS(nt_cmd_vals), 0, "Function for NT Transaction", HFILL }},
+               { "Function", "smb.nt.function", FT_UINT16, BASE_DEC|BASE_EXT_STRING,
+               &nt_cmd_vals_ext, 0, "Function for NT Transaction", HFILL }},
 
        { &hf_smb_word_count,
                { "Word Count (WCT)", "smb.wct", FT_UINT8, BASE_DEC,
index 1b9e332d16e0b758e2502dd4b30adad5c26f71da..fdddacfd0eee232a2973fb33b848325e15854d7e 100644 (file)
 
 WS_VAR_IMPORT gboolean sid_name_snooping;
 
-/* SMB command codes, from the SNIA CIFS spec. With MSVC and a 
+/* SMB command codes, from the SNIA CIFS spec. With MSVC and a
  * libwireshark.dll, we need a special declaration.
  */
-WS_VAR_IMPORT const value_string smb_cmd_vals[];
-WS_VAR_IMPORT const value_string trans2_cmd_vals[];
-WS_VAR_IMPORT const value_string nt_cmd_vals[];
+WS_VAR_IMPORT value_string_ext smb_cmd_vals_ext;
+WS_VAR_IMPORT value_string_ext trans2_cmd_vals_ext;
+WS_VAR_IMPORT value_string_ext nt_cmd_vals_ext;
 
 
 #define SMB_COM_CREATE_DIRECTORY               0x00
index 0bdf987dd64113829c7bedb27555c7b63afa11af..629b90f04fccb1088e5a641206b204621e7f62fb 100644 (file)
@@ -4646,7 +4646,7 @@ dissect_smb2_break_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
 }
 
 /* names here are just until we find better names for these functions */
-const value_string smb2_cmd_vals[] = {
+static const value_string smb2_cmd_vals[] = {
   { 0x00, "NegotiateProtocol" },
   { 0x01, "SessionSetup" },
   { 0x02, "SessionLogoff" },
@@ -4905,6 +4905,9 @@ const value_string smb2_cmd_vals[] = {
   { 0xFF, "unknown-0xFF" },
   { 0x00, NULL },
 };
+
+value_string_ext smb2_cmd_vals_ext = VALUE_STRING_EXT_INIT(smb2_cmd_vals);
+
 static const char *decode_smb2_name(guint16 cmd)
 {
   if (cmd > 0xFF) return "unknown";
@@ -5616,8 +5619,8 @@ proto_register_smb2(void)
 {
        static hf_register_info hf[] = {
        { &hf_smb2_cmd,
-               { "Command", "smb2.cmd", FT_UINT16, BASE_DEC,
-               VALS(smb2_cmd_vals), 0, "SMB2 Command Opcode", HFILL }},
+               { "Command", "smb2.cmd", FT_UINT16, BASE_DEC|BASE_EXT_STRING,
+               &smb2_cmd_vals_ext, 0, "SMB2 Command Opcode", HFILL }},
        { &hf_smb2_response_to,
                { "Response to", "smb2.response_to", FT_FRAMENUM, BASE_NONE,
                NULL, 0, "This packet is a response to the packet in this frame", HFILL }},
index cf6e5206b8b37c635f71c14d09e3c2f75342a7bb..6648c6df25b5efc200da290b32f4856490f69a1c 100644 (file)
 #ifndef __PACKET_SMB2_H__
 #define __PACKET_SMB2_H__
 
-/* SMB2 command codes. With MSVC and a 
+/* SMB2 command codes. With MSVC and a
  * libwireshark.dll, we need a special declaration.
  */
-WS_VAR_IMPORT const value_string smb2_cmd_vals[];
+WS_VAR_IMPORT value_string_ext smb2_cmd_vals_ext;
 
 /* Structure to keep track of information specific to a single
  * SMB2 transaction. Here we store things we need to remember between
  * a specific request and a specific response.
- * 
+ *
  * There is no guarantee we will have this structure available for all
  * SMB2 packets so a dissector must check this pointer for NULL
  * before dereferencing it.
index bcc35e8c5d6f00b84598e24686fa9a0938b79bf8..75839a465acb9433d9a63373e127bd876cd90426 100644 (file)
@@ -654,7 +654,7 @@ nstime_set_zero
 nstime_sum
 nstime_to_msec
 nstime_to_sec
-nt_cmd_vals                     DATA
+nt_cmd_vals_ext                 DATA
 num_tree_types                  DATA
 oid_add
 oid_add_from_encoded
@@ -940,8 +940,8 @@ show_fragment_seq_tree
 show_fragment_tree
 sid_name_snooping               DATA
 sid_name_table                  DATA
-smb2_cmd_vals                   DATA
-smb_cmd_vals                    DATA
+smb2_cmd_vals_ext               DATA
+smb_cmd_vals_ext                DATA
 smb_fid_types                   DATA
 sminmpec_values_ext             DATA
 srtcp_add_address
@@ -1024,7 +1024,7 @@ timestamp_get_seconds_type
 timestamp_set_precision
 timestamp_set_type
 timestamp_set_seconds_type
-trans2_cmd_vals                 DATA
+trans2_cmd_vals_ext             DATA
 tree_is_expanded                DATA
 tvb_bytes_exist
 tvb_bytes_to_str
index 4dd41fcf15e1ad9da725aa3ce19a5aa82b53f70e..45b508f8741c6be695828b314771de515962c235 100644 (file)
@@ -172,7 +172,7 @@ gtk_smb2stat_init(const char *optarg, void *userdata _U_)
 
        init_srt_table(&ss->smb2_srt_table, 256, vbox, "smb2.cmd");
        for(i=0;i<256;i++){
-               init_srt_table_row(&ss->smb2_srt_table, i, val_to_str(i, smb2_cmd_vals, "Unknown(0x%02x)"));
+               init_srt_table_row(&ss->smb2_srt_table, i, val_to_str_ext(i, &smb2_cmd_vals_ext, "Unknown(0x%02x)"));
        }
 
 
index 6d3a7a74a5bc458d316e279a2f80267d7cedb55e..dfc21efba36e0f14df056c5d81a317245f3adab4 100644 (file)
@@ -194,7 +194,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_)
 
        init_srt_table(&ss->smb_srt_table, 256, vbox, "smb.cmd");
        for(i=0;i<256;i++){
-               init_srt_table_row(&ss->smb_srt_table, i, val_to_str(i, smb_cmd_vals, "Unknown(0x%02x)"));
+               init_srt_table_row(&ss->smb_srt_table, i, val_to_str_ext(i, &smb_cmd_vals_ext, "Unknown(0x%02x)"));
        }
 
 
@@ -202,7 +202,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_)
        gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
        init_srt_table(&ss->trans2_srt_table, 256, vbox, "smb.trans2.cmd");
        for(i=0;i<256;i++){
-               init_srt_table_row(&ss->trans2_srt_table, i, val_to_str(i, trans2_cmd_vals, "Unknown(0x%02x)"));
+               init_srt_table_row(&ss->trans2_srt_table, i, val_to_str_ext(i, &trans2_cmd_vals_ext, "Unknown(0x%02x)"));
        }
 
 
@@ -210,7 +210,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_)
        gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
        init_srt_table(&ss->nt_trans_srt_table, 256, vbox, "smb.nt.function");
        for(i=0;i<256;i++){
-               init_srt_table_row(&ss->nt_trans_srt_table, i, val_to_str(i, nt_cmd_vals, "Unknown(0x%02x)"));
+               init_srt_table_row(&ss->nt_trans_srt_table, i, val_to_str_ext(i, &nt_cmd_vals_ext, "Unknown(0x%02x)"));
        }
 
 
index cab82f38923e16dcc58100946e3c5ee196ec678e..a2d0d66cf197b7f4a5ba542172c37a16c732969d 100644 (file)
@@ -133,7 +133,7 @@ smbstat_draw(void *pss)
                }
 
                printf("%-25s %6d %3d.%05d %3d.%05d %3" G_GINT64_MODIFIER "u.%05" G_GINT64_MODIFIER "u\n",
-                       val_to_str(i, smb_cmd_vals, "Unknown (0x%02x)"),
+                       val_to_str_ext(i, &smb_cmd_vals_ext, "Unknown (0x%02x)"),
                        ss->proc[i].num,
                        (int)ss->proc[i].min.secs,ss->proc[i].min.nsecs/10000,
                        (int)ss->proc[i].max.secs,ss->proc[i].max.nsecs/10000,
@@ -159,7 +159,7 @@ smbstat_draw(void *pss)
                }
 
                printf("%-25s %6d %3d.%05d %3d.%05d %3" G_GINT64_MODIFIER "u.%05" G_GINT64_MODIFIER "u\n",
-                       val_to_str(i, trans2_cmd_vals, "Unknown (0x%02x)"),
+                       val_to_str_ext(i, &trans2_cmd_vals_ext, "Unknown (0x%02x)"),
                        ss->trans2[i].num,
                        (int)ss->trans2[i].min.secs,ss->trans2[i].min.nsecs/10000,
                        (int)ss->trans2[i].max.secs,ss->trans2[i].max.nsecs/10000,
@@ -185,7 +185,7 @@ smbstat_draw(void *pss)
                }
 
                printf("%-25s %6d %3d.%05d %3d.%05d %3" G_GINT64_MODIFIER "u.%05" G_GINT64_MODIFIER "u\n",
-                       val_to_str(i, nt_cmd_vals, "Unknown (0x%02x)"),
+                       val_to_str_ext(i, &nt_cmd_vals_ext, "Unknown (0x%02x)"),
                        ss->nt_trans[i].num,
                        (int)ss->nt_trans[i].min.secs,ss->nt_trans[i].min.nsecs/10000,
                        (int)ss->nt_trans[i].max.secs,ss->nt_trans[i].max.nsecs/10000,