*
* Gilbert Ramirez <gram@alumni.rice.edu>
*
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/* With MSVC and a libethereal.dll this file needs to import some variables
- in a special way. Therefore _NEED_VAR_IMPORT_ is defined. */
-#define _NEED_VAR_IMPORT_
-
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "packet-range.h"
#include "print.h"
#include "ps.h"
-#include "util.h"
+#include "file_util.h"
+#include <epan/charsets.h>
#include <epan/dissectors/packet-data.h>
#include <epan/dissectors/packet-frame.h>
guint length, char_enc encoding);
static void ps_clean_string(unsigned char *out, const unsigned char *in,
int outbuf_size);
-static void print_escaped_xml(FILE *fh, char *unescaped_string);
+static void print_escaped_xml(FILE *fh, const char *unescaped_string);
static void print_pdml_geninfo(proto_tree *tree, FILE *fh);
/* Open the file or command for output */
if (to_file)
- fh = fopen(dest, "w");
+ fh = eth_fopen(dest, "w");
else
fh = popen(dest, "w");
proto_item_fill_label(fi, label_str);
}
+ if (PROTO_ITEM_IS_GENERATED(node)) {
+ label_ptr = g_strdup_printf("[%s]", label_ptr);
+ }
+
if (!print_line(pdata->stream, pdata->level, label_ptr)) {
pdata->success = FALSE;
return;
}
+ if (PROTO_ITEM_IS_GENERATED(node)) {
+ g_free(label_ptr);
+ }
+
/* If it's uninterpreted data, dump it (unless our caller will
be printing the entire packet in hex). */
if (fi->hfinfo->id == proto_data && pdata->print_hex_for_data) {
{
field_info *fi = PITEM_FINFO(node);
write_pdml_data *pdata = (write_pdml_data*) data;
- gchar *label_ptr;
+ const gchar *label_ptr;
gchar label_str[ITEM_LABEL_LENGTH];
char *dfilter_string;
int chop_len;
label_ptr = "";
}
- fputs("<field show=\"", pdata->fh);
+ /* Show empty name since it is a required field */
+ fputs("<field name=\"", pdata->fh);
+ fputs("\" show=\"", pdata->fh);
print_escaped_xml(pdata->fh, label_ptr);
fprintf(pdata->fh, "\" size=\"%d", fi->length);
fprintf(pdata->fh, "\" pos=\"%d", fi->start);
/* fprintf(pdata->fh, "\" id=\"%d", fi->hfinfo->id);*/
- if (fi->hfinfo->type != FT_PROTOCOL) {
- /* Field */
-
+ /* show, value, and unmaskedvalue attributes */
+ switch (fi->hfinfo->type)
+ {
+ case FT_PROTOCOL:
+ break;
+ case FT_NONE:
+ fputs("\" show=\"\" value=\"", pdata->fh);
+ break;
+ default:
/* XXX - this is a hack until we can just call
* fvalue_to_string_repr() for *all* FT_* types. */
- dfilter_string = proto_construct_dfilter_string(fi,
- pdata->edt);
+ dfilter_string = proto_construct_match_selected_string(fi,
+ pdata->edt);
if (dfilter_string != NULL) {
chop_len = strlen(fi->hfinfo->abbrev) + 4; /* for " == " */
fputs("\" show=\"", pdata->fh);
print_escaped_xml(pdata->fh, &dfilter_string[chop_len]);
}
+
+ /*
+ * XXX - should we omit "value" for any fields?
+ * What should we do for fields whose length is 0?
+ * They might come from a pseudo-header or from
+ * the capture header (e.g., time stamps), or
+ * they might be generated fields.
+ */
if (fi->length > 0) {
fputs("\" value=\"", pdata->fh);
- write_pdml_field_hex_value(pdata, fi);
+
+ if (fi->hfinfo->bitmask!=0) {
+ fprintf(pdata->fh, "%X", fvalue_get_integer(&fi->value));
+ fputs("\" unmaskedvalue=\"", pdata->fh);
+ write_pdml_field_hex_value(pdata, fi);
+ }
+ else {
+ write_pdml_field_hex_value(pdata, fi);
+ }
}
}
}
/* Print info for a 'geninfo' pseudo-protocol. This is required by
- * the PDML spec. The information is contained in Ethereal's 'frame' protocol,
+ * the PDML spec. The information is contained in Wireshark's 'frame' protocol,
* but we produce a 'geninfo' protocol in the PDML to conform to spec.
* The 'frame' protocol follows the 'geninfo' protocol in the PDML. */
static void
fputs("</psml>\n", fh);
}
+void
+write_csv_preamble(FILE *fh _U_)
+{
+
+}
+
+void
+proto_tree_write_csv(epan_dissect_t *edt, FILE *fh)
+{
+ gint i;
+
+ /* if this is the first packet, we have to write the CSV header */
+ if(edt->pi.fd->num == 1) {
+ for(i=0; i < edt->pi.cinfo->num_cols - 1; i++)
+ fprintf(fh, "\"%s\",", edt->pi.cinfo->col_title[i]);
+
+ fprintf(fh, "\"%s\"\n", edt->pi.cinfo->col_title[i]);
+ }
+
+ for(i=0; i < edt->pi.cinfo->num_cols - 1; i++)
+ fprintf(fh, "\"%s\",", edt->pi.cinfo->col_data[i]);
+
+ fprintf(fh, "\"%s\"\n", edt->pi.cinfo->col_data[i]);
+}
+
+void
+write_csv_finale(FILE *fh _U_)
+{
+
+}
+
/*
* Find the data source for a specified field, and return a pointer
* to the data in it. Returns NULL if the data is out of bounds.
/* Print a string, escaping out certain characters that need to
* escaped out for XML. */
static void
-print_escaped_xml(FILE *fh, char *unescaped_string)
+print_escaped_xml(FILE *fh, const char *unescaped_string)
{
- unsigned char *p;
+ const unsigned char *p;
for (p = unescaped_string; *p != '\0'; p++) {
switch (*p) {
g_free(line);
}
length = tvb_length(tvb);
+ if (length == 0)
+ return TRUE;
cp = tvb_get_ptr(tvb, 0, length);
if (!print_hex_data_buffer(stream, cp, length,
edt->pi.fd->flags.encoding))
* This routine is based on a routine created by Dan Lasley
* <DLASLEY@PROMUS.com>.
*
- * It was modified for Ethereal by Gilbert Ramirez and others.
+ * It was modified for Wireshark by Gilbert Ramirez and others.
*/
#define MAX_OFFSET_LEN 8 /* max length of hex offset of bytes */
fputs("\n", output->fh);
fputs("%% the page title\n", output->fh);
ps_clean_string(psbuffer, filename, MAX_PS_LINE_LENGTH);
- fprintf(output->fh, "/eth_pagetitle (%s - Ethereal) def\n", psbuffer);
+ fprintf(output->fh, "/eth_pagetitle (%s - Wireshark) def\n", psbuffer);
fputs("\n", output->fh);
return !ferror(output->fh);
}