aboutsummaryrefslogtreecommitdiffstats
path: root/packet-dns.c
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>1999-03-23 03:14:46 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>1999-03-23 03:14:46 +0000
commitef3dfe2077c3fd49997b7d9f3c31ba9f65ff27e2 (patch)
tree50607383870e1a22da46616611b6af517557c1e3 /packet-dns.c
parente3db269e00f32936d8385aa04df895edcbed1547 (diff)
Removed all references to gtk objects from packet*.[ch] files. They now
reference the protocol tree with struct proto_tree and struct proto_item objects. That way, the packet decoding source code file can be used with non-gtk packet decoders, like a curses-based ethereal, e.g. I also re-arranged some of the information in packet.h to more appropriate places (like other packet-*.[ch] files). svn path=/trunk/; revision=223
Diffstat (limited to 'packet-dns.c')
-rw-r--r--packet-dns.c147
1 files changed, 72 insertions, 75 deletions
diff --git a/packet-dns.c b/packet-dns.c
index 25b999eb41..5319790dcc 100644
--- a/packet-dns.c
+++ b/packet-dns.c
@@ -1,7 +1,7 @@
/* packet-dns.c
* Routines for DNS packet disassembly
*
- * $Id: packet-dns.c,v 1.16 1999/03/22 23:31:05 guy Exp $
+ * $Id: packet-dns.c,v 1.17 1999/03/23 03:14:36 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -27,21 +27,15 @@
# include "config.h"
#endif
-#include <gtk/gtk.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <memory.h>
-
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
+#include <stdio.h>
+#include <string.h>
+#include <memory.h>
-#include "ethereal.h"
+#include <glib.h>
#include "packet.h"
#include "packet-dns.h"
#include "util.h"
@@ -421,7 +415,7 @@ get_dns_name_type_class (const u_char *dns_data_ptr,
static int
dissect_dns_query(const u_char *dns_data_ptr, const u_char *pd, int offset,
- GtkWidget *dns_tree)
+ proto_tree *dns_tree)
{
int len;
char name[MAXDNAME];
@@ -433,7 +427,8 @@ dissect_dns_query(const u_char *dns_data_ptr, const u_char *pd, int offset,
char *long_type_name;
const u_char *dptr;
const u_char *data_start;
- GtkWidget *q_tree, *tq;
+ proto_tree *q_tree;
+ proto_item *tq;
data_start = dptr = pd + offset;
@@ -445,49 +440,49 @@ dissect_dns_query(const u_char *dns_data_ptr, const u_char *pd, int offset,
class_name = dns_class_name(class);
long_type_name = dns_long_type_name(type);
- tq = add_item_to_tree(dns_tree, offset, len, "%s: type %s, class %s",
+ tq = proto_tree_add_item(dns_tree, offset, len, "%s: type %s, class %s",
name, type_name, class_name);
- q_tree = gtk_tree_new();
- add_subtree(tq, q_tree, ETT_DNS_QD);
+ q_tree = proto_tree_new();
+ proto_item_add_subtree(tq, q_tree, ETT_DNS_QD);
- add_item_to_tree(q_tree, offset, name_len, "Name: %s", name);
+ proto_tree_add_item(q_tree, offset, name_len, "Name: %s", name);
offset += name_len;
- add_item_to_tree(q_tree, offset, 2, "Type: %s", long_type_name);
+ proto_tree_add_item(q_tree, offset, 2, "Type: %s", long_type_name);
offset += 2;
- add_item_to_tree(q_tree, offset, 2, "Class: %s", class_name);
+ proto_tree_add_item(q_tree, offset, 2, "Class: %s", class_name);
offset += 2;
return dptr - data_start;
}
-GtkWidget *
-add_rr_to_tree(GtkWidget *trr, int rr_type, int offset, const char *name,
+proto_tree *
+add_rr_to_tree(proto_item *trr, int rr_type, int offset, const char *name,
int namelen, const char *type_name, const char *class_name, u_int ttl,
u_short data_len)
{
- GtkWidget *rr_tree;
+ proto_tree *rr_tree;
- rr_tree = gtk_tree_new();
- add_subtree(trr, rr_tree, rr_type);
- add_item_to_tree(rr_tree, offset, namelen, "Name: %s", name);
+ rr_tree = proto_tree_new();
+ proto_item_add_subtree(trr, rr_tree, rr_type);
+ proto_tree_add_item(rr_tree, offset, namelen, "Name: %s", name);
offset += namelen;
- add_item_to_tree(rr_tree, offset, 2, "Type: %s", type_name);
+ proto_tree_add_item(rr_tree, offset, 2, "Type: %s", type_name);
offset += 2;
- add_item_to_tree(rr_tree, offset, 2, "Class: %s", class_name);
+ proto_tree_add_item(rr_tree, offset, 2, "Class: %s", class_name);
offset += 2;
- add_item_to_tree(rr_tree, offset, 4, "Time to live: %s",
+ proto_tree_add_item(rr_tree, offset, 4, "Time to live: %s",
time_secs_to_str(ttl));
offset += 4;
- add_item_to_tree(rr_tree, offset, 2, "Data length: %u", data_len);
+ proto_tree_add_item(rr_tree, offset, 2, "Data length: %u", data_len);
return rr_tree;
}
static int
dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
- GtkWidget *dns_tree)
+ proto_tree *dns_tree)
{
int len;
char name[MAXDNAME];
@@ -501,7 +496,8 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
const u_char *data_start;
u_int ttl;
u_short data_len;
- GtkWidget *rr_tree, *trr;
+ proto_tree *rr_tree;
+ proto_item *trr;
data_start = dptr = pd + offset;
@@ -521,14 +517,14 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
switch (type) {
case T_A: /* "A" record */
- trr = add_item_to_tree(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, addr %s",
name, type_name, class_name,
ip_to_str((guint8 *)dptr));
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- add_item_to_tree(rr_tree, offset, 4, "Addr: %s",
+ proto_tree_add_item(rr_tree, offset, 4, "Addr: %s",
ip_to_str((guint8 *)dptr));
break;
@@ -538,13 +534,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
int ns_name_len;
ns_name_len = get_dns_name(dns_data_ptr, dptr, 0, ns_name, sizeof(ns_name));
- trr = add_item_to_tree(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, ns %s",
name, type_name, class_name, ns_name);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- add_item_to_tree(rr_tree, offset, ns_name_len, "Name server: %s", ns_name);
+ proto_tree_add_item(rr_tree, offset, ns_name_len, "Name server: %s", ns_name);
}
break;
@@ -554,13 +550,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
int cname_len;
cname_len = get_dns_name(dns_data_ptr, dptr, 0, cname, sizeof(cname));
- trr = add_item_to_tree(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, cname %s",
name, type_name, class_name, cname);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- add_item_to_tree(rr_tree, offset, data_len, "Primary name: %s", cname);
+ proto_tree_add_item(rr_tree, offset, data_len, "Primary name: %s", cname);
}
break;
@@ -570,13 +566,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
int pname_len;
pname_len = get_dns_name(dns_data_ptr, dptr, 0, pname, sizeof(pname));
- trr = add_item_to_tree(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, ptr %s",
name, type_name, class_name, pname);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- add_item_to_tree(rr_tree, offset, data_len, "Domain name: %s", pname);
+ proto_tree_add_item(rr_tree, offset, data_len, "Domain name: %s", pname);
break;
}
break;
@@ -584,13 +580,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
/* TODO: parse more record types */
default:
- trr = add_item_to_tree(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s",
name, type_name, class_name);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- add_item_to_tree(rr_tree, offset, data_len, "Data");
+ proto_tree_add_item(rr_tree, offset, data_len, "Data");
}
dptr += data_len;
@@ -600,19 +596,19 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
static int
dissect_query_records(const u_char *dns_data_ptr, int count, const u_char *pd,
- int cur_off, GtkWidget *dns_tree)
+ int cur_off, proto_tree *dns_tree)
{
int start_off;
- GtkWidget *qatree, *ti;
+ proto_tree *qatree;
+ proto_item *ti;
start_off = cur_off;
- ti = add_item_to_tree(GTK_WIDGET(dns_tree),
- start_off, 0, "Queries");
- qatree = gtk_tree_new();
- add_subtree(ti, qatree, ETT_DNS_QRY);
+ ti = proto_tree_add_item(dns_tree, start_off, 0, "Queries");
+ qatree = proto_tree_new();
+ proto_item_add_subtree(ti, qatree, ETT_DNS_QRY);
while (count-- > 0)
cur_off += dissect_dns_query(dns_data_ptr, pd, cur_off, qatree);
- set_item_len(ti, cur_off - start_off);
+ proto_item_set_len(ti, cur_off - start_off);
return cur_off - start_off;
}
@@ -621,29 +617,30 @@ dissect_query_records(const u_char *dns_data_ptr, int count, const u_char *pd,
static int
dissect_answer_records(const u_char *dns_data_ptr, int count,
- const u_char *pd, int cur_off, GtkWidget *dns_tree,
+ const u_char *pd, int cur_off, proto_tree *dns_tree,
char *name)
{
int start_off;
- GtkWidget *qatree, *ti;
+ proto_tree *qatree;
+ proto_item *ti;
start_off = cur_off;
- ti = add_item_to_tree(GTK_WIDGET(dns_tree),
- start_off, 0, name);
- qatree = gtk_tree_new();
- add_subtree(ti, qatree, ETT_DNS_ANS);
+ ti = proto_tree_add_item(dns_tree, start_off, 0, name);
+ qatree = proto_tree_new();
+ proto_item_add_subtree(ti, qatree, ETT_DNS_ANS);
while (count-- > 0)
cur_off += dissect_dns_answer(dns_data_ptr, pd, cur_off, qatree);
- set_item_len(ti, cur_off - start_off);
+ proto_item_set_len(ti, cur_off - start_off);
return cur_off - start_off;
}
void
-dissect_dns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree) {
+dissect_dns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
const u_char *dns_data_ptr;
- GtkWidget *dns_tree, *ti, *field_tree, *tf;
+ proto_tree *dns_tree, *field_tree;
+ proto_item *ti, *tf;
guint16 id, flags, quest, ans, auth, add;
char buf[128+1];
int cur_off;
@@ -681,13 +678,13 @@ dissect_dns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree) {
}
if (tree) {
- ti = add_item_to_tree(GTK_WIDGET(tree), offset, 4,
+ ti = proto_tree_add_item(tree, offset, 4,
(flags & F_RESPONSE) ? "DNS response" : "DNS query");
- dns_tree = gtk_tree_new();
- add_subtree(ti, dns_tree, ETT_DNS);
+ dns_tree = proto_tree_new();
+ proto_item_add_subtree(ti, dns_tree, ETT_DNS);
- add_item_to_tree(dns_tree, offset + DNS_ID, 2, "Transaction ID: 0x%04x",
+ proto_tree_add_item(dns_tree, offset + DNS_ID, 2, "Transaction ID: 0x%04x",
id);
strcpy(buf, val_to_str(flags & F_OPCODE, opcode_vals, "Unknown operation"));
@@ -697,47 +694,47 @@ dissect_dns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree) {
strcat(buf, val_to_str(flags & F_RCODE, rcode_vals,
"Unknown error"));
}
- tf = add_item_to_tree(dns_tree, offset + DNS_FLAGS, 2, "Flags: 0x%04x (%s)",
+ tf = proto_tree_add_item(dns_tree, offset + DNS_FLAGS, 2, "Flags: 0x%04x (%s)",
flags, buf);
- field_tree = gtk_tree_new();
- add_subtree(tf, field_tree, ETT_DNS_FLAGS);
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ field_tree = proto_tree_new();
+ proto_item_add_subtree(tf, field_tree, ETT_DNS_FLAGS);
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_RESPONSE,
2*8, "Response", "Query"));
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_enumerated_bitfield(flags, F_OPCODE,
2*8, opcode_vals, "%s"));
if (flags & F_RESPONSE) {
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_AUTHORITATIVE,
2*8,
"Server is an authority for domain",
"Server isn't an authority for domain"));
}
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_TRUNCATED,
2*8,
"Message is truncated",
"Message is not truncated"));
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_RECDESIRED,
2*8,
"Do query recursively",
"Don't do query recursively"));
if (flags & F_RESPONSE) {
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_RECAVAIL,
2*8,
"Server can do recursive queries",
"Server can't do recursive queries"));
- add_item_to_tree(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_enumerated_bitfield(flags, F_RCODE,
2*8, rcode_vals, "%s"));
}
- add_item_to_tree(dns_tree, offset + DNS_QUEST, 2, "Questions: %d", quest);
- add_item_to_tree(dns_tree, offset + DNS_ANS, 2, "Answer RRs: %d", ans);
- add_item_to_tree(dns_tree, offset + DNS_AUTH, 2, "Authority RRs: %d", auth);
- add_item_to_tree(dns_tree, offset + DNS_ADD, 2, "Additional RRs: %d", add);
+ proto_tree_add_item(dns_tree, offset + DNS_QUEST, 2, "Questions: %d", quest);
+ proto_tree_add_item(dns_tree, offset + DNS_ANS, 2, "Answer RRs: %d", ans);
+ proto_tree_add_item(dns_tree, offset + DNS_AUTH, 2, "Authority RRs: %d", auth);
+ proto_tree_add_item(dns_tree, offset + DNS_ADD, 2, "Additional RRs: %d", add);
cur_off = offset + DNS_HDRLEN;