[Automatic manuf, services and enterprise-numbers update for 2011-10-30]
[obnox/wireshark/wip.git] / tshark.c
1 /* tshark.c
2  *
3  * Text-mode variant of Wireshark, along the lines of tcpdump and snoop,
4  * by Gilbert Ramirez <gram@alumni.rice.edu> and Guy Harris <guy@alum.mit.edu>.
5  *
6  * $Id$
7  *
8  * Wireshark - Network traffic analyzer
9  * By Gerald Combs <gerald@wireshark.org>
10  * Copyright 1998 Gerald Combs
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 #ifndef HAVE_GETOPT
55 #include "wsutil/wsgetopt.h"
56 #endif
57
58 #include <glib.h>
59 #include <epan/epan.h>
60 #include <epan/filesystem.h>
61 #include <wsutil/privileges.h>
62 #include <wsutil/file_util.h>
63
64 #include "globals.h"
65 #include <epan/timestamp.h>
66 #include <epan/packet.h>
67 #include "file.h"
68 #include "disabled_protos.h"
69 #include <epan/prefs.h>
70 #include <epan/column.h>
71 #include "print.h"
72 #include <epan/addr_resolv.h>
73 #include "util.h"
74 #include "clopts_common.h"
75 #include "console_io.h"
76 #include "cmdarg_err.h"
77 #include "version_info.h"
78 #include <epan/plugins.h>
79 #include "register.h"
80 #include <epan/epan_dissect.h>
81 #include <epan/tap.h>
82 #include <epan/stat_cmd_args.h>
83 #include <epan/timestamp.h>
84 #include <epan/ex-opt.h>
85
86 #ifdef HAVE_LIBPCAP
87 #include "capture_ui_utils.h"
88 #include "capture_ifinfo.h"
89 #include "capture-pcap-util.h"
90 #ifdef _WIN32
91 #include "capture-wpcap.h"
92 #include "capture_errs.h"
93 #include <wsutil/unicode-utils.h>
94 #endif /* _WIN32 */
95 #include "capture_sync.h"
96 #endif /* HAVE_LIBPCAP */
97 #include "log.h"
98 #include <epan/funnel.h>
99
100 /*
101  * This is the template for the decode as option; it is shared between the
102  * various functions that output the usage for this parameter.
103  */
104 static const gchar decode_as_arg_template[] = "<layer_type>==<selector>,<decode_as_protocol>";
105
106 static guint32 cum_bytes;
107 static nstime_t first_ts;
108 static nstime_t prev_dis_ts;
109 static nstime_t prev_cap_ts;
110
111 static gboolean print_packet_info;      /* TRUE if we're to print packet information */
112
113 static gboolean perform_two_pass_analysis;
114
115 /*
116  * The way the packet decode is to be written.
117  */
118 typedef enum {
119   WRITE_TEXT,   /* summary or detail text */
120   WRITE_XML,    /* PDML or PSML */
121   WRITE_FIELDS  /* User defined list of fields */
122   /* Add CSV and the like here */
123 } output_action_e;
124
125 static output_action_e output_action;
126 static gboolean do_dissection;  /* TRUE if we have to dissect each packet */
127 static gboolean verbose;
128 static gboolean print_hex;
129 static gboolean line_buffered;
130
131 static print_format_e print_format = PR_FMT_TEXT;
132 static print_stream_t *print_stream;
133
134 static output_fields_t* output_fields  = NULL;
135
136 /* The line separator used between packets, changeable via the -S option */
137 static char *separator = "";
138
139 #ifdef HAVE_LIBPCAP
140 /*
141  * TRUE if we're to print packet counts to keep track of captured packets.
142  */
143 static gboolean print_packet_counts;
144
145 static capture_options global_capture_opts;
146
147 #ifdef SIGINFO
148 static gboolean infodelay;      /* if TRUE, don't print capture info in SIGINFO handler */
149 static gboolean infoprint;      /* if TRUE, print capture info after clearing infodelay */
150 #endif /* SIGINFO */
151
152 static gboolean capture(void);
153 static void report_counts(void);
154 #ifdef _WIN32
155 static BOOL WINAPI capture_cleanup(DWORD);
156 #else /* _WIN32 */
157 static void capture_cleanup(int);
158 #ifdef SIGINFO
159 static void report_counts_siginfo(int);
160 #endif /* SIGINFO */
161 #endif /* _WIN32 */
162 #endif /* HAVE_LIBPCAP */
163
164 static int load_cap_file(capture_file *, char *, int, gboolean, int, gint64);
165 static gboolean process_packet(capture_file *cf, gint64 offset,
166     const struct wtap_pkthdr *whdr, union wtap_pseudo_header *pseudo_header,
167     const guchar *pd, gboolean filtering_tap_listeners, guint tap_flags);
168 static void show_capture_file_io_error(const char *, int, gboolean);
169 static void show_print_file_io_error(int err);
170 static gboolean write_preamble(capture_file *cf);
171 static gboolean print_packet(capture_file *cf, epan_dissect_t *edt);
172 static gboolean write_finale(void);
173 static const char *cf_open_error_message(int err, gchar *err_info,
174     gboolean for_writing, int file_type);
175
176 static void open_failure_message(const char *filename, int err,
177     gboolean for_writing);
178 static void failure_message(const char *msg_format, va_list ap);
179 static void read_failure_message(const char *filename, int err);
180 static void write_failure_message(const char *filename, int err);
181
182 capture_file cfile;
183
184 struct string_elem {
185   const char *sstr;   /* The short string */
186   const char *lstr;   /* The long string */
187 };
188
189 static gint
190 string_compare(gconstpointer a, gconstpointer b)
191 {
192   return strcmp(((const struct string_elem *)a)->sstr,
193                 ((const struct string_elem *)b)->sstr);
194 }
195
196 static void
197 string_elem_print(gpointer data, gpointer not_used _U_)
198 {
199   fprintf(stderr, "    %s - %s\n",
200           ((struct string_elem *)data)->sstr,
201           ((struct string_elem *)data)->lstr);
202 }
203
204 static void
205 list_capture_types(void) {
206   int i;
207   struct string_elem *captypes;
208   GSList *list = NULL;
209
210   captypes = g_malloc(sizeof(struct string_elem) * WTAP_NUM_FILE_TYPES);
211
212   fprintf(stderr, "tshark: The available capture file types for the \"-F\" flag are:\n");
213   for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) {
214     if (wtap_dump_can_open(i)) {
215       captypes[i].sstr = wtap_file_type_short_string(i);
216       captypes[i].lstr = wtap_file_type_string(i);
217       list = g_slist_insert_sorted(list, &captypes[i], string_compare);
218     }
219   }
220   g_slist_foreach(list, string_elem_print, NULL);
221   g_slist_free(list);
222   g_free(captypes);
223 }
224
225 static void
226 print_usage(gboolean print_ver)
227 {
228   FILE *output;
229
230   if (print_ver) {
231     output = stdout;
232     fprintf(output,
233         "TShark " VERSION "%s\n"
234         "Dump and analyze network traffic.\n"
235         "See http://www.wireshark.org for more information.\n"
236         "\n"
237         "%s",
238          wireshark_svnversion, get_copyright_info());
239   } else {
240     output = stderr;
241   }
242   fprintf(output, "\n");
243   fprintf(output, "Usage: tshark [options] ...\n");
244   fprintf(output, "\n");
245
246 #ifdef HAVE_LIBPCAP
247   fprintf(output, "Capture interface:\n");
248   fprintf(output, "  -i <interface>           name or idx of interface (def: first non-loopback)\n");
249   fprintf(output, "  -f <capture filter>      packet filter in libpcap filter syntax\n");
250   fprintf(output, "  -s <snaplen>             packet snapshot length (def: 65535)\n");
251   fprintf(output, "  -p                       don't capture in promiscuous mode\n");
252 #ifdef HAVE_PCAP_CREATE
253   fprintf(output, "  -I                       capture in monitor mode, if available\n");
254 #endif
255 #if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
256   fprintf(output, "  -B <buffer size>         size of kernel buffer (def: 1MB)\n");
257 #endif
258   fprintf(output, "  -y <link type>           link layer type (def: first appropriate)\n");
259   fprintf(output, "  -D                       print list of interfaces and exit\n");
260   fprintf(output, "  -L                       print list of link-layer types of iface and exit\n");
261   fprintf(output, "\n");
262   fprintf(output, "Capture stop conditions:\n");
263   fprintf(output, "  -c <packet count>        stop after n packets (def: infinite)\n");
264   fprintf(output, "  -a <autostop cond.> ...  duration:NUM - stop after NUM seconds\n");
265   fprintf(output, "                           filesize:NUM - stop this file after NUM KB\n");
266   fprintf(output, "                              files:NUM - stop after NUM files\n");
267   /*fprintf(output, "\n");*/
268   fprintf(output, "Capture output:\n");
269   fprintf(output, "  -b <ringbuffer opt.> ... duration:NUM - switch to next file after NUM secs\n");
270   fprintf(output, "                           filesize:NUM - switch to next file after NUM KB\n");
271   fprintf(output, "                              files:NUM - ringbuffer: replace after NUM files\n");
272 #endif  /* HAVE_LIBPCAP */
273
274   /*fprintf(output, "\n");*/
275   fprintf(output, "Input file:\n");
276   fprintf(output, "  -r <infile>              set the filename to read from (no pipes or stdin!)\n");
277
278   fprintf(output, "\n");
279   fprintf(output, "Processing:\n");
280   fprintf(output, "  -2                       perform a two-pass analysis\n");
281   fprintf(output, "  -R <read filter>         packet filter in Wireshark display filter syntax\n");
282   fprintf(output, "  -n                       disable all name resolutions (def: all enabled)\n");
283   fprintf(output, "  -N <name resolve flags>  enable specific name resolution(s): \"mntC\"\n");
284   fprintf(output, "  -d %s ...\n", decode_as_arg_template);
285   fprintf(output, "                           \"Decode As\", see the man page for details\n");
286   fprintf(output, "                           Example: tcp.port==8888,http\n");
287
288   /*fprintf(output, "\n");*/
289   fprintf(output, "Output:\n");
290   fprintf(output, "  -w <outfile|->           write packets to a pcap-format file named \"outfile\"\n");
291   fprintf(output, "                           (or to the standard output for \"-\")\n");
292   fprintf(output, "  -C <config profile>      start with specified configuration profile\n");
293   fprintf(output, "  -F <output file type>    set the output file type, default is libpcap\n");
294   fprintf(output, "                           an empty \"-F\" option will list the file types\n");
295   fprintf(output, "  -V                       add output of packet tree        (Packet Details)\n");
296   fprintf(output, "  -O <protocols>           Only show packet details of these protocols, comma\n");
297   fprintf(output, "                           separated\n");
298   fprintf(output, "  -P                       print packets even when writing to a file\n");
299   fprintf(output, "  -S <separator>           the line separator to print between packets\n");
300   fprintf(output, "  -x                       add output of hex and ASCII dump (Packet Bytes)\n");
301   fprintf(output, "  -T pdml|ps|psml|text|fields\n");
302   fprintf(output, "                           format of text output (def: text)\n");
303   fprintf(output, "  -e <field>               field to print if -Tfields selected (e.g. tcp.port);\n");
304   fprintf(output, "                           this option can be repeated to print multiple fields\n");
305   fprintf(output, "  -E<fieldsoption>=<value> set options for output when -Tfields selected:\n");
306   fprintf(output, "     header=y|n            switch headers on and off\n");
307   fprintf(output, "     separator=/t|/s|<char> select tab, space, printable character as separator\n");
308   fprintf(output, "     occurrence=f|l|a      print first, last or all occurrences of each field\n");
309   fprintf(output, "     aggregator=,|/s|<char> select comma, space, printable character as\n");
310   fprintf(output, "                           aggregator\n");
311   fprintf(output, "     quote=d|s|n           select double, single, no quotes for values\n");
312   fprintf(output, "  -t ad|a|r|d|dd|e         output format of time stamps (def: r: rel. to first)\n");
313   fprintf(output, "  -u s|hms                 output format of seconds (def: s: seconds)\n");
314   fprintf(output, "  -l                       flush standard output after each packet\n");
315   fprintf(output, "  -q                       be more quiet on stdout (e.g. when using statistics)\n");
316   fprintf(output, "  -X <key>:<value>         eXtension options, see the man page for details\n");
317   fprintf(output, "  -z <statistics>          various statistics, see the man page for details\n");
318
319   fprintf(output, "\n");
320   fprintf(output, "Miscellaneous:\n");
321   fprintf(output, "  -h                       display this help and exit\n");
322   fprintf(output, "  -v                       display version info and exit\n");
323   fprintf(output, "  -o <name>:<value> ...    override preference setting\n");
324   fprintf(output, "  -K <keytab>              keytab file to use for kerberos decryption\n");
325   fprintf(output, "  -G [report]              dump one of several available reports and exit\n");
326   fprintf(output, "                           default report=\"fields\"\n");
327   fprintf(output, "                           use \"-G ?\" for more help\n");
328 }
329
330 static void
331 glossary_option_help(void)
332 {
333   FILE *output;
334
335   output = stdout;
336
337   fprintf(output, "TShark " VERSION "%s\n", wireshark_svnversion);
338
339   fprintf(output, "\n");
340   fprintf(output, "Usage: tshark -G [report]\n");
341   fprintf(output, "\n");
342   fprintf(output, "Glossary table reports:\n");
343   fprintf(output, "  -G [fields]              dump glossary in original format and exit\n");
344   fprintf(output, "  -G fields2               dump glossary in format 2 and exit\n");
345   fprintf(output, "  -G fields3               dump glossary in format 3 and exit\n");
346   fprintf(output, "  -G protocols             dump protocols in registration database and exit\n");
347   fprintf(output, "  -G values                dump value, range, true/false strings and exit\n");
348   fprintf(output, "  -G decodes               dump \"layer type\"/\"decode as\" associations and exit\n");
349   fprintf(output, "\n");
350   fprintf(output, "Preference reports:\n");
351   fprintf(output, "  -G defaultprefs          dump default preferences and exit\n");
352   fprintf(output, "  -G currentprefs          dump current preferences and exit\n");
353   fprintf(output, "\n");
354
355 }
356
357 /*
358  * For a dissector table, print on the stream described by output,
359  * its short name (which is what's used in the "-d" option) and its
360  * descriptive name.
361  */
362 static void
363 display_dissector_table_names(const char *table_name, const char *ui_name,
364                               gpointer output)
365 {
366   fprintf((FILE *)output, "\t%s (%s)\n", table_name, ui_name);
367 }
368
369 /*
370  * For a dissector handle, print on the stream described by output,
371  * the filter name (which is what's used in the "-d" option) and the full
372  * name for the protocol that corresponds to this handle.
373  */
374 static void
375 display_dissector_names(const gchar *table _U_, gpointer handle, gpointer output)
376 {
377   int                proto_id;
378   const gchar*       proto_filter_name;
379   const gchar*       proto_ui_name;
380
381   proto_id = dissector_handle_get_protocol_index((dissector_handle_t)handle);
382
383   if (proto_id != -1) {
384     proto_filter_name = proto_get_protocol_filter_name(proto_id);
385     proto_ui_name =  proto_get_protocol_name(proto_id);
386     g_assert(proto_filter_name != NULL);
387     g_assert(proto_ui_name != NULL);
388
389     fprintf((FILE *)output, "\t%s (%s)\n",
390             proto_filter_name,
391             proto_ui_name);
392   }
393 }
394
395 /*
396  * The protocol_name_search structure is used by find_protocol_name_func()
397  * to pass parameters and store results
398  */
399 struct protocol_name_search{
400   gchar              *searched_name;  /* Protocol filter name we are looking for */
401   dissector_handle_t  matched_handle; /* Handle for a dissector whose protocol has the specified filter name */
402   guint               nb_match;       /* How many dissectors matched searched_name */
403 };
404 typedef struct protocol_name_search *protocol_name_search_t;
405
406 /*
407  * This function parses all dissectors associated with a table to find the
408  * one whose protocol has the specified filter name.  It is called
409  * as a reference function in a call to dissector_table_foreach_handle.
410  * The name we are looking for, as well as the results, are stored in the
411  * protocol_name_search struct pointed to by user_data.
412  * If called using dissector_table_foreach_handle, we actually parse the
413  * whole list of dissectors.
414  */
415 static void
416 find_protocol_name_func(const gchar *table _U_, gpointer handle, gpointer user_data)
417
418 {
419   int                         proto_id;
420   const gchar                *protocol_filter_name;
421   protocol_name_search_t      search_info;
422
423   g_assert(handle);
424
425   search_info = (protocol_name_search_t)user_data;
426
427   proto_id = dissector_handle_get_protocol_index((dissector_handle_t)handle);
428   if (proto_id != -1) {
429     protocol_filter_name = proto_get_protocol_filter_name(proto_id);
430     g_assert(protocol_filter_name != NULL);
431     if (strcmp(protocol_filter_name, search_info->searched_name) == 0) {
432       /* Found a match */
433       if (search_info->nb_match == 0) {
434         /* Record this handle only if this is the first match */
435         search_info->matched_handle = (dissector_handle_t)handle; /* Record the handle for this matching dissector */
436       }
437       search_info->nb_match++;
438     }
439   }
440 }
441
442 /*
443  * Print all layer type names supported.
444  * We send the output to the stream described by the handle output.
445  */
446
447 static void
448 fprint_all_layer_types(FILE *output)
449
450 {
451   dissector_all_tables_foreach_table(display_dissector_table_names, (gpointer)output);
452 }
453
454 /*
455  * Print all protocol names supported for a specific layer type.
456  * table_name contains the layer type name in which the search is performed.
457  * We send the output to the stream described by the handle output.
458  */
459
460 static void
461 fprint_all_protocols_for_layer_types(FILE *output, gchar *table_name)
462
463 {
464   dissector_table_foreach_handle(table_name,
465                                  display_dissector_names,
466                                  (gpointer)output);
467 }
468
469 /*
470  * The function below parses the command-line parameters for the decode as
471  * feature (a string pointer by cl_param).
472  * It checks the format of the command-line, searches for a matching table
473  * and dissector.  If a table/dissector match is not found, we display a
474  * summary of the available tables/dissectors (on stderr) and return FALSE.
475  * If everything is fine, we get the "Decode as" preference activated,
476  * then we return TRUE.
477  */
478 static gboolean
479 add_decode_as(const gchar *cl_param)
480 {
481   gchar                        *table_name;
482   guint32                       selector;
483   gchar                        *decoded_param;
484   gchar                        *remaining_param;
485   gchar                        *selector_str;
486   gchar                        *dissector_str;
487   dissector_handle_t            dissector_matching;
488   dissector_table_t             table_matching;
489   ftenum_t                      dissector_table_selector_type;
490   struct protocol_name_search   user_protocol_name;
491
492   /* The following code will allocate and copy the command-line options in a string pointed by decoded_param */
493
494   g_assert(cl_param);
495   decoded_param = g_strdup(cl_param);
496   g_assert(decoded_param);
497
498
499   /* The lines below will parse this string (modifying it) to extract all
500     necessary information.  Note that decoded_param is still needed since
501     strings are not copied - we just save pointers. */
502
503   /* This section extracts a layer type (table_name) from decoded_param */
504   table_name = decoded_param; /* Layer type string starts from beginning */
505
506   remaining_param = strchr(table_name, '=');
507   if (remaining_param == NULL) {
508     cmdarg_err("Parameter \"%s\" doesn't follow the template \"%s\"", cl_param, decode_as_arg_template);
509     /* If the argument does not follow the template, carry on anyway to check
510        if the table name is at least correct.  If remaining_param is NULL,
511        we'll exit anyway further down */
512   }
513   else {
514     *remaining_param = '\0'; /* Terminate the layer type string (table_name) where '=' was detected */
515   }
516
517   /* Remove leading and trailing spaces from the table name */
518   while ( table_name[0] == ' ' )
519     table_name++;
520   while ( table_name[strlen(table_name) - 1] == ' ' )
521     table_name[strlen(table_name) - 1] = '\0'; /* Note: if empty string, while loop will eventually exit */
522
523 /* The following part searches a table matching with the layer type specified */
524   table_matching = NULL;
525
526 /* Look for the requested table */
527   if ( !(*(table_name)) ) { /* Is the table name empty, if so, don't even search for anything, display a message */
528     cmdarg_err("No layer type specified"); /* Note, we don't exit here, but table_matching will remain NULL, so we exit below */
529   }
530   else {
531     table_matching = find_dissector_table(table_name);
532     if (!table_matching) {
533       cmdarg_err("Unknown layer type -- %s", table_name); /* Note, we don't exit here, but table_matching will remain NULL, so we exit below */
534     }
535   }
536
537   if (!table_matching) {
538     /* Display a list of supported layer types to help the user, if the
539        specified layer type was not found */
540     cmdarg_err("Valid layer types are:");
541     fprint_all_layer_types(stderr);
542   }
543   if (remaining_param == NULL || !table_matching) {
544     /* Exit if the layer type was not found, or if no '=' separator was found
545        (see above) */
546     g_free(decoded_param);
547     return FALSE;
548   }
549
550   if (*(remaining_param + 1) != '=') { /* Check for "==" and not only '=' */
551     cmdarg_err("WARNING: -d requires \"==\" instead of \"=\". Option will be treated as \"%s==%s\"", table_name, remaining_param + 1);
552   }
553   else {
554     remaining_param++; /* Move to the second '=' */
555     *remaining_param = '\0'; /* Remove the second '=' */
556   }
557   remaining_param++; /* Position after the layer type string */
558
559   /* This section extracts a selector value (selector_str) from decoded_param */
560
561   selector_str = remaining_param; /* Next part starts with the selector number */
562
563   remaining_param = strchr(selector_str, ',');
564   if (remaining_param == NULL) {
565     cmdarg_err("Parameter \"%s\" doesn't follow the template \"%s\"", cl_param, decode_as_arg_template);
566     /* If the argument does not follow the template, carry on anyway to check
567        if the selector value is at least correct.  If remaining_param is NULL,
568        we'll exit anyway further down */
569   }
570   else {
571     *remaining_param = '\0'; /* Terminate the selector number string (selector_str) where ',' was detected */
572   }
573
574   dissector_table_selector_type = get_dissector_table_selector_type(table_name);
575
576   switch (dissector_table_selector_type) {
577
578   case FT_UINT8:
579   case FT_UINT16:
580   case FT_UINT24:
581   case FT_UINT32:
582     /* The selector for this table is an unsigned number.  Parse it as such.
583        There's no need to remove leading and trailing spaces from the
584        selector number string, because sscanf will do that for us. */
585     if ( sscanf(selector_str, "%u", &selector) != 1 ) {
586       cmdarg_err("Invalid selector number \"%s\"", selector_str);
587       g_free(decoded_param);
588       return FALSE;
589     }
590     break;
591
592   case FT_STRING:
593   case FT_STRINGZ:
594     /* The selector for this table is a string. */
595     break;
596
597   default:
598     /* There are currently no dissector tables with any types other
599        than the ones listed above. */
600     g_assert_not_reached();
601   }
602
603   if (remaining_param == NULL) {
604     /* Exit if no ',' separator was found (see above) */
605     cmdarg_err("Valid protocols for layer type \"%s\" are:", table_name);
606     fprint_all_protocols_for_layer_types(stderr, table_name);
607     g_free(decoded_param);
608     return FALSE;
609   }
610
611   remaining_param++; /* Position after the selector number string */
612
613   /* This section extracts a protocol filter name (dissector_str) from decoded_param */
614
615   dissector_str = remaining_param; /* All the rest of the string is the dissector (decode as protocol) name */
616
617   /* Remove leading and trailing spaces from the dissector name */
618   while ( dissector_str[0] == ' ' )
619     dissector_str++;
620   while ( dissector_str[strlen(dissector_str) - 1] == ' ' )
621     dissector_str[strlen(dissector_str) - 1] = '\0'; /* Note: if empty string, while loop will eventually exit */
622
623   dissector_matching = NULL;
624
625   /* We now have a pointer to the handle for the requested table inside the variable table_matching */
626   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 */
627     cmdarg_err("No protocol name specified"); /* Note, we don't exit here, but dissector_matching will remain NULL, so we exit below */
628   }
629   else {
630     user_protocol_name.nb_match = 0;
631     user_protocol_name.searched_name = dissector_str;
632     user_protocol_name.matched_handle = NULL;
633
634     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 */
635
636     if (user_protocol_name.nb_match != 0) {
637       dissector_matching = user_protocol_name.matched_handle;
638       if (user_protocol_name.nb_match > 1) {
639         cmdarg_err("WARNING: Protocol \"%s\" matched %u dissectors, first one will be used", dissector_str, user_protocol_name.nb_match);
640       }
641     }
642     else {
643       /* OK, check whether the problem is that there isn't any such
644          protocol, or that there is but it's not specified as a protocol
645          that's valid for that dissector table.
646          Note, we don't exit here, but dissector_matching will remain NULL,
647          so we exit below */
648       if (proto_get_id_by_filter_name(dissector_str) == -1) {
649         /* No such protocol */
650         cmdarg_err("Unknown protocol -- \"%s\"", dissector_str);
651       } else {
652         cmdarg_err("Protocol \"%s\" isn't valid for layer type \"%s\"",
653                    dissector_str, table_name);
654       }
655     }
656   }
657
658   if (!dissector_matching) {
659     cmdarg_err("Valid protocols for layer type \"%s\" are:", table_name);
660     fprint_all_protocols_for_layer_types(stderr, table_name);
661     g_free(decoded_param);
662     return FALSE;
663   }
664
665 /* This is the end of the code that parses the command-line options.
666    All information is now stored in the variables:
667    table_name
668    selector
669    dissector_matching
670    The above variables that are strings are still pointing to areas within
671    decoded_parm.  decoded_parm thus still needs to be kept allocated in
672    until we stop needing these variables
673    decoded_param will be deallocated at each exit point of this function */
674
675
676   /* We now have a pointer to the handle for the requested dissector
677      (requested protocol) inside the variable dissector_matching */
678   switch (dissector_table_selector_type) {
679
680   case FT_UINT8:
681   case FT_UINT16:
682   case FT_UINT24:
683   case FT_UINT32:
684     /* The selector for this table is an unsigned number. */
685     dissector_change_uint(table_name, selector, dissector_matching);
686     break;
687
688   case FT_STRING:
689   case FT_STRINGZ:
690     /* The selector for this table is a string. */
691     dissector_change_string(table_name, selector_str, dissector_matching);
692     break;
693
694   default:
695     /* There are currently no dissector tables with any types other
696        than the ones listed above. */
697     g_assert_not_reached();
698   }
699   g_free(decoded_param); /* "Decode As" rule has been successfully added */
700   return TRUE;
701 }
702
703 static void
704 tshark_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
705     const gchar *message, gpointer user_data)
706 {
707   /* ignore log message, if log_level isn't interesting based
708      upon the console log preferences.
709      If the preferences haven't been loaded loaded yet, display the
710      message anyway.
711
712      The default console_log_level preference value is such that only
713        ERROR, CRITICAL and WARNING level messages are processed;
714        MESSAGE, INFO and DEBUG level messages are ignored.
715
716      XXX: Aug 07, 2009: Prior tshark g_log code was hardwired to process only
717            ERROR and CRITICAL level messages so the current code is a behavioral
718            change.  The current behavior is the same as in Wireshark.
719   */
720   if((log_level & G_LOG_LEVEL_MASK & prefs.console_log_level) == 0 &&
721      prefs.console_log_level != 0) {
722     return;
723   }
724
725   g_log_default_handler(log_domain, log_level, message, user_data);
726
727 }
728
729 static char *
730 output_file_description(const char *fname)
731 {
732   char *save_file_string;
733
734   /* Get a string that describes what we're writing to */
735   if (strcmp(fname, "-") == 0) {
736     /* We're writing to the standard output */
737     save_file_string = g_strdup("standard output");
738   } else {
739     /* We're writing to a file with the name in save_file */
740     save_file_string = g_strdup_printf("file \"%s\"", fname);
741   }
742   return save_file_string;
743 }
744
745 static void
746 print_current_user(void) {
747   gchar *cur_user, *cur_group;
748   if (started_with_special_privs()) {
749     cur_user = get_cur_username();
750     cur_group = get_cur_groupname();
751     fprintf(stderr, "Running as user \"%s\" and group \"%s\".",
752       cur_user, cur_group);
753     g_free(cur_user);
754     g_free(cur_group);
755     if (running_with_special_privs()) {
756       fprintf(stderr, " This could be dangerous.");
757     }
758     fprintf(stderr, "\n");
759   }
760 }
761
762 static void
763 check_capture_privs(void) {
764 #ifdef _WIN32
765   load_wpcap();
766   /* Warn the user if npf.sys isn't loaded. */
767   if (!npf_sys_is_running() && get_os_major_version() >= 6) {
768     fprintf(stderr, "The NPF driver isn't running.  You may have trouble "
769       "capturing or\nlisting interfaces.\n");
770   }
771 #endif
772 }
773
774 static void
775 show_version(GString *comp_info_str, GString *runtime_info_str)
776 {
777   printf("TShark " VERSION "%s\n"
778          "\n"
779          "%s"
780          "\n"
781          "%s"
782          "\n"
783          "%s",
784          wireshark_svnversion, get_copyright_info(), comp_info_str->str,
785          runtime_info_str->str);
786 }
787
788 int
789 main(int argc, char *argv[])
790 {
791   char                *init_progfile_dir_error;
792   int                  opt;
793   gboolean             arg_error = FALSE;
794
795 #ifdef _WIN32
796   WSADATA              wsaData;
797 #endif  /* _WIN32 */
798
799   char                *gpf_path, *pf_path;
800   char                *gdp_path, *dp_path;
801   int                  gpf_open_errno, gpf_read_errno;
802   int                  pf_open_errno, pf_read_errno;
803   int                  gdp_open_errno, gdp_read_errno;
804   int                  dp_open_errno, dp_read_errno;
805   int                  err;
806   int                  exit_status = 0;
807 #ifdef HAVE_LIBPCAP
808   gboolean             list_link_layer_types = FALSE;
809   gboolean             start_capture = FALSE;
810   int                  status;
811   GList               *if_list;
812   gchar               *err_str;
813   guint                i;
814   interface_options    interface_opts;
815 #else
816   gboolean             capture_option_specified = FALSE;
817 #endif
818   gboolean             quiet = FALSE;
819 #ifdef PCAP_NG_DEFAULT
820   int                  out_file_type = WTAP_FILE_PCAPNG;
821 #else
822   int                  out_file_type = WTAP_FILE_PCAP;
823 #endif
824   gboolean             out_file_name_res = FALSE;
825   gchar               *cf_name = NULL, *rfilter = NULL;
826 #ifdef HAVE_PCAP_OPEN_DEAD
827   struct bpf_program   fcode;
828 #endif
829   dfilter_t           *rfcode = NULL;
830   e_prefs             *prefs_p;
831   char                 badopt;
832   GLogLevelFlags       log_flags;
833   int                  optind_initial;
834   gchar               *output_only = NULL;
835
836 #ifdef HAVE_LIBPCAP
837 #if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
838 #define OPTSTRING_B "B:"
839 #else
840 #define OPTSTRING_B ""
841 #endif  /* _WIN32 or HAVE_PCAP_CREATE */
842 #else /* HAVE_LIBPCAP */
843 #define OPTSTRING_B ""
844 #endif  /* HAVE_LIBPCAP */
845
846 #ifdef HAVE_PCAP_CREATE
847 #define OPTSTRING_I "I"
848 #else
849 #define OPTSTRING_I ""
850 #endif
851
852 #define OPTSTRING "2a:A:b:" OPTSTRING_B "c:C:d:De:E:f:F:G:hH:i:" OPTSTRING_I "K:lLnN:o:O:pPqr:R:s:S:t:T:u:vVw:W:xX:y:z:"
853
854   static const char    optstring[] = OPTSTRING;
855
856 #ifdef _WIN32
857   arg_list_utf_16to8(argc, argv);
858 #endif /* _WIN32 */
859
860   /*
861    * Get credential information for later use.
862    */
863   init_process_policies();
864
865   /*
866    * Attempt to get the pathname of the executable file.
867    */
868   init_progfile_dir_error = init_progfile_dir(argv[0], main);
869   if (init_progfile_dir_error != NULL) {
870     fprintf(stderr, "tshark: Can't get pathname of tshark program: %s.\n",
871             init_progfile_dir_error);
872   }
873
874   /*
875    * In order to have the -X opts assigned before the wslua machine starts
876    * we need to call getopts before epan_init() gets called.
877    */
878   opterr = 0;
879   optind_initial = optind;
880
881   while ((opt = getopt(argc, argv, optstring)) != -1) {
882     switch (opt) {
883     case 'C':        /* Configuration Profile */
884       if (profile_exists (optarg, FALSE)) {
885         set_profile_name (optarg);
886       } else {
887         cmdarg_err("Configuration Profile \"%s\" does not exist", optarg);
888         return 1;
889       }
890       break;
891     case 'X':
892       ex_opt_add(optarg);
893       break;
894     default:
895       break;
896     }
897   }
898
899   optind = optind_initial;
900   opterr = 1;
901
902
903
904 /** Send All g_log messages to our own handler **/
905
906   log_flags =
907                     G_LOG_LEVEL_ERROR|
908                     G_LOG_LEVEL_CRITICAL|
909                     G_LOG_LEVEL_WARNING|
910                     G_LOG_LEVEL_MESSAGE|
911                     G_LOG_LEVEL_INFO|
912                     G_LOG_LEVEL_DEBUG|
913                     G_LOG_FLAG_FATAL|G_LOG_FLAG_RECURSION;
914
915   g_log_set_handler(NULL,
916                     log_flags,
917                     tshark_log_handler, NULL /* user_data */);
918   g_log_set_handler(LOG_DOMAIN_MAIN,
919                     log_flags,
920                     tshark_log_handler, NULL /* user_data */);
921
922 #ifdef HAVE_LIBPCAP
923   g_log_set_handler(LOG_DOMAIN_CAPTURE,
924                     log_flags,
925                     tshark_log_handler, NULL /* user_data */);
926   g_log_set_handler(LOG_DOMAIN_CAPTURE_CHILD,
927                     log_flags,
928                     tshark_log_handler, NULL /* user_data */);
929 #endif
930
931   initialize_funnel_ops();
932
933 #ifdef HAVE_LIBPCAP
934   capture_opts_init(&global_capture_opts, &cfile);
935 #endif
936
937   timestamp_set_type(TS_RELATIVE);
938   timestamp_set_precision(TS_PREC_AUTO);
939   timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
940
941   /* Register all dissectors; we must do this before checking for the
942      "-G" flag, as the "-G" flag dumps information registered by the
943      dissectors, and we must do it before we read the preferences, in
944      case any dissectors register preferences. */
945   epan_init(register_all_protocols, register_all_protocol_handoffs, NULL, NULL,
946             failure_message, open_failure_message, read_failure_message,
947             write_failure_message);
948
949   /* Register all tap listeners; we do this before we parse the arguments,
950      as the "-z" argument can specify a registered tap. */
951
952   /* we register the plugin taps before the other taps because
953      stats_tree taps plugins will be registered as tap listeners
954      by stats_tree_stat.c and need to registered before that */
955 #ifdef HAVE_PLUGINS
956   register_all_plugin_tap_listeners();
957 #endif
958   register_all_tap_listeners();
959
960   /* Now register the preferences for any non-dissector modules.
961      We must do that before we read the preferences as well. */
962   prefs_register_modules();
963
964   /* If invoked with the "-G" flag, we dump out information based on
965      the argument to the "-G" flag; if no argument is specified,
966      for backwards compatibility we dump out a glossary of display
967      filter symbols.
968
969      XXX - we do this here, for now, to support "-G" with no arguments.
970      If none of our build or other processes uses "-G" with no arguments,
971      we can just process it with the other arguments. */
972   if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
973     proto_initialize_all_prefixes();
974
975     if (argc == 2)
976       proto_registrar_dump_fields(1);
977     else {
978       if (strcmp(argv[2], "fields") == 0)
979         proto_registrar_dump_fields(1);
980       else if (strcmp(argv[2], "fields2") == 0)
981         proto_registrar_dump_fields(2);
982       else if (strcmp(argv[2], "fields3") == 0)
983         proto_registrar_dump_fields(3);
984       else if (strcmp(argv[2], "protocols") == 0)
985         proto_registrar_dump_protocols();
986       else if (strcmp(argv[2], "values") == 0)
987         proto_registrar_dump_values();
988       else if (strcmp(argv[2], "decodes") == 0)
989         dissector_dump_decodes();
990       else if (strcmp(argv[2], "defaultprefs") == 0)
991         write_prefs(NULL);
992       else if (strcmp(argv[2], "plugins") == 0)
993         plugins_dump_all();
994       else if (strcmp(argv[2], "?") == 0)
995         glossary_option_help();
996       else if (strcmp(argv[2], "-?") == 0)
997         glossary_option_help();
998       else if (strcmp(argv[2], "currentprefs") == 0) {
999         read_prefs(&gpf_open_errno, &gpf_read_errno, &gpf_path,
1000             &pf_open_errno, &pf_read_errno, &pf_path);
1001         write_prefs(NULL);
1002       } else {
1003         cmdarg_err("Invalid \"%s\" option for -G flag, enter -G ? for more help.", argv[2]);
1004         return 1;
1005       }
1006     }
1007     return 0;
1008   }
1009
1010   /* Set the C-language locale to the native environment. */
1011   setlocale(LC_ALL, "");
1012
1013   prefs_p = read_prefs(&gpf_open_errno, &gpf_read_errno, &gpf_path,
1014                      &pf_open_errno, &pf_read_errno, &pf_path);
1015   if (gpf_path != NULL) {
1016     if (gpf_open_errno != 0) {
1017       cmdarg_err("Can't open global preferences file \"%s\": %s.",
1018               pf_path, g_strerror(gpf_open_errno));
1019     }
1020     if (gpf_read_errno != 0) {
1021       cmdarg_err("I/O error reading global preferences file \"%s\": %s.",
1022               pf_path, g_strerror(gpf_read_errno));
1023     }
1024   }
1025   if (pf_path != NULL) {
1026     if (pf_open_errno != 0) {
1027       cmdarg_err("Can't open your preferences file \"%s\": %s.", pf_path,
1028               g_strerror(pf_open_errno));
1029     }
1030     if (pf_read_errno != 0) {
1031       cmdarg_err("I/O error reading your preferences file \"%s\": %s.",
1032               pf_path, g_strerror(pf_read_errno));
1033     }
1034     g_free(pf_path);
1035     pf_path = NULL;
1036   }
1037
1038   /* Set the name resolution code's flags from the preferences. */
1039   gbl_resolv_flags = prefs_p->name_resolve;
1040
1041   /* Read the disabled protocols file. */
1042   read_disabled_protos_list(&gdp_path, &gdp_open_errno, &gdp_read_errno,
1043                             &dp_path, &dp_open_errno, &dp_read_errno);
1044   if (gdp_path != NULL) {
1045     if (gdp_open_errno != 0) {
1046       cmdarg_err("Could not open global disabled protocols file\n\"%s\": %s.",
1047                  gdp_path, g_strerror(gdp_open_errno));
1048     }
1049     if (gdp_read_errno != 0) {
1050       cmdarg_err("I/O error reading global disabled protocols file\n\"%s\": %s.",
1051                  gdp_path, g_strerror(gdp_read_errno));
1052     }
1053     g_free(gdp_path);
1054   }
1055   if (dp_path != NULL) {
1056     if (dp_open_errno != 0) {
1057       cmdarg_err(
1058         "Could not open your disabled protocols file\n\"%s\": %s.", dp_path,
1059         g_strerror(dp_open_errno));
1060     }
1061     if (dp_read_errno != 0) {
1062       cmdarg_err(
1063         "I/O error reading your disabled protocols file\n\"%s\": %s.", dp_path,
1064         g_strerror(dp_read_errno));
1065     }
1066     g_free(dp_path);
1067   }
1068
1069   check_capture_privs();
1070
1071   cap_file_init(&cfile);
1072
1073   /* Print format defaults to this. */
1074   print_format = PR_FMT_TEXT;
1075
1076   output_fields = output_fields_new();
1077
1078   /* Now get our args */
1079   while ((opt = getopt(argc, argv, optstring)) != -1) {
1080     switch (opt) {
1081     case '2':        /* Perform two pass analysis */
1082       perform_two_pass_analysis = TRUE;
1083       break;
1084     case 'a':        /* autostop criteria */
1085     case 'b':        /* Ringbuffer option */
1086     case 'c':        /* Capture x packets */
1087     case 'f':        /* capture filter */
1088     case 'i':        /* Use interface x */
1089     case 'p':        /* Don't capture in promiscuous mode */
1090 #ifdef HAVE_PCAP_CREATE
1091     case 'I':        /* Capture in monitor mode, if available */
1092 #endif
1093     case 's':        /* Set the snapshot (capture) length */
1094     case 'w':        /* Write to capture file x */
1095     case 'y':        /* Set the pcap data link type */
1096 #if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
1097     case 'B':        /* Buffer size */
1098 #endif /* _WIN32 or HAVE_PCAP_CREATE */
1099 #ifdef HAVE_LIBPCAP
1100       status = capture_opts_add_opt(&global_capture_opts, opt, optarg, &start_capture);
1101       if(status != 0) {
1102         return status;
1103       }
1104 #else
1105       capture_option_specified = TRUE;
1106       arg_error = TRUE;
1107 #endif
1108       break;
1109     case 'C':
1110       /* Configuration profile settings were already processed just ignore them this time*/
1111       break;
1112     case 'd':        /* Decode as rule */
1113       if (!add_decode_as(optarg))
1114         return 1;
1115       break;
1116 #if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
1117     case 'K':        /* Kerberos keytab file */
1118       read_keytab_file(optarg);
1119       break;
1120 #endif
1121     case 'D':        /* Print a list of capture devices and exit */
1122 #ifdef HAVE_LIBPCAP
1123       if_list = capture_interface_list(&err, &err_str);
1124       if (if_list == NULL) {
1125         switch (err) {
1126         case CANT_GET_INTERFACE_LIST:
1127           cmdarg_err("%s", err_str);
1128           g_free(err_str);
1129           break;
1130
1131         case NO_INTERFACES_FOUND:
1132           cmdarg_err("There are no interfaces on which a capture can be done");
1133           break;
1134         }
1135         return 2;
1136       }
1137       capture_opts_print_interfaces(if_list);
1138       free_interface_list(if_list);
1139       return 0;
1140 #else
1141       capture_option_specified = TRUE;
1142       arg_error = TRUE;
1143 #endif
1144       break;
1145     case 'e':
1146       /* Field entry */
1147       output_fields_add(output_fields, optarg);
1148       break;
1149     case 'E':
1150       /* Field option */
1151       if(!output_fields_set_option(output_fields, optarg)) {
1152         cmdarg_err("\"%s\" is not a valid field output option=value pair.", optarg);
1153         output_fields_list_options(stderr);
1154         return 1;
1155       }
1156       break;
1157     case 'F':
1158       out_file_type = wtap_short_string_to_file_type(optarg);
1159       if (out_file_type < 0) {
1160         cmdarg_err("\"%s\" isn't a valid capture file type", optarg);
1161         list_capture_types();
1162         return 1;
1163       }
1164       break;
1165     case 'W':        /* Select extra information to save in our capture file */
1166       /* This is patterned after the -N flag which may not be the best idea. */
1167       if (strchr(optarg, 'n'))
1168         out_file_name_res = TRUE;
1169       break;
1170     case 'H':        /* Read address to name mappings from a hosts file */
1171       if (! read_hosts_file(optarg))
1172       {
1173         cmdarg_err("Can't read host entries from \"%s\"", optarg);
1174         return 1;
1175       }
1176       out_file_name_res = TRUE;
1177       break;
1178
1179     case 'h':        /* Print help and exit */
1180       print_usage(TRUE);
1181       return 0;
1182       break;
1183     case 'l':        /* "Line-buffer" standard output */
1184       /* This isn't line-buffering, strictly speaking, it's just
1185          flushing the standard output after the information for
1186          each packet is printed; however, that should be good
1187          enough for all the purposes to which "-l" is put (and
1188          is probably actually better for "-V", as it does fewer
1189          writes).
1190
1191          See the comment in "process_packet()" for an explanation of
1192          why we do that, and why we don't just use "setvbuf()" to
1193          make the standard output line-buffered (short version: in
1194          Windows, "line-buffered" is the same as "fully-buffered",
1195          and the output buffer is only flushed when it fills up). */
1196       line_buffered = TRUE;
1197       break;
1198     case 'L':        /* Print list of link-layer types and exit */
1199 #ifdef HAVE_LIBPCAP
1200       list_link_layer_types = TRUE;
1201 #else
1202       capture_option_specified = TRUE;
1203       arg_error = TRUE;
1204 #endif
1205       break;
1206     case 'n':        /* No name resolution */
1207       gbl_resolv_flags = RESOLV_NONE;
1208       break;
1209     case 'N':        /* Select what types of addresses/port #s to resolve */
1210       if (gbl_resolv_flags == RESOLV_ALL)
1211         gbl_resolv_flags = RESOLV_NONE;
1212       badopt = string_to_name_resolve(optarg, &gbl_resolv_flags);
1213       if (badopt != '\0') {
1214         cmdarg_err("-N specifies unknown resolving option '%c';",
1215                    badopt);
1216         cmdarg_err_cont( "           Valid options are 'm', 'n', 't', and 'C'");
1217         return 1;
1218       }
1219       break;
1220     case 'o':        /* Override preference from command line */
1221       switch (prefs_set_pref(optarg)) {
1222
1223       case PREFS_SET_OK:
1224         break;
1225
1226       case PREFS_SET_SYNTAX_ERR:
1227         cmdarg_err("Invalid -o flag \"%s\"", optarg);
1228         return 1;
1229         break;
1230
1231       case PREFS_SET_NO_SUCH_PREF:
1232       case PREFS_SET_OBSOLETE:
1233         cmdarg_err("-o flag \"%s\" specifies unknown preference", optarg);
1234         return 1;
1235         break;
1236       }
1237       break;
1238     case 'q':        /* Quiet */
1239       quiet = TRUE;
1240       break;
1241     case 'r':        /* Read capture file x */
1242       cf_name = g_strdup(optarg);
1243       break;
1244     case 'R':        /* Read file filter */
1245       rfilter = optarg;
1246       break;
1247     case 'P':        /* Print packets even when writing to a file */
1248       print_packet_info = TRUE;
1249       break;
1250     case 'S':        /* Set the line Separator to be printed between packets */
1251       separator = strdup(optarg);
1252       break;
1253     case 't':        /* Time stamp type */
1254       if (strcmp(optarg, "r") == 0)
1255         timestamp_set_type(TS_RELATIVE);
1256       else if (strcmp(optarg, "a") == 0)
1257         timestamp_set_type(TS_ABSOLUTE);
1258       else if (strcmp(optarg, "ad") == 0)
1259         timestamp_set_type(TS_ABSOLUTE_WITH_DATE);
1260       else if (strcmp(optarg, "d") == 0)
1261         timestamp_set_type(TS_DELTA);
1262       else if (strcmp(optarg, "dd") == 0)
1263         timestamp_set_type(TS_DELTA_DIS);
1264       else if (strcmp(optarg, "e") == 0)
1265         timestamp_set_type(TS_EPOCH);
1266       else if (strcmp(optarg, "u") == 0)
1267         timestamp_set_type(TS_UTC);
1268       else if (strcmp(optarg, "ud") == 0)
1269         timestamp_set_type(TS_UTC_WITH_DATE);
1270       else {
1271         cmdarg_err("Invalid time stamp type \"%s\"",
1272                    optarg);
1273         cmdarg_err_cont("It must be \"r\" for relative, \"a\" for absolute,");
1274         cmdarg_err_cont("\"ad\" for absolute with date, or \"d\" for delta.");
1275         return 1;
1276       }
1277       break;
1278     case 'T':        /* printing Type */
1279       if (strcmp(optarg, "text") == 0) {
1280         output_action = WRITE_TEXT;
1281         print_format = PR_FMT_TEXT;
1282       } else if (strcmp(optarg, "ps") == 0) {
1283         output_action = WRITE_TEXT;
1284         print_format = PR_FMT_PS;
1285       } else if (strcmp(optarg, "pdml") == 0) {
1286         output_action = WRITE_XML;
1287         verbose = TRUE;
1288       } else if (strcmp(optarg, "psml") == 0) {
1289         output_action = WRITE_XML;
1290         verbose = FALSE;
1291       } else if(strcmp(optarg, "fields") == 0) {
1292         output_action = WRITE_FIELDS;
1293         verbose = TRUE; /* Need full tree info */
1294       } else {
1295         cmdarg_err("Invalid -T parameter.");
1296         cmdarg_err_cont("It must be \"ps\", \"text\", \"pdml\", \"psml\" or \"fields\".");
1297         return 1;
1298       }
1299       break;
1300     case 'u':        /* Seconds type */
1301       if (strcmp(optarg, "s") == 0)
1302         timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
1303       else if (strcmp(optarg, "hms") == 0)
1304         timestamp_set_seconds_type(TS_SECONDS_HOUR_MIN_SEC);
1305       else {
1306         cmdarg_err("Invalid seconds type \"%s\"", optarg);
1307         cmdarg_err_cont("It must be \"s\" for seconds or \"hms\" for hours, minutes and seconds.");
1308         return 1;
1309       }
1310       break;
1311     case 'v':         /* Show version and exit */
1312     {
1313       GString             *comp_info_str;
1314       GString             *runtime_info_str;
1315       /* Assemble the compile-time version information string */
1316       comp_info_str = g_string_new("Compiled ");
1317       get_compiled_version_info(comp_info_str, NULL, epan_get_compiled_version_info);
1318
1319       /* Assemble the run-time version information string */
1320       runtime_info_str = g_string_new("Running ");
1321       get_runtime_version_info(runtime_info_str, NULL);
1322       show_version(comp_info_str, runtime_info_str);
1323       g_string_free(comp_info_str, TRUE);
1324       g_string_free(runtime_info_str, TRUE);
1325       return 0;
1326       break;
1327     }
1328     case 'O':        /* Only output these protocols */
1329       output_only = g_strdup(optarg);
1330       /* FALLTHROUGH */
1331     case 'V':        /* Verbose */
1332       verbose = TRUE;
1333       /*  The user asked for a verbose output, so let's ensure they get it,
1334        *  even if they're writing to a file.
1335        */
1336       print_packet_info = TRUE;
1337       break;
1338     case 'x':        /* Print packet data in hex (and ASCII) */
1339       print_hex = TRUE;
1340       /*  The user asked for hex output, so let's ensure they get it,
1341        *  even if they're writing to a file.
1342        */
1343       print_packet_info = TRUE;
1344       break;
1345     case 'X':
1346       break;
1347     case 'z':
1348       /* We won't call the init function for the stat this soon
1349          as it would disallow MATE's fields (which are registered
1350          by the preferences set callback) from being used as
1351          part of a tap filter.  Instead, we just add the argument
1352          to a list of stat arguments. */
1353       if (!process_stat_cmd_arg(optarg)) {
1354         cmdarg_err("invalid -z argument.");
1355         cmdarg_err_cont("  -z argument must be one of :");
1356         list_stat_cmd_args();
1357         return 1;
1358       }
1359       break;
1360     default:
1361     case '?':        /* Bad flag - print usage message */
1362       switch(optopt) {
1363       case 'F':
1364         list_capture_types();
1365         break;
1366       default:
1367         print_usage(TRUE);
1368       }
1369       return 1;
1370       break;
1371     }
1372   }
1373
1374   /* If we specified output fields, but not the output field type... */
1375   if(WRITE_FIELDS != output_action && 0 != output_fields_num_fields(output_fields)) {
1376         cmdarg_err("Output fields were specified with \"-e\", "
1377             "but \"-Tfields\" was not specified.");
1378         return 1;
1379   } else if(WRITE_FIELDS == output_action && 0 == output_fields_num_fields(output_fields)) {
1380         cmdarg_err("\"-Tfields\" was specified, but no fields were "
1381                     "specified with \"-e\".");
1382
1383         return 1;
1384   }
1385
1386   /* If no capture filter or read filter has been specified, and there are
1387      still command-line arguments, treat them as the tokens of a capture
1388      filter (if no "-r" flag was specified) or a read filter (if a "-r"
1389      flag was specified. */
1390   if (optind < argc) {
1391     if (cf_name != NULL) {
1392       if (rfilter != NULL) {
1393         cmdarg_err("Read filters were specified both with \"-R\" "
1394             "and with additional command-line arguments.");
1395         return 1;
1396       }
1397       rfilter = get_args_as_string(argc, argv, optind);
1398     } else {
1399 #ifdef HAVE_LIBPCAP
1400       if (global_capture_opts.default_options.cfilter) {
1401         cmdarg_err("A default capture filter was specified both with \"-f\""
1402             " and with additional command-line arguments.");
1403         return 1;
1404       }
1405       for (i = 0; i < global_capture_opts.ifaces->len; i++) {
1406         interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
1407         if (interface_opts.cfilter == NULL) {
1408           interface_opts.cfilter = get_args_as_string(argc, argv, optind);
1409           global_capture_opts.ifaces = g_array_remove_index(global_capture_opts.ifaces, i);
1410           g_array_insert_val(global_capture_opts.ifaces, i, interface_opts);
1411         } else {
1412           cmdarg_err("A capture filter was specified both with \"-f\""
1413               " and with additional command-line arguments.");
1414           return 1;
1415         }
1416       }
1417       global_capture_opts.default_options.cfilter = get_args_as_string(argc, argv, optind);
1418 #else
1419       capture_option_specified = TRUE;
1420 #endif
1421     }
1422   }
1423
1424 #ifdef HAVE_LIBPCAP
1425   if (!global_capture_opts.saving_to_file) {
1426     /* We're not saving the capture to a file; if "-q" wasn't specified,
1427        we should print packet information */
1428     if (!quiet)
1429       print_packet_info = TRUE;
1430   } else {
1431     /* We're saving to a file; if we're writing to the standard output.
1432        and we'll also be writing dissected packets to the standard
1433        output, reject the request.  At best, we could redirect that
1434        to the standard error; we *can't* write both to the standard
1435        output and have either of them be useful. */
1436     if (strcmp(global_capture_opts.save_file, "-") == 0 && print_packet_info) {
1437       cmdarg_err("You can't write both raw packet data and dissected packets"
1438           " to the standard output.");
1439       return 1;
1440     }
1441   }
1442 #else
1443   /* We're not saving the capture to a file; if "-q" wasn't specified,
1444      we should print packet information */
1445   if (!quiet)
1446     print_packet_info = TRUE;
1447 #endif
1448
1449 #ifndef HAVE_LIBPCAP
1450   if (capture_option_specified)
1451     cmdarg_err("This version of TShark was not built with support for capturing packets.");
1452 #endif
1453   if (arg_error) {
1454     print_usage(FALSE);
1455     return 1;
1456   }
1457
1458   /* We don't support capture filters when reading from a capture file
1459      (the BPF compiler doesn't support all link-layer types that we
1460      support in capture files we read). */
1461 #ifdef HAVE_LIBPCAP
1462   if (cf_name != NULL) {
1463     if (global_capture_opts.default_options.cfilter) {
1464       cmdarg_err("Only read filters, not capture filters, "
1465           "can be specified when reading a capture file.");
1466       return 1;
1467     }
1468   }
1469 #endif
1470
1471   if (print_hex) {
1472     if (output_action != WRITE_TEXT) {
1473       cmdarg_err("Raw packet hex data can only be printed as text or PostScript");
1474       return 1;
1475     }
1476   }
1477
1478   if (output_only != NULL) {
1479     char *ps;
1480
1481     if (!verbose) {
1482       cmdarg_err("-O requires -V");
1483       return 1;
1484     }
1485
1486     output_only_tables = g_hash_table_new (g_str_hash, g_str_equal);
1487     for (ps = strtok (output_only, ","); ps; ps = strtok (NULL, ",")) {
1488       g_hash_table_insert(output_only_tables, (gpointer)ps, (gpointer)ps);
1489     }
1490   }
1491
1492 #ifdef HAVE_LIBPCAP
1493   if (list_link_layer_types) {
1494     /* We're supposed to list the link-layer types for an interface;
1495        did the user also specify a capture file to be read? */
1496     if (cf_name) {
1497       /* Yes - that's bogus. */
1498       cmdarg_err("You can't specify -L and a capture file to be read.");
1499       return 1;
1500     }
1501     /* No - did they specify a ring buffer option? */
1502     if (global_capture_opts.multi_files_on) {
1503       cmdarg_err("Ring buffer requested, but a capture isn't being done.");
1504       return 1;
1505     }
1506   } else {
1507     if (cf_name) {
1508       /*
1509        * "-r" was specified, so we're reading a capture file.
1510        * Capture options don't apply here.
1511        */
1512       if (global_capture_opts.multi_files_on) {
1513         cmdarg_err("Multiple capture files requested, but "
1514                    "a capture isn't being done.");
1515         return 1;
1516       }
1517       if (global_capture_opts.has_file_duration) {
1518         cmdarg_err("Switching capture files after a time interval was specified, but "
1519                    "a capture isn't being done.");
1520         return 1;
1521       }
1522       if (global_capture_opts.has_ring_num_files) {
1523         cmdarg_err("A ring buffer of capture files was specified, but "
1524           "a capture isn't being done.");
1525         return 1;
1526       }
1527       if (global_capture_opts.has_autostop_files) {
1528         cmdarg_err("A maximum number of capture files was specified, but "
1529           "a capture isn't being done.");
1530         return 1;
1531       }
1532
1533       /* Note: TShark now allows the restriction of a _read_ file by packet count
1534        * and byte count as well as a write file. Other autostop options remain valid
1535        * only for a write file.
1536        */
1537       if (global_capture_opts.has_autostop_duration) {
1538         cmdarg_err("A maximum capture time was specified, but "
1539           "a capture isn't being done.");
1540         return 1;
1541       }
1542     } else {
1543       /*
1544        * "-r" wasn't specified, so we're doing a live capture.
1545        */
1546       if (global_capture_opts.saving_to_file) {
1547         /* They specified a "-w" flag, so we'll be saving to a capture file. */
1548
1549         /* When capturing, we only support writing pcap or pcap-ng format. */
1550         if (out_file_type != WTAP_FILE_PCAP && out_file_type != WTAP_FILE_PCAPNG) {
1551           cmdarg_err("Live captures can only be saved in libpcap format.");
1552           return 1;
1553         }
1554         if (global_capture_opts.multi_files_on) {
1555           /* Multiple-file mode doesn't work under certain conditions:
1556              a) it doesn't work if you're writing to the standard output;
1557              b) it doesn't work if you're writing to a pipe;
1558           */
1559           if (strcmp(global_capture_opts.save_file, "-") == 0) {
1560             cmdarg_err("Multiple capture files requested, but "
1561               "the capture is being written to the standard output.");
1562             return 1;
1563           }
1564           if (global_capture_opts.output_to_pipe) {
1565             cmdarg_err("Multiple capture files requested, but "
1566               "the capture file is a pipe.");
1567             return 1;
1568           }
1569           if (!global_capture_opts.has_autostop_filesize &&
1570               !global_capture_opts.has_file_duration) {
1571             cmdarg_err("Multiple capture files requested, but "
1572               "no maximum capture file size or duration was specified.");
1573             return 1;
1574           }
1575         }
1576         /* Currently, we don't support read filters when capturing
1577            and saving the packets. */
1578         if (rfilter != NULL) {
1579           cmdarg_err("Read filters aren't supported when capturing and saving the captured packets.");
1580           return 1;
1581         }
1582       } else {
1583         /* They didn't specify a "-w" flag, so we won't be saving to a
1584            capture file.  Check for options that only make sense if
1585            we're saving to a file. */
1586         if (global_capture_opts.has_autostop_filesize) {
1587           cmdarg_err("Maximum capture file size specified, but "
1588            "capture isn't being saved to a file.");
1589           return 1;
1590         }
1591         if (global_capture_opts.multi_files_on) {
1592           cmdarg_err("Multiple capture files requested, but "
1593             "the capture isn't being saved to a file.");
1594           return 1;
1595         }
1596       }
1597     }
1598   }
1599 #endif
1600
1601 #ifdef _WIN32
1602   /* Start windows sockets */
1603   WSAStartup( MAKEWORD( 1, 1 ), &wsaData );
1604 #endif /* _WIN32 */
1605
1606   /* Notify all registered modules that have had any of their preferences
1607      changed either from one of the preferences file or from the command
1608      line that their preferences have changed. */
1609   prefs_apply_all();
1610
1611   /* At this point MATE will have registered its field array so we can
1612      have a tap filter with one of MATE's late-registered fields as part
1613      of the filter.  We can now process all the "-z" arguments. */
1614   start_requested_stats();
1615
1616 #ifdef HAVE_LIBPCAP
1617   /* We currently don't support taps, or printing dissected packets,
1618      if we're writing to a pipe. */
1619   if (global_capture_opts.saving_to_file &&
1620       global_capture_opts.output_to_pipe) {
1621     if (tap_listeners_require_dissection()) {
1622       cmdarg_err("Taps aren't supported when saving to a pipe.");
1623       return 1;
1624     }
1625     if (print_packet_info) {
1626       cmdarg_err("Printing dissected packets isn't supported when saving to a pipe.");
1627       return 1;
1628     }
1629   }
1630 #endif
1631
1632   /* disabled protocols as per configuration file */
1633   if (gdp_path == NULL && dp_path == NULL) {
1634     set_disabled_protos_list();
1635   }
1636
1637   /* Build the column format array */
1638   build_column_format_array(&cfile.cinfo, prefs_p->num_cols, TRUE);
1639
1640 #ifdef HAVE_LIBPCAP
1641   capture_opts_trim_snaplen(&global_capture_opts, MIN_PACKET_SIZE);
1642   capture_opts_trim_ring_num_files(&global_capture_opts);
1643 #endif
1644
1645   if (rfilter != NULL) {
1646     if (!dfilter_compile(rfilter, &rfcode)) {
1647       cmdarg_err("%s", dfilter_error_msg);
1648       epan_cleanup();
1649 #ifdef HAVE_PCAP_OPEN_DEAD
1650       {
1651         pcap_t *pc;
1652
1653         pc = pcap_open_dead(DLT_EN10MB, MIN_PACKET_SIZE);
1654         if (pc != NULL) {
1655           if (pcap_compile(pc, &fcode, rfilter, 0, 0) != -1) {
1656             cmdarg_err_cont(
1657               "  Note: That display filter code looks like a valid capture filter;");
1658             cmdarg_err_cont(
1659               "        maybe you mixed them up?");
1660           }
1661           pcap_close(pc);
1662         }
1663       }
1664 #endif
1665       return 2;
1666     }
1667   }
1668   cfile.rfcode = rfcode;
1669
1670   if (print_packet_info) {
1671     /* If we're printing as text or PostScript, we have
1672        to create a print stream. */
1673     if (output_action == WRITE_TEXT) {
1674       switch (print_format) {
1675
1676       case PR_FMT_TEXT:
1677         print_stream = print_stream_text_stdio_new(stdout);
1678         break;
1679
1680       case PR_FMT_PS:
1681         print_stream = print_stream_ps_stdio_new(stdout);
1682         break;
1683
1684       default:
1685         g_assert_not_reached();
1686       }
1687     }
1688   }
1689
1690   /* We have to dissect each packet if:
1691
1692         we're printing information about each packet;
1693
1694         we're using a read filter on the packets;
1695
1696         we're using any taps that need dissection. */
1697   do_dissection = print_packet_info || rfcode || tap_listeners_require_dissection();
1698
1699   if (cf_name) {
1700     /*
1701      * We're reading a capture file.
1702      */
1703
1704     /*
1705      * Immediately relinquish any special privileges we have; we must not
1706      * be allowed to read any capture files the user running TShark
1707      * can't open.
1708      */
1709     relinquish_special_privs_perm();
1710     print_current_user();
1711
1712     if (cf_open(&cfile, cf_name, FALSE, &err) != CF_OK) {
1713       epan_cleanup();
1714       return 2;
1715     }
1716
1717     /* Set timestamp precision; there should arguably be a command-line
1718        option to let the user set this. */
1719     switch(wtap_file_tsprecision(cfile.wth)) {
1720     case(WTAP_FILE_TSPREC_SEC):
1721       timestamp_set_precision(TS_PREC_AUTO_SEC);
1722       break;
1723     case(WTAP_FILE_TSPREC_DSEC):
1724       timestamp_set_precision(TS_PREC_AUTO_DSEC);
1725       break;
1726     case(WTAP_FILE_TSPREC_CSEC):
1727       timestamp_set_precision(TS_PREC_AUTO_CSEC);
1728       break;
1729     case(WTAP_FILE_TSPREC_MSEC):
1730       timestamp_set_precision(TS_PREC_AUTO_MSEC);
1731       break;
1732     case(WTAP_FILE_TSPREC_USEC):
1733       timestamp_set_precision(TS_PREC_AUTO_USEC);
1734       break;
1735     case(WTAP_FILE_TSPREC_NSEC):
1736       timestamp_set_precision(TS_PREC_AUTO_NSEC);
1737       break;
1738     default:
1739       g_assert_not_reached();
1740     }
1741
1742     /* Process the packets in the file */
1743 #ifdef HAVE_LIBPCAP
1744     err = load_cap_file(&cfile, global_capture_opts.save_file, out_file_type, out_file_name_res,
1745         global_capture_opts.has_autostop_packets ? global_capture_opts.autostop_packets : 0,
1746         global_capture_opts.has_autostop_filesize ? global_capture_opts.autostop_filesize : 0);
1747 #else
1748     err = load_cap_file(&cfile, NULL, out_file_type, out_file_name_res, 0, 0);
1749 #endif
1750     if (err != 0) {
1751       /* We still dump out the results of taps, etc., as we might have
1752          read some packets; however, we exit with an error status. */
1753       exit_status = 2;
1754     }
1755   } else {
1756     /* No capture file specified, so we're supposed to do a live capture
1757        (or get a list of link-layer types for a live capture device);
1758        do we have support for live captures? */
1759 #ifdef HAVE_LIBPCAP
1760
1761 #ifdef _WIN32
1762     if (!has_wpcap) {
1763       char *detailed_err;
1764
1765       cmdarg_err("WinPcap couldn't be found.");
1766       detailed_err = cant_load_winpcap_err("TShark");
1767       cmdarg_err_cont("%s", detailed_err);
1768       g_free(detailed_err);
1769       return 2;
1770     }
1771 #endif
1772
1773     /* trim the interface name and exit if that failed */
1774     if (!capture_opts_trim_iface(&global_capture_opts,
1775         (prefs_p->capture_device) ? get_if_name(prefs_p->capture_device) : NULL)) {
1776         return 2;
1777     }
1778
1779     /* if requested, list the link layer types and exit */
1780     if (list_link_layer_types) {
1781         guint i;
1782         interface_options interface_opts;
1783
1784         /* Get the list of link-layer types for the capture devices. */
1785         for (i = 0; i < global_capture_opts.ifaces->len; i++) {
1786             if_capabilities_t *caps;
1787
1788             interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
1789             caps = capture_get_if_capabilities(interface_opts.name, interface_opts.monitor_mode, &err_str);
1790             if (caps == NULL) {
1791                 cmdarg_err("%s", err_str);
1792                 g_free(err_str);
1793                 return 2;
1794             }
1795             if (caps->data_link_types == NULL) {
1796                 cmdarg_err("The capture device \"%s\" has no data link types.", interface_opts.name);
1797                 return 2;
1798             }
1799             capture_opts_print_if_capabilities(caps, interface_opts.name, interface_opts.monitor_mode);
1800             free_if_capabilities(caps);
1801         }
1802         return 0;
1803     }
1804
1805     if (print_packet_info) {
1806       if (!write_preamble(NULL)) {
1807         show_print_file_io_error(errno);
1808         return 2;
1809       }
1810     } else if (!quiet) {
1811       /*
1812        * We're not printing information for each packet, and the user
1813        * didn't ask us not to print a count of packets as they arrive,
1814        * so print that count so the user knows that packets are arriving.
1815        *
1816        * XXX - what if the user wants to do a live capture, doesn't want
1817        * to save it to a file, doesn't want information printed for each
1818        * packet, does want some "-z" statistic, and wants packet counts
1819        * so they know whether they're seeing any packets?
1820        */
1821       print_packet_counts = TRUE;
1822     }
1823
1824     /* For now, assume libpcap gives microsecond precision. */
1825     timestamp_set_precision(TS_PREC_AUTO_USEC);
1826
1827     /*
1828      * XXX - this returns FALSE if an error occurred, but it also
1829      * returns FALSE if the capture stops because a time limit
1830      * was reached (and possibly other limits), so we can't assume
1831      * it means an error.
1832      *
1833      * The capture code is a bit twisty, so it doesn't appear to
1834      * be an easy fix.  We just ignore the return value for now.
1835      * Instead, pass on the exit status from the capture child.
1836      */
1837     capture();
1838     exit_status = global_capture_opts.fork_child_status;
1839
1840     if (print_packet_info) {
1841       if (!write_finale()) {
1842         err = errno;
1843         show_print_file_io_error(err);
1844       }
1845     }
1846 #else
1847     /* No - complain. */
1848     cmdarg_err("This version of TShark was not built with support for capturing packets.");
1849     return 2;
1850 #endif
1851   }
1852
1853   g_free(cf_name);
1854
1855   if (cfile.frames != NULL) {
1856     free_frame_data_sequence(cfile.frames);
1857     cfile.frames = NULL;
1858   }
1859
1860   draw_tap_listeners(TRUE);
1861   funnel_dump_all_text_windows();
1862   epan_cleanup();
1863
1864   output_fields_free(output_fields);
1865   output_fields = NULL;
1866
1867   return exit_status;
1868 }
1869
1870 /*#define USE_BROKEN_G_MAIN_LOOP*/
1871
1872 #ifdef USE_BROKEN_G_MAIN_LOOP
1873   GMainLoop *loop;
1874 #else
1875   gboolean loop_running = FALSE;
1876 #endif
1877   guint32 packet_count = 0;
1878
1879
1880 /* XXX - move to the right position / file */
1881 /* read from a pipe (callback) */
1882 typedef gboolean (*pipe_input_cb_t) (gint source, gpointer user_data);
1883
1884 typedef struct pipe_input_tag {
1885   gint                source;
1886   gpointer            user_data;
1887   int                 *child_process;
1888   pipe_input_cb_t     input_cb;
1889   guint               pipe_input_id;
1890 #ifdef _WIN32
1891   GStaticMutex        callback_running;
1892 #endif
1893 } pipe_input_t;
1894
1895 static pipe_input_t pipe_input;
1896
1897 #ifdef _WIN32
1898 /* The timer has expired, see if there's stuff to read from the pipe,
1899    if so, do the callback */
1900 static gint
1901 pipe_timer_cb(gpointer data)
1902 {
1903   HANDLE handle;
1904   DWORD avail = 0;
1905   gboolean result, result1;
1906   DWORD childstatus;
1907   pipe_input_t *pipe_input_p = data;
1908   gint iterations = 0;
1909
1910
1911   g_static_mutex_lock (&pipe_input_p->callback_running);
1912
1913   /* try to read data from the pipe only 5 times, to avoid blocking */
1914   while(iterations < 5) {
1915     /*g_log(NULL, G_LOG_LEVEL_DEBUG, "pipe_timer_cb: new iteration");*/
1916
1917     /* Oddly enough although Named pipes don't work on win9x,
1918        PeekNamedPipe does !!! */
1919     handle = (HANDLE) _get_osfhandle (pipe_input_p->source);
1920     result = PeekNamedPipe(handle, NULL, 0, NULL, &avail, NULL);
1921
1922     /* Get the child process exit status */
1923     result1 = GetExitCodeProcess((HANDLE)*(pipe_input_p->child_process),
1924                                  &childstatus);
1925
1926     /* If the Peek returned an error, or there are bytes to be read
1927        or the childwatcher thread has terminated then call the normal
1928        callback */
1929     if (!result || avail > 0 || childstatus != STILL_ACTIVE) {
1930
1931       /*g_log(NULL, G_LOG_LEVEL_DEBUG, "pipe_timer_cb: data avail");*/
1932
1933       /* And call the real handler */
1934       if (!pipe_input_p->input_cb(pipe_input_p->source, pipe_input_p->user_data)) {
1935         g_log(NULL, G_LOG_LEVEL_DEBUG, "pipe_timer_cb: input pipe closed, iterations: %u", iterations);
1936         /* pipe closed, return false so that the timer is stopped */
1937         g_static_mutex_unlock (&pipe_input_p->callback_running);
1938         return FALSE;
1939       }
1940     }
1941     else {
1942       /*g_log(NULL, G_LOG_LEVEL_DEBUG, "pipe_timer_cb: no data avail");*/
1943       /* No data, stop now */
1944       break;
1945     }
1946
1947     iterations++;
1948   }
1949
1950   /*g_log(NULL, G_LOG_LEVEL_DEBUG, "pipe_timer_cb: finished with iterations: %u, new timer", iterations);*/
1951
1952   g_static_mutex_unlock (&pipe_input_p->callback_running);
1953
1954   /* we didn't stopped the timer, so let it run */
1955   return TRUE;
1956 }
1957 #endif
1958
1959
1960 void
1961 pipe_input_set_handler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb)
1962 {
1963
1964   pipe_input.source         = source;
1965   pipe_input.child_process  = child_process;
1966   pipe_input.user_data      = user_data;
1967   pipe_input.input_cb       = input_cb;
1968
1969 #ifdef _WIN32
1970   g_static_mutex_init(&pipe_input.callback_running);
1971   /* Tricky to use pipes in win9x, as no concept of wait.  NT can
1972      do this but that doesn't cover all win32 platforms.  GTK can do
1973      this but doesn't seem to work over processes.  Attempt to do
1974      something similar here, start a timer and check for data on every
1975      timeout. */
1976   /*g_log(NULL, G_LOG_LEVEL_DEBUG, "pipe_input_set_handler: new");*/
1977   pipe_input.pipe_input_id = g_timeout_add(200, pipe_timer_cb, &pipe_input);
1978 #endif
1979 }
1980
1981
1982 #ifdef HAVE_LIBPCAP
1983 static gboolean
1984 capture(void)
1985 {
1986   gboolean ret;
1987   guint i;
1988   GString *str = g_string_new("");
1989 #ifdef USE_TSHARK_SELECT
1990   fd_set readfds;
1991 #endif
1992 #ifndef _WIN32
1993   struct sigaction action, oldaction;
1994 #endif
1995
1996   /*
1997    * XXX - dropping privileges is still required, until code cleanup is done
1998    *
1999    * remove all dependencies to pcap specific code and using only dumpcap is almost done.
2000    * when it's done, we don't need special privileges to run tshark at all,
2001    * therefore we don't need to drop these privileges
2002    * The only thing we might want to keep is a warning if tshark is run as root,
2003    * as it's no longer necessary and potentially dangerous.
2004    *
2005    * THE FOLLOWING IS THE FORMER COMMENT WHICH IS NO LONGER REALLY VALID:
2006    * We've opened the capture device, so we shouldn't need any special
2007    * privileges any more; relinquish those privileges.
2008    *
2009    * XXX - if we have saved set-user-ID support, we should give up those
2010    * privileges immediately, and then reclaim them long enough to get
2011    * a list of network interfaces and to open one, and then give them
2012    * up again, so that stuff we do while processing the argument list,
2013    * reading the user's preferences, loading and starting plugins
2014    * (especially *user* plugins), etc. is done with the user's privileges,
2015    * not special privileges.
2016    */
2017   relinquish_special_privs_perm();
2018   print_current_user();
2019
2020   /* Cleanup all data structures used for dissection. */
2021   cleanup_dissection();
2022   /* Initialize all data structures used for dissection. */
2023   init_dissection();
2024
2025 #ifdef _WIN32
2026   /* Catch a CTRL+C event and, if we get it, clean up and exit. */
2027   SetConsoleCtrlHandler(capture_cleanup, TRUE);
2028 #else /* _WIN32 */
2029   /* Catch SIGINT and SIGTERM and, if we get either of them,
2030      clean up and exit.  If SIGHUP isn't being ignored, catch
2031      it too and, if we get it, clean up and exit.
2032
2033      We restart any read that was in progress, so that it doesn't
2034      disrupt reading from the sync pipe.  The signal handler tells
2035      the capture child to finish; it will report that it finished,
2036      or will exit abnormally, so  we'll stop reading from the sync
2037      pipe, pick up the exit status, and quit. */
2038   action.sa_handler = capture_cleanup;
2039   action.sa_flags = SA_RESTART;
2040   sigemptyset(&action.sa_mask);
2041   sigaction(SIGTERM, &action, NULL);
2042   sigaction(SIGINT, &action, NULL);
2043   sigaction(SIGHUP, NULL, &oldaction);
2044   if (oldaction.sa_handler == SIG_DFL)
2045     sigaction(SIGHUP, &action, NULL);
2046
2047 #ifdef SIGINFO
2048   /* Catch SIGINFO and, if we get it and we're capturing to a file in
2049      quiet mode, report the number of packets we've captured.
2050
2051      Again, restart any read that was in progress, so that it doesn't
2052      disrupt reading from the sync pipe. */
2053   action.sa_handler = report_counts_siginfo;
2054   action.sa_flags = SA_RESTART;
2055   sigemptyset(&action.sa_mask);
2056   sigaction(SIGINFO, &action, NULL);
2057 #endif /* SIGINFO */
2058 #endif /* _WIN32 */
2059
2060   global_capture_opts.state = CAPTURE_PREPARING;
2061
2062   /* Let the user know which interfaces were chosen. */
2063   for (i = 0; i < global_capture_opts.ifaces->len; i++) {
2064     interface_options interface_opts;
2065
2066     interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
2067     interface_opts.descr = get_interface_descriptive_name(interface_opts.name);
2068     global_capture_opts.ifaces = g_array_remove_index(global_capture_opts.ifaces, i);
2069     g_array_insert_val(global_capture_opts.ifaces, i, interface_opts);
2070   }
2071 #ifdef _WIN32
2072   if (global_capture_opts.ifaces->len < 2) {
2073 #else
2074   if (global_capture_opts.ifaces->len < 4) {
2075 #endif
2076     for (i = 0; i < global_capture_opts.ifaces->len; i++) {
2077       interface_options interface_opts;
2078
2079       interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
2080       if (i > 0) {
2081           if (global_capture_opts.ifaces->len > 2) {
2082               g_string_append_printf(str, ",");
2083           }
2084           g_string_append_printf(str, " ");
2085           if (i == global_capture_opts.ifaces->len - 1) {
2086               g_string_append_printf(str, "and ");
2087           }
2088       }
2089       g_string_append_printf(str, "%s", interface_opts.descr);
2090     }
2091   } else {
2092     g_string_append_printf(str, "%u interfaces", global_capture_opts.ifaces->len);
2093   }
2094   fprintf(stderr, "Capturing on %s\n", str->str);
2095   g_string_free(str, TRUE);
2096
2097   ret = sync_pipe_start(&global_capture_opts);
2098
2099   if (!ret)
2100     return FALSE;
2101
2102   /* the actual capture loop
2103    *
2104    * XXX - glib doesn't seem to provide any event based loop handling.
2105    *
2106    * XXX - for whatever reason,
2107    * calling g_main_loop_new() ends up in 100% cpu load.
2108    *
2109    * But that doesn't matter: in UNIX we can use select() to find an input
2110    * source with something to do.
2111    *
2112    * But that doesn't matter because we're in a CLI (that doesn't need to
2113    * update a GUI or something at the same time) so it's OK if we block
2114    * trying to read from the pipe.
2115    *
2116    * So all the stuff in USE_TSHARK_SELECT could be removed unless I'm
2117    * wrong (but I leave it there in case I am...).
2118    */
2119
2120 #ifdef USE_TSHARK_SELECT
2121   FD_ZERO(&readfds);
2122   FD_SET(pipe_input.source, &readfds);
2123 #endif
2124
2125   loop_running = TRUE;
2126
2127   while (loop_running)
2128   {
2129 #ifdef USE_TSHARK_SELECT
2130     ret = select(pipe_input.source+1, &readfds, NULL, NULL, NULL);
2131
2132     if (ret == -1)
2133     {
2134       perror("select()");
2135       return TRUE;
2136     } else if (ret == 1) {
2137 #endif
2138       /* Call the real handler */
2139       if (!pipe_input.input_cb(pipe_input.source, pipe_input.user_data)) {
2140         g_log(NULL, G_LOG_LEVEL_DEBUG, "input pipe closed");
2141         return FALSE;
2142       }
2143 #ifdef USE_TSHARK_SELECT
2144     }
2145 #endif
2146   }
2147
2148   return TRUE;
2149 }
2150
2151
2152 /* XXX - move the call to main_window_update() out of capture_sync.c */
2153 /* dummy for capture_sync.c to make linker happy */
2154 void main_window_update(void)
2155 {
2156 }
2157
2158 /* capture child detected an error */
2159 void
2160 capture_input_error_message(capture_options *capture_opts _U_, char *error_msg, char *secondary_error_msg)
2161 {
2162   cmdarg_err("%s", error_msg);
2163   cmdarg_err_cont("%s", secondary_error_msg);
2164 }
2165
2166
2167 /* capture child detected an capture filter related error */
2168 void
2169 capture_input_cfilter_error_message(capture_options *capture_opts, guint i, char *error_message)
2170 {
2171   dfilter_t   *rfcode = NULL;
2172   interface_options interface_opts;
2173
2174   g_assert(i < capture_opts->ifaces->len);
2175   interface_opts = g_array_index(capture_opts->ifaces, interface_options, i);
2176
2177   if (dfilter_compile(interface_opts.cfilter, &rfcode) && rfcode != NULL) {
2178     cmdarg_err(
2179       "Invalid capture filter \"%s\" for interface %s!\n"
2180       "\n"
2181       "That string looks like a valid display filter; however, it isn't a valid\n"
2182       "capture filter (%s).\n"
2183       "\n"
2184       "Note that display filters and capture filters don't have the same syntax,\n"
2185       "so you can't use most display filter expressions as capture filters.\n"
2186       "\n"
2187       "See the User's Guide for a description of the capture filter syntax.",
2188       interface_opts.cfilter, interface_opts.descr, error_message);
2189     dfilter_free(rfcode);
2190   } else {
2191     cmdarg_err(
2192       "Invalid capture filter \"%s\" for interface %s!\n"
2193       "\n"
2194       "That string isn't a valid capture filter (%s).\n"
2195       "See the User's Guide for a description of the capture filter syntax.",
2196       interface_opts.cfilter, interface_opts.descr, error_message);
2197   }
2198 }
2199
2200
2201 /* capture child tells us we have a new (or the first) capture file */
2202 gboolean
2203 capture_input_new_file(capture_options *capture_opts, gchar *new_file)
2204 {
2205   gboolean is_tempfile;
2206   int  err;
2207
2208   if(capture_opts->state == CAPTURE_PREPARING) {
2209     g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture started!");
2210   }
2211   g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "File: \"%s\"", new_file);
2212
2213   g_assert(capture_opts->state == CAPTURE_PREPARING || capture_opts->state == CAPTURE_RUNNING);
2214
2215   /* free the old filename */
2216   if (capture_opts->save_file != NULL) {
2217
2218     /* we start a new capture file, close the old one (if we had one before) */
2219     if( ((capture_file *) capture_opts->cf)->state != FILE_CLOSED) {
2220       if ( ((capture_file *) capture_opts->cf)->wth != NULL) {
2221         wtap_close(((capture_file *) capture_opts->cf)->wth);
2222       }
2223       ((capture_file *) capture_opts->cf)->state = FILE_CLOSED;
2224     }
2225
2226     g_free(capture_opts->save_file);
2227     is_tempfile = FALSE;
2228   } else {
2229     /* we didn't had a save_file before, must be a tempfile */
2230     is_tempfile = TRUE;
2231   }
2232
2233   /* save the new filename */
2234   capture_opts->save_file = g_strdup(new_file);
2235
2236   /* if we are in real-time mode, open the new file now */
2237   if(do_dissection) {
2238     /* Attempt to open the capture file and set up to read from it. */
2239     switch(cf_open(capture_opts->cf, capture_opts->save_file, is_tempfile, &err)) {
2240     case CF_OK:
2241       break;
2242     case CF_ERROR:
2243       /* Don't unlink (delete) the save file - leave it around,
2244          for debugging purposes. */
2245       g_free(capture_opts->save_file);
2246       capture_opts->save_file = NULL;
2247       return FALSE;
2248     }
2249   }
2250
2251   capture_opts->state = CAPTURE_RUNNING;
2252
2253   return TRUE;
2254 }
2255
2256
2257 /* capture child tells us we have new packets to read */
2258 void
2259 capture_input_new_packets(capture_options *capture_opts, int to_read)
2260 {
2261   gboolean     ret;
2262   int          err;
2263   gchar        *err_info;
2264   gint64       data_offset;
2265   capture_file *cf = capture_opts->cf;
2266   gboolean filtering_tap_listeners;
2267   guint tap_flags;
2268
2269 #ifdef SIGINFO
2270   /*
2271    * Prevent a SIGINFO handler from writing to the standard error while
2272    * we're doing so or writing to the standard output; instead, have it
2273    * just set a flag telling us to print that information when we're done.
2274    */
2275   infodelay = TRUE;
2276 #endif /* SIGINFO */
2277
2278   /* Do we have any tap listeners with filters? */
2279   filtering_tap_listeners = have_filtering_tap_listeners();
2280
2281   /* Get the union of the flags for all tap listeners. */
2282   tap_flags = union_of_tap_listener_flags();
2283
2284   if(do_dissection) {
2285     while (to_read-- && cf->wth) {
2286       wtap_cleareof(cf->wth);
2287       ret = wtap_read(cf->wth, &err, &err_info, &data_offset);
2288       if(ret == FALSE) {
2289         /* read from file failed, tell the capture child to stop */
2290         sync_pipe_stop(capture_opts);
2291         wtap_close(cf->wth);
2292         cf->wth = NULL;
2293       } else {
2294         ret = process_packet(cf, data_offset, wtap_phdr(cf->wth),
2295                              wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth),
2296                              filtering_tap_listeners, tap_flags);
2297       }
2298       if (ret != FALSE) {
2299         /* packet successfully read and gone through the "Read Filter" */
2300         packet_count++;
2301       }
2302     }
2303   } else {
2304     /*
2305      * Dumpcap's doing all the work; we're not doing any dissection.
2306      * Count all the packets it wrote.
2307      */
2308     packet_count += to_read;
2309   }
2310
2311   if (print_packet_counts) {
2312       /* We're printing packet counts. */
2313       if (packet_count != 0) {
2314         fprintf(stderr, "\r%u ", packet_count);
2315         /* stderr could be line buffered */
2316         fflush(stderr);
2317       }
2318   }
2319
2320 #ifdef SIGINFO
2321   /*
2322    * Allow SIGINFO handlers to write.
2323    */
2324   infodelay = FALSE;
2325
2326   /*
2327    * If a SIGINFO handler asked us to write out capture counts, do so.
2328    */
2329   if (infoprint)
2330     report_counts();
2331 #endif /* SIGINFO */
2332 }
2333
2334 static void
2335 report_counts(void)
2336 {
2337   if (!print_packet_counts) {
2338     /* Report the count only if we aren't printing a packet count
2339        as packets arrive. */
2340     fprintf(stderr, "%u packet%s captured\n", packet_count,
2341             plurality(packet_count, "", "s"));
2342   }
2343 #ifdef SIGINFO
2344   infoprint = FALSE; /* we just reported it */
2345 #endif /* SIGINFO */
2346 }
2347
2348 #ifdef SIGINFO
2349 static void
2350 report_counts_siginfo(int signum _U_)
2351 {
2352   int sav_errno = errno;
2353   /* If we've been told to delay printing, just set a flag asking
2354      that we print counts (if we're supposed to), otherwise print
2355      the count of packets captured (if we're supposed to). */
2356   if (infodelay)
2357     infoprint = TRUE;
2358   else
2359     report_counts();
2360   errno = sav_errno;
2361 }
2362 #endif /* SIGINFO */
2363
2364
2365 /* capture child detected any packet drops? */
2366 void
2367 capture_input_drops(capture_options *capture_opts _U_, guint32 dropped)
2368 {
2369   if (print_packet_counts) {
2370     /* We're printing packet counts to stderr.
2371        Send a newline so that we move to the line after the packet count. */
2372     fprintf(stderr, "\n");
2373   }
2374
2375   if (dropped != 0) {
2376     /* We're printing packet counts to stderr.
2377        Send a newline so that we move to the line after the packet count. */
2378     fprintf(stderr, "%u packet%s dropped\n", dropped, plurality(dropped, "", "s"));
2379   }
2380 }
2381
2382
2383 /*
2384  * Capture child closed its side of the pipe, report any error and
2385  * do the required cleanup.
2386  */
2387 void
2388 capture_input_closed(capture_options *capture_opts, gchar *msg)
2389 {
2390   if (msg != NULL)
2391     fprintf(stderr, "tshark: %s\n", msg);
2392
2393   report_counts();
2394
2395   if(capture_opts->cf != NULL && ((capture_file *) capture_opts->cf)->wth != NULL) {
2396     wtap_close(((capture_file *) capture_opts->cf)->wth);
2397     if(((capture_file *) capture_opts->cf)->user_saved == FALSE) {
2398       ws_unlink(((capture_file *) capture_opts->cf)->filename);
2399     }
2400   }
2401 #ifdef USE_BROKEN_G_MAIN_LOOP
2402   /*g_main_loop_quit(loop);*/
2403   g_main_quit(loop);
2404 #else
2405   loop_running = FALSE;
2406 #endif
2407 }
2408
2409
2410
2411
2412 #ifdef _WIN32
2413 static BOOL WINAPI
2414 capture_cleanup(DWORD ctrltype _U_)
2415 {
2416   /* CTRL_C_EVENT is sort of like SIGINT, CTRL_BREAK_EVENT is unique to
2417      Windows, CTRL_CLOSE_EVENT is sort of like SIGHUP, CTRL_LOGOFF_EVENT
2418      is also sort of like SIGHUP, and CTRL_SHUTDOWN_EVENT is sort of
2419      like SIGTERM at least when the machine's shutting down.
2420
2421      For now, we handle them all as indications that we should clean up
2422      and quit, just as we handle SIGINT, SIGHUP, and SIGTERM in that
2423      way on UNIX.
2424
2425      We must return TRUE so that no other handler - such as one that would
2426      terminate the process - gets called.
2427
2428      XXX - for some reason, typing ^C to TShark, if you run this in
2429      a Cygwin console window in at least some versions of Cygwin,
2430      causes TShark to terminate immediately; this routine gets
2431      called, but the main loop doesn't get a chance to run and
2432      exit cleanly, at least if this is compiled with Microsoft Visual
2433      C++ (i.e., it's a property of the Cygwin console window or Bash;
2434      it happens if TShark is not built with Cygwin - for all I know,
2435      building it with Cygwin may make the problem go away). */
2436
2437   /* tell the capture child to stop */
2438   sync_pipe_stop(&global_capture_opts);
2439
2440   /* don't stop our own loop already here, otherwise status messages and
2441    * cleanup wouldn't be done properly. The child will indicate the stop of
2442    * everything by calling capture_input_closed() later */
2443
2444   return TRUE;
2445 }
2446 #else
2447 static void
2448 capture_cleanup(int signum _U_)
2449 {
2450   /* tell the capture child to stop */
2451   sync_pipe_stop(&global_capture_opts);
2452
2453   /* don't stop our own loop already here, otherwise status messages and
2454    * cleanup wouldn't be done properly. The child will indicate the stop of
2455    * everything by calling capture_input_closed() later */
2456 }
2457 #endif /* _WIN32 */
2458 #endif /* HAVE_LIBPCAP */
2459
2460 static gboolean
2461 process_packet_first_pass(capture_file *cf,
2462                gint64 offset, const struct wtap_pkthdr *whdr,
2463                union wtap_pseudo_header *pseudo_header, const guchar *pd)
2464 {
2465   frame_data fdlocal;
2466   guint32 framenum;
2467   epan_dissect_t edt;
2468   gboolean passed;
2469
2470   /* The frame number of this packet is one more than the count of
2471      frames in this packet. */
2472   framenum = cf->count + 1;
2473
2474   /* If we're not running a display filter and we're not printing any
2475      packet information, we don't need to do a dissection. This means
2476      that all packets can be marked as 'passed'. */
2477   passed = TRUE;
2478
2479   frame_data_init(&fdlocal, framenum, whdr, offset, cum_bytes);
2480
2481   /* If we're going to print packet information, or we're going to
2482      run a read filter, or we're going to process taps, set up to
2483      do a dissection and do so. */
2484   if (do_dissection) {
2485     if (gbl_resolv_flags)
2486       /* Grab any resolved addresses */
2487       host_name_lookup_process(NULL);
2488
2489     /* The protocol tree will be "visible", i.e., printed, only if we're
2490        printing packet details, which is true if we're printing stuff
2491        ("print_packet_info" is true) and we're in verbose mode ("verbose"
2492        is true). */
2493     epan_dissect_init(&edt, FALSE, FALSE);
2494
2495     /* If we're running a read filter, prime the epan_dissect_t with that
2496        filter. */
2497     if (cf->rfcode)
2498       epan_dissect_prime_dfilter(&edt, cf->rfcode);
2499
2500     frame_data_set_before_dissect(&fdlocal, &cf->elapsed_time,
2501                                   &first_ts, &prev_dis_ts, &prev_cap_ts);
2502
2503     epan_dissect_run(&edt, pseudo_header, pd, &fdlocal, NULL);
2504
2505     /* Run the read filter if we have one. */
2506     if (cf->rfcode)
2507       passed = dfilter_apply_edt(cf->rfcode, &edt);
2508   }
2509
2510   if (passed) {
2511     frame_data_set_after_dissect(&fdlocal, &cum_bytes, &prev_dis_ts);
2512     frame_data_sequence_add(cf->frames, &fdlocal);
2513     cf->count++;
2514   }
2515
2516   if (do_dissection)
2517     epan_dissect_cleanup(&edt);
2518
2519   return passed;
2520 }
2521
2522 static gboolean
2523 process_packet_second_pass(capture_file *cf, frame_data *fdata,
2524                union wtap_pseudo_header *pseudo_header, const guchar *pd,
2525                gboolean filtering_tap_listeners, guint tap_flags)
2526 {
2527   gboolean create_proto_tree;
2528   column_info *cinfo;
2529   epan_dissect_t edt;
2530   gboolean passed;
2531
2532   /* If we're not running a display filter and we're not printing any
2533      packet information, we don't need to do a dissection. This means
2534      that all packets can be marked as 'passed'. */
2535   passed = TRUE;
2536
2537   /* If we're going to print packet information, or we're going to
2538      run a read filter, or we're going to process taps, set up to
2539      do a dissection and do so. */
2540   if (do_dissection) {
2541     if (gbl_resolv_flags)
2542       /* Grab any resolved addresses */
2543       host_name_lookup_process(NULL);
2544
2545     if (cf->rfcode || verbose || filtering_tap_listeners ||
2546         (tap_flags & TL_REQUIRES_PROTO_TREE) || have_custom_cols(&cf->cinfo))
2547       create_proto_tree = TRUE;
2548     else
2549       create_proto_tree = FALSE;
2550
2551     /* The protocol tree will be "visible", i.e., printed, only if we're
2552        printing packet details, which is true if we're printing stuff
2553        ("print_packet_info" is true) and we're in verbose mode ("verbose"
2554        is true). */
2555     epan_dissect_init(&edt, create_proto_tree, print_packet_info && verbose);
2556
2557     /* If we're running a read filter, prime the epan_dissect_t with that
2558        filter. */
2559     if (cf->rfcode)
2560       epan_dissect_prime_dfilter(&edt, cf->rfcode);
2561
2562     col_custom_prime_edt(&edt, &cf->cinfo);
2563
2564     tap_queue_init(&edt);
2565
2566     /* We only need the columns if either
2567
2568          1) some tap needs the columns
2569
2570        or
2571
2572          2) we're printing packet info but we're *not* verbose; in verbose
2573             mode, we print the protocol tree, not the protocol summary. */
2574     if ((tap_flags & TL_REQUIRES_COLUMNS) || (print_packet_info && !verbose))
2575       cinfo = &cf->cinfo;
2576     else
2577       cinfo = NULL;
2578
2579     epan_dissect_run(&edt, pseudo_header, pd, fdata, cinfo);
2580
2581     tap_push_tapped_queue(&edt);
2582
2583     /* Run the read filter if we have one. */
2584     if (cf->rfcode)
2585       passed = dfilter_apply_edt(cf->rfcode, &edt);
2586   }
2587
2588   if (passed) {
2589     /* Process this packet. */
2590     if (print_packet_info) {
2591       /* We're printing packet information; print the information for
2592          this packet. */
2593       if (do_dissection)
2594         print_packet(cf, &edt);
2595       else
2596         print_packet(cf, NULL);
2597
2598       /* The ANSI C standard does not appear to *require* that a line-buffered
2599          stream be flushed to the host environment whenever a newline is
2600          written, it just says that, on such a stream, characters "are
2601          intended to be transmitted to or from the host environment as a
2602          block when a new-line character is encountered".
2603
2604          The Visual C++ 6.0 C implementation doesn't do what is intended;
2605          even if you set a stream to be line-buffered, it still doesn't
2606          flush the buffer at the end of every line.
2607
2608          So, if the "-l" flag was specified, we flush the standard output
2609          at the end of a packet.  This will do the right thing if we're
2610          printing packet summary lines, and, as we print the entire protocol
2611          tree for a single packet without waiting for anything to happen,
2612          it should be as good as line-buffered mode if we're printing
2613          protocol trees.  (The whole reason for the "-l" flag in either
2614          tcpdump or TShark is to allow the output of a live capture to
2615          be piped to a program or script and to have that script see the
2616          information for the packet as soon as it's printed, rather than
2617          having to wait until a standard I/O buffer fills up. */
2618       if (line_buffered)
2619         fflush(stdout);
2620
2621       if (ferror(stdout)) {
2622         show_print_file_io_error(errno);
2623         exit(2);
2624       }
2625     }
2626   }
2627
2628   if (do_dissection) {
2629     epan_dissect_cleanup(&edt);
2630   }
2631   return passed;
2632 }
2633
2634 static int
2635 load_cap_file(capture_file *cf, char *save_file, int out_file_type,
2636     gboolean out_file_name_res, int max_packet_count, gint64 max_byte_count)
2637 {
2638   gint         linktype;
2639   int          snapshot_length;
2640   wtap_dumper *pdh;
2641   int          err;
2642   gchar        *err_info = NULL;
2643   gint64       data_offset;
2644   char         *save_file_string = NULL;
2645   gboolean     filtering_tap_listeners;
2646   guint        tap_flags;
2647
2648 #ifdef PCAP_NG_DEFAULT
2649   linktype = WTAP_ENCAP_PER_PACKET;
2650 #else
2651   linktype = wtap_file_encap(cf->wth);
2652 #endif
2653   if (save_file != NULL) {
2654     /* Get a string that describes what we're writing to */
2655     save_file_string = output_file_description(save_file);
2656
2657     /* Set up to write to the capture file. */
2658     snapshot_length = wtap_snapshot_length(cf->wth);
2659     if (snapshot_length == 0) {
2660       /* Snapshot length of input file not known. */
2661       snapshot_length = WTAP_MAX_PACKET_SIZE;
2662     }
2663     pdh = wtap_dump_open(save_file, out_file_type, linktype, snapshot_length,
2664                          FALSE /* compressed */, &err);
2665
2666     if (pdh == NULL) {
2667       /* We couldn't set up to write to the capture file. */
2668       switch (err) {
2669
2670       case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
2671         cmdarg_err("Capture files can't be written in that format.");
2672         break;
2673
2674       case WTAP_ERR_UNSUPPORTED_ENCAP:
2675       case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
2676         cmdarg_err("The capture file being read can't be written in "
2677           "the format \"%s\".", wtap_encap_short_string(linktype));
2678         break;
2679
2680       case WTAP_ERR_CANT_OPEN:
2681         cmdarg_err("The %s couldn't be created for some "
2682           "unknown reason.", save_file_string);
2683         break;
2684
2685       case WTAP_ERR_SHORT_WRITE:
2686         cmdarg_err("A full header couldn't be written to the %s.",
2687                    save_file_string);
2688         break;
2689
2690       default:
2691         cmdarg_err("The %s could not be created: %s.", save_file_string,
2692                    wtap_strerror(err));
2693         break;
2694       }
2695       goto out;
2696     }
2697   } else {
2698     if (print_packet_info) {
2699       if (!write_preamble(cf)) {
2700         err = errno;
2701         show_print_file_io_error(err);
2702         goto out;
2703       }
2704     }
2705     pdh = NULL;
2706   }
2707
2708   if (pdh && out_file_name_res) {
2709     if (!wtap_dump_set_addrinfo_list(pdh, get_addrinfo_list())) {
2710       cmdarg_err("The file format \"%s\" doesn't support name resolution information.",
2711                  wtap_file_type_short_string(out_file_type));
2712     }
2713   }
2714
2715   /* Do we have any tap listeners with filters? */
2716   filtering_tap_listeners = have_filtering_tap_listeners();
2717
2718   /* Get the union of the flags for all tap listeners. */
2719   tap_flags = union_of_tap_listener_flags();
2720
2721   if (perform_two_pass_analysis) {
2722     guint32 framenum;
2723     frame_data *fdata;
2724     int old_max_packet_count = max_packet_count;
2725
2726     /* Allocate a frame_data_sequence for all the frames. */
2727     cf->frames = new_frame_data_sequence();
2728
2729     while (wtap_read(cf->wth, &err, &err_info, &data_offset)) {
2730       if (process_packet_first_pass(cf, data_offset, wtap_phdr(cf->wth),
2731                          wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth))) {
2732         /* Stop reading if we have the maximum number of packets;
2733          * When the -c option has not been used, max_packet_count
2734          * starts at 0, which practically means, never stop reading.
2735          * (unless we roll over max_packet_count ?)
2736          */
2737         if( (--max_packet_count == 0) || (max_byte_count != 0 && data_offset >= max_byte_count)) {
2738           err = 0; /* This is not an error */
2739           break;
2740         }
2741       }
2742     }
2743
2744     /* Close the sequential I/O side, to free up memory it requires. */
2745     wtap_sequential_close(cf->wth);
2746
2747     /* Allow the protocol dissectors to free up memory that they
2748      * don't need after the sequential run-through of the packets. */
2749     postseq_cleanup_all_protocols();
2750
2751     max_packet_count = old_max_packet_count;
2752
2753     for (framenum = 1; err == 0 && framenum <= cf->count; framenum++) {
2754       fdata = frame_data_sequence_find(cf->frames, framenum);
2755       if (wtap_seek_read(cf->wth, fdata->file_off, &cf->pseudo_header,
2756           cf->pd, fdata->cap_len, &err, &err_info)) {
2757         if (process_packet_second_pass(cf, fdata,
2758                            &cf->pseudo_header, cf->pd,
2759                            filtering_tap_listeners, tap_flags)) {
2760           /* Either there's no read filtering or this packet passed the
2761              filter, so, if we're writing to a capture file, write
2762              this packet out. */
2763           if (pdh != NULL) {
2764             if (!wtap_dump(pdh, wtap_phdr(cf->wth),
2765                            wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth),
2766                            &err)) {
2767               /* Error writing to a capture file */
2768               show_capture_file_io_error(save_file, err, FALSE);
2769               wtap_dump_close(pdh, &err);
2770               exit(2);
2771             }
2772           }
2773           /* Stop reading if we have the maximum number of packets;
2774            * When the -c option has not been used, max_packet_count
2775            * starts at 0, which practically means, never stop reading.
2776            * (unless we roll over max_packet_count ?)
2777            */
2778           if( (--max_packet_count == 0) || (max_byte_count != 0 && data_offset >= max_byte_count)) {
2779             err = 0; /* This is not an error */
2780             break;
2781           }
2782         }
2783       }
2784     }
2785   }
2786   else {
2787     while (wtap_read(cf->wth, &err, &err_info, &data_offset)) {
2788       if (process_packet(cf, data_offset, wtap_phdr(cf->wth),
2789                          wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth),
2790                          filtering_tap_listeners, tap_flags)) {
2791         /* Either there's no read filtering or this packet passed the
2792            filter, so, if we're writing to a capture file, write
2793            this packet out. */
2794         if (pdh != NULL) {
2795           if (!wtap_dump(pdh, wtap_phdr(cf->wth),
2796                          wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth),
2797                          &err)) {
2798             /* Error writing to a capture file */
2799             show_capture_file_io_error(save_file, err, FALSE);
2800             wtap_dump_close(pdh, &err);
2801             exit(2);
2802           }
2803         }
2804         /* Stop reading if we have the maximum number of packets;
2805          * When the -c option has not been used, max_packet_count
2806          * starts at 0, which practically means, never stop reading.
2807          * (unless we roll over max_packet_count ?)
2808          */
2809         if( (--max_packet_count == 0) || (max_byte_count != 0 && data_offset >= max_byte_count)) {
2810           err = 0; /* This is not an error */
2811           break;
2812         }
2813       }
2814     }
2815   }
2816
2817   if (err != 0) {
2818     /*
2819      * Print a message noting that the read failed somewhere along the line.
2820      *
2821      * If we're printing packet data, and the standard output and error are
2822      * going to the same place, flush the standard output, so everything
2823      * buffered up is written, and then print a newline to the standard error
2824      * before printing the error message, to separate it from the packet
2825      * data.  (Alas, that only works on UN*X; st_dev is meaningless, and
2826      * the _fstat() documentation at Microsoft doesn't indicate whether
2827      * st_ino is even supported.)
2828      */
2829 #ifndef _WIN32
2830     if (print_packet_info) {
2831       struct stat stat_stdout, stat_stderr;
2832
2833       if (fstat(1, &stat_stdout) == 0 && fstat(2, &stat_stderr) == 0) {
2834         if (stat_stdout.st_dev == stat_stderr.st_dev &&
2835             stat_stdout.st_ino == stat_stderr.st_ino) {
2836           fflush(stdout);
2837           fprintf(stderr, "\n");
2838         }
2839       }
2840     }
2841 #endif
2842     switch (err) {
2843
2844     case WTAP_ERR_UNSUPPORTED_ENCAP:
2845       cmdarg_err("The file \"%s\" has a packet with a network type that TShark doesn't support.\n(%s)",
2846                  cf->filename, err_info);
2847       g_free(err_info);
2848       break;
2849
2850     case WTAP_ERR_CANT_READ:
2851       cmdarg_err("An attempt to read from the file \"%s\" failed for some unknown reason.",
2852                  cf->filename);
2853       break;
2854
2855     case WTAP_ERR_SHORT_READ:
2856       cmdarg_err("The file \"%s\" appears to have been cut short in the middle of a packet.",
2857                  cf->filename);
2858       break;
2859
2860     case WTAP_ERR_BAD_RECORD:
2861       cmdarg_err("The file \"%s\" appears to be damaged or corrupt.\n(%s)",
2862                  cf->filename, err_info);
2863       g_free(err_info);
2864       break;
2865
2866     case WTAP_ERR_DECOMPRESS:
2867       cmdarg_err("The compressed file \"%s\" appears to be damaged or corrupt.\n"
2868                  "(%s)", cf->filename, err_info);
2869       break;
2870
2871     default:
2872       cmdarg_err("An error occurred while reading the file \"%s\": %s.",
2873                  cf->filename, wtap_strerror(err));
2874       break;
2875     }
2876     if (save_file != NULL) {
2877       /* Now close the capture file. */
2878       if (!wtap_dump_close(pdh, &err))
2879         show_capture_file_io_error(save_file, err, TRUE);
2880     }
2881   } else {
2882     if (save_file != NULL) {
2883       /* Now close the capture file. */
2884       if (!wtap_dump_close(pdh, &err))
2885         show_capture_file_io_error(save_file, err, TRUE);
2886     } else {
2887       if (print_packet_info) {
2888         if (!write_finale()) {
2889           err = errno;
2890           show_print_file_io_error(err);
2891         }
2892       }
2893     }
2894   }
2895
2896 out:
2897   wtap_close(cf->wth);
2898   cf->wth = NULL;
2899
2900   g_free(save_file_string);
2901
2902   return err;
2903 }
2904
2905 static gboolean
2906 process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr,
2907                union wtap_pseudo_header *pseudo_header, const guchar *pd,
2908                gboolean filtering_tap_listeners, guint tap_flags)
2909 {
2910   frame_data fdata;
2911   gboolean create_proto_tree;
2912   column_info *cinfo;
2913   epan_dissect_t edt;
2914   gboolean passed;
2915
2916   /* Count this packet. */
2917   cf->count++;
2918
2919   /* If we're not running a display filter and we're not printing any
2920      packet information, we don't need to do a dissection. This means
2921      that all packets can be marked as 'passed'. */
2922   passed = TRUE;
2923
2924   frame_data_init(&fdata, cf->count, whdr, offset, cum_bytes);
2925
2926   /* If we're going to print packet information, or we're going to
2927      run a read filter, or we're going to process taps, set up to
2928      do a dissection and do so. */
2929   if (do_dissection) {
2930     if (print_packet_info && gbl_resolv_flags)
2931       /* Grab any resolved addresses */
2932       host_name_lookup_process(NULL);
2933
2934     if (cf->rfcode || verbose || filtering_tap_listeners ||
2935         (tap_flags & TL_REQUIRES_PROTO_TREE) || have_custom_cols(&cf->cinfo))
2936       create_proto_tree = TRUE;
2937     else
2938       create_proto_tree = FALSE;
2939
2940     /* The protocol tree will be "visible", i.e., printed, only if we're
2941        printing packet details, which is true if we're printing stuff
2942        ("print_packet_info" is true) and we're in verbose mode ("verbose"
2943        is true). */
2944     epan_dissect_init(&edt, create_proto_tree, print_packet_info && verbose);
2945
2946     /* If we're running a read filter, prime the epan_dissect_t with that
2947        filter. */
2948     if (cf->rfcode)
2949       epan_dissect_prime_dfilter(&edt, cf->rfcode);
2950
2951     col_custom_prime_edt(&edt, &cf->cinfo);
2952
2953     tap_queue_init(&edt);
2954
2955     /* We only need the columns if either
2956
2957          1) some tap needs the columns
2958
2959        or
2960
2961          2) we're printing packet info but we're *not* verbose; in verbose
2962             mode, we print the protocol tree, not the protocol summary. */
2963     if ((tap_flags & TL_REQUIRES_COLUMNS) || (print_packet_info && !verbose))
2964       cinfo = &cf->cinfo;
2965     else
2966       cinfo = NULL;
2967
2968     frame_data_set_before_dissect(&fdata, &cf->elapsed_time,
2969                                   &first_ts, &prev_dis_ts, &prev_cap_ts);
2970
2971     epan_dissect_run(&edt, pseudo_header, pd, &fdata, cinfo);
2972
2973     tap_push_tapped_queue(&edt);
2974
2975     /* Run the read filter if we have one. */
2976     if (cf->rfcode)
2977       passed = dfilter_apply_edt(cf->rfcode, &edt);
2978   }
2979
2980   if (passed) {
2981     frame_data_set_after_dissect(&fdata, &cum_bytes, &prev_dis_ts);
2982
2983     /* Process this packet. */
2984     if (print_packet_info) {
2985       /* We're printing packet information; print the information for
2986          this packet. */
2987       if (do_dissection)
2988         print_packet(cf, &edt);
2989       else
2990         print_packet(cf, NULL);
2991
2992       /* The ANSI C standard does not appear to *require* that a line-buffered
2993          stream be flushed to the host environment whenever a newline is
2994          written, it just says that, on such a stream, characters "are
2995          intended to be transmitted to or from the host environment as a
2996          block when a new-line character is encountered".
2997
2998          The Visual C++ 6.0 C implementation doesn't do what is intended;
2999          even if you set a stream to be line-buffered, it still doesn't
3000          flush the buffer at the end of every line.
3001
3002          So, if the "-l" flag was specified, we flush the standard output
3003          at the end of a packet.  This will do the right thing if we're
3004          printing packet summary lines, and, as we print the entire protocol
3005          tree for a single packet without waiting for anything to happen,
3006          it should be as good as line-buffered mode if we're printing
3007          protocol trees.  (The whole reason for the "-l" flag in either
3008          tcpdump or TShark is to allow the output of a live capture to
3009          be piped to a program or script and to have that script see the
3010          information for the packet as soon as it's printed, rather than
3011          having to wait until a standard I/O buffer fills up. */
3012       if (line_buffered)
3013         fflush(stdout);
3014
3015       if (ferror(stdout)) {
3016         show_print_file_io_error(errno);
3017         exit(2);
3018       }
3019     }
3020   }
3021
3022   if (do_dissection) {
3023     epan_dissect_cleanup(&edt);
3024     frame_data_cleanup(&fdata);
3025   }
3026   return passed;
3027 }
3028
3029 static gboolean
3030 write_preamble(capture_file *cf)
3031 {
3032   switch (output_action) {
3033
3034   case WRITE_TEXT:
3035     return print_preamble(print_stream, cf ? cf->filename : NULL);
3036
3037   case WRITE_XML:
3038     if (verbose)
3039       write_pdml_preamble(stdout, cf ? cf->filename : NULL);
3040     else
3041       write_psml_preamble(stdout);
3042     return !ferror(stdout);
3043
3044   case WRITE_FIELDS:
3045     write_fields_preamble(output_fields, stdout);
3046     return !ferror(stdout);
3047
3048   default:
3049     g_assert_not_reached();
3050     return FALSE;
3051   }
3052 }
3053
3054 static char *
3055 get_line_buf(size_t len)
3056 {
3057   static char *line_bufp = NULL;
3058   static size_t line_buf_len = 256;
3059   size_t new_line_buf_len;
3060
3061   for (new_line_buf_len = line_buf_len; len > new_line_buf_len;
3062        new_line_buf_len *= 2)
3063     ;
3064   if (line_bufp == NULL) {
3065     line_buf_len = new_line_buf_len;
3066     line_bufp = g_malloc(line_buf_len + 1);
3067   } else {
3068     if (new_line_buf_len > line_buf_len) {
3069       line_buf_len = new_line_buf_len;
3070       line_bufp = g_realloc(line_bufp, line_buf_len + 1);
3071     }
3072   }
3073   return line_bufp;
3074 }
3075
3076 static gboolean
3077 print_columns(capture_file *cf)
3078 {
3079   char *line_bufp;
3080   int i;
3081   size_t buf_offset;
3082   size_t column_len;
3083
3084   line_bufp = get_line_buf(256);
3085   buf_offset = 0;
3086   *line_bufp = '\0';
3087   for (i = 0; i < cf->cinfo.num_cols; i++) {
3088     /* Skip columns not marked as visible. */
3089     if (!get_column_visible(i))
3090       continue;
3091     switch (cf->cinfo.col_fmt[i]) {
3092     case COL_NUMBER:
3093 #ifdef HAVE_LIBPCAP
3094       /*
3095        * Don't print this if we're doing a live capture from a network
3096        * interface - if we're doing a live capture, you won't be
3097        * able to look at the capture in the future (it's not being
3098        * saved anywhere), so the frame numbers are unlikely to be
3099        * useful.
3100        *
3101        * (XXX - it might be nice to be able to save and print at
3102        * the same time, sort of like an "Update list of packets
3103        * in real time" capture in Wireshark.)
3104        */
3105       if (global_capture_opts.ifaces->len > 0)
3106         continue;
3107 #endif
3108       column_len = strlen(cf->cinfo.col_data[i]);
3109       if (column_len < 3)
3110         column_len = 3;
3111       line_bufp = get_line_buf(buf_offset + column_len);
3112       g_snprintf(line_bufp + buf_offset, (int)column_len + 1, "%3s", cf->cinfo.col_data[i]);
3113       break;
3114
3115     case COL_CLS_TIME:
3116     case COL_REL_TIME:
3117     case COL_ABS_TIME:
3118     case COL_ABS_DATE_TIME:
3119     case COL_UTC_TIME:
3120     case COL_UTC_DATE_TIME: /* XXX - wider */
3121       column_len = strlen(cf->cinfo.col_data[i]);
3122       if (column_len < 10)
3123         column_len = 10;
3124       line_bufp = get_line_buf(buf_offset + column_len);
3125       g_snprintf(line_bufp + buf_offset, (int)column_len + 1, "%10s", cf->cinfo.col_data[i]);
3126       break;
3127
3128     case COL_DEF_SRC:
3129     case COL_RES_SRC:
3130     case COL_UNRES_SRC:
3131     case COL_DEF_DL_SRC:
3132     case COL_RES_DL_SRC:
3133     case COL_UNRES_DL_SRC:
3134     case COL_DEF_NET_SRC:
3135     case COL_RES_NET_SRC:
3136     case COL_UNRES_NET_SRC:
3137       column_len = strlen(cf->cinfo.col_data[i]);
3138       if (column_len < 12)
3139         column_len = 12;
3140       line_bufp = get_line_buf(buf_offset + column_len);
3141       g_snprintf(line_bufp + buf_offset, (int)column_len + 1, "%12s", cf->cinfo.col_data[i]);
3142       break;
3143
3144     case COL_DEF_DST:
3145     case COL_RES_DST:
3146     case COL_UNRES_DST:
3147     case COL_DEF_DL_DST:
3148     case COL_RES_DL_DST:
3149     case COL_UNRES_DL_DST:
3150     case COL_DEF_NET_DST:
3151     case COL_RES_NET_DST:
3152     case COL_UNRES_NET_DST:
3153       column_len = strlen(cf->cinfo.col_data[i]);
3154       if (column_len < 12)
3155         column_len = 12;
3156       line_bufp = get_line_buf(buf_offset + column_len);
3157       g_snprintf(line_bufp + buf_offset, (int)column_len + 1, "%-12s", cf->cinfo.col_data[i]);
3158       break;
3159
3160     default:
3161       column_len = strlen(cf->cinfo.col_data[i]);
3162       line_bufp = get_line_buf(buf_offset + column_len);
3163       g_strlcat(line_bufp + buf_offset, cf->cinfo.col_data[i], column_len + 1);
3164       break;
3165     }
3166     buf_offset += column_len;
3167     if (i != cf->cinfo.num_cols - 1) {
3168       /*
3169        * This isn't the last column, so we need to print a
3170        * separator between this column and the next.
3171        *
3172        * If we printed a network source and are printing a
3173        * network destination of the same type next, separate
3174        * them with " -> "; if we printed a network destination
3175        * and are printing a network source of the same type
3176        * next, separate them with " <- "; otherwise separate them
3177        * with a space.
3178        *
3179        * We add enough space to the buffer for " <- " or " -> ",
3180        * even if we're only adding " ".
3181        */
3182       line_bufp = get_line_buf(buf_offset + 4);
3183       switch (cf->cinfo.col_fmt[i]) {
3184
3185       case COL_DEF_SRC:
3186       case COL_RES_SRC:
3187       case COL_UNRES_SRC:
3188         switch (cf->cinfo.col_fmt[i + 1]) {
3189
3190         case COL_DEF_DST:
3191         case COL_RES_DST:
3192         case COL_UNRES_DST:
3193           g_strlcat(line_bufp + buf_offset, " -> ", 5);
3194           buf_offset += 4;
3195           break;
3196
3197         default:
3198           g_strlcat(line_bufp + buf_offset, " ", 5);
3199           buf_offset += 1;
3200           break;
3201         }
3202         break;
3203
3204       case COL_DEF_DL_SRC:
3205       case COL_RES_DL_SRC:
3206       case COL_UNRES_DL_SRC:
3207         switch (cf->cinfo.col_fmt[i + 1]) {
3208
3209         case COL_DEF_DL_DST:
3210         case COL_RES_DL_DST:
3211         case COL_UNRES_DL_DST:
3212           g_strlcat(line_bufp + buf_offset, " -> ", 5);
3213           buf_offset += 4;
3214           break;
3215
3216         default:
3217           g_strlcat(line_bufp + buf_offset, " ", 5);
3218           buf_offset += 1;
3219           break;
3220         }
3221         break;
3222
3223       case COL_DEF_NET_SRC:
3224       case COL_RES_NET_SRC:
3225       case COL_UNRES_NET_SRC:
3226         switch (cf->cinfo.col_fmt[i + 1]) {
3227
3228         case COL_DEF_NET_DST:
3229         case COL_RES_NET_DST:
3230         case COL_UNRES_NET_DST:
3231           g_strlcat(line_bufp + buf_offset, " -> ", 5);
3232           buf_offset += 4;
3233           break;
3234
3235         default:
3236           g_strlcat(line_bufp + buf_offset, " ", 5);
3237           buf_offset += 1;
3238           break;
3239         }
3240         break;
3241
3242       case COL_DEF_DST:
3243       case COL_RES_DST:
3244       case COL_UNRES_DST:
3245         switch (cf->cinfo.col_fmt[i + 1]) {
3246
3247         case COL_DEF_SRC:
3248         case COL_RES_SRC:
3249         case COL_UNRES_SRC:
3250           g_strlcat(line_bufp + buf_offset, " <- ", 5);
3251           buf_offset += 4;
3252           break;
3253
3254         default:
3255           g_strlcat(line_bufp + buf_offset, " ", 5);
3256           buf_offset += 1;
3257           break;
3258         }
3259         break;
3260
3261       case COL_DEF_DL_DST:
3262       case COL_RES_DL_DST:
3263       case COL_UNRES_DL_DST:
3264         switch (cf->cinfo.col_fmt[i + 1]) {
3265
3266         case COL_DEF_DL_SRC:
3267         case COL_RES_DL_SRC:
3268         case COL_UNRES_DL_SRC:
3269           g_strlcat(line_bufp + buf_offset, " <- ", 5);
3270           buf_offset += 4;
3271           break;
3272
3273         default:
3274           g_strlcat(line_bufp + buf_offset, " ", 5);
3275           buf_offset += 1;
3276           break;
3277         }
3278         break;
3279
3280       case COL_DEF_NET_DST:
3281       case COL_RES_NET_DST:
3282       case COL_UNRES_NET_DST:
3283         switch (cf->cinfo.col_fmt[i + 1]) {
3284
3285         case COL_DEF_NET_SRC:
3286         case COL_RES_NET_SRC:
3287         case COL_UNRES_NET_SRC:
3288           g_strlcat(line_bufp + buf_offset, " <- ", 5);
3289           buf_offset += 4;
3290           break;
3291
3292         default:
3293           g_strlcat(line_bufp + buf_offset, " ", 5);
3294           buf_offset += 1;
3295           break;
3296         }
3297         break;
3298
3299       default:
3300         g_strlcat(line_bufp + buf_offset, " ", 5);
3301         buf_offset += 1;
3302         break;
3303       }
3304     }
3305   }
3306   return print_line(print_stream, 0, line_bufp);
3307 }
3308
3309 static gboolean
3310 print_packet(capture_file *cf, epan_dissect_t *edt)
3311 {
3312   print_args_t  print_args;
3313
3314   if (verbose) {
3315     /* Print the information in the protocol tree. */
3316     switch (output_action) {
3317
3318     case WRITE_TEXT:
3319       print_args.to_file = TRUE;
3320       print_args.format = print_format;
3321       print_args.print_summary = !verbose;
3322       print_args.print_hex = verbose && print_hex;
3323       print_args.print_formfeed = FALSE;
3324       print_args.print_dissections = verbose ? print_dissections_expanded : print_dissections_none;
3325
3326       /* init the packet range */
3327       packet_range_init(&print_args.range);
3328
3329       if (!proto_tree_print(&print_args, edt, print_stream))
3330         return FALSE;
3331       if (!print_hex) {
3332         /* "print_hex_data()" will put out a leading blank line, as well
3333          as a trailing one; print one here, to separate the packets,
3334          only if "print_hex_data()" won't be called. */
3335         if (!print_line(print_stream, 0, separator))
3336           return FALSE;
3337       }
3338       break;
3339
3340     case WRITE_XML:
3341       proto_tree_write_pdml(edt, stdout);
3342       printf("\n");
3343       return !ferror(stdout);
3344     case WRITE_FIELDS:
3345       proto_tree_write_fields(output_fields, edt, stdout);
3346       printf("\n");
3347       return !ferror(stdout);
3348     }
3349   } else {
3350     /* Just fill in the columns. */
3351     epan_dissect_fill_in_columns(edt, FALSE, TRUE);
3352
3353     /* Now print them. */
3354     switch (output_action) {
3355
3356     case WRITE_TEXT:
3357         if (!print_columns(cf))
3358           return FALSE;
3359         break;
3360
3361     case WRITE_XML:
3362         proto_tree_write_psml(edt, stdout);
3363         return !ferror(stdout);
3364     case WRITE_FIELDS: /*No non-verbose "fields" format */
3365         g_assert_not_reached();
3366         break;
3367     }
3368   }
3369   if (print_hex) {
3370     if (!print_hex_data(print_stream, edt))
3371       return FALSE;
3372     if (!print_line(print_stream, 0, ""))
3373       return FALSE;
3374   }
3375   return TRUE;
3376 }
3377
3378 static gboolean
3379 write_finale(void)
3380 {
3381   switch (output_action) {
3382
3383   case WRITE_TEXT:
3384     return print_finale(print_stream);
3385
3386   case WRITE_XML:
3387     if (verbose)
3388       write_pdml_finale(stdout);
3389     else
3390       write_psml_finale(stdout);
3391     return !ferror(stdout);
3392
3393   case WRITE_FIELDS:
3394     write_fields_finale(output_fields, stdout);
3395     return !ferror(stdout);
3396
3397   default:
3398     g_assert_not_reached();
3399     return FALSE;
3400   }
3401 }
3402
3403 cf_status_t
3404 cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
3405 {
3406   wtap       *wth;
3407   gchar       *err_info;
3408   char        err_msg[2048+1];
3409
3410   wth = wtap_open_offline(fname, err, &err_info, perform_two_pass_analysis);
3411   if (wth == NULL)
3412     goto fail;
3413
3414   /* The open succeeded.  Fill in the information for this file. */
3415
3416   /* Cleanup all data structures used for dissection. */
3417   cleanup_dissection();
3418   /* Initialize all data structures used for dissection. */
3419   init_dissection();
3420
3421   cf->wth = wth;
3422   cf->f_datalen = 0; /* not used, but set it anyway */
3423
3424   /* Set the file name because we need it to set the follow stream filter.
3425      XXX - is that still true?  We need it for other reasons, though,
3426      in any case. */
3427   cf->filename = g_strdup(fname);
3428
3429   /* Indicate whether it's a permanent or temporary file. */
3430   cf->is_tempfile = is_tempfile;
3431
3432   /* If it's a temporary capture buffer file, mark it as not saved. */
3433   cf->user_saved = !is_tempfile;
3434
3435   cf->cd_t      = wtap_file_type(cf->wth);
3436   cf->count     = 0;
3437   cf->drops_known = FALSE;
3438   cf->drops     = 0;
3439   cf->snap      = wtap_snapshot_length(cf->wth);
3440   if (cf->snap == 0) {
3441     /* Snapshot length not known. */
3442     cf->has_snap = FALSE;
3443     cf->snap = WTAP_MAX_PACKET_SIZE;
3444   } else
3445     cf->has_snap = TRUE;
3446   nstime_set_zero(&cf->elapsed_time);
3447   nstime_set_unset(&first_ts);
3448   nstime_set_unset(&prev_dis_ts);
3449   nstime_set_unset(&prev_cap_ts);
3450
3451   cf->state = FILE_READ_IN_PROGRESS;
3452
3453   wtap_set_cb_new_ipv4(cf->wth, add_ipv4_name);
3454   wtap_set_cb_new_ipv6(cf->wth, (wtap_new_ipv6_callback_t) add_ipv6_name);
3455
3456   return CF_OK;
3457
3458 fail:
3459   g_snprintf(err_msg, sizeof err_msg,
3460              cf_open_error_message(*err, err_info, FALSE, cf->cd_t), fname);
3461   cmdarg_err("%s", err_msg);
3462   return CF_ERROR;
3463 }
3464
3465 static void
3466 show_capture_file_io_error(const char *fname, int err, gboolean is_close)
3467 {
3468   char *save_file_string;
3469
3470   save_file_string = output_file_description(fname);
3471
3472   switch (err) {
3473
3474   case ENOSPC:
3475     cmdarg_err("Not all the packets could be written to the %s because there is "
3476                "no space left on the file system.",
3477                save_file_string);
3478     break;
3479
3480 #ifdef EDQUOT
3481   case EDQUOT:
3482     cmdarg_err("Not all the packets could be written to the %s because you are "
3483                "too close to, or over your disk quota.",
3484                save_file_string);
3485   break;
3486 #endif
3487
3488   case WTAP_ERR_CANT_CLOSE:
3489     cmdarg_err("The %s couldn't be closed for some unknown reason.",
3490                save_file_string);
3491     break;
3492
3493   case WTAP_ERR_SHORT_WRITE:
3494     cmdarg_err("Not all the packets could be written to the %s.",
3495                save_file_string);
3496     break;
3497
3498   default:
3499     if (is_close) {
3500       cmdarg_err("The %s could not be closed: %s.", save_file_string,
3501                  wtap_strerror(err));
3502     } else {
3503       cmdarg_err("An error occurred while writing to the %s: %s.",
3504                  save_file_string, wtap_strerror(err));
3505     }
3506     break;
3507   }
3508   g_free(save_file_string);
3509 }
3510
3511 static void
3512 show_print_file_io_error(int err)
3513 {
3514   switch (err) {
3515
3516   case ENOSPC:
3517     cmdarg_err("Not all the packets could be printed because there is "
3518 "no space left on the file system.");
3519     break;
3520
3521 #ifdef EDQUOT
3522   case EDQUOT:
3523     cmdarg_err("Not all the packets could be printed because you are "
3524 "too close to, or over your disk quota.");
3525   break;
3526 #endif
3527
3528   default:
3529     cmdarg_err("An error occurred while printing packets: %s.",
3530       g_strerror(err));
3531     break;
3532   }
3533 }
3534
3535 static const char *
3536 cf_open_error_message(int err, gchar *err_info, gboolean for_writing,
3537                       int file_type)
3538 {
3539   const char *errmsg;
3540   static char errmsg_errno[1024+1];
3541
3542   if (err < 0) {
3543     /* Wiretap error. */
3544     switch (err) {
3545
3546     case WTAP_ERR_NOT_REGULAR_FILE:
3547       errmsg = "The file \"%s\" is a \"special file\" or socket or other non-regular file.";
3548       break;
3549
3550     case WTAP_ERR_FILE_UNKNOWN_FORMAT:
3551       /* Seen only when opening a capture file for reading. */
3552       errmsg = "The file \"%s\" isn't a capture file in a format TShark understands.";
3553       break;
3554
3555     case WTAP_ERR_UNSUPPORTED:
3556       /* Seen only when opening a capture file for reading. */
3557       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
3558                "The file \"%%s\" isn't a capture file in a format TShark understands.\n"
3559                "(%s)", err_info);
3560       g_free(err_info);
3561       errmsg = errmsg_errno;
3562       break;
3563
3564     case WTAP_ERR_CANT_WRITE_TO_PIPE:
3565       /* Seen only when opening a capture file for writing. */
3566       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
3567                  "The file \"%%s\" is a pipe, and %s capture files can't be "
3568                  "written to a pipe.", wtap_file_type_string(file_type));
3569       errmsg = errmsg_errno;
3570       break;
3571
3572     case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
3573       /* Seen only when opening a capture file for writing. */
3574       errmsg = "TShark doesn't support writing capture files in that format.";
3575       break;
3576
3577     case WTAP_ERR_UNSUPPORTED_ENCAP:
3578       if (for_writing)
3579         errmsg = "TShark can't save this capture in that format.";
3580       else {
3581         g_snprintf(errmsg_errno, sizeof(errmsg_errno),
3582                  "The file \"%%s\" is a capture for a network type that TShark doesn't support.\n"
3583                  "(%s)", err_info);
3584         g_free(err_info);
3585         errmsg = errmsg_errno;
3586       }
3587       break;
3588
3589     case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
3590       if (for_writing)
3591         errmsg = "TShark can't save this capture in that format.";
3592       else
3593         errmsg = "The file \"%s\" is a capture for a network type that TShark doesn't support.";
3594       break;
3595
3596     case WTAP_ERR_BAD_RECORD:
3597       /* Seen only when opening a capture file for reading. */
3598       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
3599                "The file \"%%s\" appears to be damaged or corrupt.\n"
3600                "(%s)", err_info);
3601       g_free(err_info);
3602       errmsg = errmsg_errno;
3603       break;
3604
3605     case WTAP_ERR_CANT_OPEN:
3606       if (for_writing)
3607         errmsg = "The file \"%s\" could not be created for some unknown reason.";
3608       else
3609         errmsg = "The file \"%s\" could not be opened for some unknown reason.";
3610       break;
3611
3612     case WTAP_ERR_SHORT_READ:
3613       errmsg = "The file \"%s\" appears to have been cut short"
3614                " in the middle of a packet or other data.";
3615       break;
3616
3617     case WTAP_ERR_SHORT_WRITE:
3618       errmsg = "A full header couldn't be written to the file \"%s\".";
3619       break;
3620
3621     case WTAP_ERR_DECOMPRESS:
3622       /* Seen only when opening a capture file for reading. */
3623       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
3624                  "The compressed file \"%%s\" appears to be damaged or corrupt.\n"
3625                  "(%s)", err_info);
3626       g_free(err_info);
3627       errmsg = errmsg_errno;
3628       break;
3629
3630     default:
3631       g_snprintf(errmsg_errno, sizeof(errmsg_errno),
3632                  "The file \"%%s\" could not be %s: %s.",
3633                  for_writing ? "created" : "opened",
3634                  wtap_strerror(err));
3635       errmsg = errmsg_errno;
3636       break;
3637     }
3638   } else
3639     errmsg = file_open_error_message(err, for_writing);
3640   return errmsg;
3641 }
3642
3643 /*
3644  * Open/create errors are reported with an console message in TShark.
3645  */
3646 static void
3647 open_failure_message(const char *filename, int err, gboolean for_writing)
3648 {
3649   fprintf(stderr, "tshark: ");
3650   fprintf(stderr, file_open_error_message(err, for_writing), filename);
3651   fprintf(stderr, "\n");
3652 }
3653
3654
3655 /*
3656  * General errors are reported with an console message in TShark.
3657  */
3658 static void
3659 failure_message(const char *msg_format, va_list ap)
3660 {
3661   fprintf(stderr, "tshark: ");
3662   vfprintf(stderr, msg_format, ap);
3663   fprintf(stderr, "\n");
3664 }
3665
3666 /*
3667  * Read errors are reported with an console message in TShark.
3668  */
3669 static void
3670 read_failure_message(const char *filename, int err)
3671 {
3672   cmdarg_err("An error occurred while reading from the file \"%s\": %s.",
3673           filename, g_strerror(err));
3674 }
3675
3676 /*
3677  * Write errors are reported with an console message in TShark.
3678  */
3679 static void
3680 write_failure_message(const char *filename, int err)
3681 {
3682   cmdarg_err("An error occurred while writing to the file \"%s\": %s.",
3683           filename, g_strerror(err));
3684 }
3685
3686 /*
3687  * Print to the standard error.  This is a command-line tool, so there's
3688  * no need to pop up a console.
3689  */
3690 void
3691 vfprintf_stderr(const char *fmt, va_list ap)
3692 {
3693   vfprintf(stderr, fmt, ap);
3694 }
3695
3696 void
3697 fprintf_stderr(const char *fmt, ...)
3698 {
3699   va_list ap;
3700
3701   va_start(ap, fmt);
3702   vfprintf_stderr(fmt, ap);
3703   va_end(ap);
3704 }
3705
3706 /*
3707  * Report an error in command-line arguments.
3708  */
3709 void
3710 cmdarg_err(const char *fmt, ...)
3711 {
3712   va_list ap;
3713
3714   va_start(ap, fmt);
3715   failure_message(fmt, ap);
3716   va_end(ap);
3717 }
3718
3719 /*
3720  * Report additional information for an error in command-line arguments.
3721  */
3722 void
3723 cmdarg_err_cont(const char *fmt, ...)
3724 {
3725   va_list ap;
3726
3727   va_start(ap, fmt);
3728   vfprintf(stderr, fmt, ap);
3729   fprintf(stderr, "\n");
3730   va_end(ap);
3731 }