diff options
-rw-r--r-- | packet-wap.c | 2 | ||||
-rw-r--r-- | packet-wsp.c | 87 | ||||
-rw-r--r-- | packet-wtls.c | 22 |
3 files changed, 67 insertions, 44 deletions
diff --git a/packet-wap.c b/packet-wap.c index a1ab508bb1..b46ed12749 100644 --- a/packet-wap.c +++ b/packet-wap.c @@ -57,13 +57,13 @@ tvb_get_guintvar (tvbuff_t *tvb, guint offset, guint *octetCount) #ifdef DEBUG fprintf (stderr, "dissect_wsp: Starting tvb_get_guintvar at offset %d, count=NULL\n", offset); #endif + /* counter = *octetCount; */ } else { #ifdef DEBUG fprintf (stderr, "dissect_wsp: Starting tvb_get_guintvar at offset %d, count=%d\n", offset, *octetCount); #endif - counter = *octetCount; } while (cont != 0) diff --git a/packet-wsp.c b/packet-wsp.c index f37ae5c40a..9dcf16b7fe 100644 --- a/packet-wsp.c +++ b/packet-wsp.c @@ -2,7 +2,7 @@ * * Routines to dissect WSP component of WAP traffic. * - * $Id: packet-wsp.c,v 1.18 2001/02/13 00:17:54 guy Exp $ + * $Id: packet-wsp.c,v 1.19 2001/02/19 21:02:33 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -818,7 +818,6 @@ add_header (proto_tree *tree, tvbuff_t *header_buff, tvbuff_t *value_buff) guint valueLen = tvb_reported_length (value_buff); guint peek = 0; struct timeval timeValue; - guint count = 0; guint value = 0; guint valueLength = 0; char valString[100]; @@ -883,8 +882,26 @@ add_header (proto_tree *tree, tvbuff_t *header_buff, tvbuff_t *value_buff) { offset++; - /* TODO: Need to read peek octets */ - value = 0x00; + switch (peek) + { + case 1: + value = tvb_get_guint8 (value_buff, offset); + break; + case 2: + value = tvb_get_ntohs (value_buff, offset); + break; + case 3: + value = tvb_get_ntoh24 (value_buff, offset); + break; + case 4: + value = tvb_get_ntohl (value_buff, offset); + break; + default: + /* TODO: Need to read peek octets */ + value = 0; + fprintf (stderr, "dissect_wsp: accept-charset size %d NYI\n", peek); + break; + } offset += peek; } valMatch = match_strval(value, vals_character_sets); @@ -897,22 +914,14 @@ add_header (proto_tree *tree, tvbuff_t *header_buff, tvbuff_t *value_buff) /* Any remaining data relates to Q-Value */ if (offset < valueLen) { - count = 0; - q_value = tvb_get_guintvar (value_buff, offset, &count); - if (count == 1) /* Two decimal quality factors */ - { - q_value -= 1; - q_value /= 100; - } - else if (count == 2) /* Three decimal quality factors */ - { - q_value -= 100; - q_value /= 1000; + peek = tvb_get_guintvar (value_buff, offset, NULL); + if (peek <= 100) { + peek = (peek - 1) * 10; } - else - { - fprintf (stderr, "dissect_wsp: Accept-Charset invalid Q-value %f\n", q_value); + else { + peek -= 100; } + q_value = peek/1000.0; } /* Build string including Q values if present */ @@ -920,7 +929,7 @@ add_header (proto_tree *tree, tvbuff_t *header_buff, tvbuff_t *value_buff) { if (valMatch == NULL) { - snprintf (valString, 100, "Unknown (%02X)", peek); + snprintf (valString, 100, "Unknown (%X)", peek); } else { @@ -929,15 +938,13 @@ add_header (proto_tree *tree, tvbuff_t *header_buff, tvbuff_t *value_buff) } else { - snprintf (valString, 100, "Unknown %d; Q=%5.3f", value, - q_value/1000.0); if (valMatch == NULL) { - snprintf (valString, 100, "Unknown (%02X)", peek); + snprintf (valString, 100, "Unknown (%X); Q=%5.3f", peek,q_value); } else { - snprintf (valString, 100, "%s", valMatch); + snprintf (valString, 100, "%s; Q=%5.3f", valMatch,q_value); } } @@ -1192,20 +1199,34 @@ add_header (proto_tree *tree, tvbuff_t *header_buff, tvbuff_t *value_buff) * by a 4-byte date value */ if (strncasecmp ("x-wap.tod", tvb_get_ptr (header_buff, 0, headerLen), 9) == 0) { - if (tvb_reported_length (value_buff) == 4) /* Probably a date value */ + peek = tvb_get_guint8 (value_buff,offset); + if (peek < 31) { - timeValue.tv_sec = tvb_get_ntohl (value_buff, 0); + timeValue.tv_usec = 0; + switch (peek) + { + case 1: + timeValue.tv_sec = tvb_get_guint8 (value_buff, 1); + break; + case 2: + timeValue.tv_sec = tvb_get_ntohs (value_buff, 1); + break; + case 3: + timeValue.tv_sec = tvb_get_ntoh24 (value_buff, 1); + break; + case 4: + timeValue.tv_sec = tvb_get_ntohl (value_buff, 1); + break; + default: + timeValue.tv_sec = 0; + fprintf (stderr, "dissect_wsp: X-WAP.TOD NYI\n"); + break; + } ti = proto_tree_add_time (tree, hf_wsp_header_x_wap_tod, header_buff, offset, headerLen, &timeValue); } - else if (tvb_reported_length (value_buff) == 5) /* Probably a date */ - { - add_date_value (value_buff, 0, tree, - hf_wsp_header_x_wap_tod, header_buff, offset, - headerLen, &timeValue, "X-Wap.Tod"); - } else - { - ti = proto_tree_add_text (tree, header_buff, 0, headerLen, "%s: %s", tvb_get_ptr (header_buff, 0, headerLen), tvb_get_ptr (value_buff, 0, valueLen)); + { + fprintf (stderr, "dissect_wsp: X-WAP.TOD peek %X NYI\n",peek); } } else diff --git a/packet-wtls.c b/packet-wtls.c index 38b7f5912b..10e4b74f8d 100644 --- a/packet-wtls.c +++ b/packet-wtls.c @@ -2,7 +2,7 @@ * * Routines to dissect WTLS component of WAP traffic. * - * $Id: packet-wtls.c,v 1.2 2001/02/15 19:46:41 guy Exp $ + * $Id: packet-wtls.c,v 1.3 2001/02/19 21:02:33 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -497,15 +497,16 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun wtls_msg_type_item_sub_tree = proto_item_add_subtree(ti, ett_wtls_msg_type_item_sub); offset+=2; for (;count > 0;count-=client_size) { - cli_key_item = proto_tree_add_item(wtls_msg_type_item_sub_tree, + value = tvb_get_guint8 (tvb, offset); + cli_key_item = proto_tree_add_uint(wtls_msg_type_item_sub_tree, hf_wtls_hands_cli_hello_key_exchange, tvb, offset,1, - bo_little_endian); + value); client_size=1; wtls_msg_type_item_sub_sub_tree = proto_item_add_subtree(cli_key_item, ett_wtls_msg_type_item_sub_sub); - ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree, + ti = proto_tree_add_uint(wtls_msg_type_item_sub_sub_tree, hf_wtls_hands_cli_hello_key_exchange_suite, - tvb,offset,1,bo_big_endian); + tvb,offset,1,value); offset++; value = tvb_get_guint8 (tvb, offset); ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree, @@ -536,15 +537,16 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun wtls_msg_type_item_sub_tree = proto_item_add_subtree(ti, ett_wtls_msg_type_item_sub); offset+=2; for (;count > 0;count-=client_size) { - cli_key_item = proto_tree_add_item(wtls_msg_type_item_sub_tree, + value = tvb_get_guint8 (tvb, offset); + cli_key_item = proto_tree_add_uint(wtls_msg_type_item_sub_tree, hf_wtls_hands_cli_hello_key_exchange, tvb, offset,1, - bo_little_endian); + value); client_size=1; wtls_msg_type_item_sub_sub_tree = proto_item_add_subtree(cli_key_item, ett_wtls_msg_type_item_sub_sub); - ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree, + ti = proto_tree_add_uint(wtls_msg_type_item_sub_sub_tree, hf_wtls_hands_cli_hello_key_exchange_suite, - tvb,offset,1,bo_big_endian); + tvb,offset,1,value); offset++; value = tvb_get_guint8 (tvb, offset); ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree, @@ -974,7 +976,7 @@ proto_register_wtls(void) { &hf_wtls_hands_cli_hello_key_exchange, { "Key Exchange", "wsp.wtls.handshake.client_hello.key.key_exchange", - FT_NONE, BASE_NONE, NULL, 0x00, + FT_UINT8, BASE_HEX, VALS ( wtls_vals_key_exchange_suite ), 0x00, "Key Exchange" } }, |