Ethereal-dev: [Ethereal-dev] WSP-patch
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Georg von Zezschwitz <gvz@xxxxxxxxxx>
Date: Sun, 14 Oct 2001 15:43:26 +0200
Hi! The attached patch: - solves the problem that Ethereal "hangs" when the header size in a WSP Connect request exceeds 256 bytes (declaration changed from uint8 to unit). - implements the attributes of WSP Suspend / Resume. Cheers, Georg
Index: packet-wsp.c =================================================================== RCS file: /cvsroot/ethereal/packet-wsp.c,v retrieving revision 1.40 diff -u -r1.40 packet-wsp.c --- packet-wsp.c 2001/10/07 08:49:46 1.40 +++ packet-wsp.c 2001/10/14 13:38:54 @@ -1049,69 +1049,49 @@ switch (pdut) { case CONNECT: + case CONNECTREPLY: + case RESUME: if (tree) { - ti = proto_tree_add_item (wsp_tree, hf_wsp_version_major,tvb,offset,1,bo_little_endian); - ti = proto_tree_add_item (wsp_tree, hf_wsp_version_minor,tvb,offset,1,bo_little_endian); - offset++; - capabilityStart = offset; - count = 0; /* Initialise count */ - 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; - count = 0; /* Initialise count */ - 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) + if (pdut == CONNECT) { - tmp_tvb = tvb_new_subset (tvb, offset, capabilityLength, capabilityLength); - add_capabilities (wsp_tree, tmp_tvb, CONNECT); - offset += capabilityLength; - } - - if (headerLength > 0) - { - tmp_tvb = tvb_new_subset (tvb, offset, headerLength, headerLength); - add_headers (wsp_tree, tmp_tvb); + ti = proto_tree_add_item (wsp_tree, hf_wsp_version_major,tvb,offset,1,bo_little_endian); + ti = proto_tree_add_item (wsp_tree, hf_wsp_version_minor,tvb,offset,1,bo_little_endian); + offset++; + } else { + count = 0; /* Initialise count */ + value = tvb_get_guintvar (tvb, offset, &count); + ti = proto_tree_add_uint (wsp_tree, hf_wsp_server_session_id,tvb,offset,count,value); + offset += count; } - } - - break; - - case CONNECTREPLY: - if (tree) { - count = 0; /* Initialise count */ - value = tvb_get_guintvar (tvb, offset, &count); - ti = proto_tree_add_uint (wsp_tree, hf_wsp_server_session_id,tvb,offset,count,value); - offset += count; - capabilityStart = offset; count = 0; /* Initialise count */ 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; - count = 0; /* Initialise count */ - 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 (pdut != RESUME) + { + count = 0; /* Initialise count */ + headerLength = tvb_get_guintvar (tvb, offset, &count); + ti = proto_tree_add_uint (wsp_tree, hf_wsp_header_length,tvb,offset,count,headerLength); + offset += count; + capabilityStart = offset; + headerStart = capabilityStart + capabilityLength; + } else { + /* Resume computes the headerlength by remaining bytes */ + capabilityStart = offset; + headerStart = capabilityStart + capabilityLength; + headerLength = tvb_reported_length_remaining (tvb, headerStart); + } if (capabilityLength > 0) { tmp_tvb = tvb_new_subset (tvb, offset, capabilityLength, capabilityLength); - add_capabilities (wsp_tree, tmp_tvb, CONNECTREPLY); + add_capabilities (wsp_tree, tmp_tvb, CONNECT); offset += capabilityLength; } if (headerLength > 0) { - - /* - ti = proto_tree_add_item (wsp_tree, hf_wsp_headers_section,tvb,offset,headerLength,bo_little_endian); - wsp_headers = proto_item_add_subtree( ti, ett_headers ); - */ tmp_tvb = tvb_new_subset (tvb, offset, headerLength, headerLength); add_headers (wsp_tree, tmp_tvb); } @@ -1125,6 +1105,7 @@ break; case DISCONNECT: + case SUSPEND: if (tree) { count = 0; /* Initialise count */ value = tvb_get_guintvar (tvb, offset, &count); @@ -1354,7 +1335,7 @@ proto_tree *wsp_headers; guint offset = 0; guint headersLen = tvb_reported_length (tvb); - guint8 headerStart = 0; + guint headerStart = 0; guint peek = 0; guint pageCode = 1;
- Follow-Ups:
- Re: [Ethereal-dev] WSP-patch
- From: Guy Harris
- Re: [Ethereal-dev] WSP-patch
- From: Guy Harris
- Re: [Ethereal-dev] WSP-patch
- Prev by Date: Re: [Ethereal-dev] _SYS_TIME_H
- Next by Date: [Ethereal-dev] packet-smb
- Previous by thread: [Ethereal-dev] need input for next version of user-guide
- Next by thread: Re: [Ethereal-dev] WSP-patch
- Index(es):