Ethereal-dev: [Ethereal-dev] New updates of WSP/WTLS decoding
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Alexandre P. Ferreira" <alexandref@xxxxxxxxxxxxxxx>
Date: Thu, 01 Feb 2001 13:32:55 -0200
Hi,
Attached is new updates of WSP and WTLS. This diff related to the snapshot of 2001-02-01.
Thank you and best regards,
-- Alexandre P. Ferreira Coordenador de Plataforma Splice IP +55 61 3137504
*** ethereal-2001-02-01/packet-wsp.c Tue Jan 30 03:54:18 2001 --- ethereal-0.8.15/packet-wsp.c Thu Feb 1 13:25:54 2001 *************** *** 1,9 **** /* packet-wsp.c (c) 2000 Neil Hunter * Based on original work by Ben Fowler * * Routines to dissect WSP component of WAP traffic. * ! * $Id: packet-wsp.c,v 1.15 2001/01/30 05:54:18 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxx> --- 1,10 ---- /* packet-wsp.c (c) 2000 Neil Hunter * Based on original work by Ben Fowler + * Updated by Alexandre P. Ferreira (Splice IP) * * Routines to dissect WSP component of WAP traffic. * ! * $Id: packet-wsp.c,v 1.14 2001/01/28 04:26:53 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxx> *************** *** 80,85 **** --- 81,87 ---- static int hf_wsp_header_accept = HF_EMPTY; static int hf_wsp_header_accept_str = HF_EMPTY; static int hf_wsp_header_accept_charset = HF_EMPTY; + static int hf_wsp_header_accept_charset_str = HF_EMPTY; static int hf_wsp_header_accept_language = HF_EMPTY; static int hf_wsp_header_accept_language_str = HF_EMPTY; static int hf_wsp_header_accept_ranges = HF_EMPTY; *************** *** 315,334 **** }; static const value_string vals_character_sets[] = { ! { 0x0003, "us-ascii" }, ! { 0x0004, "iso-8859-1" }, ! { 0x0005, "iso-8859-2" }, ! { 0x0006, "iso-8859-3" }, ! { 0x0007, "iso-8859-4" }, ! { 0x0008, "iso-8859-5" }, ! { 0x0009, "iso-8859-6" }, ! { 0x000A, "iso-8859-7" }, ! { 0x000B, "iso-8859-8" }, ! { 0x000C, "iso-8859-9" }, ! { 0x0011, "shift_JIS" }, ! { 0x006A, "utf-8" }, ! { 0x03E8, "iso-10646-ucs-2" }, ! { 0x07EA, "big5" }, { 0x00, NULL } }; --- 317,557 ---- }; static const value_string vals_character_sets[] = { ! { 0 ,"hz-gb-2312" }, ! { 3 ,"us-ascii" }, ! { 4 ,"iso-8859-1" }, ! { 5 ,"iso-8859-2" }, ! { 6 ,"iso-8859-3" }, ! { 7 ,"iso-8859-4" }, ! { 8 ,"iso-8859-5" }, ! { 9 ,"iso-8859-6" }, ! { 10 ,"iso-8859-7" }, ! { 11 ,"iso-8859-8" }, ! { 12 ,"iso-8859-9" }, ! { 13 ,"iso-8859-10" }, ! { 14 ,"iso_6937-2-add" }, ! { 15 ,"jis_x0201" }, ! { 16 ,"jis_encoding" }, ! { 17 ,"shift_jis" }, ! { 18 ,"euc-jp" }, ! { 19 ,"extended_unix_code_fixed_width_for_japanese" }, ! { 20 ,"bs_4730" }, ! { 21 ,"sen_850200_c" }, ! { 22 ,"it" }, ! { 23 ,"es" }, ! { 24 ,"din_66003" }, ! { 25 ,"ns_4551-1" }, ! { 26 ,"nf_z_62-010" }, ! { 27 ,"iso-10646-utf-1" }, ! { 28 ,"iso_646.basic:1983" }, ! { 29 ,"invariant" }, ! { 30 ,"iso_646.irv:1983" }, ! { 31 ,"nats-sefi" }, ! { 32 ,"nats-sefi-add" }, ! { 33 ,"nats-dano" }, ! { 34 ,"nats-dano-add" }, ! { 35 ,"sen_850200_b" }, ! { 36 ,"ks_c_5601-1987" }, ! { 37 ,"iso-2022-kr" }, ! { 38 ,"euc-kr" }, ! { 39 ,"iso-2022-jp" }, ! { 40 ,"iso-2022-jp-2" }, ! { 41 ,"jis_c6220-1969-jp" }, ! { 42 ,"jis_c6220-1969-ro" }, ! { 43 ,"pt" }, ! { 44 ,"greek7-old" }, ! { 45 ,"latin-greek" }, ! { 46 ,"nf_z_62-010_(1973)" }, ! { 47 ,"latin-greek-1" }, ! { 48 ,"iso_5427" }, ! { 49 ,"jis_c6226-1978" }, ! { 50 ,"bs_viewdata" }, ! { 51 ,"inis" }, ! { 52 ,"inis-8" }, ! { 53 ,"inis-cyrillic" }, ! { 54 ,"iso_5427:1981" }, ! { 55 ,"iso_5428:1980" }, ! { 56 ,"gb_1988-80" }, ! { 57 ,"gb_2312-80" }, ! { 58 ,"ns_4551-2" }, ! { 59 ,"videotex-suppl" }, ! { 60 ,"pt2" }, ! { 61 ,"es2" }, ! { 62 ,"msz_7795.3" }, ! { 63 ,"jis_c6226-1983" }, ! { 64 ,"greek7" }, ! { 65 ,"asmo_449" }, ! { 66 ,"iso-ir-90" }, ! { 67 ,"jis_c6229-1984-a" }, ! { 68 ,"jis_c6229-1984-b" }, ! { 69 ,"jis_c6229-1984-b-add" }, ! { 70 ,"jis_c6229-1984-hand" }, ! { 71 ,"jis_c6229-1984-hand-add" }, ! { 72 ,"jis_c6229-1984-kana" }, ! { 73 ,"iso_2033-1983" }, ! { 74 ,"ansi_x3.110-1983" }, ! { 75 ,"t.61-7bit" }, ! { 76 ,"t.61-8bit" }, ! { 77 ,"ecma-cyrillic" }, ! { 78 ,"csa_z243.4-1985-1" }, ! { 79 ,"csa_z243.4-1985-2" }, ! { 80 ,"csa_z243.4-1985-gr" }, ! { 81 ,"iso_8859-6-e" }, ! { 82 ,"iso_8859-6-i" }, ! { 83 ,"t.101-g2" }, ! { 84 ,"iso_8859-8-e" }, ! { 85 ,"iso_8859-8-i" }, ! { 86 ,"csn_369103" }, ! { 87 ,"jus_i.b1.002" }, ! { 88 ,"iec_p27-1" }, ! { 89 ,"jus_i.b1.003-serb" }, ! { 90 ,"jus_i.b1.003-mac" }, ! { 91 ,"greek-ccitt" }, ! { 92 ,"nc_nc00-10:81" }, ! { 93 ,"iso_6937-2-25" }, ! { 94 ,"gost_19768-74" }, ! { 95 ,"iso_8859-supp" }, ! { 96 ,"iso_10367-box" }, ! { 97 ,"latin-lap" }, ! { 98 ,"jis_x0212-1990" }, ! { 99 ,"ds_2089" }, ! { 100 ,"us-dk" }, ! { 101 ,"dk-us" }, ! { 102 ,"ksc5636" }, ! { 103 ,"unicode-1-1-utf-7" }, ! { 104 ,"iso-2022-cn" }, ! { 105 ,"iso-2022-cn-ext" }, ! { 106 ,"utf-8" }, ! { 109 ,"iso-8859-13" }, ! { 110 ,"iso-8859-14" }, ! { 111 ,"iso-8859-15" }, ! { 1000 ,"iso-10646-ucs-2" }, ! { 1001 ,"iso-10646-ucs-4" }, ! { 1002 ,"iso-10646-ucs-basic" }, ! { 1003 ,"iso-10646-j-1" }, ! { 1003 ,"iso-10646-unicode-latin1" }, ! { 1005 ,"iso-unicode-ibm-1261" }, ! { 1006 ,"iso-unicode-ibm-1268" }, ! { 1007 ,"iso-unicode-ibm-1276" }, ! { 1008 ,"iso-unicode-ibm-1264" }, ! { 1009 ,"iso-unicode-ibm-1265" }, ! { 1010 ,"unicode-1-1" }, ! { 1011 ,"scsu" }, ! { 1012 ,"utf-7" }, ! { 1013 ,"utf-16be" }, ! { 1014 ,"utf-16le" }, ! { 1015 ,"utf-16" }, ! { 2000 ,"iso-8859-1-windows-3.0-latin-1" }, ! { 2001 ,"iso-8859-1-windows-3.1-latin-1" }, ! { 2002 ,"iso-8859-2-windows-latin-2" }, ! { 2003 ,"iso-8859-9-windows-latin-5" }, ! { 2004 ,"hp-roman8" }, ! { 2005 ,"adobe-standard-encoding" }, ! { 2006 ,"ventura-us" }, ! { 2007 ,"ventura-international" }, ! { 2008 ,"dec-mcs" }, ! { 2009 ,"ibm850" }, ! { 2010 ,"ibm852" }, ! { 2011 ,"ibm437" }, ! { 2012 ,"pc8-danish-norwegian" }, ! { 2013 ,"ibm862" }, ! { 2014 ,"pc8-turkish" }, ! { 2015 ,"ibm-symbols" }, ! { 2016 ,"ibm-thai" }, ! { 2017 ,"hp-legal" }, ! { 2018 ,"hp-pi-font" }, ! { 2019 ,"hp-math8" }, ! { 2020 ,"adobe-symbol-encoding" }, ! { 2021 ,"hp-desktop" }, ! { 2022 ,"ventura-math" }, ! { 2023 ,"microsoft-publishing" }, ! { 2024 ,"windows-31j" }, ! { 2025 ,"gb2312" }, ! { 2026 ,"big5" }, ! { 2027 ,"macintosh" }, ! { 2028 ,"ibm037" }, ! { 2029 ,"ibm038" }, ! { 2030 ,"ibm273" }, ! { 2031 ,"ibm274" }, ! { 2032 ,"ibm275" }, ! { 2033 ,"ibm277" }, ! { 2034 ,"ibm278" }, ! { 2035 ,"ibm280" }, ! { 2036 ,"ibm281" }, ! { 2037 ,"ibm284" }, ! { 2038 ,"ibm285" }, ! { 2039 ,"ibm290" }, ! { 2040 ,"ibm297" }, ! { 2041 ,"ibm420" }, ! { 2042 ,"ibm423" }, ! { 2043 ,"ibm424" }, ! { 2044 ,"ibm500" }, ! { 2045 ,"ibm851" }, ! { 2046 ,"ibm855" }, ! { 2047 ,"ibm857" }, ! { 2048 ,"ibm860" }, ! { 2049 ,"ibm861" }, ! { 2050 ,"ibm863" }, ! { 2051 ,"ibm864" }, ! { 2052 ,"ibm865" }, ! { 2053 ,"ibm868" }, ! { 2054 ,"ibm869" }, ! { 2055 ,"ibm870" }, ! { 2056 ,"ibm871" }, ! { 2057 ,"ibm880" }, ! { 2058 ,"ibm891" }, ! { 2059 ,"ibm903" }, ! { 2060 ,"ibm904" }, ! { 2061 ,"ibm905" }, ! { 2062 ,"ibm918" }, ! { 2063 ,"ibm1026" }, ! { 2064 ,"ebcdic-at-de" }, ! { 2065 ,"ebcdic-at-de-a" }, ! { 2066 ,"ebcdic-ca-fr" }, ! { 2067 ,"ebcdic-dk-no" }, ! { 2068 ,"ebcdic-dk-no-a" }, ! { 2069 ,"ebcdic-fi-se" }, ! { 2070 ,"ebcdic-fi-se-a" }, ! { 2071 ,"ebcdic-fr" }, ! { 2072 ,"ebcdic-it" }, ! { 2073 ,"ebcdic-pt" }, ! { 2074 ,"ebcdic-es" }, ! { 2075 ,"ebcdic-es-a" }, ! { 2076 ,"ebcdic-es-s" }, ! { 2077 ,"ebcdic-uk" }, ! { 2078 ,"ebcdic-us" }, ! { 2079 ,"unknown-8bit" }, ! { 2080 ,"mnemonic" }, ! { 2081 ,"mnem" }, ! { 2082 ,"viscii" }, ! { 2083 ,"viqr" }, ! { 2084 ,"koi8-r" }, ! { 2086 ,"ibm866" }, ! { 2087 ,"ibm775" }, ! { 2088 ,"koi8-u" }, ! { 2089 ,"ibm00858" }, ! { 2090 ,"ibm00924" }, ! { 2091 ,"ibm01140" }, ! { 2092 ,"ibm01141" }, ! { 2093 ,"ibm01142" }, ! { 2094 ,"ibm01143" }, ! { 2095 ,"ibm01144" }, ! { 2096 ,"ibm01145" }, ! { 2097 ,"ibm01146" }, ! { 2098 ,"ibm01147" }, ! { 2099 ,"ibm01148" }, ! { 2100 ,"ibm01149" }, ! { 2101 ,"big5-hkscs" }, ! { 2250 ,"windows-1250" }, ! { 2251 ,"windows-1251" }, ! { 2252 ,"windows-1252" }, ! { 2253 ,"windows-1253" }, ! { 2254 ,"windows-1254" }, ! { 2255 ,"windows-1255" }, ! { 2256 ,"windows-1256" }, ! { 2257 ,"windows-1257" }, ! { 2258 ,"windows-1258" }, ! { 2259 ,"tis-620" }, { 0x00, NULL } }; *************** *** 697,703 **** guint counter = 0; char cont = 1; ! if (octetCount != NULL) { #ifdef DEBUG fprintf (stderr, "dissect_wsp: Starting tvb_get_guintvar at offset %d, count=NULL\n", offset); --- 920,926 ---- guint counter = 0; char cont = 1; ! if (octetCount == NULL) { #ifdef DEBUG fprintf (stderr, "dissect_wsp: Starting tvb_get_guintvar at offset %d, count=NULL\n", offset); *************** *** 762,767 **** --- 985,995 ---- /* proto_tree *wsp_header_fixed; */ proto_tree *wsp_capabilities; + /* This field shows up as the "Info" column in the display; you should make + it, if possible, summarize what's in the packet, so that a user looking + at the list of packets can tell what type of packet it is. */ + + /* Display protocol type depending on the port */ if (check_col(fdata, COL_PROTOCOL)) { col_set_str(fdata, COL_PROTOCOL, "WSP" ); *************** *** 819,824 **** --- 1047,1053 ---- offset += count; ti = proto_tree_add_uint (wsp_tree, hf_wsp_capability_length,tvb,capabilityStart,count,capabilityLength); + count = 0; headerStart = offset; headerLength = tvb_get_guintvar (tvb, offset, &count); offset += count; *************** *** 843,857 **** ti = proto_tree_add_uint (wsp_tree, hf_wsp_server_session_id,tvb,offset,count,value); offset += count; capabilityStart = offset; capabilityLength = tvb_get_guintvar (tvb, offset, &count); offset += count; ti = proto_tree_add_uint (wsp_tree, hf_wsp_capability_length,tvb,capabilityStart,count,capabilityLength); headerStart = offset; headerLength = tvb_get_guintvar (tvb, offset, &count); offset += count; ! ti = proto_tree_add_item (wsp_tree, hf_wsp_header_length,tvb,headerStart,count,bo_little_endian); if (capabilityLength > 0) { ti = proto_tree_add_item (wsp_tree, hf_wsp_capabilities_section,tvb,offset,capabilityLength,bo_little_endian); --- 1072,1088 ---- ti = proto_tree_add_uint (wsp_tree, hf_wsp_server_session_id,tvb,offset,count,value); offset += count; + count = 0; capabilityStart = offset; capabilityLength = tvb_get_guintvar (tvb, offset, &count); offset += count; ti = proto_tree_add_uint (wsp_tree, hf_wsp_capability_length,tvb,capabilityStart,count,capabilityLength); + count = 0; headerStart = offset; headerLength = tvb_get_guintvar (tvb, offset, &count); offset += count; ! ti = proto_tree_add_uint (wsp_tree, hf_wsp_header_length,tvb,headerStart,count,headerLength); if (capabilityLength > 0) { ti = proto_tree_add_item (wsp_tree, hf_wsp_capabilities_section,tvb,offset,capabilityLength,bo_little_endian); *************** *** 878,895 **** case GET: /* Length of URI and size of URILen field */ value = tvb_get_guintvar (tvb, offset, &count); nextOffset = offset + count; add_uri (wsp_tree, tvb, offset, nextOffset); ! offset += (value+1); tmp_tvb = tvb_new_subset (tvb, offset, -1, -1); add_headers (wsp_tree, tmp_tvb); break; case POST: uriStart = offset; uriLength = tvb_get_guintvar (tvb, offset, &count); headerStart = uriStart+count; headersLength = tvb_get_guintvar (tvb, headerStart, &count); offset = headerStart + count; --- 1109,1129 ---- case GET: /* Length of URI and size of URILen field */ + count = 0; value = tvb_get_guintvar (tvb, offset, &count); nextOffset = offset + count; add_uri (wsp_tree, tvb, offset, nextOffset); ! offset += (value+count); tmp_tvb = tvb_new_subset (tvb, offset, -1, -1); add_headers (wsp_tree, tmp_tvb); break; case POST: + /* Length of URI and size of URILen field */ uriStart = offset; uriLength = tvb_get_guintvar (tvb, offset, &count); headerStart = uriStart+count; + count = 0; headersLength = tvb_get_guintvar (tvb, headerStart, &count); offset = headerStart + count; *************** *** 918,924 **** ti = proto_tree_add_item (wsp_tree, hf_wsp_header_status,tvb,offset,1,bo_little_endian); value = tvb_get_guintvar (tvb, offset+1, &count); nextOffset = offset + 1 + count; ! ti = proto_tree_add_item (wsp_tree, hf_wsp_header_length,tvb,offset+1,count,bo_little_endian); contentTypeStart = nextOffset; nextOffset = add_content_type (wsp_tree, tvb, nextOffset, &contentType); --- 1152,1159 ---- ti = proto_tree_add_item (wsp_tree, hf_wsp_header_status,tvb,offset,1,bo_little_endian); value = tvb_get_guintvar (tvb, offset+1, &count); nextOffset = offset + 1 + count; ! ! ti = proto_tree_add_uint (wsp_tree, hf_wsp_header_length,tvb,offset+1,count,value); contentTypeStart = nextOffset; nextOffset = add_content_type (wsp_tree, tvb, nextOffset, &contentType); *************** *** 934,940 **** /* Runs from offset+1+count+value+1 to END_OF_FRAME */ if (offset < tvb_reported_length (tvb)) { ! ti = proto_tree_add_item (wsp_tree, hf_wsp_reply_data,tvb,offset,END_OF_FRAME,bo_little_endian); } break; } --- 1169,1175 ---- /* Runs from offset+1+count+value+1 to END_OF_FRAME */ if (offset < tvb_reported_length (tvb)) { ! ti = proto_tree_add_item (wsp_tree, hf_wsp_reply_data,tvb,offset,tvb_reported_length(tvb)-offset,bo_little_endian); } break; } *************** *** 948,953 **** --- 1183,1190 ---- frame_data *fdata = pinfo->fd; int offset = 0; + char szInfo[ 50 ]; + int cchInfo; char pdut; char pdu_msg_type; guint count = 0; *************** *** 959,972 **** proto_tree *wtls_rec_tree; proto_tree *wtls_msg_type_tree; if (check_col(fdata, COL_PROTOCOL)) { col_set_str(fdata, COL_PROTOCOL, "WTLS+WSP" ); } /* Develop the string to put in the Info column */ if (check_col(fdata, COL_INFO)) { ! col_set_str(fdata, COL_INFO, "WTLS" ); }; /* In the interest of speed, if "tree" is NULL, don't do any work not --- 1196,1215 ---- proto_tree *wtls_rec_tree; proto_tree *wtls_msg_type_tree; + /* This field shows up as the "Info" column in the display; you should make + it, if possible, summarize what's in the packet, so that a user looking + at the list of packets can tell what type of packet it is. */ + + /* Display protocol type depending on the port */ if (check_col(fdata, COL_PROTOCOL)) { col_set_str(fdata, COL_PROTOCOL, "WTLS+WSP" ); } /* Develop the string to put in the Info column */ + cchInfo = snprintf( szInfo, sizeof( szInfo ), "WTLS"); if (check_col(fdata, COL_INFO)) { ! col_add_str(fdata, COL_INFO, szInfo ); }; /* In the interest of speed, if "tree" is NULL, don't do any work not *************** *** 1089,1094 **** --- 1332,1338 ---- tvb,offset,1,bo_big_endian); offset++; timeValue.tv_sec = tvb_get_ntohl (tvb, offset); + timeValue.tv_usec = 0; ti = proto_tree_add_time (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_gmt, tvb, offset, 4, &timeValue); offset+=4; *************** *** 1232,1237 **** --- 1476,1482 ---- tvb,offset,1,bo_big_endian); offset++; timeValue.tv_sec = tvb_get_ntohl (tvb, offset); + timeValue.tv_usec = 0; ti = proto_tree_add_time (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_gmt, tvb, offset, 4, &timeValue); offset+=4; *************** *** 1343,1354 **** --- 1588,1601 ---- break; } timeValue.tv_sec = tvb_get_ntohl (tvb, offset); + timeValue.tv_usec = 0; ti = proto_tree_add_time (wtls_msg_type_item_sub_tree, hf_wtls_hands_certificate_wtls_valid_not_before, tvb, offset, 4, &timeValue); offset+=4; client_size+=4; timeValue.tv_sec = tvb_get_ntohl (tvb, offset); + timeValue.tv_usec = 0; ti = proto_tree_add_time (wtls_msg_type_item_sub_tree, hf_wtls_hands_certificate_wtls_valid_not_after, tvb, offset, 4, &timeValue); *************** *** 1570,1575 **** --- 1817,1823 ---- #ifdef DEBUG fprintf (stderr, "dissect_wsp: Looking for uintvar octets\n"); #endif + count = 0; tvb_get_guintvar (tvb, valueStart, &count); valueEnd = offset+1+count; offset += (count+1); *************** *** 1613,1618 **** --- 1861,1870 ---- guint peek = 0; struct timeval timeValue; guint value = 0; + guint valSize = 0; + char valString[100]; + char *valMatch; + guint q_value = 0; headerType = tvb_get_guint8 (header_buff, 0); peek = tvb_get_guint8 (value_buff, 0); *************** *** 1647,1680 **** if (peek < 31) { /* Peek contains the number of octets to follow */ ! value = tvb_get_guint8 (value_buff, 1); /* decode Charset */ ! if (value & 0x80) { ! proto_tree_add_uint (tree, hf_wsp_header_accept_charset, header_buff, offset, headerLen, value & 0x7f); } ! else if (value < 31) { ! switch (value) { case 1: ! proto_tree_add_uint (tree, hf_wsp_header_accept_charset, header_buff, offset, headerLen, tvb_get_guint8 (value_buff, 2) ); break; case 2: ! proto_tree_add_uint (tree, hf_wsp_header_accept_charset, header_buff, offset, headerLen, tvb_get_ntohs (value_buff, 2) ); break; case 3: ! proto_tree_add_uint (tree, hf_wsp_header_accept_charset, header_buff, offset, headerLen, ! (tvb_get_ntohs (value_buff, 2) << 8) + tvb_get_guint8 (value_buff, 4)); break; case 4: ! proto_tree_add_uint (tree, hf_wsp_header_accept_charset, header_buff, offset, headerLen, tvb_get_ntohl (value_buff, 2) ); break; default: fprintf (stderr, "dissect_wsp: accept-charset size %d NYI\n", peek); } } else { fprintf (stderr, "dissect_wsp: Accept-Charset value %d (0x%02X) NYI\n", peek, value); } } else if (peek & 0x80) { --- 1899,1955 ---- if (peek < 31) { /* Peek contains the number of octets to follow */ ! valSize = tvb_get_guint8 (value_buff, 1); /* decode Charset */ ! if (valSize & 0x80) { ! value = valSize & 0x7f; ! valSize = 1; } ! else if (valSize < 31) { ! switch (valSize) { case 1: ! value = tvb_get_guint8 (value_buff, 2); break; case 2: ! value = tvb_get_ntohs (value_buff, 2); break; case 3: ! value = tvb_get_ntoh24 (value_buff, 2); break; case 4: ! value = tvb_get_ntohl (value_buff, 2); break; default: + value = 0; fprintf (stderr, "dissect_wsp: accept-charset size %d NYI\n", peek); + break; } + valSize++; } else { fprintf (stderr, "dissect_wsp: Accept-Charset value %d (0x%02X) NYI\n", peek, value); } + valMatch = match_strval(value,vals_character_sets); + if (peek > valSize) { + q_value = tvb_get_guintvar (value_buff, 1+valSize, NULL); + if (q_value <= 100) { + q_value = (q_value - 1) * 10; + } + else { + q_value -= 100; + } + } + else { + q_value = 1000; + } + if (valMatch != NULL) { + snprintf(valString,100,"%s;Q=%5.3f",valMatch,q_value/1000.0); + } + else { + snprintf(valString,100,"Unknow %d;Q=%5.3f",value,q_value/1000.0); + } + proto_tree_add_string (tree, hf_wsp_header_accept_charset_str, header_buff, offset, headerLen, valString); } else if (peek & 0x80) { *************** *** 1829,1836 **** break; case 0x12: /* Date */ ! timeValue.tv_sec = tvb_get_ntohl (value_buff, 0); ! ti = proto_tree_add_time (tree, hf_wsp_header_date, header_buff, offset, headerLen, &timeValue); break; case 0x13: /* Etag */ --- 2104,2134 ---- break; case 0x12: /* Date */ ! if (peek < 31) { ! timeValue.tv_sec=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: ! fprintf (stderr, "dissect_wsp: accept-charset size %d NYI\n", peek); ! break; ! } ! ti = proto_tree_add_time (tree, hf_wsp_header_date, header_buff, offset, headerLen, &timeValue); ! } ! else { ! fprintf (stderr, "dissect_wsp: accept-charset size %d NYI\n", peek); ! } break; case 0x13: /* Etag */ *************** *** 1838,1867 **** break; case 0x14: /* Expires */ switch (valueLen) { - case 1: - case 2: - fprintf (stderr, "dissect_wsp: Expires value length %d NYI\n", valueLen); - break; case 3: ! timeValue.tv_sec = tvb_get_ntoh24 (value_buff, 0); break; case 4: ! timeValue.tv_sec = tvb_get_ntohl (value_buff, 0); break; ! }; ti = proto_tree_add_time (tree, hf_wsp_header_expires, header_buff, offset, headerLen, &timeValue); break; case 0x17: /* If-Modified-Since */ ! if (valueLen == 4) ! { ! timeValue.tv_sec = tvb_get_ntohl (value_buff, 0); ! } ! else { ! timeValue.tv_sec = 0; } ti = proto_tree_add_time (tree, hf_wsp_header_if_modified_since, header_buff, offset, headerLen, &timeValue); break; --- 2136,2172 ---- break; case 0x14: /* Expires */ + timeValue.tv_sec = 0; + timeValue.tv_usec = 0; switch (valueLen) { 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: ! fprintf (stderr, "dissect_wsp: Expires value length %d NYI\n", valueLen); ! break; ! } ti = proto_tree_add_time (tree, hf_wsp_header_expires, header_buff, offset, headerLen, &timeValue); break; case 0x17: /* If-Modified-Since */ ! timeValue.tv_sec = 0; ! timeValue.tv_usec = 0; ! switch (valueLen) { ! 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: ! fprintf (stderr, "dissect_wsp: If Modified Since value length %d NYI\n", valueLen); ! break; } ti = proto_tree_add_time (tree, hf_wsp_header_if_modified_since, header_buff, offset, headerLen, &timeValue); break; *************** *** 1871,1877 **** break; case 0x1D: /* Last-Modified */ ! timeValue.tv_sec = tvb_get_ntohl (value_buff, 0); ti = proto_tree_add_time (tree, hf_wsp_header_last_modified, header_buff, offset, headerLen, &timeValue); break; --- 2176,2196 ---- break; case 0x1D: /* Last-Modified */ ! timeValue.tv_sec = 0; ! timeValue.tv_usec = 0; ! switch (valueLen) ! { ! 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: Last Modified value length %d NYI\n", valueLen); ! break; ! } ti = proto_tree_add_time (tree, hf_wsp_header_last_modified, header_buff, offset, headerLen, &timeValue); break; *************** *** 1922,1927 **** --- 2241,2248 ---- * by a 4-byte date value */ if (strncasecmp ("x-wap.tod", tvb_get_ptr (header_buff, 0, headerLen), 9) == 0) { + timeValue.tv_sec = 0; + timeValue.tv_usec = 0; switch( peek) { case 1: timeValue.tv_sec = tvb_get_guint8 (value_buff, 1); *************** *** 2281,2286 **** --- 2602,2614 ---- "Accept-Charset" } }, + { &hf_wsp_header_accept_charset_str, + { "Accept-Charset", + "wsp.header.accept-charset.string", + FT_STRING, BASE_NONE, NULL, 0x00, + "Accept-Charset" + } + }, { &hf_wsp_header_accept_language, { "Accept-Language", "wsp.header.accept-language", *************** *** 2401,2406 **** --- 2729,2756 ---- "wsp.header.x_wap_tod", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x0, "X-WAP.TOD" + } + }, + { &hf_wsp_header_transfer_encoding, + { "Transfer Encoding", + "wsp.header.transfer_enc", + /*FT_NONE, BASE_DEC, NULL, 0x00,*/ + FT_UINT8, BASE_HEX, VALS ( vals_transfer_encoding ), 0x00, + "Transfer Encoding" + } + }, + { &hf_wsp_header_transfer_encoding_str, + { "Transfer Encoding", + "wsp.header.transfer_enc_str", + FT_STRING, BASE_NONE, NULL, 0x00, + "Transfer Encoding" + } + }, + { &hf_wsp_header_via, + { "Via", + "wsp.header.via", + FT_STRING, BASE_NONE, NULL, 0x00, + "Via" } }, { &hf_wsp_post_data,
begin:vcard n:Peixoto Ferreia;Alexandre tel;work:+55 61 3137504 x-mozilla-html:FALSE org:Splice IP adr:;;;;;; version:2.1 email;internet:alexandref@xxxxxxxxxxxxxxx title:Coordenador de Plataforma x-mozilla-cpt:;0 fn:Alexandre Peixoto Ferreia end:vcard
- Follow-Ups:
- Re: [Ethereal-dev] New updates of WSP/WTLS decoding
- From: Guy Harris
- Re: [Ethereal-dev] New updates of WSP/WTLS decoding
- Prev by Date: [Ethereal-dev] Re: Default file extension for captures?
- Next by Date: [Ethereal-dev] real time mode not working on Red Hat Linux Fisher beta
- Previous by thread: [Ethereal-dev] Re: Default file extension for captures?
- Next by thread: Re: [Ethereal-dev] New updates of WSP/WTLS decoding
- Index(es):