Ethereal-dev: Re: [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: "Ronnie Sahlberg" <ronnie_sahlberg@xxxxxxxxxxxxxx>
Date: Thu, 3 Jul 2003 21:52:55 +1000
You must end the value_strings with a terminator field
 {0, NULL}
See below

----- Original Message -----
From: "Chua Wee Leng"
Sent: Thursday, July 03, 2003 6:39 PM
Subject: [Ethereal-dev] Problem with val_to_str


>
> 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"},
{0, NULL}
>         };
>
>         static const value_string vs_Entity_Kind[] = {
>                                 {1,   "Platform"},
>                                 {2,   "Munition"},
>                                 {4,   "Environment"},
>                                 {9,   "Sensor/Emitter"},
{0, NULL}
>       };
> .
> .
> .
> .
> .
>         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
>
> _______________________________________________
> Ethereal-dev mailing list
> Ethereal-dev@xxxxxxxxxxxx
> http://www.ethereal.com/mailman/listinfo/ethereal-dev