From Mark C. Brown:
[obnox/wireshark/wip.git] / tshark.c
1 /* tshark.c
2  *
3  * $Id$
4  *
5  * Wireshark - Network traffic analyzer
6  * By Gerald Combs <gerald@wireshark.org>
7  * Copyright 1998 Gerald Combs
8  *
9  * Text-mode variant, by Gilbert Ramirez <gram@alumni.rice.edu>
10  * and Guy Harris <guy@alum.mit.edu>.
11  *
12  * This program is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public License
14  * as published by the Free Software Foundation; either version 2
15  * of the License, or (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25  */
26
27 #ifdef HAVE_CONFIG_H
28 # include "config.h"
29 #endif
30
31 #include <stdlib.h>
32 #include <stdio.h>
33 #include <string.h>
34 #include <ctype.h>
35 #include <locale.h>
36 #include <limits.h>
37
38 #ifdef HAVE_UNISTD_H
39 #include <unistd.h>
40 #endif
41
42 #include <errno.h>
43
44 #ifdef HAVE_FCNTL_H
45 #include <fcntl.h>
46 #endif
47
48 #include <signal.h>
49
50 #ifdef HAVE_SYS_STAT_H
51 # include <sys/stat.h>
52 #endif
53
54 #ifdef NEED_STRERROR_H
55 #include "strerror.h"
56 #endif
57
58 #ifdef NEED_GETOPT_H
59 #include "getopt.h"
60 #endif
61
62 #include <glib.h>
63 #include <epan/epan.h>
64 #include <epan/filesystem.h>
65 #include <epan/privileges.h>
66 #include <wiretap/file_util.h>
67
68 #include "globals.h"
69 #include <epan/timestamp.h>
70 #include <epan/packet.h>
71 #include "file.h"
72 #include "disabled_protos.h"
73 #include <epan/prefs.h>
74 #include <epan/column.h>
75 #include "print.h"
76 #include <epan/addr_resolv.h>
77 #include "util.h"
78 #include "clopts_common.h"
79 #include "cmdarg_err.h"
80 #include "version_info.h"
81 #include <epan/conversation.h>
82 #include <epan/plugins.h>
83 #include "register.h"
84 #include "conditions.h"
85 #include "capture_stop_conditions.h"
86 #include "ringbuffer.h"
87 #include "capture_ui_utils.h"
88 #include <epan/epan_dissect.h>
89 #include <epan/tap.h>
90 #include <epan/stat_cmd_args.h>
91 #include <epan/timestamp.h>
92 #include <epan/ex-opt.h>
93
94 #ifdef HAVE_LIBPCAP
95 #include <pcap.h>
96 #include <setjmp.h>
97 #include "capture-pcap-util.h"
98 #include "pcapio.h"
99 #include <wiretap/wtap-capture.h>
100 #ifdef _WIN32
101 #include "capture-wpcap.h"
102 #include "capture_errs.h"
103 #endif /* _WIN32 */
104 #include "capture.h"
105 #include "capture_loop.h"
106 #include "capture_sync.h"
107 #endif /* HAVE_LIBPCAP */
108 #include "epan/emem.h"
109 #include "log.h"
110 #include <epan/funnel.h>
111
112 /*
113  * This is the template for the decode as option; it is shared between the
114  * various functions that output the usage for this parameter.
115  */
116 static const gchar decode_as_arg_template[] = "<layer_type>==<selector>,<decode_as_protocol>";
117
118 static nstime_t first_ts;
119 static nstime_t prev_ts;
120 static GString *comp_info_str, *runtime_info_str;
121
122 static gboolean print_packet_info;      /* TRUE if we're to print packet information */
123 /*
124  * The way the packet decode is to be written.
125  */
126 typedef enum {
127         WRITE_TEXT,     /* summary or detail text */
128         WRITE_XML       /* PDML or PSML */
129         /* Add CSV and the like here */
130 } output_action_e;
131 static output_action_e output_action;
132 static gboolean do_dissection;  /* TRUE if we have to dissect each packet */
133 static gboolean verbose;
134 static gboolean print_hex;
135 static gboolean line_buffered;
136 static guint32 cum_bytes = 0;
137 static print_format_e print_format = PR_FMT_TEXT;
138 static print_stream_t *print_stream;
139
140 /*
141  * Standard secondary message for unexpected errors.
142  */
143 static const char please_report[] =
144     "Please report this to the Wireshark developers";
145
146 #ifdef HAVE_LIBPCAP
147 /*
148  * TRUE if we're to print packet counts to keep track of captured packets.
149  */
150 static gboolean print_packet_counts;
151
152
153 static loop_data ld;
154
155 #ifdef HAVE_LIBPCAP
156 static capture_options capture_opts;
157
158
159 #ifdef SIGINFO
160 static gboolean infodelay;      /* if TRUE, don't print capture info in SIGINFO handler */
161 static gboolean infoprint;      /* if TRUE, print capture info after clearing infodelay */
162 #endif /* SIGINFO */
163 #endif /* HAVE_LIBPCAP */
164
165
166 static int capture(void);
167 static void capture_pcap_cb(u_char *, const struct pcap_pkthdr *,
168   const u_char *);
169 static void report_counts(void);
170 #ifdef _WIN32
171 static BOOL WINAPI capture_cleanup(DWORD);
172 #else /* _WIN32 */
173 static void capture_cleanup(int);
174 #ifdef SIGINFO
175 static void report_counts_siginfo(int);
176 #endif /* SIGINFO */
177 #endif /* _WIN32 */
178 #endif /* HAVE_LIBPCAP */
179
180 static int load_cap_file(capture_file *, char *, int);
181 static gboolean process_packet(capture_file *cf, gint64 offset,
182     const struct wtap_pkthdr *whdr, union wtap_pseudo_header *pseudo_header,
183     const guchar *pd);
184 static void show_capture_file_io_error(const char *, int, gboolean);
185 static void show_print_file_io_error(int err);
186 static gboolean write_preamble(capture_file *cf);
187 static gboolean print_packet(capture_file *cf, epan_dissect_t *edt);
188 static gboolean write_finale(void);
189 static const char *cf_open_error_message(int err, gchar *err_info,
190     gboolean for_writing, int file_type);
191
192 static void open_failure_message(const char *filename, int err,
193     gboolean for_writing);
194 static void failure_message(const char *msg_format, va_list ap);
195 static void read_failure_message(const char *filename, int err);
196
197 capture_file cfile;
198
199
200 static void list_capture_types(void) {
201     int i;
202
203     fprintf(stderr, "editcap: The available capture file types for \"F\":\n");
204     for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) {
205       if (wtap_dump_can_open(i))
206         fprintf(stderr, "    %s - %s\n",
207           wtap_file_type_short_string(i), wtap_file_type_string(i));
208     }
209 }
210
211 static void
212 print_usage(gboolean print_ver)
213 {
214   FILE *output;
215
216   if (print_ver) {
217     output = stdout;
218     fprintf(output,
219         "TShark " VERSION "%s\n"
220         "Dump and analyze network traffic.\n"
221         "See http://www.wireshark.org for more information.\n"
222         "\n"
223         "%s",
224         svnversion, get_copyright_info());
225   } else {
226     output = stderr;
227   }
228   fprintf(output, "\n");
229   fprintf(output, "Usage: tshark [options] ...\n");
230   fprintf(output, "\n");
231
232 #ifdef HAVE_LIBPCAP
233   fprintf(output, "Capture interface:\n");
234   fprintf(output, "  -i <interface>           name or idx of interface (def: first non-loopback)\n");
235   fprintf(output, "  -f <capture filter>      packet filter in libpcap filter syntax\n");
236   fprintf(output, "  -s <snaplen>             packet snapshot length (def: 65535)\n");
237   fprintf(output, "  -p                       don't capture in promiscuous mode\n");
238 #ifdef _WIN32
239   fprintf(output, "  -B <buffer size>         size of kernel buffer (def: 1MB)\n");
240 #endif
241   fprintf(output, "  -y <link type>           link layer type (def: first appropriate)\n");
242   fprintf(output, "  -D                       print list of interfaces and exit\n");
243   fprintf(output, "  -L                       print list of link-layer types of iface and exit\n");
244   fprintf(output, "\n");
245   fprintf(output, "Capture stop conditions:\n");
246   fprintf(output, "  -c <packet count>        stop after n packets (def: infinite)\n");
247   fprintf(output, "  -a <autostop cond.> ...  duration:NUM - stop after NUM seconds\n");
248   fprintf(output, "                           filesize:NUM - stop this file after NUM KB\n");
249   fprintf(output, "                              files:NUM - stop after NUM files\n");
250   /*fprintf(output, "\n");*/
251   fprintf(output, "Capture output:\n");
252   fprintf(output, "  -b <ringbuffer opt.> ... duration:NUM - switch to next file after NUM secs\n");
253   fprintf(output, "                           filesize:NUM - switch to next file after NUM KB\n");
254   fprintf(output, "                              files:NUM - ringbuffer: replace after NUM files\n");
255 #endif  /* HAVE_LIBPCAP */
256
257   /*fprintf(output, "\n");*/
258   fprintf(output, "Input file:\n");
259   fprintf(output, "  -r <infile>              set the filename to read from (no pipes or stdin!)\n");
260
261   fprintf(output, "\n");
262   fprintf(output, "Processing:\n");
263   fprintf(output, "  -R <read filter>         packet filter in Wireshark display filter syntax\n");
264   fprintf(output, "  -n                       disable all name resolutions (def: all enabled)\n");
265   fprintf(output, "  -N <name resolve flags>  enable specific name resolution(s): \"mntC\"\n");
266   fprintf(output, "  -d %s ...\n", decode_as_arg_template);
267   fprintf(output, "                           \"Decode As\", see the man page for details\n");
268   fprintf(output, "                           Example: tcp.port==8888,http\n");
269
270   /*fprintf(output, "\n");*/
271   fprintf(output, "Output:\n");
272   fprintf(output, "  -w <outfile|->           set the output filename (or '-' for stdout)\n");
273   fprintf(output, "  -F <output file type>    set the output file type, default is libpcap\n");
274   fprintf(output, "                           an empty \"-F\" option will list the file types\n");
275   fprintf(output, "  -V                       add output of packet tree        (Packet Details)\n");
276   fprintf(output, "  -S                       display packets even when writing to a file\n");
277   fprintf(output, "  -x                       add output of hex and ASCII dump (Packet Bytes)\n");
278   fprintf(output, "  -T pdml|ps|psml|text     output format of text output (def: text)\n");
279   fprintf(output, "  -t ad|a|r|d|e            output format of time stamps (def: r: rel. to first)\n");
280   fprintf(output, "  -l                       flush output after each packet\n");
281   fprintf(output, "  -q                       be more quiet on stdout (e.g. when using statistics)\n");
282   fprintf(output, "  -X <key>:<value>         eXtension options, see the man page for details\n");
283   fprintf(output, "  -z <statistics>          various statistics, see the man page for details\n");
284
285   fprintf(output, "\n");
286   fprintf(output, "Miscellaneous:\n");
287   fprintf(output, "  -h                       display this help and exit\n");
288   fprintf(output, "  -v                       display version info and exit\n");
289   fprintf(output, "  -o <name>:<value> ...    override preference setting\n");
290 }
291
292 /*
293  * For a dissector table, print on the stream described by output,
294  * its short name (which is what's used in the "-d" option) and its
295  * descriptive name.
296  */
297 static void
298 display_dissector_table_names(char *table_name, const char *ui_name,
299                               gpointer output)
300 {
301   fprintf((FILE *)output, "\t%s (%s)\n", table_name, ui_name);
302 }
303
304 /*
305  * For a dissector handle, print on the stream described by output,
306  * the filter name (which is what's used in the "-d" option) and the full
307  * name for the protocol that corresponds to this handle.
308  */
309 static void
310 display_dissector_names(const gchar *table _U_, gpointer handle, gpointer output)
311 {
312   int                proto_id;
313   const gchar*       proto_filter_name;
314   const gchar*       proto_ui_name;
315
316   proto_id = dissector_handle_get_protocol_index((dissector_handle_t)handle);
317
318   if (proto_id != -1) {
319     proto_filter_name = proto_get_protocol_filter_name(proto_id);
320     proto_ui_name =  proto_get_protocol_name(proto_id);
321     g_assert(proto_filter_name != NULL);
322     g_assert(proto_ui_name != NULL);
323
324     fprintf((FILE *)output, "\t%s (%s)\n",
325             proto_filter_name,
326             proto_ui_name);
327   }
328 }
329
330 /*
331  * The protocol_name_search structure is used by find_protocol_name_func()
332  * to pass parameters and store results
333  */
334 struct protocol_name_search{
335   gchar              *searched_name;  /* Protocol filter name we are looking for */
336   dissector_handle_t  matched_handle; /* Handle for a dissector whose protocol has the specified filter name */
337   guint               nb_match;       /* How many dissectors matched searched_name */
338 };
339 typedef struct protocol_name_search *protocol_name_search_t;
340
341 /*
342  * This function parses all dissectors associated with a table to find the
343  * one whose protocol has the specified filter name.  It is called
344  * as a reference function in a call to dissector_table_foreach_handle.
345  * The name we are looking for, as well as the results, are stored in the
346  * protocol_name_search struct pointed to by user_data.
347  * If called using dissector_table_foreach_handle, we actually parse the
348  * whole list of dissectors.
349  */
350 static void
351 find_protocol_name_func(const gchar *table _U_, gpointer handle, gpointer user_data)
352
353 {
354   int                         proto_id;
355   const gchar                *protocol_filter_name;
356   protocol_name_search_t      search_info;
357
358   g_assert(handle);
359
360   search_info = (protocol_name_search_t)user_data;
361
362   proto_id = dissector_handle_get_protocol_index((dissector_handle_t)handle);
363   if (proto_id != -1) {
364     protocol_filter_name = proto_get_protocol_filter_name(proto_id);
365     g_assert(protocol_filter_name != NULL);
366     if (strcmp(protocol_filter_name, search_info->searched_name) == 0) {
367       /* Found a match */
368       if (search_info->nb_match == 0) {
369         /* Record this handle only if this is the first match */
370         search_info->matched_handle = (dissector_handle_t)handle; /* Record the handle for this matching dissector */
371       }
372       search_info->nb_match++;
373     }
374   }
375 }
376
377 /*
378  * Print all layer type names supported.
379  * We send the output to the stream described by the handle output.
380  */
381
382 static void
383 fprint_all_layer_types(FILE *output)
384
385 {
386   dissector_all_tables_foreach_table(display_dissector_table_names, (gpointer)output);
387 }
388
389 /*
390  * Print all protocol names supported for a specific layer type.
391  * table_name contains the layer type name in which the search is performed.
392  * We send the output to the stream described by the handle output.
393  */
394
395 static void
396 fprint_all_protocols_for_layer_types(FILE *output, gchar *table_name)
397
398 {
399   dissector_table_foreach_handle(table_name,
400                                  display_dissector_names,
401                                  (gpointer)output);
402 }
403
404 /*
405  * The function below parses the command-line parameters for the decode as
406  * feature (a string pointer by cl_param).
407  * It checks the format of the command-line, searches for a matching table
408  * and dissector.  If a table/dissector match is not found, we display a
409  * summary of the available tables/dissectors (on stderr) and return FALSE.
410  * If everything is fine, we get the "Decode as" preference activated,
411  * then we return TRUE.
412  */
413 static gboolean
414 add_decode_as(const gchar *cl_param)
415 {
416   gchar                        *table_name;
417   guint32                       selector;
418   gchar                        *decoded_param;
419   gchar                        *remaining_param;
420   gchar                        *selector_str;
421   gchar                        *dissector_str;
422   dissector_handle_t            dissector_matching;
423   dissector_table_t             table_matching;
424   ftenum_t                      dissector_table_selector_type;
425   struct protocol_name_search   user_protocol_name;
426
427 /* The following code will allocate and copy the command-line options in a string pointed by decoded_param */
428
429   g_assert(cl_param);
430   decoded_param = g_malloc( sizeof(gchar) * (strlen(cl_param) + 1) ); /* Allocate enough space to have a working copy of the command-line parameter */
431   g_assert(decoded_param);
432   strcpy(decoded_param, cl_param);
433
434
435   /* The lines below will parse this string (modifying it) to extract all
436     necessary information.  Note that decoded_param is still needed since
437     strings are not copied - we just save pointers. */
438
439   /* This section extracts a layer type (table_name) from decoded_param */
440   table_name = decoded_param; /* Layer type string starts from beginning */
441
442   remaining_param = strchr(table_name, '=');
443   if (remaining_param == NULL) {
444     cmdarg_err("Parameter \"%s\" doesn't follow the template \"%s\"", cl_param, decode_as_arg_template);
445     /* If the argument does not follow the template, carry on anyway to check
446        if the table name is at least correct.  If remaining_param is NULL,
447        we'll exit anyway further down */
448   }
449   else {
450     *remaining_param = '\0'; /* Terminate the layer type string (table_name) where '=' was detected */
451   }
452
453   /* Remove leading and trailing spaces from the table name */
454   while ( table_name[0] == ' ' )
455     table_name++;
456   while ( table_name[strlen(table_name) - 1] == ' ' )
457     table_name[strlen(table_name) - 1] = '\0'; /* Note: if empty string, while loop will eventually exit */
458
459 /* The following part searches a table matching with the layer type specified */
460   table_matching = NULL;
461
462 /* Look for the requested table */
463   if ( !(*(table_name)) ) { /* Is the table name empty, if so, don't even search for anything, display a message */
464     cmdarg_err("No layer type specified"); /* Note, we don't exit here, but table_matching will remain NULL, so we exit below */
465   }
466   else {
467     table_matching = find_dissector_table(table_name);
468     if (!table_matching) {
469       cmdarg_err("Unknown layer type -- %s", table_name); /* Note, we don't exit here, but table_matching will remain NULL, so we exit below */
470     }
471   }
472
473   if (!table_matching) {
474     /* Display a list of supported layer types to help the user, if the
475        specified layer type was not found */
476     cmdarg_err("Valid layer types are:");
477     fprint_all_layer_types(stderr);
478   }
479   if (remaining_param == NULL || !table_matching) {
480     /* Exit if the layer type was not found, or if no '=' separator was found
481        (see above) */
482     g_free(decoded_param);
483     return FALSE;
484   }
485
486   if (*(remaining_param + 1) != '=') { /* Check for "==" and not only '=' */
487     cmdarg_err("WARNING: -d requires \"==\" instead of \"=\". Option will be treated as \"%s==%s\"", table_name, remaining_param + 1);
488   }
489   else {
490     remaining_param++; /* Move to the second '=' */
491     *remaining_param = '\0'; /* Remove the second '=' */
492   }
493   remaining_param++; /* Position after the layer type string */
494
495   /* This section extracts a selector value (selector_str) from decoded_param */
496
497   selector_str = remaining_param; /* Next part starts with the selector number */
498
499   remaining_param = strchr(selector_str, ',');
500   if (remaining_param == NULL) {
501     cmdarg_err("Parameter \"%s\" doesn't follow the template \"%s\"", cl_param, decode_as_arg_template);
502     /* If the argument does not follow the template, carry on anyway to check
503        if the selector value is at least correct.  If remaining_param is NULL,
504        we'll exit anyway further down */
505   }
506   else {
507     *remaining_param = '\0'; /* Terminate the selector number string (selector_str) where ',' was detected */
508   }
509
510   dissector_table_selector_type = get_dissector_table_selector_type(table_name);
511
512   switch (dissector_table_selector_type) {
513
514   case FT_UINT8:
515   case FT_UINT16:
516   case FT_UINT24:
517   case FT_UINT32:
518     /* The selector for this table is an unsigned number.  Parse it as such.
519        There's no need to remove leading and trailing spaces from the
520        selector number string, because sscanf will do that for us. */
521     if ( sscanf(selector_str, "%u", &selector) != 1 ) {
522       cmdarg_err("Invalid selector number \"%s\"", selector_str);
523       g_free(decoded_param);
524       return FALSE;
525     }
526     break;
527
528   case FT_STRING:
529   case FT_STRINGZ:
530     /* The selector for this table is a string. */
531     break;
532
533   default:
534     /* There are currently no dissector tables with any types other
535        than the ones listed above. */
536     g_assert_not_reached();
537   }
538
539   if (remaining_param == NULL) {
540     /* Exit if no ',' separator was found (see above) */
541     cmdarg_err("Valid protocols for layer type \"%s\" are:", table_name);
542     fprint_all_protocols_for_layer_types(stderr, table_name);
543     g_free(decoded_param);
544     return FALSE;
545   }
546
547   remaining_param++; /* Position after the selector number string */
548
549   /* This section extracts a protocol filter name (dissector_str) from decoded_param */
550
551   dissector_str = remaining_param; /* All the rest of the string is the dissector (decode as protocol) name */
552
553   /* Remove leading and trailing spaces from the dissector name */
554   while ( dissector_str[0] == ' ' )
555     dissector_str++;
556   while ( dissector_str[strlen(dissector_str) - 1] == ' ' )
557     dissector_str[strlen(dissector_str) - 1] = '\0'; /* Note: if empty string, while loop will eventually exit */
558
559   dissector_matching = NULL;
560
561   /* We now have a pointer to the handle for the requested table inside the variable table_matching */
562   if ( ! (*dissector_str) ) { /* Is the dissector name empty, if so, don't even search for a matching dissector and display all dissectors found for the selected table */
563     cmdarg_err("No protocol name specified"); /* Note, we don't exit here, but dissector_matching will remain NULL, so we exit below */
564   }
565   else {
566     user_protocol_name.nb_match = 0;
567     user_protocol_name.searched_name = dissector_str;
568     user_protocol_name.matched_handle = NULL;
569
570     dissector_table_foreach_handle(table_name, find_protocol_name_func, &user_protocol_name); /* Go and perform the search for this dissector in the this table's dissectors' names and shortnames */
571
572     if (user_protocol_name.nb_match != 0) {
573       dissector_matching = user_protocol_name.matched_handle;
574       if (user_protocol_name.nb_match > 1) {
575         cmdarg_err("WARNING: Protocol \"%s\" matched %u dissectors, first one will be used", dissector_str, user_protocol_name.nb_match);
576       }
577     }
578     else {
579       /* OK, check whether the problem is that there isn't any such
580          protocol, or that there is but it's not specified as a protocol
581          that's valid for that dissector table.
582          Note, we don't exit here, but dissector_matching will remain NULL,
583          so we exit below */
584       if (proto_get_id_by_filter_name(dissector_str) == -1) {
585         /* No such protocol */
586         cmdarg_err("Unknown protocol -- \"%s\"", dissector_str);
587       } else {
588         cmdarg_err("Protocol \"%s\" isn't valid for layer type \"%s\"",
589                 dissector_str, table_name);
590       }
591     }
592   }
593
594   if (!dissector_matching) {
595     cmdarg_err("Valid protocols for layer type \"%s\" are:", table_name);
596     fprint_all_protocols_for_layer_types(stderr, table_name);
597     g_free(decoded_param);
598     return FALSE;
599   }
600
601 /* This is the end of the code that parses the command-line options.
602    All information is now stored in the variables:
603    table_name
604    selector
605    dissector_matching
606    The above variables that are strings are still pointing to areas within
607    decoded_parm.  decoded_parm thus still needs to be kept allocated in
608    until we stop needing these variables
609    decoded_param will be deallocated at each exit point of this function */
610
611
612   /* We now have a pointer to the handle for the requested dissector
613      (requested protocol) inside the variable dissector_matching */
614   switch (dissector_table_selector_type) {
615
616   case FT_UINT8:
617   case FT_UINT16:
618   case FT_UINT24:
619   case FT_UINT32:
620     /* The selector for this table is an unsigned number. */
621     dissector_change(table_name, selector, dissector_matching);
622     break;
623
624   case FT_STRING:
625   case FT_STRINGZ:
626     /* The selector for this table is a string. */
627     dissector_change_string(table_name, selector_str, dissector_matching);
628     break;
629
630   default:
631     /* There are currently no dissector tables with any types other
632        than the ones listed above. */
633     g_assert_not_reached();
634   }
635   g_free(decoded_param); /* "Decode As" rule has been succesfully added */
636   return TRUE;
637 }
638
639 static void
640 log_func_ignore (const gchar *log_domain _U_, GLogLevelFlags log_level _U_,
641     const gchar *message _U_, gpointer user_data _U_)
642 {
643 }
644
645 static char *
646 output_file_description(const char *fname)
647 {
648   char *save_file_string;
649
650   /* Get a string that describes what we're writing to */
651   if (strcmp(fname, "-") == 0) {
652     /* We're writing to the standard output */
653     save_file_string = g_strdup("standard output");
654   } else {
655     /* We're writing to a file with the name in save_file */
656     save_file_string = g_strdup_printf("file \"%s\"", fname);
657   }
658   return save_file_string;
659 }
660
661 int
662 main(int argc, char *argv[])
663 {
664   char                *init_progfile_dir_error;
665   int                  opt, i;
666   extern char         *optarg;
667   gboolean             arg_error = FALSE;
668
669 #ifdef _WIN32
670   WSADATA               wsaData;
671 #endif  /* _WIN32 */
672
673   char                *gpf_path, *pf_path;
674   char                *gdp_path, *dp_path;
675   int                  gpf_open_errno, gpf_read_errno;
676   int                  pf_open_errno, pf_read_errno;
677   int                  gdp_open_errno, gdp_read_errno;
678   int                  dp_open_errno, dp_read_errno;
679   int                  err;
680 #ifdef HAVE_LIBPCAP
681   gboolean             list_link_layer_types = FALSE;
682   gboolean             start_capture = FALSE;
683 #else
684   gboolean             capture_option_specified = FALSE;
685 #endif
686   gboolean             quiet = FALSE;
687   int                  out_file_type = WTAP_FILE_PCAP;
688   gchar               *cf_name = NULL, *rfilter = NULL;
689 #ifdef HAVE_PCAP_OPEN_DEAD
690   struct bpf_program   fcode;
691 #endif
692   dfilter_t           *rfcode = NULL;
693   e_prefs             *prefs;
694   char                 badopt;
695   GLogLevelFlags       log_flags;
696   int                  status;
697   int                  optind_initial;
698
699 #define OPTSTRING_INIT "a:b:c:d:Df:F:G:hi:lLnN:o:pqr:R:s:St:T:vVw:xX:y:z:"
700 #ifdef HAVE_LIBPCAP
701 #ifdef _WIN32
702 #define OPTSTRING_WIN32 "B:"
703 #else
704 #define OPTSTRING_WIN32 ""
705 #endif  /* _WIN32 */
706 #else
707 #define OPTSTRING_WIN32 ""
708 #endif  /* HAVE_LIBPCAP */
709
710   static const char    optstring[] = OPTSTRING_INIT OPTSTRING_WIN32;
711
712   /*
713    * Attempt to get the pathname of the executable file.
714    */
715   init_progfile_dir_error = init_progfile_dir(argv[0]);
716   if (init_progfile_dir_error != NULL) {
717     fprintf(stderr, "tshark: Can't get pathname of tshark program: %s.\n",
718             init_progfile_dir_error);
719   }
720
721   /*
722    * Get credential information for later use.
723    */
724   get_credential_info();
725
726   /*
727    * in order to have the -X otps assigned before the wslua machine starts
728    * we need to getopts before epan_init() gets called
729    */
730   opterr = 0;
731   optind_initial = optind;
732   
733   while ((opt = getopt(argc, argv, optstring)) != -1) {
734           switch (opt) {
735                   case 'X':
736                           ex_opt_add(optarg);
737                           break;
738                   default:
739                           break;
740           }
741   }
742   
743   optind = optind_initial;
744   opterr = 1;
745
746   /* nothing more than the standard GLib handler, but without a warning */
747   log_flags =
748                     G_LOG_LEVEL_ERROR|
749                     G_LOG_LEVEL_CRITICAL|
750                     G_LOG_LEVEL_WARNING|
751                     G_LOG_LEVEL_MESSAGE|
752                     G_LOG_LEVEL_INFO|
753                     G_LOG_LEVEL_DEBUG|
754                     G_LOG_FLAG_FATAL|G_LOG_FLAG_RECURSION;
755
756   g_log_set_handler(NULL,
757                     log_flags,
758                     log_func_ignore, NULL /* user_data */);
759   g_log_set_handler(LOG_DOMAIN_CAPTURE_CHILD,
760                     log_flags,
761                     log_func_ignore, NULL /* user_data */);
762
763   initialize_funnel_ops();
764
765 #ifdef HAVE_LIBPCAP
766   capture_opts_init(&capture_opts, NULL /* cfile */);
767 #endif
768
769   timestamp_set_type(TS_RELATIVE);
770   timestamp_set_precision(TS_PREC_AUTO);
771
772   /* Register all dissectors; we must do this before checking for the
773      "-G" flag, as the "-G" flag dumps information registered by the
774      dissectors, and we must do it before we read the preferences, in
775      case any dissectors register preferences. */
776   epan_init(PLUGIN_DIR,register_all_protocols,register_all_protocol_handoffs,
777             failure_message,open_failure_message,read_failure_message);
778
779   /* Register all tap listeners; we do this before we parse the arguments,
780      as the "-z" argument can specify a registered tap. */
781
782   /* we register the plugin taps before the other taps because
783      stats_tree taps plugins will be registered as tap listeners
784      by stats_tree_stat.c and need to registered before that */
785 #ifdef HAVE_PLUGINS
786   register_all_plugin_tap_listeners();
787 #endif
788   register_all_tap_listeners();
789
790   /* Now register the preferences for any non-dissector modules.
791      We must do that before we read the preferences as well. */
792   prefs_register_modules();
793
794   /* If invoked with the "-G" flag, we dump out information based on
795      the argument to the "-G" flag; if no argument is specified,
796      for backwards compatibility we dump out a glossary of display
797      filter symbols.
798
799      XXX - we do this here, for now, to support "-G" with no arguments.
800      If none of our build or other processes uses "-G" with no arguments,
801      we can just process it with the other arguments. */
802   if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
803     if (argc == 2)
804       proto_registrar_dump_fields(1);
805     else {
806       if (strcmp(argv[2], "fields") == 0)
807         proto_registrar_dump_fields(1);
808       else if (strcmp(argv[2], "fields2") == 0)
809         proto_registrar_dump_fields(2);
810       else if (strcmp(argv[2], "fields3") == 0)
811         proto_registrar_dump_fields(3);
812       else if (strcmp(argv[2], "protocols") == 0)
813         proto_registrar_dump_protocols();
814       else if (strcmp(argv[2], "values") == 0)
815         proto_registrar_dump_values();
816       else if (strcmp(argv[2], "decodes") == 0)
817         dissector_dump_decodes();
818       else if (strcmp(argv[2], "defaultprefs") == 0)
819         write_prefs(NULL);
820       else if (strcmp(argv[2], "currentprefs") == 0) {
821         read_prefs(&gpf_open_errno, &gpf_read_errno, &gpf_path,
822             &pf_open_errno, &pf_read_errno, &pf_path);
823         write_prefs(NULL);
824       } else {
825         cmdarg_err("Invalid \"%s\" option for -G flag", argv[2]);
826         exit(1);
827       }
828     }
829     exit(0);
830   }
831
832   /* Set the C-language locale to the native environment. */
833   setlocale(LC_ALL, "");
834
835   prefs = read_prefs(&gpf_open_errno, &gpf_read_errno, &gpf_path,
836                      &pf_open_errno, &pf_read_errno, &pf_path);
837   if (gpf_path != NULL) {
838     if (gpf_open_errno != 0) {
839       cmdarg_err("Can't open global preferences file \"%s\": %s.",
840               pf_path, strerror(gpf_open_errno));
841     }
842     if (gpf_read_errno != 0) {
843       cmdarg_err("I/O error reading global preferences file \"%s\": %s.",
844               pf_path, strerror(gpf_read_errno));
845     }
846   }
847   if (pf_path != NULL) {
848     if (pf_open_errno != 0) {
849       cmdarg_err("Can't open your preferences file \"%s\": %s.", pf_path,
850               strerror(pf_open_errno));
851     }
852     if (pf_read_errno != 0) {
853       cmdarg_err("I/O error reading your preferences file \"%s\": %s.",
854               pf_path, strerror(pf_read_errno));
855     }
856     g_free(pf_path);
857     pf_path = NULL;
858   }
859
860   /* Set the name resolution code's flags from the preferences. */
861   g_resolv_flags = prefs->name_resolve;
862
863   /* Read the disabled protocols file. */
864   read_disabled_protos_list(&gdp_path, &gdp_open_errno, &gdp_read_errno,
865                             &dp_path, &dp_open_errno, &dp_read_errno);
866   if (gdp_path != NULL) {
867     if (gdp_open_errno != 0) {
868       cmdarg_err("Could not open global disabled protocols file\n\"%s\": %s.",
869                  gdp_path, strerror(gdp_open_errno));
870     }
871     if (gdp_read_errno != 0) {
872       cmdarg_err("I/O error reading global disabled protocols file\n\"%s\": %s.",
873                  gdp_path, strerror(gdp_read_errno));
874     }
875     g_free(gdp_path);
876   }
877   if (dp_path != NULL) {
878     if (dp_open_errno != 0) {
879       cmdarg_err(
880         "Could not open your disabled protocols file\n\"%s\": %s.", dp_path,
881         strerror(dp_open_errno));
882     }
883     if (dp_read_errno != 0) {
884       cmdarg_err(
885         "I/O error reading your disabled protocols file\n\"%s\": %s.", dp_path,
886         strerror(dp_read_errno));
887     }
888     g_free(dp_path);
889   }
890
891 #ifdef _WIN32
892   /* Load Wpcap, if possible */
893   load_wpcap();
894 #endif
895
896   init_cap_file(&cfile);
897
898   /* Assemble the compile-time version information string */
899   comp_info_str = g_string_new("Compiled ");
900   get_compiled_version_info(comp_info_str, get_epan_compiled_version_info);
901
902   /* Assemble the run-time version information string */
903   runtime_info_str = g_string_new("Running ");
904   get_runtime_version_info(runtime_info_str, NULL);
905
906   /* Print format defaults to this. */
907   print_format = PR_FMT_TEXT;
908
909   /* Now get our args */
910   while ((opt = getopt(argc, argv, optstring)) != -1) {
911     switch (opt) {
912       case 'a':        /* autostop criteria */
913       case 'b':        /* Ringbuffer option */
914       case 'c':        /* Capture xxx packets */
915       case 'f':        /* capture filter */
916       case 'i':        /* Use interface xxx */
917       case 'p':        /* Don't capture in promiscuous mode */
918       case 's':        /* Set the snapshot (capture) length */
919       case 'w':        /* Write to capture file xxx */
920       case 'y':        /* Set the pcap data link type */
921 #ifdef _WIN32
922       case 'B':        /* Buffer size */
923 #endif /* _WIN32 */
924 #ifdef HAVE_LIBPCAP
925         status = capture_opts_add_opt(&capture_opts, opt, optarg, &start_capture);
926         if(status != 0) {
927             exit(status);
928         }
929 #else
930         capture_option_specified = TRUE;
931         arg_error = TRUE;
932 #endif
933         break;
934       case 'd':        /* Decode as rule */
935         if (!add_decode_as(optarg))
936           exit(1);
937         break;
938       case 'D':        /* Print a list of capture devices and exit */
939 #ifdef HAVE_LIBPCAP
940         status = capture_opts_list_interfaces();
941         exit(status);
942 #else
943         capture_option_specified = TRUE;
944         arg_error = TRUE;
945 #endif
946         break;
947       case 'F':
948         out_file_type = wtap_short_string_to_file_type(optarg);
949         if (out_file_type < 0) {
950           cmdarg_err("\"%s\" isn't a valid capture file type", optarg);
951           list_capture_types();
952           exit(1);
953         }
954         break;
955       case 'h':        /* Print help and exit */
956         print_usage(TRUE);
957         exit(0);
958         break;
959       case 'l':        /* "Line-buffer" standard output */
960         /* This isn't line-buffering, strictly speaking, it's just
961            flushing the standard output after the information for
962            each packet is printed; however, that should be good
963            enough for all the purposes to which "-l" is put (and
964            is probably actually better for "-V", as it does fewer
965            writes).
966
967            See the comment in "process_packet()" for an explanation of
968            why we do that, and why we don't just use "setvbuf()" to
969            make the standard output line-buffered (short version: in
970            Windows, "line-buffered" is the same as "fully-buffered",
971            and the output buffer is only flushed when it fills up). */
972         line_buffered = TRUE;
973         break;
974       case 'L':        /* Print list of link-layer types and exit */
975 #ifdef HAVE_LIBPCAP
976         list_link_layer_types = TRUE;
977         break;
978 #else
979         capture_option_specified = TRUE;
980         arg_error = TRUE;
981 #endif
982         break;
983       case 'n':        /* No name resolution */
984         g_resolv_flags = RESOLV_NONE;
985         break;
986       case 'N':        /* Select what types of addresses/port #s to resolve */
987         if (g_resolv_flags == RESOLV_ALL)
988           g_resolv_flags = RESOLV_NONE;
989         badopt = string_to_name_resolve(optarg, &g_resolv_flags);
990         if (badopt != '\0') {
991           cmdarg_err("-N specifies unknown resolving option '%c'; valid options are 'm', 'n', and 't'",
992                      badopt);
993           exit(1);
994         }
995         break;
996       case 'o':        /* Override preference from command line */
997         switch (prefs_set_pref(optarg)) {
998
999         case PREFS_SET_OK:
1000           break;
1001
1002         case PREFS_SET_SYNTAX_ERR:
1003           cmdarg_err("Invalid -o flag \"%s\"", optarg);
1004           exit(1);
1005           break;
1006
1007         case PREFS_SET_NO_SUCH_PREF:
1008         case PREFS_SET_OBSOLETE:
1009           cmdarg_err("-o flag \"%s\" specifies unknown preference", optarg);
1010           exit(1);
1011           break;
1012         }
1013         break;
1014       case 'q':        /* Quiet */
1015         quiet = TRUE;
1016         break;
1017       case 'r':        /* Read capture file xxx */
1018         cf_name = g_strdup(optarg);
1019         break;
1020       case 'R':        /* Read file filter */
1021         rfilter = optarg;
1022         break;
1023       case 'S':        /* show packets in real time */
1024         print_packet_info = TRUE;
1025         break;
1026       case 't':        /* Time stamp type */
1027         if (strcmp(optarg, "r") == 0)
1028           timestamp_set_type(TS_RELATIVE);
1029         else if (strcmp(optarg, "a") == 0)
1030           timestamp_set_type(TS_ABSOLUTE);
1031         else if (strcmp(optarg, "ad") == 0)
1032           timestamp_set_type(TS_ABSOLUTE_WITH_DATE);
1033         else if (strcmp(optarg, "d") == 0)
1034           timestamp_set_type(TS_DELTA);
1035         else if (strcmp(optarg, "e") == 0)
1036           timestamp_set_type(TS_EPOCH);
1037         else {
1038           cmdarg_err("Invalid time stamp type \"%s\"",
1039             optarg);
1040           cmdarg_err_cont("It must be \"r\" for relative, \"a\" for absolute,");
1041           cmdarg_err_cont("\"ad\" for absolute with date, or \"d\" for delta.");
1042           exit(1);
1043         }
1044         break;
1045       case 'T':        /* printing Type */
1046         if (strcmp(optarg, "text") == 0) {
1047           output_action = WRITE_TEXT;
1048           print_format = PR_FMT_TEXT;
1049         } else if (strcmp(optarg, "ps") == 0) {
1050           output_action = WRITE_TEXT;
1051           print_format = PR_FMT_PS;
1052         } else if (strcmp(optarg, "pdml") == 0) {
1053           output_action = WRITE_XML;
1054           verbose = TRUE;
1055         } else if (strcmp(optarg, "psml") == 0) {
1056           output_action = WRITE_XML;
1057           verbose = FALSE;
1058         } else {
1059           cmdarg_err("Invalid -T parameter.");
1060           cmdarg_err_cont("It must be \"ps\", \"text\", \"pdml\", or \"psml\".");
1061           exit(1);
1062         }
1063         break;
1064       case 'v':        /* Show version and exit */
1065         printf("TShark " VERSION "%s\n"
1066                "\n"
1067                "%s"
1068                "\n"
1069                "%s"
1070                "\n"
1071                "%s",
1072                svnversion, get_copyright_info(), comp_info_str->str,
1073                runtime_info_str->str);
1074         exit(0);
1075         break;
1076       case 'V':        /* Verbose */
1077         verbose = TRUE;
1078         break;
1079       case 'x':        /* Print packet data in hex (and ASCII) */
1080           print_hex = TRUE;
1081           break;
1082       case 'X':
1083           break;
1084       case 'z':
1085         /* We won't call the init function for the stat this soon
1086            as it would disallow MATE's fields (which are registered
1087            by the preferences set callback) from being used as
1088            part of a tap filter.  Instead, we just add the argument
1089            to a list of stat arguments. */
1090         if (!process_stat_cmd_arg(optarg)) {
1091           cmdarg_err("invalid -z argument.");
1092           cmdarg_err_cont("  -z argument must be one of :");
1093           list_stat_cmd_args();
1094           exit(1);
1095         }
1096         break;
1097       default:
1098       case '?':        /* Bad flag - print usage message */
1099         switch(optopt) {
1100         case 'F':
1101           list_capture_types();
1102           break;
1103         default:
1104           print_usage(TRUE);
1105         }
1106         exit(1);
1107         break;
1108     }
1109   }
1110
1111   /* If no capture filter or read filter has been specified, and there are
1112      still command-line arguments, treat them as the tokens of a capture
1113      filter (if no "-r" flag was specified) or a read filter (if a "-r"
1114      flag was specified. */
1115   if (optind < argc) {
1116     if (cf_name != NULL) {
1117       if (rfilter != NULL) {
1118         cmdarg_err("Read filters were specified both with \"-R\" "
1119             "and with additional command-line arguments");
1120         exit(1);
1121       }
1122       rfilter = get_args_as_string(argc, argv, optind);
1123     } else {
1124 #ifdef HAVE_LIBPCAP
1125       if (capture_opts.has_cfilter) {
1126         cmdarg_err("Capture filters were specified both with \"-f\""
1127             " and with additional command-line arguments");
1128         exit(1);
1129       }
1130       capture_opts.has_cfilter = TRUE;
1131       capture_opts.cfilter = get_args_as_string(argc, argv, optind);
1132 #else
1133       capture_option_specified = TRUE;
1134 #endif
1135     }
1136   }
1137
1138   if (!capture_opts.saving_to_file) {
1139     /* We're not saving the capture to a file; if "-q" wasn't specified,
1140        we should print packet information */
1141     if (!quiet)
1142       print_packet_info = TRUE;
1143   } else {
1144     /* We're saving to a file; if we're writing to the standard output.
1145        and we'll also be writing dissected packets to the standard
1146        output, reject the request.  At best, we could redirect that
1147        to the standard error; we *can't* write both to the standard
1148        output and have either of them be useful. */
1149     if (strcmp(capture_opts.save_file, "-") == 0 && print_packet_info) {
1150       cmdarg_err("You can't write both raw packet data and dissected packets"
1151           " to the standard output.");
1152       exit(1);
1153     }
1154   }
1155
1156 #ifndef HAVE_LIBPCAP
1157   if (capture_option_specified)
1158     cmdarg_err("This version of TShark was not built with support for capturing packets.");
1159 #endif
1160   if (arg_error) {
1161     print_usage(FALSE);
1162     exit(1);
1163   }
1164
1165   /* We don't support capture filters when reading from a capture file
1166      (the BPF compiler doesn't support all link-layer types that we
1167      support in capture files we read). */
1168 #ifdef HAVE_LIBPCAP
1169   if (cf_name != NULL) {
1170     if (capture_opts.has_cfilter) {
1171       cmdarg_err("Only read filters, not capture filters, "
1172           "can be specified when reading a capture file.");
1173       exit(1);
1174     }
1175   }
1176 #endif
1177
1178   if (print_hex) {
1179     if (output_action != WRITE_TEXT) {
1180       cmdarg_err("Raw packet hex data can only be printed as text or PostScript");
1181       exit(1);
1182     }
1183   }
1184
1185 #ifdef HAVE_LIBPCAP
1186   if (list_link_layer_types) {
1187     /* We're supposed to list the link-layer types for an interface;
1188        did the user also specify a capture file to be read? */
1189     if (cf_name) {
1190       /* Yes - that's bogus. */
1191       cmdarg_err("You can't specify -L and a capture file to be read.");
1192       exit(1);
1193     }
1194     /* No - did they specify a ring buffer option? */
1195     if (capture_opts.multi_files_on) {
1196       cmdarg_err("Ring buffer requested, but a capture isn't being done.");
1197       exit(1);
1198     }
1199   } else {
1200     /* If they didn't specify a "-w" flag, but specified a maximum capture
1201        file size, tell them that this doesn't work, and exit. */
1202     if (capture_opts.has_autostop_filesize && capture_opts.save_file == NULL) {
1203       cmdarg_err("Maximum capture file size specified, but "
1204         "capture isn't being saved to a file.");
1205       exit(1);
1206     }
1207
1208     if (cf_name) {
1209       /*
1210        * "-r" was specified, so we're reading a capture file.
1211        * Capture options don't apply here.
1212        */
1213       if (capture_opts.multi_files_on) {
1214         cmdarg_err("Multiple capture files requested, but "
1215                    "a capture isn't being done.");
1216         exit(1);
1217       }
1218       if (capture_opts.has_file_duration) {
1219         cmdarg_err("Switching capture files after a time interval was specified, but "
1220                    "a capture isn't being done.");
1221         exit(1);
1222       }
1223       if (capture_opts.has_ring_num_files) {
1224         cmdarg_err("A ring buffer of capture files was specified, but "
1225           "a capture isn't being done.");
1226         exit(1);
1227       }
1228       if (capture_opts.has_autostop_files) {
1229         cmdarg_err("A maximum number of capture files was specified, but "
1230           "a capture isn't being done.");
1231         exit(1);
1232       }
1233       if (capture_opts.has_autostop_packets) {
1234         cmdarg_err("A maximum number of captured packets was specified, but "
1235           "a capture isn't being done.");
1236         exit(1);
1237       }
1238       if (capture_opts.has_autostop_filesize) {
1239         cmdarg_err("A maximum capture file size was specified, but "
1240           "a capture isn't being done.");
1241         exit(1);
1242       }
1243       if (capture_opts.has_autostop_duration) {
1244         cmdarg_err("A maximum capture time was specified, but "
1245           "a capture isn't being done.");
1246         exit(1);
1247       }
1248     } else {
1249       /*
1250        * "-r" wasn't specified, so we're doing a live capture.
1251        */
1252       if (capture_opts.saving_to_file) {
1253         /* They specified a "-w" flag, so we'll be saving to a capture file. */
1254
1255         /* When capturing, we only support writing libpcap format. */
1256         if (out_file_type != WTAP_FILE_PCAP) {
1257           cmdarg_err("Live captures can only be saved in libpcap format.");
1258           exit(1);
1259         }
1260         if (capture_opts.multi_files_on) {
1261           /* Multiple-file mode works only under certain conditions:
1262              a) it doesn't work if you're writing to the standard output;
1263              b) it doesn't work if you're writing to a pipe;
1264              c) it makes no sense if the maximum file size is set to "infinite"
1265                 (XXX - shouldn't that be "if there is no stop criterion",
1266                 as you might want to switch files based on a packet count
1267                 or a time). */
1268           if (strcmp(capture_opts.save_file, "-") == 0) {
1269             cmdarg_err("Multiple capture files requested, but "
1270               "the capture is being written to the standard output.");
1271             exit(1);
1272           }
1273           if (capture_opts.output_to_pipe) {
1274             cmdarg_err("Multiple capture files requested, but "
1275               "the capture file is a pipe.");
1276             exit(1);
1277           }
1278           if (!capture_opts.has_autostop_filesize) {
1279             cmdarg_err("Multiple capture files requested, but "
1280               "no maximum capture file size was specified.");
1281             exit(1);
1282           }
1283         }
1284       } else {
1285         /* They didn't specify a "-w" flag, so we won't be saving to a
1286            capture file.  Check for options that only make sense if
1287            we're saving to a file. */
1288         if (capture_opts.has_autostop_filesize) {
1289           cmdarg_err("Maximum capture file size specified, but "
1290            "capture isn't being saved to a file.");
1291           exit(1);
1292         }
1293         if (capture_opts.multi_files_on) {
1294           cmdarg_err("Multiple capture files requested, but "
1295             "the capture isn't being saved to a file.");
1296           exit(1);
1297         }
1298       }
1299     }
1300   }
1301 #endif
1302
1303 #ifdef _WIN32
1304   /* Start windows sockets */
1305   WSAStartup( MAKEWORD( 1, 1 ), &wsaData );
1306 #endif /* _WIN32 */
1307
1308   /* Notify all registered modules that have had any of their preferences
1309      changed either from one of the preferences file or from the command
1310      line that their preferences have changed. */
1311   prefs_apply_all();
1312
1313   /* At this point MATE will have registered its field array so we can
1314      have a tap filter with one of MATE's late-registered fields as part
1315      of the filter.  We can now process all the "-z" arguments. */
1316   start_requested_stats();
1317
1318   /* disabled protocols as per configuration file */
1319   if (gdp_path == NULL && dp_path == NULL) {
1320     set_disabled_protos_list();
1321   }
1322
1323   /* Build the column format array */
1324   col_setup(&cfile.cinfo, prefs->num_cols);
1325   for (i = 0; i < cfile.cinfo.num_cols; i++) {
1326     cfile.cinfo.col_fmt[i] = get_column_format(i);
1327     cfile.cinfo.col_title[i] = g_strdup(get_column_title(i));
1328     cfile.cinfo.fmt_matx[i] = (gboolean *) g_malloc0(sizeof(gboolean) *
1329       NUM_COL_FMTS);
1330     get_column_format_matches(cfile.cinfo.fmt_matx[i], cfile.cinfo.col_fmt[i]);
1331     cfile.cinfo.col_data[i] = NULL;
1332     if (cfile.cinfo.col_fmt[i] == COL_INFO)
1333       cfile.cinfo.col_buf[i] = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_INFO_LEN);
1334     else
1335       cfile.cinfo.col_buf[i] = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
1336     cfile.cinfo.col_fence[i] = 0;
1337     cfile.cinfo.col_expr[i] = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
1338     cfile.cinfo.col_expr_val[i] = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
1339   }
1340
1341   for (i = 0; i < cfile.cinfo.num_cols; i++) {
1342       int j;
1343
1344       for (j = 0; j < NUM_COL_FMTS; j++) {
1345          if (!cfile.cinfo.fmt_matx[i][j])
1346              continue;
1347
1348          if (cfile.cinfo.col_first[j] == -1)
1349              cfile.cinfo.col_first[j] = i;
1350          cfile.cinfo.col_last[j] = i;
1351       }
1352   }
1353
1354 #ifdef HAVE_LIBPCAP
1355   capture_opts_trim_snaplen(&capture_opts, MIN_PACKET_SIZE);
1356   capture_opts_trim_ring_num_files(&capture_opts);
1357 #endif
1358
1359   if (rfilter != NULL) {
1360     if (!dfilter_compile(rfilter, &rfcode)) {
1361       cmdarg_err("%s", dfilter_error_msg);
1362       epan_cleanup();
1363 #ifdef HAVE_PCAP_OPEN_DEAD
1364       {
1365         pcap_t *pc;
1366
1367         pc = pcap_open_dead(DLT_EN10MB, MIN_PACKET_SIZE);
1368         if (pc != NULL) {
1369           if (pcap_compile(pc, &fcode, rfilter, 0, 0) != -1) {
1370             cmdarg_err_cont(
1371               "  Note: That display filter code looks like a valid capture filter;");
1372             cmdarg_err_cont(
1373               "        maybe you mixed them up?");
1374           }
1375           pcap_close(pc);
1376         }
1377       }
1378 #endif
1379       exit(2);
1380     }
1381   }
1382   cfile.rfcode = rfcode;
1383
1384   if (print_packet_info) {
1385     /* If we're printing as text or PostScript, we have
1386        to create a print stream. */
1387     if (output_action == WRITE_TEXT) {
1388       switch (print_format) {
1389
1390       case PR_FMT_TEXT:
1391         print_stream = print_stream_text_stdio_new(stdout);
1392         break;
1393
1394       case PR_FMT_PS:
1395         print_stream = print_stream_ps_stdio_new(stdout);
1396         break;
1397
1398       default:
1399         g_assert_not_reached();
1400       }
1401     }
1402   }
1403
1404   /* We have to dissect each packet if:
1405
1406         we're printing information about each packet;
1407
1408         we're using a read filter on the packets;
1409
1410         we're using any taps. */
1411   do_dissection = print_packet_info || rfcode || have_tap_listeners();
1412
1413   if (cf_name) {
1414     /*
1415      * We're reading a capture file.
1416      */
1417
1418     /*
1419      * Immediately relinquish any special privileges we have; we must not
1420      * be allowed to read any capture files the user running TShark
1421      * can't open.
1422      */
1423     relinquish_special_privs_perm();
1424
1425     if (cf_open(&cfile, cf_name, FALSE, &err) != CF_OK) {
1426       epan_cleanup();
1427       exit(2);
1428     }
1429
1430     /* Set timestamp precision; there should arguably be a command-line
1431        option to let the user set this. */
1432     switch(wtap_file_tsprecision(cfile.wth)) {
1433     case(WTAP_FILE_TSPREC_SEC):
1434       timestamp_set_precision(TS_PREC_AUTO_SEC);
1435       break;
1436     case(WTAP_FILE_TSPREC_DSEC):
1437       timestamp_set_precision(TS_PREC_AUTO_DSEC);
1438       break;
1439     case(WTAP_FILE_TSPREC_CSEC):
1440       timestamp_set_precision(TS_PREC_AUTO_CSEC);
1441       break;
1442     case(WTAP_FILE_TSPREC_MSEC):
1443       timestamp_set_precision(TS_PREC_AUTO_MSEC);
1444       break;
1445     case(WTAP_FILE_TSPREC_USEC):
1446       timestamp_set_precision(TS_PREC_AUTO_USEC);
1447       break;
1448     case(WTAP_FILE_TSPREC_NSEC):
1449       timestamp_set_precision(TS_PREC_AUTO_NSEC);
1450       break;
1451     default:
1452       g_assert_not_reached();
1453     }
1454
1455     /* Process the packets in the file */
1456     err = load_cap_file(&cfile, capture_opts.save_file, out_file_type);
1457     if (err != 0) {
1458       epan_cleanup();
1459       exit(2);
1460     }
1461     cf_name[0] = '\0';
1462   } else {
1463     /* No capture file specified, so we're supposed to do a live capture
1464        (or get a list of link-layer types for a live capture device);
1465        do we have support for live captures? */
1466 #ifdef HAVE_LIBPCAP
1467
1468 #ifdef _WIN32
1469     if (!has_wpcap) {
1470       char *detailed_err;
1471
1472       cmdarg_err("WinPcap couldn't be found.");
1473       detailed_err = cant_load_winpcap_err("TShark");
1474       cmdarg_err_cont("%s", detailed_err);
1475       g_free(detailed_err);
1476       exit(2);
1477     }
1478 #endif
1479
1480     /* trim the interface name and exit if that failed */
1481     if (!capture_opts_trim_iface(&capture_opts,
1482         (prefs->capture_device) ? get_if_name(prefs->capture_device) : NULL)) {
1483         exit(2);
1484     }
1485
1486     /* if requested, list the link layer types and exit */
1487     if (list_link_layer_types) {
1488         status = capture_opts_list_link_layer_types(&capture_opts);
1489         exit(status);
1490     }
1491
1492     if (!print_packet_info && !quiet) {
1493       /*
1494        * We're not printing information for each packet, and the user
1495        * didn't ask us not to print a count of packets as they arrive,
1496        * so print that count so the user knows that packets are arriving.
1497        *
1498        * XXX - what if the user wants to do a live capture, doesn't want
1499        * to save it to a file, doesn't want information printed for each
1500        * packet, does want some "-z" statistic, and wants packet counts
1501        * so they know whether they're seeing any packets?
1502        */
1503       print_packet_counts = TRUE;
1504     }
1505
1506     /* For now, assume libpcap gives microsecond precision. */
1507     timestamp_set_precision(TS_PREC_AUTO_USEC);
1508
1509     capture();
1510
1511     if (capture_opts.multi_files_on) {
1512       ringbuf_free();
1513     }
1514 #else
1515     /* No - complain. */
1516     cmdarg_err("This version of TShark was not built with support for capturing packets.");
1517     exit(2);
1518 #endif
1519   }
1520
1521   draw_tap_listeners(TRUE);
1522   funnel_dump_all_text_windows();
1523   epan_cleanup();
1524
1525   return 0;
1526 }
1527
1528 #ifdef HAVE_LIBPCAP
1529 /* Do the low-level work of a capture.
1530    Returns TRUE if it succeeds, FALSE otherwise. */
1531
1532 static condition  *volatile cnd_file_duration = NULL; /* this must be visible in process_packet */
1533
1534 static int
1535 capture(void)
1536 {
1537   int         err = 0;
1538   int         volatile volatile_err = 0;
1539   int         volatile inpkts = 0;
1540   int         pcap_cnt;
1541   condition  *volatile cnd_autostop_size = NULL;
1542   condition  *volatile cnd_autostop_duration = NULL;
1543   char       *descr;
1544 #ifndef _WIN32
1545   void        (*oldhandler)(int);
1546 #endif
1547   struct pcap_stat stats;
1548   gboolean    write_ok;
1549   gboolean    close_ok;
1550   gboolean    cfilter_error = FALSE;
1551   char        errmsg[1024+1];
1552   char        secondary_errmsg[4096+1];
1553   int         save_file_fd;
1554
1555   /* Initialize all data structures used for dissection. */
1556   init_dissection();
1557
1558   ld.wtap_linktype  = WTAP_ENCAP_UNKNOWN;
1559   ld.pdh            = NULL;
1560   ld.packet_cb      = capture_pcap_cb;
1561
1562
1563   /* open the "input file" from network interface or capture pipe */
1564   if (!capture_loop_open_input(&capture_opts, &ld, errmsg, sizeof(errmsg),
1565                                secondary_errmsg, sizeof(secondary_errmsg))) {
1566     goto error;
1567   }
1568
1569   /*
1570    * We've opened the capture device, so we shouldn't need any special
1571    * privileges any more; relinquish those privileges.
1572    *
1573    * XXX - if we have saved set-user-ID support, we should give up those
1574    * privileges immediately, and then reclaim them long enough to get
1575    * a list of network interfaces and to open one, and then give them
1576    * up again, so that stuff we do while processing the argument list,
1577    * reading the user's preferences, loading and starting plugins
1578    * (especially *user* plugins), etc. is done with the user's privileges,
1579    * not special privileges.
1580    */
1581   relinquish_special_privs_perm();
1582
1583   /* init the input filter from the network interface (capture pipe will do nothing) */
1584   switch (capture_loop_init_filter(ld.pcap_h, ld.from_cap_pipe, capture_opts.iface, capture_opts.cfilter)) {
1585
1586   case INITFILTER_NO_ERROR:
1587     break;
1588
1589   case INITFILTER_BAD_FILTER:
1590     cfilter_error = TRUE;
1591     g_snprintf(errmsg, sizeof(errmsg), "%s", pcap_geterr(ld.pcap_h));
1592     *secondary_errmsg = '\0';
1593     goto error;
1594
1595   case INITFILTER_OTHER_ERROR:
1596     g_snprintf(errmsg, sizeof(errmsg), "Can't install filter (%s).",
1597                pcap_geterr(ld.pcap_h));
1598     g_snprintf(secondary_errmsg, sizeof(secondary_errmsg), "%s", please_report);
1599     goto error;
1600   }
1601
1602   if (capture_opts.saving_to_file) {
1603     /* open the output file (temporary/specified name/ringbuffer/named pipe/stdout) */
1604     if (!capture_loop_open_output(&capture_opts, &save_file_fd, errmsg, sizeof(errmsg))) {
1605       *secondary_errmsg = '\0';
1606       goto error;
1607     }
1608
1609     /* set up to write to the already-opened capture output file/files */
1610     if(!capture_loop_init_output(&capture_opts, save_file_fd, &ld, errmsg, sizeof errmsg)) {
1611       *secondary_errmsg = '\0';
1612       goto error;
1613     }
1614
1615     /* Save the capture file name. */
1616     ld.save_file = capture_opts.save_file;
1617   }
1618
1619   ld.wtap_linktype = wtap_pcap_encap_to_wtap_encap(ld.linktype);
1620
1621 #ifdef _WIN32
1622   /* Catch a CTRL+C event and, if we get it, clean up and exit. */
1623   SetConsoleCtrlHandler(capture_cleanup, TRUE);
1624 #else /* _WIN32 */
1625   /* Catch SIGINT and SIGTERM and, if we get either of them, clean up
1626      and exit.
1627      XXX - deal with signal semantics on various UNIX platforms.  Or just
1628      use "sigaction()" and be done with it? */
1629   signal(SIGTERM, capture_cleanup);
1630   signal(SIGINT, capture_cleanup);
1631   if ((oldhandler = signal(SIGHUP, capture_cleanup)) != SIG_DFL)
1632     signal(SIGHUP, oldhandler);
1633
1634 #ifdef SIGINFO
1635   /* Catch SIGINFO and, if we get it and we're capturing to a file in
1636      quiet mode, report the number of packets we've captured. */
1637   signal(SIGINFO, report_counts_siginfo);
1638 #endif /* SIGINFO */
1639 #endif /* _WIN32 */
1640
1641   /* Let the user know what interface was chosen. */
1642   descr = get_interface_descriptive_name(capture_opts.iface);
1643   fprintf(stderr, "Capturing on %s\n", descr);
1644   g_free(descr);
1645
1646   /* initialize capture stop conditions */
1647   init_capture_stop_conditions();
1648   /* create stop conditions */
1649   if (capture_opts.has_autostop_filesize)
1650     cnd_autostop_size = cnd_new((const char*)CND_CLASS_CAPTURESIZE,
1651                                    (long)capture_opts.autostop_filesize * 1024);
1652   if (capture_opts.has_autostop_duration)
1653     cnd_autostop_duration = cnd_new((const char*)CND_CLASS_TIMEOUT,
1654                                (gint32)capture_opts.autostop_duration);
1655
1656   if (capture_opts.multi_files_on && capture_opts.has_file_duration)
1657     cnd_file_duration = cnd_new(CND_CLASS_TIMEOUT, capture_opts.file_duration);
1658
1659   if (!setjmp(ld.stopenv)) {
1660     ld.go = TRUE;
1661     ld.packet_count = 0;
1662   } else
1663     ld.go = FALSE;
1664
1665   while (ld.go) {
1666     /* We need to be careful with automatic variables defined in the
1667        outer scope which are changed inside the loop.  Most compilers
1668        don't try to roll them back to their original values after the
1669        longjmp which causes the loop to finish, but all that the
1670        standards say is that their values are indeterminate.  If we
1671        don't want them to be rolled back, we should define them with the
1672        volatile attribute (paraphrasing W. Richard Stevens, Advanced
1673        Programming in the UNIX Environment, p. 178).
1674
1675        The "err" variable causes a particular problem.  If we give it
1676        the volatile attribute, then when we pass a reference to it (as
1677        in "&err") to a function, GCC warns: "passing arg <n> of
1678        <function> discards qualifiers from pointer target type".
1679        Therefore within the loop and just beyond we don't use "err".
1680        Within the loop we define "loop_err", and assign its value to
1681        "volatile_err", which is in the outer scope and is checked when
1682        the loop finishes.
1683
1684        We also define "packet_count_prev" here to keep things tidy,
1685        since it's used only inside the loop.  If it were defined in the
1686        outer scope, GCC would give a warning (unnecessary in this case)
1687        that it might be clobbered, and we'd need to give it the volatile
1688        attribute to suppress the warning. */
1689
1690     int loop_err = 0;
1691     int packet_count_prev = 0;
1692
1693     if (cnd_autostop_size == NULL && cnd_autostop_duration == NULL) {
1694       /* We're not stopping at a particular capture file size, and we're
1695          not stopping after some particular amount of time has expired,
1696          so either we have no stop condition or the only stop condition
1697          is a maximum packet count.
1698
1699          If there's no maximum packet count, pass it -1, meaning "until
1700          you run out of packets in the bufferful you read".  Otherwise,
1701          pass it the number of packets we have left to capture.
1702
1703          We don't call "pcap_loop()" as, if we're saving to a file that's
1704          a FIFO, we want to flush the FIFO after we're done processing
1705          this libpcap bufferful of packets, so that the program
1706          reading the FIFO sees the packets immediately and doesn't get
1707          any partial packet, forcing it to block in the middle of reading
1708          that packet. */
1709       if (capture_opts.autostop_packets == 0)
1710         pcap_cnt = -1;
1711       else {
1712         if (ld.packet_count >= capture_opts.autostop_packets) {
1713           /* XXX do we need this test here? */
1714           /* It appears there's nothing more to capture. */
1715           break;
1716         }
1717         pcap_cnt = capture_opts.autostop_packets - ld.packet_count;
1718       }
1719     } else {
1720       /* We need to check the capture file size or the timeout after
1721          each packet. */
1722       pcap_cnt = 1;
1723     }
1724
1725     inpkts = capture_loop_dispatch(NULL, &ld, errmsg, sizeof errmsg);
1726     if (inpkts < 0) {
1727       /* Error from "pcap_dispatch()", or error or "no more packets" from
1728          "cap_pipe_dispatch(). */
1729       ld.go = FALSE;
1730     } else if (cnd_autostop_duration != NULL && cnd_eval(cnd_autostop_duration)) {
1731       /* The specified capture time has elapsed; stop the capture. */
1732       ld.go = FALSE;
1733     } else if (inpkts > 0) {
1734       if (capture_opts.autostop_packets != 0 &&
1735                  ld.packet_count >= capture_opts.autostop_packets) {
1736         /* The specified number of packets have been captured and have
1737            passed both any capture filter in effect and any read filter
1738            in effect. */
1739         ld.go = FALSE;
1740       } else if (cnd_autostop_size != NULL &&
1741                     cnd_eval(cnd_autostop_size, (guint32)ld.bytes_written)) {
1742         /* We're saving the capture to a file, and the capture file reached
1743            its maximum size. */
1744         if (capture_opts.multi_files_on) {
1745           /* Switch to the next ringbuffer file */
1746           if (ringbuf_switch_file(&ld.pdh, &capture_opts.save_file,
1747                                   &save_file_fd, &ld.bytes_written,
1748                                   &loop_err)) {
1749             /* File switch succeeded: reset the condition */
1750             cnd_reset(cnd_autostop_size);
1751             if (cnd_file_duration) {
1752               cnd_reset(cnd_file_duration);
1753             }
1754           } else {
1755             /* File switch failed: stop here */
1756             volatile_err = loop_err;
1757             ld.go = FALSE;
1758           }
1759         } else {
1760           /* No ringbuffer - just stop. */
1761           ld.go = FALSE;
1762         }
1763       }
1764       if (capture_opts.output_to_pipe) {
1765         if (ld.packet_count > packet_count_prev) {
1766           libpcap_dump_flush(ld.pdh, NULL);
1767           packet_count_prev = ld.packet_count;
1768         }
1769       }
1770     } /* inpkts > 0 */
1771   } /* while (ld.go) */
1772
1773   /* delete stop conditions */
1774   if (cnd_autostop_size != NULL)
1775     cnd_delete(cnd_autostop_size);
1776   if (cnd_autostop_duration != NULL)
1777     cnd_delete(cnd_autostop_duration);
1778   if (cnd_file_duration != NULL)
1779     cnd_delete(cnd_file_duration);
1780
1781   if (print_packet_counts) {
1782     /* We're printing packet counts to stderr.
1783        Send a newline so that we move to the line after the packet count. */
1784     fprintf(stderr, "\n");
1785   }
1786
1787   /* If we got an error while capturing, report it. */
1788   if (inpkts < 0) {
1789     if (ld.from_cap_pipe) {
1790       if (ld.cap_pipe_err == PIPERR) {
1791         cmdarg_err("Error while capturing packets: %s", errmsg);
1792       }
1793     } else {
1794       cmdarg_err("Error while capturing packets: %s", pcap_geterr(ld.pcap_h));
1795     }
1796   }
1797
1798   if (volatile_err == 0)
1799     write_ok = TRUE;
1800   else {
1801     show_capture_file_io_error(capture_opts.save_file, volatile_err, FALSE);
1802     write_ok = FALSE;
1803   }
1804
1805   if (capture_opts.save_file != NULL) {
1806     /* We're saving to a file or files; close all files. */
1807     close_ok = capture_loop_close_output(&capture_opts, &ld, &err);
1808
1809     /* If we've displayed a message about a write error, there's no point
1810        in displaying another message about an error on close. */
1811     if (!close_ok && write_ok)
1812       show_capture_file_io_error(capture_opts.save_file, err, TRUE);
1813   }
1814
1815   if (ld.from_cap_pipe && ld.cap_pipe_fd >= 0)
1816     eth_close(ld.cap_pipe_fd);
1817   else {
1818     /* Get the capture statistics, and, if any packets were dropped, report
1819        that. */
1820     if (pcap_stats(ld.pcap_h, &stats) >= 0) {
1821       if (stats.ps_drop != 0) {
1822         fprintf(stderr, "%u packets dropped\n", stats.ps_drop);
1823       }
1824     } else {
1825       cmdarg_err("Can't get packet-drop statistics: %s", pcap_geterr(ld.pcap_h));
1826     }
1827     pcap_close(ld.pcap_h);
1828   }
1829
1830   /* Report the number of captured packets if not reported during capture
1831      and we are saving to a file. */
1832   report_counts();
1833
1834   return TRUE;
1835
1836 error:
1837   if (capture_opts.multi_files_on) {
1838     ringbuf_error_cleanup();
1839   }
1840   g_free(capture_opts.save_file);
1841   capture_opts.save_file = NULL;
1842   if (cfilter_error) {
1843     dfilter_t   *rfcode = NULL;
1844     if (dfilter_compile(capture_opts.cfilter, &rfcode) && rfcode != NULL) {
1845       cmdarg_err(
1846         "Invalid capture filter: \"%s\"!\n"
1847         "\n"
1848         "That string looks like a valid display filter; however, it isn't a valid\n"
1849         "capture filter (%s).\n"
1850         "\n"
1851         "Note that display filters and capture filters don't have the same syntax,\n"
1852         "so you can't use most display filter expressions as capture filters.\n"
1853         "\n"
1854         "See the User's Guide for a description of the capture filter syntax.",
1855         capture_opts.cfilter, errmsg);
1856       dfilter_free(rfcode);
1857     } else {
1858       cmdarg_err(
1859         "Invalid capture filter: \"%s\"!\n"
1860         "\n"
1861         "That string isn't a valid capture filter (%s).\n"
1862         "See the User's Guide for a description of the capture filter syntax.",
1863         capture_opts.cfilter, errmsg);
1864     }
1865   } else {
1866     cmdarg_err("%s", errmsg);
1867     if (*secondary_errmsg != '\0') {
1868       fprintf(stderr, "\n");
1869       cmdarg_err_cont("%s", secondary_errmsg);
1870     }
1871   }
1872   if (ld.from_cap_pipe) {
1873     if (ld.cap_pipe_fd >= 0)
1874       eth_close(ld.cap_pipe_fd);
1875   } else {
1876   if (ld.pcap_h != NULL)
1877     pcap_close(ld.pcap_h);
1878   }
1879
1880   return FALSE;
1881 }
1882
1883 static void
1884 capture_pcap_cb(u_char *user, const struct pcap_pkthdr *phdr,
1885   const u_char *pd)
1886 {
1887   struct wtap_pkthdr whdr;
1888   union wtap_pseudo_header pseudo_header;
1889   const guchar *wtap_pd;
1890   loop_data *ld = (loop_data *) user;
1891   int loop_err;
1892   int err;
1893   int save_file_fd;
1894   gboolean packet_accepted;
1895
1896 #ifdef SIGINFO
1897   /*
1898    * Prevent a SIGINFO handler from writing to stdout while we're
1899    * doing so; instead, have it just set a flag telling us to print
1900    * that information when we're done.
1901    */
1902   infodelay = TRUE;
1903 #endif /* SIGINFO */
1904
1905   /* The current packet may have arrived after a very long silence,
1906    * way past the time to switch files.  In order not to have
1907    * the first packet of a new series of events as the last
1908    * [or only] packet in the file, switch before writing!
1909    */
1910   if (cnd_file_duration != NULL && cnd_eval(cnd_file_duration)) {
1911     /* time elapsed for this ring file, switch to the next */
1912     if (ringbuf_switch_file(&ld->pdh, &ld->save_file, &save_file_fd,
1913                             &ld->bytes_written, &loop_err)) {
1914       /* File switch succeeded: reset the condition */
1915       cnd_reset(cnd_file_duration);
1916     } else {
1917       /* File switch failed: stop here */
1918       /* XXX - we should do something with "loop_err" */
1919       ld->go = FALSE;
1920     }
1921   }
1922
1923   if (do_dissection) {
1924     /* We're goint to print packet information, run a read filter, or
1925        process taps.  Use process_packet() to handle that; in order
1926        to do that, we need to convert from libpcap to Wiretap format.
1927        If that fails, ignore the packet (wtap_process_pcap_packet has
1928        written an error message). */
1929     wtap_pd = wtap_process_pcap_packet(ld->wtap_linktype, phdr, pd,
1930                                        &pseudo_header, &whdr, &err);
1931     if (wtap_pd == NULL)
1932       return;
1933
1934     packet_accepted = process_packet(&cfile, 0, &whdr, &pseudo_header, wtap_pd);
1935   } else {
1936     /* We're just writing out packets. */
1937     packet_accepted = TRUE;
1938   }
1939
1940   if (packet_accepted) {
1941     /* Count this packet. */
1942 #ifdef HAVE_LIBPCAP
1943     ld->packet_count++;
1944 #endif
1945
1946     if (ld->pdh != NULL) {
1947       if (!libpcap_write_packet(ld->pdh, phdr, pd, &ld->bytes_written, &err)) {
1948         /* Error writing to a capture file */
1949         if (print_packet_counts) {
1950           /* We're printing counts of packets captured; move to the line after
1951              the count. */
1952           fprintf(stderr, "\n");
1953         }
1954         show_capture_file_io_error(ld->save_file, err, FALSE);
1955         pcap_close(ld->pcap_h);
1956         libpcap_dump_close(ld->pdh, &err);
1957         exit(2);
1958       }
1959     }
1960     if (print_packet_counts) {
1961       /* We're printing packet counts. */
1962       if (ld->packet_count != 0) {
1963         fprintf(stderr, "\r%u ", ld->packet_count);
1964         /* stderr could be line buffered */
1965         fflush(stderr);
1966       }
1967     }
1968   }
1969
1970 #ifdef SIGINFO
1971   /*
1972    * Allow SIGINFO handlers to write.
1973    */
1974   infodelay = FALSE;
1975
1976   /*
1977    * If a SIGINFO handler asked us to write out capture counts, do so.
1978    */
1979   if (infoprint)
1980     report_counts();
1981 #endif /* SIGINFO */
1982 }
1983
1984 #ifdef _WIN32
1985 static BOOL WINAPI
1986 capture_cleanup(DWORD ctrltype _U_)
1987 {
1988   /* CTRL_C_EVENT is sort of like SIGINT, CTRL_BREAK_EVENT is unique to
1989      Windows, CTRL_CLOSE_EVENT is sort of like SIGHUP, CTRL_LOGOFF_EVENT
1990      is also sort of like SIGHUP, and CTRL_SHUTDOWN_EVENT is sort of
1991      like SIGTERM at least when the machine's shutting down.
1992
1993      For now, we handle them all as indications that we should clean up
1994      and quit, just as we handle SIGINT, SIGHUP, and SIGTERM in that
1995      way on UNIX.
1996
1997      However, as handlers run in a new thread, we can't just longjmp
1998      out; we have to set "ld.go" to FALSE, and must return TRUE so that
1999      no other handler - such as one that would terminate the process -
2000      gets called.
2001
2002      XXX - for some reason, typing ^C to TShark, if you run this in
2003      a Cygwin console window in at least some versions of Cygwin,
2004      causes TShark to terminate immediately; this routine gets
2005      called, but the main loop doesn't get a chance to run and
2006      exit cleanly, at least if this is compiled with Microsoft Visual
2007      C++ (i.e., it's a property of the Cygwin console window or Bash;
2008      it happens if TShark is not built with Cygwin - for all I know,
2009      building it with Cygwin may make the problem go away). */
2010   ld.go = FALSE;
2011   return TRUE;
2012 }
2013 #else
2014 static void
2015 capture_cleanup(int signum _U_)
2016 {
2017   /* Longjmp back to the starting point; "pcap_dispatch()", on many
2018      UNIX platforms, just keeps looping if it gets EINTR, so if we set
2019      "ld.go" to FALSE and return, we won't break out of it and quit
2020      capturing. */
2021   longjmp(ld.stopenv, 1);
2022 }
2023 #endif /* _WIN32 */
2024
2025 static void
2026 report_counts(void)
2027 {
2028 #ifdef SIGINFO
2029   /* XXX - if we use sigaction, this doesn't have to be done.
2030      (Yes, this isn't necessary on BSD, but just in case a system
2031      where "signal()" has AT&T semantics adopts SIGINFO....) */
2032   signal(SIGINFO, report_counts_siginfo);
2033 #endif /* SIGINFO */
2034
2035   if (!print_packet_counts) {
2036     /* Report the count only if we aren't printing a packet count
2037        as packets arrive. */
2038     fprintf(stderr, "%u packets captured\n", ld.packet_count);
2039   }
2040 #ifdef SIGINFO
2041   infoprint = FALSE; /* we just reported it */
2042 #endif /* SIGINFO */
2043 }
2044
2045 #ifdef SIGINFO
2046 static void
2047 report_counts_siginfo(int signum _U_)
2048 {
2049   int sav_errno = errno;
2050   /* If we've been told to delay printing, just set a flag asking
2051      that we print counts (if we're supposed to), otherwise print
2052      the count of packets captured (if we're supposed to). */
2053   if (infodelay)
2054     infoprint = TRUE;
2055   else
2056     report_counts();
2057   errno = sav_errno;
2058 }
2059 #endif /* SIGINFO */
2060 #endif /* HAVE_LIBPCAP */
2061
2062 static int
2063 load_cap_file(capture_file *cf, char *save_file, int out_file_type)
2064 {
2065   gint         linktype;
2066   int          snapshot_length;
2067   wtap_dumper *pdh;
2068   int          err;
2069   gchar        *err_info;
2070   gint64       data_offset;
2071   char         *save_file_string = NULL;
2072
2073   linktype = wtap_file_encap(cf->wth);
2074   if (save_file != NULL) {
2075     /* Get a string that describes what we're writing to */
2076     save_file_string = output_file_description(save_file);
2077
2078     /* Set up to write to the capture file. */
2079     snapshot_length = wtap_snapshot_length(cf->wth);
2080     if (snapshot_length == 0) {
2081       /* Snapshot length of input file not known. */
2082       snapshot_length = WTAP_MAX_PACKET_SIZE;
2083     }
2084     pdh = wtap_dump_open(save_file, out_file_type, linktype, snapshot_length,
2085                          FALSE /* compressed */, &err);
2086
2087     if (pdh == NULL) {
2088       /* We couldn't set up to write to the capture file. */
2089       switch (err) {
2090
2091       case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
2092         cmdarg_err("Capture files can't be written in that format.");
2093         break;
2094
2095       case WTAP_ERR_UNSUPPORTED_ENCAP:
2096       case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
2097         cmdarg_err("The capture file being read can't be written in "
2098           "that format.");
2099         break;
2100
2101       case WTAP_ERR_CANT_OPEN:
2102         cmdarg_err("The %s couldn't be created for some "
2103           "unknown reason.", save_file_string);
2104         break;
2105
2106       case WTAP_ERR_SHORT_WRITE:
2107         cmdarg_err("A full header couldn't be written to the %s.",
2108                    save_file_string);
2109         break;
2110
2111       default:
2112         cmdarg_err("The %s could not be created: %s.", save_file_string,
2113                    wtap_strerror(err));
2114         break;
2115       }
2116       goto out;
2117     }
2118   } else {
2119     if (print_packet_info) {
2120       if (!write_preamble(cf)) {
2121         err = errno;
2122         show_print_file_io_error(err);
2123         goto out;
2124       }
2125     }
2126     pdh = NULL;
2127   }
2128   while (wtap_read(cf->wth, &err, &err_info, &data_offset)) {
2129     if (process_packet(cf, data_offset, wtap_phdr(cf->wth),
2130                        wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth))) {
2131       /* Either there's no read filtering or this packet passed the
2132          filter, so, if we're writing to a capture file, write
2133          this packet out. */
2134       if (pdh != NULL) {
2135         if (!wtap_dump(pdh, wtap_phdr(cf->wth),
2136                        wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth),
2137                        &err)) {
2138           /* Error writing to a capture file */
2139           show_capture_file_io_error(save_file, err, FALSE);
2140           wtap_dump_close(pdh, &err);
2141           exit(2);
2142         }
2143       }
2144     }
2145   }
2146   if (err != 0) {
2147     /* Print a message noting that the read failed somewhere along the line. */
2148     switch (err) {
2149
2150     case WTAP_ERR_UNSUPPORTED_ENCAP:
2151       cmdarg_err("\"%s\" has a packet with a network type that TShark doesn't support.\n(%s)",
2152                  cf->filename, err_info);
2153       break;
2154
2155     case WTAP_ERR_CANT_READ:
2156       cmdarg_err("An attempt to read from \"%s\" failed for some unknown reason.",
2157                  cf->filename);
2158       break;
2159
2160     case WTAP_ERR_SHORT_READ:
2161       cmdarg_err("\"%s\" appears to have been cut short in the middle of a packet.",
2162                  cf->filename);
2163       break;
2164
2165     case WTAP_ERR_BAD_RECORD:
2166       cmdarg_err("\"%s\" appears to be damaged or corrupt.\n(%s)",
2167                  cf->filename, err_info);
2168       break;
2169
2170     default:
2171       cmdarg_err("An error occurred while reading \"%s\": %s.",
2172                  cf->filename, wtap_strerror(err));
2173       break;
2174     }
2175     if (save_file != NULL) {
2176       /* Now close the capture file. */
2177       if (!wtap_dump_close(pdh, &err))
2178         show_capture_file_io_error(save_file, err, TRUE);
2179     }
2180   } else {
2181     if (save_file != NULL) {
2182       /* Now close the capture file. */
2183       if (!wtap_dump_close(pdh, &err))
2184         show_capture_file_io_error(save_file, err, TRUE);
2185     } else {
2186       if (print_packet_info) {
2187         if (!write_finale()) {
2188           err = errno;
2189           show_print_file_io_error(err);
2190         }
2191       }
2192     }
2193   }
2194
2195 out:
2196   wtap_close(cf->wth);
2197   cf->wth = NULL;
2198
2199   if (save_file_string != NULL)
2200     g_free(save_file_string);
2201
2202   return err;
2203 }
2204
2205 static void
2206 fill_in_fdata(frame_data *fdata, capture_file *cf,
2207               const struct wtap_pkthdr *phdr, gint64 offset)
2208 {
2209   fdata->next = NULL;
2210   fdata->prev = NULL;
2211   fdata->pfd = NULL;
2212   fdata->num = cf->count;
2213   fdata->pkt_len = phdr->len;
2214   cum_bytes += phdr->len;
2215   fdata->cum_bytes  = cum_bytes;
2216   fdata->cap_len = phdr->caplen;
2217   fdata->file_off = offset;
2218   fdata->lnk_t = phdr->pkt_encap;
2219   fdata->abs_ts = *((nstime_t *) &phdr->ts);
2220   fdata->flags.passed_dfilter = 0;
2221   fdata->flags.encoding = CHAR_ASCII;
2222   fdata->flags.visited = 0;
2223   fdata->flags.marked = 0;
2224   fdata->flags.ref_time = 0;
2225   fdata->color_filter = NULL;
2226
2227   /* If we don't have the time stamp of the first packet in the
2228      capture, it's because this is the first packet.  Save the time
2229      stamp of this packet as the time stamp of the first packet. */
2230   if (nstime_is_zero(&first_ts)) {
2231     first_ts = fdata->abs_ts;
2232   }
2233
2234   /* If we don't have the time stamp of the previous displayed packet,
2235      it's because this is the first displayed packet.  Save the time
2236      stamp of this packet as the time stamp of the previous displayed
2237      packet. */
2238   if (nstime_is_zero(&prev_ts)) {
2239     prev_ts = fdata->abs_ts;
2240   }
2241
2242   /* Get the time elapsed between the first packet and this packet. */
2243   nstime_delta(&fdata->rel_ts, &fdata->abs_ts, &first_ts);
2244
2245   /* If it's greater than the current elapsed time, set the elapsed time
2246      to it (we check for "greater than" so as not to be confused by
2247      time moving backwards). */
2248   if ((gint32)cf->elapsed_time.secs < fdata->rel_ts.secs
2249         || ((gint32)cf->elapsed_time.secs == fdata->rel_ts.secs && (gint32)cf->elapsed_time.nsecs < fdata->rel_ts.nsecs)) {
2250     cf->elapsed_time = fdata->rel_ts;
2251   }
2252
2253   /* Get the time elapsed between the previous displayed packet and
2254      this packet. */
2255   nstime_delta(&fdata->del_ts, &fdata->abs_ts, &prev_ts);
2256   prev_ts = fdata->abs_ts;
2257 }
2258
2259 /* Free up all data attached to a "frame_data" structure. */
2260 static void
2261 clear_fdata(frame_data *fdata)
2262 {
2263   if (fdata->pfd)
2264     g_slist_free(fdata->pfd);
2265 }
2266
2267 static gboolean
2268 process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr,
2269                union wtap_pseudo_header *pseudo_header, const guchar *pd)
2270 {
2271   frame_data fdata;
2272   gboolean create_proto_tree;
2273   epan_dissect_t *edt;
2274   gboolean passed;
2275
2276   /* Count this packet. */
2277   cf->count++;
2278
2279   /* If we're going to print packet information, or we're going to
2280      run a read filter, or we're going to process taps, set up to
2281      do a dissection and do so. */
2282   if (do_dissection) {
2283     fill_in_fdata(&fdata, cf, whdr, offset);
2284
2285     if (print_packet_info) {
2286       /* Grab any resolved addresses */
2287
2288       if (g_resolv_flags) {
2289         host_name_lookup_process(NULL);
2290       }
2291     }
2292
2293     passed = TRUE;
2294     if (cf->rfcode || verbose || num_tap_filters!=0)
2295       create_proto_tree = TRUE;
2296     else
2297       create_proto_tree = FALSE;
2298     /* The protocol tree will be "visible", i.e., printed, only if we're
2299        printing packet details, which is true if we're printing stuff
2300        ("print_packet_info" is true) and we're in verbose mode ("verbose"
2301        is true). */
2302     edt = epan_dissect_new(create_proto_tree, print_packet_info && verbose);
2303
2304     /* If we're running a read filter, prime the epan_dissect_t with that
2305        filter. */
2306     if (cf->rfcode)
2307       epan_dissect_prime_dfilter(edt, cf->rfcode);
2308
2309     tap_queue_init(edt);
2310
2311     /* We only need the columns if we're printing packet info but we're
2312        *not* verbose; in verbose mode, we print the protocol tree, not
2313        the protocol summary. */
2314     epan_dissect_run(edt, pseudo_header, pd, &fdata,
2315                      (print_packet_info && !verbose) ? &cf->cinfo : NULL);
2316
2317     tap_push_tapped_queue(edt);
2318
2319     /* Run the read filter if we have one. */
2320     if (cf->rfcode)
2321       passed = dfilter_apply_edt(cf->rfcode, edt);
2322     else
2323       passed = TRUE;
2324   } else {
2325     /* We're not running a display filter and we're not printing any
2326        packet information, so we don't need to do a dissection, and all
2327        packets are processed. */
2328     edt = NULL;
2329     passed = TRUE;
2330   }
2331
2332   if (passed) {
2333     /* Process this packet. */
2334     if (print_packet_info) {
2335       /* We're printing packet information; print the information for
2336          this packet. */
2337       print_packet(cf, edt);
2338
2339       /* The ANSI C standard does not appear to *require* that a line-buffered
2340          stream be flushed to the host environment whenever a newline is
2341          written, it just says that, on such a stream, characters "are
2342          intended to be transmitted to or from the host environment as a
2343          block when a new-line character is encountered".
2344
2345          The Visual C++ 6.0 C implementation doesn't do what is intended;
2346          even if you set a stream to be line-buffered, it still doesn't
2347          flush the buffer at the end of every line.
2348
2349          So, if the "-l" flag was specified, we flush the standard output
2350          at the end of a packet.  This will do the right thing if we're
2351          printing packet summary lines, and, as we print the entire protocol
2352          tree for a single packet without waiting for anything to happen,
2353          it should be as good as line-buffered mode if we're printing
2354          protocol trees.  (The whole reason for the "-l" flag in either
2355          tcpdump or TShark is to allow the output of a live capture to
2356          be piped to a program or script and to have that script see the
2357          information for the packet as soon as it's printed, rather than
2358          having to wait until a standard I/O buffer fills up. */
2359       if (line_buffered)
2360         fflush(stdout);
2361
2362       if (ferror(stdout)) {
2363         show_print_file_io_error(errno);
2364         exit(2);
2365       }
2366     }
2367   }
2368
2369   if (do_dissection) {
2370     epan_dissect_free(edt);
2371     clear_fdata(&fdata);
2372   }
2373   return passed;
2374 }
2375
2376 static void
2377 show_capture_file_io_error(const char *fname, int err, gboolean is_close)
2378 {
2379   char *save_file_string;
2380
2381   save_file_string = output_file_description(fname);
2382
2383   switch (err) {
2384
2385   case ENOSPC:
2386     cmdarg_err("Not all the packets could be written to the %s because there is "
2387                "no space left on the file system.",
2388                save_file_string);
2389     break;
2390
2391 #ifdef EDQUOT
2392   case EDQUOT:
2393     cmdarg_err("Not all the packets could be written to the %s because you are "
2394                "too close to, or over your disk quota.",
2395                save_file_string);
2396   break;
2397 #endif
2398
2399   case WTAP_ERR_CANT_CLOSE:
2400     cmdarg_err("The %s couldn't be closed for some unknown reason.",
2401                save_file_string);
2402     break;
2403
2404   case WTAP_ERR_SHORT_WRITE:
2405     cmdarg_err("Not all the packets could be written to the %s.",
2406                save_file_string);
2407     break;
2408
2409   default:
2410     if (is_close) {
2411       cmdarg_err("The %s could not be closed: %s.", save_file_string,
2412                  wtap_strerror(err));
2413     } else {
2414       cmdarg_err("An error occurred while writing to the %s: %s.",
2415                  save_file_string, wtap_strerror(err));
2416     }
2417     break;
2418   }
2419   g_free(save_file_string);
2420 }
2421
2422 static gboolean
2423 write_preamble(capture_file *cf)
2424 {
2425   switch (output_action) {
2426
2427   case WRITE_TEXT:
2428     return print_preamble(print_stream, cf->filename);
2429     break;
2430
2431   case WRITE_XML:
2432     if (verbose)
2433       write_pdml_preamble(stdout);
2434     else
2435       write_psml_preamble(stdout);
2436     return !ferror(stdout);
2437
2438   default:
2439     g_assert_not_reached();
2440     return FALSE;
2441   }
2442 }
2443
2444 static char *
2445 get_line_buf(size_t len)
2446 {
2447   static char *line_bufp = NULL;
2448   static size_t line_buf_len = 256;
2449   size_t new_line_buf_len;
2450
2451   for (new_line_buf_len = line_buf_len; len > new_line_buf_len;
2452        new_line_buf_len *= 2)
2453     ;
2454   if (line_bufp == NULL) {
2455     line_buf_len = new_line_buf_len;
2456     line_bufp = g_malloc(line_buf_len + 1);
2457   } else {
2458     if (new_line_buf_len > line_buf_len) {
2459       line_buf_len = new_line_buf_len;
2460       line_bufp = g_realloc(line_bufp, line_buf_len + 1);
2461     }
2462   }
2463   return line_bufp;
2464 }
2465
2466 static gboolean
2467 print_columns(capture_file *cf)
2468 {
2469   char *line_bufp;
2470   int i;
2471   size_t buf_offset;
2472   size_t column_len;
2473
2474   line_bufp = get_line_buf(256);
2475   buf_offset = 0;
2476   *line_bufp = '\0';
2477   for (i = 0; i < cf->cinfo.num_cols; i++) {
2478     switch (cf->cinfo.col_fmt[i]) {
2479     case COL_NUMBER:
2480 #ifdef HAVE_LIBPCAP
2481       /*
2482        * Don't print this if we're doing a live capture from a network
2483        * interface - if we're doing a live capture, you won't be
2484        * able to look at the capture in the future (it's not being
2485        * saved anywhere), so the frame numbers are unlikely to be
2486        * useful.
2487        *
2488        * (XXX - it might be nice to be able to save and print at
2489        * the same time, sort of like an "Update list of packets
2490        * in real time" capture in Wireshark.)
2491        */
2492       if (capture_opts.iface != NULL)
2493         continue;
2494 #endif
2495       column_len = strlen(cf->cinfo.col_data[i]);
2496       if (column_len < 3)
2497         column_len = 3;
2498       line_bufp = get_line_buf(buf_offset + column_len);
2499       sprintf(line_bufp + buf_offset, "%3s", cf->cinfo.col_data[i]);
2500       break;
2501
2502     case COL_CLS_TIME:
2503     case COL_REL_TIME:
2504     case COL_ABS_TIME:
2505     case COL_ABS_DATE_TIME: /* XXX - wider */
2506       column_len = strlen(cf->cinfo.col_data[i]);
2507       if (column_len < 10)
2508         column_len = 10;
2509       line_bufp = get_line_buf(buf_offset + column_len);
2510       sprintf(line_bufp + buf_offset, "%10s", cf->cinfo.col_data[i]);
2511       break;
2512
2513     case COL_DEF_SRC:
2514     case COL_RES_SRC:
2515     case COL_UNRES_SRC:
2516     case COL_DEF_DL_SRC:
2517     case COL_RES_DL_SRC:
2518     case COL_UNRES_DL_SRC:
2519     case COL_DEF_NET_SRC:
2520     case COL_RES_NET_SRC:
2521     case COL_UNRES_NET_SRC:
2522       column_len = strlen(cf->cinfo.col_data[i]);
2523       if (column_len < 12)
2524         column_len = 12;
2525       line_bufp = get_line_buf(buf_offset + column_len);
2526       sprintf(line_bufp + buf_offset, "%12s", cf->cinfo.col_data[i]);
2527       break;
2528
2529     case COL_DEF_DST:
2530     case COL_RES_DST:
2531     case COL_UNRES_DST:
2532     case COL_DEF_DL_DST:
2533     case COL_RES_DL_DST:
2534     case COL_UNRES_DL_DST:
2535     case COL_DEF_NET_DST:
2536     case COL_RES_NET_DST:
2537     case COL_UNRES_NET_DST:
2538       column_len = strlen(cf->cinfo.col_data[i]);
2539       if (column_len < 12)
2540         column_len = 12;
2541       line_bufp = get_line_buf(buf_offset + column_len);
2542       sprintf(line_bufp + buf_offset, "%-12s", cf->cinfo.col_data[i]);
2543       break;
2544
2545     default:
2546       column_len = strlen(cf->cinfo.col_data[i]);
2547       line_bufp = get_line_buf(buf_offset + column_len);
2548       strcat(line_bufp + buf_offset, cf->cinfo.col_data[i]);
2549       break;
2550     }
2551     buf_offset += column_len;
2552     if (i != cf->cinfo.num_cols - 1) {
2553       /*
2554        * This isn't the last column, so we need to print a
2555        * separator between this column and the next.
2556        *
2557        * If we printed a network source and are printing a
2558        * network destination of the same type next, separate
2559        * them with "->"; if we printed a network destination
2560        * and are printing a network source of the same type
2561        * next, separate them with "<-"; otherwise separate them
2562        * with a space.
2563        *
2564        * We add enough space to the buffer for " <- " or " -> ",
2565        * even if we're only adding " ".
2566        */
2567       line_bufp = get_line_buf(buf_offset + 4);
2568       switch (cf->cinfo.col_fmt[i]) {
2569
2570       case COL_DEF_SRC:
2571       case COL_RES_SRC:
2572       case COL_UNRES_SRC:
2573         switch (cf->cinfo.col_fmt[i + 1]) {
2574
2575         case COL_DEF_DST:
2576         case COL_RES_DST:
2577         case COL_UNRES_DST:
2578           strcat(line_bufp + buf_offset, " -> ");
2579           buf_offset += 4;
2580           break;
2581
2582         default:
2583           strcat(line_bufp + buf_offset, " ");
2584           buf_offset += 1;
2585           break;
2586         }
2587         break;
2588
2589       case COL_DEF_DL_SRC:
2590       case COL_RES_DL_SRC:
2591       case COL_UNRES_DL_SRC:
2592         switch (cf->cinfo.col_fmt[i + 1]) {
2593
2594         case COL_DEF_DL_DST:
2595         case COL_RES_DL_DST:
2596         case COL_UNRES_DL_DST:
2597           strcat(line_bufp + buf_offset, " -> ");
2598           buf_offset += 4;
2599           break;
2600
2601         default:
2602           strcat(line_bufp + buf_offset, " ");
2603           buf_offset += 1;
2604           break;
2605         }
2606         break;
2607
2608       case COL_DEF_NET_SRC:
2609       case COL_RES_NET_SRC:
2610       case COL_UNRES_NET_SRC:
2611         switch (cf->cinfo.col_fmt[i + 1]) {
2612
2613         case COL_DEF_NET_DST:
2614         case COL_RES_NET_DST:
2615         case COL_UNRES_NET_DST:
2616           strcat(line_bufp + buf_offset, " -> ");
2617           buf_offset += 4;
2618           break;
2619
2620         default:
2621           strcat(line_bufp + buf_offset, " ");
2622           buf_offset += 1;
2623           break;
2624         }
2625         break;
2626
2627       case COL_DEF_DST:
2628       case COL_RES_DST:
2629       case COL_UNRES_DST:
2630         switch (cf->cinfo.col_fmt[i + 1]) {
2631
2632         case COL_DEF_SRC:
2633         case COL_RES_SRC:
2634         case COL_UNRES_SRC:
2635           strcat(line_bufp + buf_offset, " <- ");
2636           buf_offset += 4;
2637           break;
2638
2639         default:
2640           strcat(line_bufp + buf_offset, " ");
2641           buf_offset += 1;
2642           break;
2643         }
2644         break;
2645
2646       case COL_DEF_DL_DST:
2647       case COL_RES_DL_DST:
2648       case COL_UNRES_DL_DST:
2649         switch (cf->cinfo.col_fmt[i + 1]) {
2650
2651         case COL_DEF_DL_SRC:
2652         case COL_RES_DL_SRC:
2653         case COL_UNRES_DL_SRC:
2654           strcat(line_bufp + buf_offset, " <- ");
2655           buf_offset += 4;
2656           break;
2657
2658         default:
2659           strcat(line_bufp + buf_offset, " ");
2660           buf_offset += 1;
2661           break;
2662         }
2663         break;
2664
2665       case COL_DEF_NET_DST:
2666       case COL_RES_NET_DST:
2667       case COL_UNRES_NET_DST:
2668         switch (cf->cinfo.col_fmt[i + 1]) {
2669
2670         case COL_DEF_NET_SRC:
2671         case COL_RES_NET_SRC:
2672         case COL_UNRES_NET_SRC:
2673           strcat(line_bufp + buf_offset, " <- ");
2674           buf_offset += 4;
2675           break;
2676
2677         default:
2678           strcat(line_bufp + buf_offset, " ");
2679           buf_offset += 1;
2680           break;
2681         }
2682         break;
2683
2684       default:
2685         strcat(line_bufp + buf_offset, " ");
2686         buf_offset += 1;
2687         break;
2688       }
2689     }
2690   }
2691   return print_line(print_stream, 0, line_bufp);
2692 }
2693
2694 static gboolean
2695 print_packet(capture_file *cf, epan_dissect_t *edt)
2696 {
2697   print_args_t  print_args;
2698
2699   if (verbose) {
2700     /* Print the information in the protocol tree. */
2701     switch (output_action) {
2702
2703     case WRITE_TEXT:
2704       print_args.to_file = TRUE;
2705       print_args.format = print_format;
2706       print_args.print_summary = !verbose;
2707       print_args.print_hex = verbose && print_hex;
2708       print_args.print_formfeed = FALSE;
2709       print_args.print_dissections = verbose ? print_dissections_expanded : print_dissections_none;
2710
2711       /* init the packet range */
2712       packet_range_init(&print_args.range);
2713
2714       if (!proto_tree_print(&print_args, edt, print_stream))
2715         return FALSE;
2716       if (!print_hex) {
2717         /* "print_hex_data()" will put out a leading blank line, as well
2718          as a trailing one; print one here, to separate the packets,
2719          only if "print_hex_data()" won't be called. */
2720         if (!print_line(print_stream, 0, ""))
2721           return FALSE;
2722       }
2723       break;
2724
2725     case WRITE_XML:
2726       proto_tree_write_pdml(edt, stdout);
2727       printf("\n");
2728       return !ferror(stdout);
2729     }
2730   } else {
2731     /* Just fill in the columns. */
2732     epan_dissect_fill_in_columns(edt);
2733
2734     /* Now print them. */
2735     switch (output_action) {
2736
2737     case WRITE_TEXT:
2738         if (!print_columns(cf))
2739           return FALSE;
2740         break;
2741
2742     case WRITE_XML:
2743         proto_tree_write_psml(edt, stdout);
2744         return !ferror(stdout);
2745     }
2746   }
2747   if (print_hex) {
2748     if (!print_hex_data(print_stream, edt))
2749       return FALSE;
2750     if (!print_line(print_stream, 0, ""))
2751       return FALSE;
2752   }
2753   return TRUE;
2754 }
2755
2756 static gboolean
2757 write_finale(void)
2758 {
2759   switch (output_action) {
2760
2761   case WRITE_TEXT:
2762     return print_finale(print_stream);
2763     break;
2764
2765   case WRITE_XML:
2766     if (verbose)
2767       write_pdml_finale(stdout);
2768     else
2769       write_psml_finale(stdout);
2770     return !ferror(stdout);
2771
2772   default:
2773     g_assert_not_reached();
2774     return FALSE;
2775   }
2776 }
2777
2778 static void
2779 show_print_file_io_error(int err)
2780 {
2781   switch (err) {
2782
2783   case ENOSPC:
2784     cmdarg_err("Not all the packets could be printed because there is "
2785 "no space left on the file system.");
2786     break;
2787
2788 #ifdef EDQUOT
2789   case EDQUOT:
2790     cmdarg_err("Not all the packets could be printed because you are "
2791 "too close to, or over your disk quota.");
2792   break;
2793 #endif
2794
2795   default:
2796     cmdarg_err("An error occurred while printing packets: %s.",
2797       strerror(err));
2798     break;
2799   }
2800 }
2801
2802 static const char *
2803 cf_open_error_message(int err, gchar *err_info, gboolean for_writing,
2804                       int file_type)
2805 {
2806   const char *errmsg;
2807   static char errmsg_errno[1024+1];
2808
2809   if (err < 0) {
2810     /* Wiretap error. */
2811     switch (err) {
2812
2813     case WTAP_ERR_NOT_REGULAR_FILE:
2814       errmsg = "The file \"%s\" is a \"special file\" or socket or other non-regular file.";
2815       break;
2816
2817     case WTAP_ERR_FILE_UNKNOWN_FORMAT:
2818       /* Seen only when opening a capture file for reading. */
2819       errmsg = "The file \"%s\" isn't a capture file in a format TShark understands.";
2820       break;
2821
2822     case WTAP_ERR_UNSUPPORTED:
2823       /* Seen only when opening a capture file for reading. */
2824       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
2825                "The file \"%%s\" isn't a capture file in a format TShark understands.\n"
2826                "(%s)", err_info);
2827       g_free(err_info);
2828       errmsg = errmsg_errno;
2829       break;
2830
2831     case WTAP_ERR_CANT_WRITE_TO_PIPE:
2832       /* Seen only when opening a capture file for writing. */
2833       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
2834                  "The file \"%%s\" is a pipe, and %s capture files can't be "
2835                  "written to a pipe.", wtap_file_type_string(file_type));
2836       errmsg = errmsg_errno;
2837       break;
2838
2839     case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
2840       /* Seen only when opening a capture file for writing. */
2841       errmsg = "TShark doesn't support writing capture files in that format.";
2842       break;
2843
2844     case WTAP_ERR_UNSUPPORTED_ENCAP:
2845       if (for_writing)
2846         errmsg = "TShark can't save this capture in that format.";
2847       else {
2848         g_snprintf(errmsg_errno, sizeof(errmsg_errno),
2849                  "The file \"%%s\" is a capture for a network type that TShark doesn't support.\n"
2850                  "(%s)", err_info);
2851         g_free(err_info);
2852         errmsg = errmsg_errno;
2853       }
2854       break;
2855
2856     case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
2857       if (for_writing)
2858         errmsg = "TShark can't save this capture in that format.";
2859       else
2860         errmsg = "The file \"%s\" is a capture for a network type that TShark doesn't support.";
2861       break;
2862
2863     case WTAP_ERR_BAD_RECORD:
2864       /* Seen only when opening a capture file for reading. */
2865       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
2866                "The file \"%%s\" appears to be damaged or corrupt.\n"
2867                "(%s)", err_info);
2868       g_free(err_info);
2869       errmsg = errmsg_errno;
2870       break;
2871
2872     case WTAP_ERR_CANT_OPEN:
2873       if (for_writing)
2874         errmsg = "The file \"%s\" could not be created for some unknown reason.";
2875       else
2876         errmsg = "The file \"%s\" could not be opened for some unknown reason.";
2877       break;
2878
2879     case WTAP_ERR_SHORT_READ:
2880       errmsg = "The file \"%s\" appears to have been cut short"
2881                " in the middle of a packet or other data.";
2882       break;
2883
2884     case WTAP_ERR_SHORT_WRITE:
2885       errmsg = "A full header couldn't be written to the file \"%s\".";
2886       break;
2887
2888     default:
2889       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
2890                  "The file \"%%s\" could not be %s: %s.",
2891                  for_writing ? "created" : "opened",
2892                  wtap_strerror(err));
2893       errmsg = errmsg_errno;
2894       break;
2895     }
2896   } else
2897     errmsg = file_open_error_message(err, for_writing);
2898   return errmsg;
2899 }
2900
2901 /*
2902  * Open/create errors are reported with an console message in TShark.
2903  */
2904 static void
2905 open_failure_message(const char *filename, int err, gboolean for_writing)
2906 {
2907   fprintf(stderr, "tshark: ");
2908   fprintf(stderr, file_open_error_message(err, for_writing), filename);
2909   fprintf(stderr, "\n");
2910 }
2911
2912 cf_status_t
2913 cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
2914 {
2915   wtap       *wth;
2916   gchar       *err_info;
2917   char        err_msg[2048+1];
2918
2919   wth = wtap_open_offline(fname, err, &err_info, FALSE);
2920   if (wth == NULL)
2921     goto fail;
2922
2923   /* The open succeeded.  Fill in the information for this file. */
2924
2925   /* Initialize all data structures used for dissection. */
2926   init_dissection();
2927
2928   cf->wth = wth;
2929   cf->f_datalen = 0; /* not used, but set it anyway */
2930
2931   /* Set the file name because we need it to set the follow stream filter.
2932      XXX - is that still true?  We need it for other reasons, though,
2933      in any case. */
2934   cf->filename = g_strdup(fname);
2935
2936   /* Indicate whether it's a permanent or temporary file. */
2937   cf->is_tempfile = is_tempfile;
2938
2939   /* If it's a temporary capture buffer file, mark it as not saved. */
2940   cf->user_saved = !is_tempfile;
2941
2942   cf->cd_t      = wtap_file_type(cf->wth);
2943   cf->count     = 0;
2944   cf->drops_known = FALSE;
2945   cf->drops     = 0;
2946   cf->snap      = wtap_snapshot_length(cf->wth);
2947   if (cf->snap == 0) {
2948     /* Snapshot length not known. */
2949     cf->has_snap = FALSE;
2950     cf->snap = WTAP_MAX_PACKET_SIZE;
2951   } else
2952     cf->has_snap = TRUE;
2953   nstime_set_zero(&cf->elapsed_time);
2954   nstime_set_zero(&first_ts);
2955   nstime_set_zero(&prev_ts);
2956
2957   return CF_OK;
2958
2959 fail:
2960   g_snprintf(err_msg, sizeof err_msg,
2961              cf_open_error_message(*err, err_info, FALSE, cf->cd_t), fname);
2962   cmdarg_err("%s", err_msg);
2963   return CF_ERROR;
2964 }
2965
2966
2967 /*
2968  * General errors are reported with an console message in TShark.
2969  */
2970 static void
2971 failure_message(const char *msg_format, va_list ap)
2972 {
2973   fprintf(stderr, "tshark: ");
2974   vfprintf(stderr, msg_format, ap);
2975   fprintf(stderr, "\n");
2976 }
2977
2978 /*
2979  * Read errors are reported with an console message in TShark.
2980  */
2981 static void
2982 read_failure_message(const char *filename, int err)
2983 {
2984   cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
2985           filename, strerror(err));
2986 }
2987
2988 /*
2989  * Report an error in command-line arguments.
2990  */
2991 void
2992 cmdarg_err(const char *fmt, ...)
2993 {
2994   va_list ap;
2995
2996   va_start(ap, fmt);
2997   fprintf(stderr, "tshark: ");
2998   vfprintf(stderr, fmt, ap);
2999   fprintf(stderr, "\n");
3000   va_end(ap);
3001 }
3002
3003 /*
3004  * Report additional information for an error in command-line arguments.
3005  */
3006 void
3007 cmdarg_err_cont(const char *fmt, ...)
3008 {
3009   va_list ap;
3010
3011   va_start(ap, fmt);
3012   vfprintf(stderr, fmt, ap);
3013   fprintf(stderr, "\n");
3014   va_end(ap);
3015 }
3016
3017
3018 /****************************************************************************************************************/
3019 /* indication report "dummies", needed for capture_loop.c */
3020
3021 #ifdef HAVE_LIBPCAP
3022
3023 /** Report a new capture file having been opened. */
3024 void
3025 report_new_capture_file(const char *filename)
3026 {
3027     /* shouldn't happen */
3028     g_assert_not_reached();
3029 }
3030
3031 /** Report a number of new packets captured. */
3032 void
3033 report_packet_count(int packet_count)
3034 {
3035     /* shouldn't happen */
3036     g_assert_not_reached();
3037 }
3038
3039 /** Report the packet drops once the capture finishes. */
3040 void
3041 report_packet_drops(int drops)
3042 {
3043     /* shouldn't happen */
3044     g_assert_not_reached();
3045 }
3046
3047 /** Report an error in the capture. */
3048 void
3049 report_capture_error(const char *errmsg, const char *secondary_error_msg)
3050 {
3051     cmdarg_err(errmsg);
3052     cmdarg_err_cont(secondary_error_msg);
3053 }
3054
3055 /** Report an error with a capture filter. */
3056 void
3057 report_cfilter_error(const char *cfilter, const char *errmsg)
3058 {
3059
3060     cmdarg_err(
3061       "Invalid capture filter: \"%s\"!\n"
3062       "\n"
3063       "That string isn't a valid capture filter (%s).\n"
3064       "See the User's Guide for a description of the capture filter syntax.",
3065       cfilter, errmsg);
3066 }
3067
3068 #endif /* HAVE_LIBPCAP */
3069
3070
3071 /****************************************************************************************************************/
3072 /* signal pipe "dummies", needed for capture_loop.c */
3073
3074 #ifdef HAVE_LIBPCAP
3075
3076 #ifdef _WIN32
3077 gboolean
3078 signal_pipe_check_running(void)
3079 {
3080     /* currently, no check required */
3081     return TRUE;
3082 }
3083 #endif  /* _WIN32 */
3084
3085 #endif /* HAVE_LIBPCAP */