Huge thanks to our Platinum Members Endace and LiveAction,
and our Silver Member Veeam, for supporting the Wireshark Foundation and project.

Ethereal-dev: [Ethereal-dev] Problem with val_to_str

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: "Chua Wee Leng" <chuawl.SES@xxxxxxxxxxxxx>
Date: Thu, 3 Jul 2003 16:39:44 +0800
I encounter a problem with val_to_str function while doing my plugin. I'm
surrently using ethereal-0.9.11 on RedHat Linux 7.3.
The following is part of my code of protocol dis in packet-dis.c

#define ENTITY_STATE_PDU        	1
#define FIRE_PDU	        	2
#define DETONATION_PDU	3
#define START_RESUME_PDU      13
#define STOP_FREEZE_PDU         	14
#define ACKNOWLEDGE_PDU       15
#define SET_DATA_PDU        	19
#define DATA_PDU        	20

	const value_string pdu[] = {
                                {ENTITY_STATE_PDU,     
	"ENTITY_STATE_PDU"},
                                {FIRE_PDU,	        	"FIRE_PDU"},
                                {DETONATION_PDU,		"DETONATION_PDU"},
                                {START_RESUME_PDU,     
	"START_RESUME_PDU"},
                                {STOP_FREEZE_PDU,       	"STOP_FREEZE_PDU"},
                                {ACKNOWLEDGE_PDU,       	"ACKNOWLEDGE_PDU"},
	        };

        static const value_string vs_Entity_Kind[] = {
                                {1,   "Platform"},
                                {2,   "Munition"},
                                {4,   "Environment"},
                                {9,   "Sensor/Emitter"},
	      		};
.
.
.
.
.
        if (tree) {
                /* Adding DIS item and subtree */
                dis_ti = proto_tree_add_item(tree, proto_dis, tvb, 0,
tvb_length(tvb), FALSE);
                dis_tree = proto_item_add_subtree(dis_ti, ett_dis);	
               proto_tree_add_uint_format (dis_tree, hf_pdu_type, tvb,
offset, 1 , pdu_type,
                                           "PDU TYPE : %s", val_to_str
(pdu_type, pdu, "Unknown (%u)")); //here I try to get string value of
pdu_type from value_string pdu
.
.
.
.
.
void
proto_register_dis(void)
{
	static hf_register_info hf[] = {
                { &hf_protocol_version, {
                      "Protocol Version", "dis.protocol_version", FT_UINT8,
BASE_DEC, NULL, 0x0, "", HFILL}},
                { &hf_exercise_id, {
                      "Exercise ID", "dis.exercise_id", FT_UINT8, BASE_DEC,
NULL, 0x0, "", HFILL}},
                { &hf_pdu_type, {
                      "PDU Type", "dis.pdu_type", FT_UINT8, BASE_DEC, NULL,
0x0, "", HFILL}},  // Here it define hf_pdu_type
                { &hf_protocol_family, {
                      "Protocol Family", "dis.protocol_family", FT_UINT8,
BASE_DEC, NULL, 0x0, "", HFILL}},
.


What had happen is when there is a unknown pdy_type value, I will take a
value 9 as an example. Looking at the valid value under string_value pdu, 9
is not inside the array of pdu, logically the decode value should be
"Unknown (%u)". From what I understand  val_to_str (pdu_type, pdu, "Unknown
(%u)")),  if pdu_type value is not found under pdu array, the third
argument of val_to_str will be displayed. But for my case here is show
"Sensor/Emitter" from the value_string array of vs_Entity_Kind[], as it is
the the next set of value_string array where value 9 can be found. In this
case, my plugin is not decode the right value for my application which it
leads to incorrect info to be display. 

I would like to know that is this an common error in val_to_str package. Is
there any solution to counter this problem.
Thanks


_______________________________________________________________
Reduce the paperwork in your company with JustLogin's office collaborative
applications at http://www.justlogin.com