Commit Graph

76 Commits

Author SHA1 Message Date
Guy Harris eb519c3e05 Use a cleanup handler to free the Content-Type header value, so it gets
freed even if we throw an exception after processing the Content-Type
header but before we call a subdissector.

svn path=/trunk/; revision=9191
2003-12-07 03:34:36 +00:00
Guy Harris a8f4f4b924 Change the name of the variable holding the dissector table pointer to
match the previous checkin.

svn path=/trunk/; revision=9190
2003-12-07 03:21:22 +00:00
Guy Harris 36d88b6618 Rename the "http.content_type" dissector table to "media_type", as it's
for use in any dissector that uses Internet media types.

svn path=/trunk/; revision=9189
2003-12-07 03:17:42 +00:00
Guy Harris 5867439498 Content-Type values are case-insensitive; force them to lower case
(subdissectors must register their Content-Type values as
all-lower-case).

Don't include parameters in the value we look up in the Content-Type
subdissector table.

svn path=/trunk/; revision=9000
2003-11-18 08:04:39 +00:00
Guy Harris 270f71cf40 Add an "http.content_type" dissector table,
Process the Content-Type header, and, if one is found, look up its value
in the aforementioned dissector table.

svn path=/trunk/; revision=8999
2003-11-18 07:49:52 +00:00
Guy Harris c4ffda6028 Make a field for the Content-Type entity header, and give it an EH_
value so it can be handled specially (with a string dissector table so
that subdissectors can register for particular content types).

svn path=/trunk/; revision=8903
2003-11-07 03:47:20 +00:00
Guy Harris fbbcf9f9e6 Add a mechanism to handle various entity headers, allowing their
(string) values to be put into the protocol tree as fields and allowing
some headers to get special treatment, and use it for Authorization,
Proxy-Authorization, WWW-Authenticate, and Proxy-Authenticate.

svn path=/trunk/; revision=8892
2003-11-06 08:54:31 +00:00
Guy Harris 82b4c946d1 If we've already constructed a subset tvbuff, don't construct an
identical one and throw away the first one.

svn path=/trunk/; revision=8876
2003-11-04 08:16:02 +00:00
Guy Harris 8d36cda948 From Lo�c Minier: HTTP header and payload desegmentation.
svn path=/trunk/; revision=8786
2003-10-27 09:17:21 +00:00
Guy Harris fdfd8b58af The code in an HTTP reply is a response code, not a response method.
svn path=/trunk/; revision=8346
2003-09-02 23:09:11 +00:00
Guy Harris 75ae0e30c7 From Jean-Michel Fayard: BOOTP/DHCP, HTTP, and WSP statistics taps.
svn path=/trunk/; revision=8345
2003-09-02 22:47:59 +00:00
Guy Harris fd3a3a0436 Get the right length for methods with an "M-" prefix.
svn path=/trunk/; revision=7837
2003-06-11 04:25:30 +00:00
Gilbert Ramirez debac46b66 Add http.request.method field, and a subtree under the HTTP Reqeust in which
to put the field, and any future field extracted from the HTTP Request
record.

svn path=/trunk/; revision=7834
2003-06-10 22:07:18 +00:00
Guy Harris c48ce9b402 From tz: decode the base-64 string for HTTP Basic authorization.
svn path=/trunk/; revision=7764
2003-05-30 03:11:45 +00:00
Tim Potter d3913cfdb1 Move the base64_decode() function somewhere where other dissectors can
use it.

svn path=/trunk/; revision=7723
2003-05-23 05:25:19 +00:00
Guy Harris 1c159b152b Non-ASCII characters can't be part of the name in a MIME header; if we
see one, assume we're dealing with data, not a MIME header.

Spaces are separators.

svn path=/trunk/; revision=7185
2003-02-24 01:17:45 +00:00
Guy Harris 59932f2722 Don't cast away constness, and fix variable and structure member
qualifiers as necessary to ensure that we don't have to.

"strcmp()", "strcasecmp()", and "memcmp()" don't return booleans; don't
test their results as if they did.

Use "guint8", not "guchar", for a pointer to (one or more) 8-bit bytes.

Update Michael Tuexen's e-mail address.

svn path=/trunk/; revision=6726
2002-12-02 23:43:30 +00:00
Guy Harris f0f2f07653 Call the NTLMSSP subdissector regardless of whether we're building a
protocol tree or not.

svn path=/trunk/; revision=6583
2002-11-08 05:06:36 +00:00
Guy Harris 103fafbb74 Make a routine to check for NTLMSSP authentication and to do the NTLMSSP
dissection if found, with a table of headers that indicate NTLMSSP
authentication.

Add some more headers to that table.

Constify the code a bit.

svn path=/trunk/; revision=6432
2002-10-15 22:28:35 +00:00
Tim Potter e8acbb4ebf For NTLM over HTTP the header strings can also be 'WWW-Authenticate: Negotiate'
or 'Authorization: Negotiate'.

svn path=/trunk/; revision=6326
2002-09-23 22:45:25 +00:00
Jörg Mayer 7c4176d868 Removed trailing whitespaces from .h and .c files using the
winapi_cleanup tool written by Patrik Stridvall for the wine
project.

svn path=/trunk/; revision=6117
2002-08-28 21:04:11 +00:00
Tim Potter ffa66bc078 Don't free a tvb that we add as a new data source. The NTLMSSP over
HTTP now works a treat!

Thanks again to Guy for the tip.

svn path=/trunk/; revision=5996
2002-08-14 23:34:20 +00:00
Tim Potter 51e4328d8e Fixed memory leak in creation of new tvb for ntlmssp data.
Call tvb_set_child_real_data_tvbuff() and add_new_data_source() to fix
the display problem when dissecting ntlmssp over http packets.  It
works better now, but for some reason the ntlmssp challenge packet is
still not displayed correctly.

Thanks to Guy for the tips.

svn path=/trunk/; revision=5991
2002-08-14 00:40:14 +00:00
Guy Harris 8098166c75 "base64_decode()" returns a "size_t", so make the variable to which that
return value is assigned a "size_t".  (For some reason, the file fails
to compile with MSVC++ 6.0, due to "ssize_t" not being defined, if it's
an "ssize_t", but works if it's a "size_t".)

svn path=/trunk/; revision=5989
2002-08-13 09:10:02 +00:00
Tim Potter c81559ffa3 Oops - forgot to remove debugging printf.
svn path=/trunk/; revision=5984
2002-08-13 05:38:04 +00:00
Tim Potter 510b3b73d7 Call the NTLMSSP dissector when we detect NTLMSSP over HTTP. This is
somewhat documented at http://www.innovation.ch/java/ntlm.html and
other places.

Ethereal handles it nicely, although the hex dump pane gets confused
because we create a new tvb containing base64 decoded data from the
HTTP header.  The hex dump thinks we are still looking at the data
from the packet.  I'm not sure how to fix this.

svn path=/trunk/; revision=5983
2002-08-13 05:36:02 +00:00
Jörg Mayer 173fe5aef4 Replace the types from sys/types.h and netinet/in.h by their glib.h
equivalents for the toplevel directory. The removal of winsock2.h will
hopefully not cause any problems under MSVC++, as those files using
struct timeval still include wtap.h, which still includes winsock2.h.

svn path=/trunk/; revision=5932
2002-08-02 23:36:07 +00:00
Guy Harris 47b147ffd1 Add an extra argument to "tvb_find_line_end()", which specifies what it
should do if it doesn't find an EOL; if FALSE, it behaves as before,
returning values that treat the line as ending at the end of the tvbuff,
and if TRUE, it returns -1, so its caller can do segment reassembly
until it gets the EOL.

Add an option to the SMTP dissector to do segment reassembly, and do
segment reassembly of the first line.

svn path=/trunk/; revision=5891
2002-07-17 06:55:29 +00:00
Guy Harris 4401f1433f Don't pass "tvb_reported_length_remaining(tvb, offset)" as the fourth
argument to "tvb_new_subset()" - just use -1 if the subset tvbuff is to
run to the end of the parent tvbuff.

svn path=/trunk/; revision=5597
2002-05-30 01:56:55 +00:00
Guy Harris f969aba211 WebDAV support, and rewrite of the method-testing code to compute the
method length and use that in all comparisons, from Blair Cooper.

Fix the check for "M-" to check also whether there are at least two
characters in the line.

svn path=/trunk/; revision=5071
2002-04-01 21:12:31 +00:00
Guy Harris eb2d6593dc Replace a bunch of "tvb_length()" and "tvb_length_remaining()" calls in
arguments to "proto_tree_add_text()", and to "proto_tree_add_XXX()" calls
that add FT_NONE or FT_PROTO items to the protocol tree, with -1.

Replace some calls to "tvb_length()" or "tvb_length_remaining()" with
calls to "tvb_reported_length()" and "tvb_reported_length_remaining()",
as those give the actual length of the data in the packet, not just the
data that happened to be captured.

svn path=/trunk/; revision=4605
2002-01-24 09:20:54 +00:00
Guy Harris ee5ca25d31 Include files from the "epan" directory and subdirectories thereof with
"epan/..." pathnames, so as to avoid collisions with header files in any
of the directories in which we look (e.g., "proto.h", as some other
package has its own "proto.h" file which it installs in the top-level
include directory).

Don't add "-I" flags to search "epan", as that's no longer necessary
(and we want includes of "epan" headers to fail if the "epan/" is left
out, so that we don't re-introduce includes lacking "epan/").

svn path=/trunk/; revision=4586
2002-01-21 07:37:49 +00:00
Guy Harris 23319ff023 Move the pointer to the "column_info" structure in the "frame_data"
structure to the "packet_info" structure; only stuff that's permanently
stored with each frame should be in the "frame_data" structure, and the
"column_info" structure is not guaranteed to hold the column values for
that frame at all times - it was only in the "frame_data" structure so
that it could be passed to dissectors, and, as all dissectors are now
passed a pointer to a "packet_info" structure, it could just as well be
put in the "packet_info" structure.

That saves memory, by shrinking the "frame_data" structure (there's one
of those per frame), and also lets us clean up the code a bit.

svn path=/trunk/; revision=4370
2001-12-10 00:26:21 +00:00
Guy Harris 75cc056222 Attach a descriptive name field type and base to dissector tables; that
specifies how the selector values used as keys in those tables are to be
displayed, and the title to use when displaying the table.

Use that information in the code to display the initial and current
entries of various dissector tables.

Have the dissector for BACnet APDUs register itself by name, and have
the BACnet NPDU dissector call it iff the BAC_CONTROL_NET bit isn't set,
rather than doing it with a dissector table.

svn path=/trunk/; revision=4358
2001-12-08 06:41:48 +00:00
Guy Harris bced8711f6 Make "dissector_add()", "dissector_delete()", and "dissector_change()"
take a dissector handle as an argument, rather than a pointer to a
dissector function and a protocol ID.  Associate dissector handles with
dissector table entries.

svn path=/trunk/; revision=4308
2001-12-03 04:00:26 +00:00
Ed Warnicke fcd5b352af Moved from using dissect_data() to using call_dissector()
svn path=/trunk/; revision=4269
2001-11-26 04:52:51 +00:00
Ed Warnicke e361502b70 Added hooks to allow the registration of heuristic subdissectors of
http.

svn path=/trunk/; revision=4217
2001-11-18 02:28:15 +00:00
Guy Harris 32b1270b4d Change from Thomas Wittwer to register HTTP dissector by name, for other
dissectors to call.

svn path=/trunk/; revision=3905
2001-09-04 01:01:48 +00:00
Guy Harris 8412393197 From Joerg Mayer: explicitly fill in all members of a
"header_field_info" structure, including the ones that are later set by
the routines to register fields.

svn path=/trunk/; revision=3561
2001-06-18 02:18:27 +00:00
Guy Harris a4e137f630 Remove more "CHECK_DISPLAY_AS_DATA()" calls and "pinfo->current_proto ="
statements.

Move the setting of the Protocol column in various dissectors before
anything is fetched from the packet, and also clear the Info column at
that point in those and some other dissectors, so that if an exception
is thrown, the columns don't reflect the previous protocol.

svn path=/trunk/; revision=2932
2001-01-22 08:54:08 +00:00
Guy Harris b7a0290c66 Provide a way by which protocols that run atop HTTP, such as IPP, can
register their port as being for XXX-over-HTTP; the HTTP dissector
registers that port in the "tcp.port" table as an HTTP port, and
registers it in its *own* table with the dissector and protocol provided
to it.

Parse the HTTP MIME headers regardless of whether we're building a
protocol tree or not; we have to do so in order to find the offset of
the payload, to hand to an XXX-over-HTTP dissector.

svn path=/trunk/; revision=2872
2001-01-11 06:30:54 +00:00
Guy Harris 918fb90728 "dissect_http()" doesn't need to be global any more; make it static.
svn path=/trunk/; revision=2870
2001-01-11 05:41:47 +00:00
Guy Harris fc72ce7336 There's no need to register port 631 twice for IPP; do so only once.
Leave notes for a future rethinking of the way we handle protocols that
run atop HTTP.

svn path=/trunk/; revision=2869
2001-01-11 05:36:09 +00:00
Guy Harris 43ccfd8054 Add an additional "protocol index" argument to "{old_}dissector_add()",
"{old_}heur_dissector_add()", "{old_}conv_dissector_add()", and
"register_dissector()", so that an entry in those tables has associated
with it the protocol index of the protocol the dissector handles (or -1,
if there is no protocol index for it).

This is for future use in a number of places.

(Arguably, "proto_register_protocol()" should take a dissector pointer
as an argument, but

	1) it'd have to handle both regular and heuristic dissectors;

	2) making it take either a "dissector_t" or a union of that and
	   a "heur_dissector_t" introduces some painful header-file
	   interdependencies

so I'm punting on that for now.  As with other Ethereal internal APIs,
these APIs are subject to change in the future, at least until Ethereal
1.0 comes out....)

svn path=/trunk/; revision=2849
2001-01-09 06:32:10 +00:00
Guy Harris 0e7c1de08a Have "proto_register_protocol()" build a list of data structures for
protocols, in addition to adding structures to the list of filterable
fields.  Give it an extra argument that specifies a "short name" for the
protocol, for use in such places as

	pinfo->current_proto;

	the dialog box for constructing filters;

	the preferences tab for the protocol;

and so on (although we're not yet using it in all those places).

Make the preference name that appears in the preferences file and the
command line for the DIAMETER protocol "diameter", not "Diameter"; the
convention is that the name in question be all-lower-case.

Make some routines and variables that aren't exported static.

Update a comment in the ICP dissector to make it clear that the
dissector won't see fragments other than the first fragment of a
fragmented datagram.

svn path=/trunk/; revision=2810
2001-01-03 06:56:03 +00:00
Guy Harris c3211e8eeb Support for HTTP methods added by GENA (the uPnP protocol), and for the
HTTP-based SSDP protocol, from David Hampton.

svn path=/trunk/; revision=2808
2001-01-03 03:40:29 +00:00
Guy Harris 0d178f826a Initialize "http_type" to HTTP_OTHERS before calling
"is_http_request_or_reply()", so that if "is_http_request_or_reply()"
decides the line is part of a request or a response it'll set "*type"
(which it does only if "*type" is HTTP_OTHERS).

svn path=/trunk/; revision=2690
2000-11-21 22:40:40 +00:00
Guy Harris 252d55d80f For each column, have both a buffer into which strings for that column
can be put, and a pointer to the string for the column, which might or
might not point to that buffer.

Add a routine "col_set_str()", which sets the string for the column to
the string passed to it as an argument; it should only be handed a
static string (a string constant would be ideal).  It doesn't do any
copying, so it's faster than "col_add_str()".

Make the routines that append to columns check whether the pointer to
the string for the column points to the buffer for the column and, if
not, copy the string for the column to the buffer for the column so that
you can append to it (so you can use "col_set_str()" and then use
"col_append_str()" or "col_append_fstr()").

Convert a bunch of "col_add_str()" calls that take a string constant as
an argument to "col_set_str()" calls.

Convert some "col_add_fstr()" calls that take a string constant as the
only argument - i.e., the format string doesn't have any "%" slots into
which to put strings for subsequent arguments to "col_set_str()" calls
(those calls are just like "col_add_str()" calls).

Replace an END_OF_FRAME reference in a tvbuffified dissector with a
"tvb_length(tvb)" call.

svn path=/trunk/; revision=2670
2000-11-19 08:54:37 +00:00
Guy Harris ee1b884ee9 Tvbuffify the STP dissector, have it register itself and have the LLC
dissector call it through a handle, and make it static.

Give "dissect_data()" an "offset" argument, so dissectors can use it to
dissect part of the packet without having to cook up a new tvbuff.

Go back to using "dissect_data()" to dissect the data in an IPP request.

svn path=/trunk/; revision=2651
2000-11-16 07:35:43 +00:00
Guy Harris b606de7ea3 Tvbuffify the IPP dissector, and have it register itself rather than
being a global function.

The HTTP dissector should set "pinfo->current_proto" to HTTP even if we
consider the packet to be IPP, so that if we run past the end of a
tvbuff while dissecting HTTP stuff it's reported as a problem with HTTP,
not IPP.

svn path=/trunk/; revision=2648
2000-11-15 08:27:14 +00:00