aboutsummaryrefslogtreecommitdiffstats
path: root/capture.c
AgeCommit message (Collapse)AuthorFilesLines
2000-07-21Get rid of "Playback" in capture window title.Gilbert Ramirez1-2/+2
svn path=/trunk/; revision=2150
2000-07-20Use ESD_TYPE_CRIT for most errors (the model used by various GUIs seemsGuy Harris1-8/+13
to use "warning" dialog boxes only to warn the user "if you do that, bad things may happen" *and* to offer them the option either to drive on or quit, so perhaps ESD_TYPE_CRIT should be used for all errors). However, put "Ethereal: Error" rather than "Ethereal: Critical" in the title bar, in the hopes that it'll make it clearer that Something Bad Happened. If the user specifies that captures should be saved to a user-specified file rather than a temporary file, report errors trying to create that file with "file_open_error_message()". Make the "for_writing" argument to "file_open_error_message()" a "gboolean", as it's either TRUE (if the file is being opened for writing) or FALSE (if it's being opened for reading). Report EISDIR as "XXX is a directory (folder), not a file.". svn path=/trunk/; revision=2143
2000-07-05To make windows modal, use "gtk_window_set_modal()" rather thanGuy Harris1-2/+2
"gtk_grab_add()"; the former makes it a bit clearer what's being done, and I think it may be considered the right way to do it (GTK+ remembers the state of the window and appears to add and remove the grab as appropriate). svn path=/trunk/; revision=2113
2000-06-27Add routines to Wiretap to allow a client of Wiretap to get:Guy Harris1-5/+59
a pointer to the "wtap_pkthdr" structure for an open capture file; a pointer to the "wtap_pseudo_header" union for an open capture file; a pointer to the packet buffer for an open capture file; so that a program using "wtap_read()" in a loop can get at those items. Keep, in a "capture_file" structure, an indicator of whether: no file is open; a file is open, and being read; a file is open, and is being read, but the user tried to quit out of reading the file (e.g., by doing "File/Quit"); a file is open, and has been completely read. Abort if we try to close a capture that's being read if the user hasn't tried to quit out of the read. Have "File/Quit" check if a file is being read; if so, just set the state indicator to "user tried to quit out of it", so that the code reading the file can do what's appropriate to clean up, rather than closing the file out from under that code and causing crashes. Have "read_cap_file()" read the capture file with a loop using "wtap_read()", rather than by using "wtap_loop()"; have it check after reading each packet whether the user tried to abort the read and, if so, close the capture and return an indication that the read was aborted by the user. Otherwise, return an indication of whether the read completely succeeded or failed in the middle (and, if it failed, return the error code through a pointer). Have "continue_tail_cap_file()" read the capture file with a loop using "wtap_read()", rather than by using "wtap_loop()"; have it check after reading each packet whether the user tried to abort the read and, if so, quit the loop, and after the loop finishes (even if it read no packets), return an indication that the read was aborted by the user if that happened. Otherwise, return an indication of whether the read completely succeeded or failed in the middle (and, if it failed, return the error code through a pointer). Have "finish_tail_cap_file()" read the capture file with a loop using "wtap_read()", rather than by using "wtap_loop()"; have it check after reading each packet whether the user tried to abort the read and, if so, quit the loop, and after the loop finishes (even if it read no packets), close the capture and return an indication that the read was aborted by the user if that happened. Otherwise, return an indication of whether the read completely succeeded or failed in the middle (and, if it failed, return the error code through a pointer). Have their callers check whether the read was aborted or not and, if it was, bail out in the appropriate fashion (exit if it's reading a file specified by "-r" on the command line; exit the main loop if it's reading a file specified with File->Open; kill the capture child if it's "continue_tail_cap_file()"; exit the main loop if it's "finish_tail_cap_file()". svn path=/trunk/; revision=2095
2000-06-27Patch from Ben Fowler to rename the global variable "cf" to "cfile", toGuy Harris1-65/+65
make it easier to use grep to find all references to it without getting a lot of false hits and to check, after allocating the memory chunk for "frame_data" structures, that the allocation succeeded. svn path=/trunk/; revision=2092
2000-06-15Changes from Graham Bloice to support "Update list of packets in realGuy Harris1-19/+131
time" during captures on Win32. svn path=/trunk/; revision=2074
2000-06-15Mark Clayton's patch to add support for capturing on ATM interfaces onGuy Harris1-1/+5
Linux (call the until-now-unused "capture_clip()" routine for each packet). svn path=/trunk/; revision=2070
2000-05-26Support for SCTP in the capture dialog, from Michael Tuexen.Guy Harris1-2/+11
svn path=/trunk/; revision=2012
2000-05-25Convert dissect_ppp() and friends to use tvbuffs.Gilbert Ramirez1-2/+2
(the ip_tcp_options stuff is still non-tvbuff until I convert ip and tcp). Add preliminary fix for Linux ISDN ippp devices (similar watch was posted to ethereal-users, but did not use tvbuffs). Change packet-raw.c to call capture_ppp()/dissect_ppp() in the case where the frame starts with FF:03. We had been calling capture_ip()/dissect_ip() at byte offset 4, but I think this is for historical reasons of packet-raw.c and packet-ip.c existing before packet-ppp.c. svn path=/trunk/; revision=1998
2000-05-19Move the closes of the save file FD around:Guy Harris1-10/+18
"capture()" should ensure that it's closed before returning, but it was only getting closed by "wtap_dump_close()" on success, so close the raw FD on failure (no "wtap_dump" stream is opened on failure, so we just close the raw FD); in a "update the display as packets arrive" capture, we should close the FD in the parent as soon as the fork is done, before even testing whether the fork succeeded (and we might as well do the same with the write side of the sync pipe). svn path=/trunk/; revision=1988
2000-05-19Close capture file descriptor.Gilbert Ramirez1-1/+5
From Mark Burton <markb@ordern.com> svn path=/trunk/; revision=1986
2000-05-18Remove the "union pseudo_header" from the "frame_data" structure;Guy Harris1-2/+2
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-06Check whether "pipe()" succeeds, and pop up a message box and quit if itGuy Harris1-3/+12
doesn't. svn path=/trunk/; revision=1912
2000-05-06If the attempt to execute Ethereal in a child process fails, have theGuy Harris1-85/+117
child process send to the parent a message indicating why it failed, so that the parent can report that, and then exit. If the attempt to create the child process to run Ethereal fails, pop up a dialog box indicating that this happened. Change the fork code a bit, to make it easier to substitute, on Win32 systems, code that does a "CreateProcess()" for the small chunk of code that does the fork and exec. svn path=/trunk/; revision=1910
2000-03-21Paul Welchinski's changes to, on Win32 systems:Guy Harris1-1/+18
properly handle ASCII vs. Unicode in the list of interfaces; initialize Winsock before starting a capture, so that the code in the Win32 libpcap to get the IP address and netmask by translating the host name to an IP address works. svn path=/trunk/; revision=1737
2000-02-19Used register_init_routine() to register "reinit_x25_hashtable()" as aOlivier Abad1-6/+1
routine to be called every time a new capture file is opened instead of calling it in read_cap_file() and do_capture(). svn path=/trunk/; revision=1651
2000-02-18Renamed init_dissect_x25() to reinit_x25_hashtable() and actually used it !Olivier Abad1-1/+6
This function is used to re-initialize the hash table used by the X.25 dissector to record the upper layer protocol used by each VC. The hash table should be re-initialized each time we read / start a new capture. I moved the definition of the function from packet.h to packet-x25.h, and added calls to reinit_x25_hashtable() in read_cap_file (file.c) and do_capture (capture.c). svn path=/trunk/; revision=1644
2000-02-15Create a header file for every packet-*.c file. Prune the packet.h file.Gilbert Ramirez1-1/+8
This change allows you to add a new packet-*.c file and not cause a recompilation of everything that #include's packet.h Add the plugin_api.[ch] files ot the plugins/Makefile.am packaging list. Add #define YY_NO_UNPUT 1 to the lex source so that the yyunput symbol is not defined, squelching a compiler complaint when compiling the generated C file. svn path=/trunk/; revision=1637
2000-02-09Integrate Ed Meaney's <emeaney@altiga.com> changes for using libpcapGilbert Ramirez1-2/+14
from WinDump with Ethereal. We now have packet capturing on Win32. :) svn path=/trunk/; revision=1612
2000-02-02Also listen for GDK_INPUT_EXCEPTION on the sync pipe. On Solaris 2.6Gilbert Ramirez1-3/+3
this is needed to get the last message from the pipe. svn path=/trunk/; revision=1595
2000-01-30added support for clicking capture window's close box to stop captureNathan Neulinger1-1/+11
svn path=/trunk/; revision=1586
2000-01-26In case the "ts" field of a libpcap per-packet header isn't a "structGuy Harris1-2/+7
timeval" (if, say, it's a "struct bpf_timeval", with member sizes wired to 32 bits, as it appears to be in SuSE 6.3 and will, I think, be in the 0.5 release of libpcap), copy the members of that field to the "ts" field of the Wiretap per-packet header (which also lets us make it not a "struct timeval" as well). svn path=/trunk/; revision=1572
2000-01-23In "dissect_eth()", update "pi.len" and "pi.captured_len" regardless ofGuy Harris1-7/+13
whether we're building a protocol tree or not. Make "dissect_eth()" use "BYTES_ARE_IN_FRAME()" to see if we have a full Ethernet header - it can be called with a non-zero offset, if Ethernet frames are encapsulated inside other frames (e.g., ATM LANE). Make capture routines take an "offset" argument if the corresponding dissect routine takes one (for symmetry, and for Cisco ISL or any other protocol that encapsulates Ethernet or Token-Ring frames inside other frames). Pass the frame lengths to capture routines via the "pi" structure, rather than as an in-line argument, so that they can macros such as "BYTES_ARE_IN_FRAME()" the way the corresponding dissect routines do. Make capture routines update "pi.len" and "pi.captured_len" the same way the corresponding diseect routines do, if the capture routines then call other capture routines. Make "capture_vlan()" count as "other" frames that are too short, the way other capture routines do. svn path=/trunk/; revision=1525
2000-01-20Joerg Mayer's updates to the VINES dissector and to protocol layersGuy Harris1-2/+11
above VINES. svn path=/trunk/; revision=1514
2000-01-12Enough is enough. Requiring anybody who uses Ethereal on Linux toGuy Harris1-2/+45
update their libpcap probably isn't going to scale - the increasing frequency with which "Ethereal hangs when I try to capture packets" shows up on "ethereal-dev" suggests that, unless and until a libpcap with the "select()" in it becomes ubiquitous on Linux, that'll be the source of a constant support burden - so we'll just put the "select()" in Ethereal if it's being built for Linux. (Putting it in for platforms where the read timeout argument to "pcap_open_live()" works adds an extra useless system call at best and, at worst, could make Ethereal not work - "select()" doesn't work on "/dev/bpf" devices on FreeBSD 3.3, at least, unless you're in "immediate mode", and, whilst "immediate mode" would make Ethereal respond more quickly when packets arrive, it might cause Ethereal to respond too quickly, doing reads for every new packet rather than waiting for multiple packets to arrive and reading them all with one "read()", which appears to be at least part of the intent of the read timeout on "/dev/bpf" devices in BSD.) svn path=/trunk/; revision=1451
2000-01-03Take the "simple_dialog()" stuff out of "ui_util.h" and "gtk/ui_util.c",Guy Harris1-2/+2
and move it to "simple_dialog.h" and "gtk/simple_dialog.c". svn path=/trunk/; revision=1414
2000-01-03Have "gtk/menu.c" (and, in the future, code for other UIs) export a setGuy Harris1-2/+1
of routines to enable and disable various sets of menu items; call only those routines, not routines to enable or disable particular menu items, from files in the top-level directory, as other UIs may not refer to menu items with path strings of the sort used in GTK+, and as this buries knowledge of the menu items available in "gtk/menu.c" rather than requiring stuff outside of "gtk/menu.c" to know what menu items exist. svn path=/trunk/; revision=1410
1999-12-09Move the GTK+ implementations of various UI utilities out of "util.c"Guy Harris1-1/+2
into "gtk/ui_util.c", and move the declarations of those UI utilities out of "util.h" into "ui_util.h". (The header file is in the top-level directory, rather than the "gtk" directory, because it declares window-system-independent interfaces to routines with window-system-dependent implementations.) Add to "gtk/ui_util.c" a routine to set the window and icon title. Use that routine to make the title of an Ethereal top-level window be {filename} - Ethereal if there's a capture open, and have "{filename}" be "<capture>" if it's a temporary capture file. svn path=/trunk/; revision=1255
1999-11-30Add IPX to packet stats during capture.Gilbert Ramirez1-2/+11
svn path=/trunk/; revision=1173
1999-11-30Allow the user to save either all of the current capture, or only theGuy Harris1-17/+24
packets that are currently being displayed from that capture. Centralize the code to control whether "File:Save" and "File:Save As" are enabled (and *always* have "File:Save As" enabled if you have a capture; "File:Save" is enabled only if you have a live capture you've not yet saved, although it does the same thing as "File:Save As"). Have the "save_file" member of a "capture_file" structure represent *only* the file currently being *written* to by a capture, and, if there is no capture currently in progress, have it be NULL; the name of the file currently being *displayed" is in the "filename" member, and an "is_tempfile" member indicates whether it's a temporary file for a live capture or not. Have "close_cap_file()" delete the current capture file if it's a temporary capture file that hasn't been saved (in its entirety - saving selected frames doesn't count). Do the same (if there *is* a current capture file) when exiting. The "Ready to load or capture" message is the only statusbar message in the "main" context; "close_cap_file()" should never pop it, it should only pop whatever message exists in the "file" context, and thus has no need to take, as an argument, the context for the message it should pop. Update the man page to reflect the new behavior of "File:Save" and "File:Save As", and to reflect recent changes to "Display:Match Selected". svn path=/trunk/; revision=1170
1999-11-29Move the callback for input available on the sync pipe from "file.c" toGuy Harris1-15/+229
"capture.c", along with the other code that deals with the sync pipe. Close the sync pipe, and get rid of the temporary capture file, on errors. Split "tail_cap_file()" into routines to set up to read from the capture file, to read a specified number of packets from it when told to do so by the child process, and to read the rest of the capture file and finish up the capture, to provide the code in "capture.c" the hooks it needs. Have a common routine to set the status bar to report the file name and number of dropped packets, to use both when reading in a capture file in its entirety all at once and when done with a "read it while the capture is writing to it" live capture. svn path=/trunk/; revision=1137
1999-11-28Pass the right argument to the "simple_dialog()" call to put up the "weGuy Harris1-2/+2
couldn't open the temporary capture file" dialog box. svn path=/trunk/; revision=1132
1999-11-25On a "wtap_dump_close()" error, if it's not one of the errors for whichGuy Harris1-10/+3
we put up a special error, just use "wtap_strerror()" to generate the error message - it'll handle both "errno" errors and Wiretap-specific errors. svn path=/trunk/; revision=1108
1999-10-20Move GTK-related stuff out of globals.h and put it in gtk/gtkglobals.hGilbert Ramirez1-1/+2
svn path=/trunk/; revision=896
1999-10-02Get rid of "-F" - "-S" works, and has a more convenient UI.Guy Harris1-78/+62
Print a usage message if an illegal command-line flag is seen. Clean up the usage message a bit. svn path=/trunk/; revision=755
1999-10-02Move the declaration of global variables involved with packet captureGuy Harris1-1/+5
from "globals.h" to "capture.h". Only "capture.c" needs to include <pcap.h>; move the include of <pcap.h> from "capture.h" to "capture.c". We no longer need any DLT_ defines (that's handled inside Wiretap); remove the defines of DLT_ from "capture.h". svn path=/trunk/; revision=753
1999-10-02Have "do_capture()" take, as an argument, a pointer to the name of theGuy Harris1-23/+24
file to which to write the capture; if it's NULL, create a temporary file and use that. Have "-w" set a local variable, which starts out null, and, for "-k" captures, call "do_capture()" and pass it that local variable as an argument; this lets you do "-k" without "-w", which makes it use a temporary file for the capture. This means "run_capture()" no longer serves a useful purpose, as its only caller is "do_capture()"; swallow it into "do_capture()". svn path=/trunk/; revision=748
1999-10-02A child process for a "-S" or "-F" capture should *always* exit when theGuy Harris1-26/+28
capture is done; make it do so, and don't bother passing it a "-Q" flag to tell it to do so. "capture()" is called in two places; in one place, it's in a child process, and it shouldn't read in the capture file. Move the reading of the capture file out of "capture()" itself to the place where we *should* read in the capture file after it returns. Also, have it return an indication of whether it succeeded or failed, so we know whether we should read in the capture file. svn path=/trunk/; revision=747
1999-10-01Move the definitions of "sync_mode", "sync_pipe", "fork_mode",Guy Harris1-1/+7
"quit_after_cap", and "capture_child" from "gtk/main.c" to "capture.c", so that the definitions don't have to be duplicated in "main.c" for other UIs if, as, and when we do versions of Ethereal with other UIs. svn path=/trunk/; revision=746
1999-09-30Add a new global flag "capture_child", which is TRUE if we're a childGuy Harris1-20/+38
process for a sync mode or fork mode capture. Have that flag control whether we do things that *only* the parent or *only* the child should do, rather than basing it solely on the setting of "sync_mode" or "fork_mode" (or, in the case of stuff done in the child process either in sync mode or fork mode, rather than basing it on the setting of those flags at all). Split "do_capture()" into a "run_capture()" routine that starts a capture (possibly by forking off and execing a child process, if we're supposed to do sync mode or fork mode captures), and that assumes the file to which the capture is to write has already been opened and that "cf.save_file_fd" is the file descriptor for that file, and a "do_capture()" routine that creates a temporary file, getting an FD for it, and calls "run_capture()". Use "run_capture()", rather than "capture()", for "-k" captures, so that it'll do the capture in a child process if "-S" or "-F" was specified ("do_capture()" won't do because "-k" captures should write to the file specified by the "-w" flag, not some random temporary file). For child process captures, however, just use "capture()" - the child process shouldn't itself fork off a child if we're in sync or fork mode, and should just write to the file whose file descriptor was specified by the "-W" flag on the command line. All this allows you to do "ethereal -S -w <file> -i <interface> -k" to start a sync mode capture from the command line. svn path=/trunk/; revision=740
1999-09-30If we're given the "-k" flag, don't start the capture until after we've:Guy Harris1-3/+3
popped up the top-level window (so that it looks like a capture started from "Capture/Start"); initialized the colors (so that we don't dump core when reading in the capture file); popped up any message box for failure to read the preferences file. This means we start the capture in "main()", rather than in the realize callback for the main window, so get rid of that callback. If we're a child process that's just capturing to a file for our parent to read, however, we shouldn't pop up the top-level window, because that's our parent's job; when running that child, set its "argv[0]" to a special name, so that 1) it shows up in a "ps" with a special name; 2) we don't have to invent Yet Another Flag to say "you're the child". (We may want to use the name to turn on *all* behaviors that the capture child, and only the capture child, should exhibit.) If "-w" and "-k" were both specified, attempt to open the file specified by "-w" and, if that succeeds, set "cf.save_file_fd" to refer to it, so that "-w" plus "-k" works again, rather than popping up a "The file to which the capture would be saved ... could not be opened: Bad file descriptor." message box. svn path=/trunk/; revision=739
1999-09-25Squelch a (justified, although the child process *shouldn't* ever sendGuy Harris1-2/+2
us, at that point, a character with the 8th bit set) complaint about a "char" array subscript in an "isdigit()" call by making the character unsigned. svn path=/trunk/; revision=724
1999-09-23Close the capture file in "do_capture()", right before unlinking theGuy Harris1-14/+8
current capture file if it's a temporary file, out of paranoia (so that we don't get into a state where we have a capture file open but unlinked - it's probably harmless to be in that state, as the file will remain around until close, modulo NFS fun, and we may never be in that state for very long, but I'd rather have it obviously stated in the code). Remove the close in "capture()", and put one before the other call to "capture()", in "main_realize_cb()" (is that call necessary, e.g. if you pass "-r <filename>" *and* "-k", for some perverse reason, as command-line arguments?). If "cf.save_file" is non-null, free it before setting it, regardless of whether it refers to a temporary file name or not. svn path=/trunk/; revision=712
1999-09-23If we forcibly turn off "fork_mode" if the user doesn't enable "UpdateGuy Harris1-4/+4
list of packets in real time" in the "Capture/Start" dialog box, "ethereal -F" won't work - you get your choice of non-forked capture or "-S". Don't have "fork_mode" track "sync_mode"; instead, in those places where we check for "fork_mode", check for "sync_mode" as well. svn path=/trunk/; revision=711
1999-09-23In fork mode, close the capture file in "do_capture()", because theGuy Harris1-44/+63
child will nuke that file before we get to open the capture in "tail_cap_file()" - assuming we do, because the capture may not start. If we fail while writing to, or closing, a capture file we've opened for writing, don't treat that as a capture error, as we may have saved at least some packets to the capture file (that's the way it worked before my recent checkins). svn path=/trunk/; revision=710
1999-09-23Move the toolkit-independent code to create a temporary capture file,Guy Harris1-224/+372
and to fork off and run a separate copy of "ethereal" for "-S" and "-F" captures or just call "capture()" otherwise, out of "gtk/capture_dlg.c" and into a routine in "capture.c". If the attempt to create said temporary capture file fails, pop up a dialog box and don't do the capture. Have the child capture process send a message upstream after it either successfully starts the capture and syncs out the header of the capture file, or fails to start the capture; the message indicates whether it succeeded or failed, and, if it failed, includes a failure message. This: avoids the use of a signal, and thus means we don't have to worry about whether to capture the signal, or whether to start or stop capturing depending on whether this particular capture is in sync mode or not; lets us pop up the message box for the error in the parent process if we're in sync mode, rather than doing it in the child, which didn't work well. Add a check button to the Capture/Start dialog box, so that we can control, for each capture, whether it's to be done in sync mode or not. svn path=/trunk/; revision=708
1999-09-11"capture.c" doesn't do socket "ioctl"s any more - the code to do that isGuy Harris1-5/+1
now in "gtk/capture_dlg.c" - so it doesn't need to include <sys/sockio.h> on, for example, Solaris... ...but "gtk/capture_dlg.c" does need to include it. "gtk/capture_dlg.c" also may need to include "snprintf.h", as it uses "snprintf()". svn path=/trunk/; revision=655
1999-09-09More shuffling of GTK-related routines to gtk subdirectory.Gilbert Ramirez1-433/+3
svn path=/trunk/; revision=636
1999-09-09More shuffling of GTK-related files to gtk subdirectory.Gilbert Ramirez1-2/+2
svn path=/trunk/; revision=635
1999-09-08Don't include in the list of interfaces offered by the "capture" dialogGuy Harris1-6/+32
box interfaces we can't open; this filters out loopback interfaces on e.g. Solaris (which you can't get at with a DLPI device, so you can't capture traffic on them), and also means we don't report *any* interfaces if you don't have permission to open any (which means you don't have permission to capture packets). If we don't find any interfaces, pop up a message box saying so. Free up the interface "ioctl" buffer, and close the socket we were using, before returning from "get_interface_list()". If "get_interface_list()" returns a null pointer (meaning it failed), don't pop up the "capture" dialog box. svn path=/trunk/; revision=634