Commit graph

235 commits

Author SHA1 Message Date
Guy Harris
cfc9ec9f21 Don't duplicate the "gtk_radio_button_new_with_label()" and
"gtk_check_button_new_with_label()" code, just call those routines and
then fix up the label, as suggested by Dermot Musgrove on the gtk
mailing list.

svn path=/trunk/; revision=2009
2000-05-26 07:32:56 +00:00
Gilbert Ramirez
d7e6e0e384 Add wtap-int.h. Move definitions relevant to the internal workins of wiretap
to that file, leave public definitions in wtap.h.

Rename "union pseudo_header" to "union wtap_pseudo_header".
Make the wtap_pseudo_header pointer available in packet_info struct.

svn path=/trunk/; revision=1989
2000-05-19 23:07:04 +00:00
Guy Harris
f3d90d30a4 Remove the "union pseudo_header" from the "frame_data" structure;
there's no need to keep it around in memory - when the frame data is
read in when handing a frame, read in the information, if any, necessary
to reconstruct the frame header, and reconstruct it.  This saves some
memory.

This requires that the seek-and-read function be implemented inside
Wiretap, and that the Wiretap handle remain open even after we've
finished reading the file sequentially.

This also points out that we can't really do X.25-over-Ethernet
correctly, as we don't know where the direction (DTE->DCE or DCE->DTE)
flag is stored; it's not clear how the Ethernet type 0x0805 for X.25
Layer 3 is supposed to be handled in any case.  We eliminate
X.25-over-Ethernet support (until we find out what we're supposed to
do).

svn path=/trunk/; revision=1975
2000-05-18 09:09:50 +00:00
Guy Harris
7bf3c7523b Have "proto_tree_is_visible" false except when we're in the middle of
doing something that requires that the text for protocol tree entries be
generated, i.e.

	1) initialize it to FALSE;

	2) have every routine that sets it clear it when it's done;

	3) when printing packets, set it to TRUE only if we're not just
	   printing packet summary lines;

and then get rid of settings to FALSE made unnecessary as a result of
those changes.

This makes sure it's not set when it doesn't have to be (which causes
the protocol tree code to format the text when it doesn't have to,
wasting CPU time).

svn path=/trunk/; revision=1973
2000-05-18 08:35:01 +00:00
Guy Harris
33f9afee30 Graham Bloice's changes to make clicking on a column header cause the
display to be sorted by the value in that column (and to reverse the sort
order the next time you click on that column).

Use "F<>" rather than "B<>" for file names in the Ethereal man page.

svn path=/trunk/; revision=1931
2000-05-10 06:00:22 +00:00
Guy Harris
740bb55521 Make the "Preferences" dialog box use the new utilities to make the Esc
key cancel the dialog box.

svn path=/trunk/; revision=1923
2000-05-08 07:58:20 +00:00
Guy Harris
158df5470a Keep a pointer to the current "Preferences" window, if any - if not, the
pointer is NULL - so that, instead of doing nothing if the user selects
"Edit->Preferences" when there's already a "Preferences" dialog box
open, we raise and de-iconify that window.

Connect the preferences dialog box and any file selection dialog box
opened from its Print tab, so that:

	if the preferences dialog box goes away, so does the file
	selection dialog box (as it no longer has a text widget into
	which it can stuff the selected file name);

	if the "File:" button is clicked when there's already a file
	selection dialog box open, we just reactivate that existing
	dialog box rather than popping up a new one.

Catch the ESC key in the file selection dialog box popped up for the
"File:" button in the Print tab of the Preferences dialog box, and make
it cancel the file selection dialog box.

svn path=/trunk/; revision=1922
2000-05-08 07:54:54 +00:00
Guy Harris
9bb3a841e3 Catch the ESC key in the file selection dialog boxes popped up for
"File->Open", "File->Save As", and the "File:" buttons in the Capture
Preferences and Print dialog boxes, and make it cancel the file
selection dialog box.

svn path=/trunk/; revision=1921
2000-05-08 07:13:40 +00:00
Guy Harris
be87df37bf Set up the buttons in the "Capture Preferences" dialog box to use
mnemonics.

Give the button, in the "Display Options" dialog box, that controls
whether name resolution is enabled or not the same label ("Enable name
resolution") as the equivalent button in the "Capture Preferencs" dialog
box.

svn path=/trunk/; revision=1920
2000-05-08 05:51:37 +00:00
Guy Harris
f0991d4a51 Connect the capture preferences dialog box and any file selection dialog
box it has open, so that:

	if the capture preferences dialog box goes away, so does the
	file selection dialog box (as it no longer has a text widget
	into which it can stuff the selected file name);

	if the "File:" button is clicked when there's already a file
	selection dialog box open, we just reactivate that existing
	dialog box rather than popping up a new one.

svn path=/trunk/; revision=1919
2000-05-08 05:42:54 +00:00
Guy Harris
b6f55c2966 Keep a pointer to the current "Print" window, if any - if not, the
pointer is NULL - so that, instead of doing nothing if the user selects
"File->print" when there's already a "Print" dialog box open, we raise
and de-iconify that window.

Connect the print dialog box and any file selection dialog box it has
open, so that:

	if the print dialog box goes away, so does the filter dialog box
	(as it no longer has a text widget into which it can stuff the
	selected file name);

	if the "File:" button is clicked when there's already a file
	selection dialog box open, we just reactivate that existing
	dialog box rather than popping up a new one.

svn path=/trunk/; revision=1918
2000-05-08 05:35:08 +00:00
Guy Harris
63d3730e11 Keep a pointer to the current "Display Options" window, if any - if not,
the pointer is NULL - so that, instead of doing nothing if the user
selects "Display->Options" when there's already a "Display Options"
dialog box open, we raise and de-iconify that window.

Register a "destroy" callback for the "Display Options" window, so that
no matter how it's destroyed, even if it's destroyed by a window manager
close button rather than by clicking the "OK" or "Cancel" button, we
note that fact by clearing the pointer to the current "Display Options"
window, so that if the user then selects "Display->Options", we know
that we need to pop a new "Display Options" window up.

svn path=/trunk/; revision=1917
2000-05-08 05:12:19 +00:00
Guy Harris
73d9b5f47c Set up the buttons in the "Find Frame" and "Print" dialog boxes to use
mnemonics.

svn path=/trunk/; revision=1916
2000-05-08 04:53:21 +00:00
Guy Harris
e160ffa08c Add functions to create buttons whose labels specify mnemonics, i.e.
that contain an "_" preceding a letter, indicating that the letter is to
be underlined in the label, and that if the key for that letter is
pressed (either with Alt or without it) in the dialog box to which the
button belongs, and the widget with the input focus doesn't do anything
with that button, the button is sent the "clicked" signal.

Attach mnemonics to the buttons in the "Display->Options" dialog box.

svn path=/trunk/; revision=1915
2000-05-08 04:23:46 +00:00
Guy Harris
e701346096 Make the display options dialog box use the new utilities to make the
Esc key cancel the dialog box.

svn path=/trunk/; revision=1914
2000-05-08 01:23:16 +00:00
Guy Harris
3d8fa758b5 Get rid of some unnecessary (and "#if 0"ed-out) includes.
svn path=/trunk/; revision=1913
2000-05-08 01:11:46 +00:00
Guy Harris
6dd7421ac7 Make the "Print" dialog box use the new utilities to make the Return
key print the packets and make the Esc key cancel the dialog box.

svn path=/trunk/; revision=1907
2000-05-03 07:50:38 +00:00
Guy Harris
d96eb452ac Make the summary dialog box use the new utilities to make the Return
and Esc keys close the dialog box; to make the Return key work, we have
to make the "Close" button the default widget.

svn path=/trunk/; revision=1906
2000-05-03 07:44:12 +00:00
Guy Harris
2d51ff4e4f Make dialog boxes created with "simple_dialog()" use the new utilities
to make the Esc key cancel the dialog box (or accept it, if it has no
"Cancel" button).

svn path=/trunk/; revision=1905
2000-05-03 07:19:38 +00:00
Guy Harris
4509614da1 Make the "Capture Preferences" dialog box use the new utilities to make
the Return key start the capture and make the Esc key cancel the dialog
box.

svn path=/trunk/; revision=1904
2000-05-03 07:09:40 +00:00
Guy Harris
ebdbff44e8 Add some utilities to:
set the "activate" signal for a widget to call a routine to
	activate the "OK" button for a dialog box;

	set the "key_press_event" signal for a top-level dialog window
	to call a routine to activate the "Cancel" button for a dialog
	box if the key being pressed is the <Esc> key;

to make it easier to drive dialog boxes entirely from the keyboard.

Make the "Find Frame" and "Go To Frame" dialog boxes use those
utilities.

svn path=/trunk/; revision=1903
2000-05-02 08:04:31 +00:00
Guy Harris
f3feac3b1d Put in a comment to note what we'd do if we ever wanted to make the
contents of the popup menu differ based on what row or column we're in.

svn path=/trunk/; revision=1902
2000-05-02 07:44:37 +00:00
Guy Harris
592f641bfc Make "P" a mnemonic for "Print" in the "File" menu.
svn path=/trunk/; revision=1901
2000-05-02 03:21:41 +00:00
Guy Harris
9d13d08eef Use "isprint()", rather than "isgraph()" followed by a check for space,
as "isprint()" is defined to be "isgraph() or space" (or, historically
speaking, "isgraph()", which came later, is defined to be "isprint()
except for space).

Make the characters in "packet_hex_print()" be "guchar" rather than
"gchar", so that they don't get sign-extended if the 8th bit is set, and
thus don't cause "isprint()" and company to give random answers.

svn path=/trunk/; revision=1893
2000-04-27 20:39:21 +00:00
Gilbert Ramirez
32c34e33ea Print spaces as spaces (instead of '.') in the hex dump pane.
Thanks to "Dan Warburton" <warb@tgf.tc.faa.gov> for catching that error.

svn path=/trunk/; revision=1892
2000-04-27 17:04:37 +00:00
Guy Harris
eef42ea392 On Win32, build Ethereal as a Windows-subsystem program rather than a
console-subsystem program, so that when not run from a shell window it
doesn't cause a shell window to be popped up.  (Yes, this means that any
messages it prints, when not popped up from a shell window, get lost,
but the same is true of Ethereal on UNIX/X.)  Trick for doing this
shamelessly stolen from the Win32 port of the GIMP.

We do not want to build Tethereal or editcap as Windows-subsystem
programs, however, so we take the "/SUBSYSTEM" flag out of LDFLAGS and
put it into the link commands for Ethereal, Tethereal, and editcap.

svn path=/trunk/; revision=1857
2000-04-14 09:00:25 +00:00
Gilbert Ramirez
b218a8f550 Consolidate flags in struct frame_data, and add "visited" flag. Use
it in SOCKS dissector.

(Okay, how many times am I going to modify packet.h today, forcing you
to re-compile everything? :-)

svn path=/trunk/; revision=1850
2000-04-13 20:39:38 +00:00
Guy Harris
c577b0ef60 As we always have to have a filter string (thanks to a bug in the Linux
libpcap), if we have a null filter string we report it as "no filter",
just as we would do for a null filter string pointer.

svn path=/trunk/; revision=1844
2000-04-13 09:17:09 +00:00
Guy Harris
db471396fa Have separate global variables for the current "File:Open" and
"File:Save {As}" dialog boxes, if any.

svn path=/trunk/; revision=1827
2000-04-10 18:40:13 +00:00
Gilbert Ramirez
0bc96179d8 Disable "Update list of packets in real tiem" and
"Automatic scrolling in live capture" for Win32.

svn path=/trunk/; revision=1817
2000-04-07 15:37:59 +00:00
Guy Harris
1a460aa453 Define "popup_menu_object" only in "gtk/menu.c", and just declare it as
an "extern" in "gtk/menu.h", to avoid complaints from the linker on some
platforms.

svn path=/trunk/; revision=1810
2000-04-06 06:52:10 +00:00
Guy Harris
e59a0d5260 The Win32 port of libpcap requires that programs with which it's built
be built as multi-threaded programs; add "/MT" to the list of compiler
flags.

Add "clean" rules in subdirectories, and run subdirectory "nmake -f
Makefile.nmake clean" when "nmake -f Makefile.nmake clean" is done in
the top-level directory, so that "nmake -f Makefile.nmake clean" cleans
everything up.

svn path=/trunk/; revision=1791
2000-04-04 08:22:13 +00:00
Guy Harris
c2b1feea05 Turn "ethereal_proto_init()" and "ethereal_proto_cleanup()" into
"dissect_init()" and "dissect_cleanup()", in "packet.c", so that we
don't duplicate those routines in Ethereal and Tethereal (and so on),
and don't have to remember to update N different versions of them if we
have to change the way we do one-time initialization and cleanup.

svn path=/trunk/; revision=1790
2000-04-04 07:03:07 +00:00
Guy Harris
5f0fc518c7 Use the new split between protocol registration and protocol handoff
registration routines to get rid of the special handling of ONC RPC
protocols - dissectors for ONC RPC-based protocols should register their
protocol, fields, and ETT values in a protocol registration routine, and
register themselves with the ONC RPC dissector in their protocol handoff
routine, so that the latter is done after the ONC RPC dissector's
protocol registration routine is called, so that the data structures
needed when dissectors for ONC RPC protocols register themselves with
the ONC RPC dissector have been initialized.

Get rid of "init_dissect_rpc()", which initializes said data structures;
do that in "proto_register_rpc()" instead.

svn path=/trunk/; revision=1789
2000-04-04 06:46:41 +00:00
Guy Harris
3ee409084c Move the creation of, and registration of protocols known to UDP in, the
hash table attached to "udp.port" out of "init_dissect_udp()" into
"proto_register_udp()", so that it's done the way TCP does it, and then
get rid of "init_dissect_udp()".

svn path=/trunk/; revision=1781
2000-04-03 09:41:31 +00:00
Guy Harris
c6e50f9bc9 Split "filter_dialog_cb()" into "filter_dialog_cb()", which pops up a
"global" dialog box when "Edit:Filters" is selected, so that the list of
filters can be edited, and "filter_browse_cb()", which pops up a dialog
box associated with a "Filter:" button and a text entry widget attached
to that button, so that a filter can be selected or saved (although it
also supports the same editing that the "global" dialog box does).

Have "filter_dialog_cb()" connect the window in which the "Filter:"
button lives and the filter dialog box, so that:

	if the window in which the "Filter:" button lives goes away, so
	does the filter dialog box (as it no longer has a text widget
	into which it can stuff the selected filter);

	if the "Filter:" button is clicked when there's already a filter
	dialog box open, we just reactivate that existing dialog box
	rather than popping up a new one.

Also keep a pointer to the "global" filter dialog box, so that we also
arrange that there's only one of them (by reactivating the existing on
if "Edit:Filters" is selected when there's already a "global" filter
dialog box open).

Keep around pointers to the dialog boxes that contain the "Filter:"
buttons, so that we can arrange that there be only one of them (that was
a side-effect of an earlier attempt at fixing the problems described
above, but it's still useful for keeping multiple competing dialog boxes
from being open - there's more of that to be done).

Make the pointer to the "Open Capture File" dialog box widget static to
"file_dlg.c" - nobody outside of "file_dlg.c cares about it.

svn path=/trunk/; revision=1774
2000-04-01 12:03:42 +00:00
Guy Harris
5549f62efd There's no need to catch the "delete_event" signal on "Follow TCP
Stream" windows - the window should always be deleted in that situation,
so there's no need for a signal handler that might return TRUE (meaning
"don't delete the window"), and the "destroy" handler gets called when
the window actually gets destroyed, so there's no need to do any cleanup
in the "delete_event" handler.

Catch the "delete_event" signal on the main window in a routine with the
right signature, and that returns FALSE so that the window actually gets
deleted.

Call "close_cap_file()" in the callback for the "File:Quit" menu item
(which is also called by the "delete_event" handler for the main
window), rather than calling it after "gtk_main()" returns -
"close_cap_file()" manipulates stuff in the main window, and if we do so
after "gtk_main()" returns, it appears that the main window may have
disappeared (if we are exiting because the user deleted the main
window), in which case we can get crashes or other errors when
"close_cap_file()" tries to manipulate stuff in the main window.

There's no need to catch the "destroy" signal on the main window - we do
some of the cleanup in the handler for "delete_event" (we have to, for
reasons described above), and we do the rest of it after the main
routine returns.

svn path=/trunk/; revision=1773
2000-04-01 11:30:53 +00:00
Guy Harris
4173af0077 Exit from Ethereal by making the main loop exit, so that any quit
routines we register get called.

Register the "follow TCP stream" windows with "gtk_quit_add_destroy()",
so that, when Ethereal exits, they all get destroyed; this means that
their destroy callbacks get called, which means that they get to delete
their temporary files, so that, if you exit Ethereal without manually
closing the "follow TCP stream" windows, the temporary files don't get
left around.

Exit from Ethereal's "main()" function by calling "gtk_exit()", rather
than "exit()", so that we do whatever cleanup GTK+ requires.  (We used
to call "gtk_exit()" in the callback for the "File:Quit" menu item and
the "delete" callback for the main window, but we now just call
"gtk_main_quit()" so that we exit from the main loop.)

svn path=/trunk/; revision=1772
2000-04-01 10:23:01 +00:00
Guy Harris
239109b3e9 No work need be done when a summary dialog box is destroyed, or when the
window manager tries to delete it, so no callback is needed for the
"destroy" or "delete_event" signals (grabs are, at least in GTK+ 1.2.7,
removed when a widget is destroyed, and there's no need for the destroy
callback to destroy the widget itself; the delete event handler *could*,
for example, pop up a dialog box saying "Do you really want to close
this?", and allow the user to back out of the operation, but there's
no unsaved work that would be lost by closing the window, so there's no
point in having a delete event handler that does that).

svn path=/trunk/; revision=1771
2000-04-01 09:16:49 +00:00
Guy Harris
7dbe2ffaf2 Get rid of the "Find Frame" and "Go To Frame" items under "Display"; we
put them under "Edit" a while ago.

svn path=/trunk/; revision=1764
2000-03-29 22:39:19 +00:00
Gilbert Ramirez
c317b042a8 Add getopt.c (from GNU libc) for use on Win32.
Ethereal/win32 now supports command-line options.
Tethereal now compiles on win32, except for the fact that I haven't
put the Makefile.nmake changes in for that yet.

svn path=/trunk/; revision=1758
2000-03-28 20:20:11 +00:00
Guy Harris
3f6f2f4eaa Ralf Schneider's change to boost the maximum size of a line in the
"filters" file (we also make it a #define so you only have to change it
in one place).

svn path=/trunk/; revision=1755
2000-03-28 06:20:08 +00:00
Guy Harris
87d1359345 Give the entry box in the "Find Frame" and "Go To Frame" dialog boxes
the initial focus, so you can start typing immediately.

svn path=/trunk/; revision=1722
2000-03-15 08:54:24 +00:00
Guy Harris
050979d522 We already set the foreground and background color for every frame,
which means we're already doing a "do something to the last row in the
packet list" operation on every frame we add to the list, so adding a
call to "gtk_clist_set_row_data()" won't make matters worse.

In addition, we already set one column in a row on a "change time
format" operation, so finding the row for a frame by calling
"gtk_clist_find_row_from_data()" doesn't turn a constant-time operation
into a linear-time operation, it just cranks the proportionality
constant up - it was quadratic before, alas, and it's still quadratic.

Adding calls to "gtk_clist_find_row_from_data()" to the "Find Frame" and
"Go To Frame" code does add an extra linear operation there, but those
operations shouldn't be common - and "Go To Frame", going to the last
frame on an ~100,000-frame big capture file, was quick, at least on my
450 MHz Pentium II machine, so maybe it won't be too bad.

And "select_packet()" either has to search the frame table for the frame
with the specified row number, or has to call "gtk_clist_get_row_data()"
to do that - the first is linear in the position of the frame in the
frame table, and the latter is linear in its position in the CList, and
the latter is less than or equal to the former, so the only thing making
it worse would be a change in the proportionality constant.

So it probably won't hurt performance by much.

Furthermore, if we add the ability to sort the display on an arbitrary
column, or to delete frames from the display - both of which are in the
wish list - storing the row number of the frame in the "frame_data"
structure won't necessarily work, as the row number can change out from
under us.

Therefore, reinstate the old way of doing things, where we associate
with each row a pointer to the "frame_data" structure for the row, using
"gtk_clist_set_row_data()".

svn path=/trunk/; revision=1703
2000-03-08 06:48:01 +00:00
Guy Harris
6c2961e447 Use GtkScrolledWindows to add scrollbars to the hex/ASCII panes and to
the "Follow TCP Stream" displays; that means we can use the same GTK+
calls to set the scrollbar placement on them that is used to set it on
other widgets.

Keep a list of all the GtkScrolledWindows whose scrollbar placement we
control with the GUI preference item for that, and change them all when
the GUI preference item is changed (which means that the GUI preference
item now applies to the "Follow TCP Stream" window as well as to the
hex/ASCII panes).

svn path=/trunk/; revision=1676
2000-03-02 07:05:57 +00:00
Guy Harris
f8df32fefa Use the "destroy" signal on a packet popup window to find out when to
destroy the data structure for that window, rather than doing so when
the "tree-unselect-row" signal catcher is unhooked from the tree view.

svn path=/trunk/; revision=1672
2000-03-01 06:50:18 +00:00
Guy Harris
7c11334000 Jeff Foster's changes, with my additions, to allow the user to pop up a
window showing the protocol tree and hex/ASCII data for the currently
selected packet.

svn path=/trunk/; revision=1670
2000-02-29 06:24:41 +00:00
Laurent Deniel
e7d574dd39 Add "Resolve Name" item in detailed tree popup.
svn path=/trunk/; revision=1658
2000-02-20 14:52:28 +00:00
Gilbert Ramirez
9f0954f198 Add GTK+-1.2.7 fixes to gtkclist.c, w/o removing our speed enhancements.
svn path=/trunk/; revision=1641
2000-02-17 18:27:04 +00:00
Guy Harris
0fa3ae9df0 When exiting Ethereal, don't just unlink any temporary capture file,
call "close_cap_file()", which will unlink the current capture file if
it's a temporary file - but will do so after closing it; certain OSes
whose names begin with "W" don't let you remove a file if it's currently
open, so if you exit Ethereal, without closing the capture first, after
doing a capture on one of those OSes, the temporary file won't be
removed.

svn path=/trunk/; revision=1628
2000-02-13 10:36:06 +00:00