aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-12-30 02:10:24 +0000
committerGuy Harris <guy@alum.mit.edu>2004-12-30 02:10:24 +0000
commit0ccf418724aa221c786e8ac765a8cbe1fed8ac3d (patch)
tree1e4a380da3f190a7468ee2baa824b4e1ff58ac67 /epan
parent9d5c8771c1560425077117b33a06a9e8263062a9 (diff)
Add a "get_addr_name()" routine that takes an "address *" and attempts
to resolve it to a name. Fix up some const-pointer-to-non-const-pointer, and function-pointer-to-void-*, conversions. Fix some comments. svn path=/trunk/; revision=12863
Diffstat (limited to 'epan')
-rw-r--r--epan/addr_resolv.c26
-rw-r--r--epan/addr_resolv.h24
-rw-r--r--epan/column-utils.c35
-rw-r--r--epan/dissectors/packet-aoe.c6
-rw-r--r--epan/prefs.c1
-rw-r--r--epan/tap.c4
-rw-r--r--epan/tap.h2
7 files changed, 59 insertions, 39 deletions
diff --git a/epan/addr_resolv.c b/epan/addr_resolv.c
index f31b72cbc1..1b4503859d 100644
--- a/epan/addr_resolv.c
+++ b/epan/addr_resolv.c
@@ -1869,6 +1869,32 @@ extern gchar *get_sctp_port(guint port)
} /* get_sctp_port */
+const gchar *get_addr_name(address *addr)
+{
+ guint32 ipv4_addr;
+ struct e_in6_addr ipv6_addr;
+
+ switch (addr->type) {
+
+ case AT_ETHER:
+ return get_ether_name(addr->data);
+
+ case AT_IPv4:
+ memcpy(&ipv4_addr, addr->data, sizeof ipv4_addr);
+ return get_hostname(ipv4_addr);
+
+ case AT_IPv6:
+ memcpy(&ipv6_addr.s6_addr, addr->data, sizeof ipv6_addr.s6_addr);
+ return get_hostname6(&ipv6_addr);
+
+ case AT_STRINGZ:
+ return addr->data;
+
+ default:
+ return NULL;
+ }
+}
+
extern gchar *get_ether_name(const guint8 *addr)
{
if (!(g_resolv_flags & RESOLV_MAC))
diff --git a/epan/addr_resolv.h b/epan/addr_resolv.h
index 05b6877e28..8c37ab3272 100644
--- a/epan/addr_resolv.h
+++ b/epan/addr_resolv.h
@@ -60,16 +60,34 @@ extern gchar *g_pipxnets_path;
/* Set the flags controlling what names to resolve */
extern void resolv_set_flags(guint32 flags);
-/* get_tcp_port returns the UDP port name or "%u" if not found */
+/*
+ * get_udp_port() returns the port name corresponding to that UDP port,
+ * or the port number as a string if not found.
+ */
extern gchar *get_udp_port(guint port);
-/* get_tcp_port returns the TCP port name or "%u" if not found */
+/*
+ * get_tcp_port() returns the port name corresponding to that TCP port,
+ * or the port number as a string if not found.
+ */
extern gchar *get_tcp_port(guint port);
-/* get_sctp_port returns the SCTP port name or "%u" if not found */
+/*
+ * get_sctp_port() returns the port name corresponding to that SCTP port,
+ * or the port number as a string if not found.
+ */
extern gchar *get_sctp_port(guint port);
/*
+ * For address types that support name resolution, and for AT_STRINGZ,
+ * "get_addr_name()" returns the name corresponding to the address,
+ * or a string for the address if not found.
+ *
+ * For other address types, it returns a null pointer.
+ */
+const gchar *get_addr_name(address *addr);
+
+/*
* Asynchronous host name lookup initialization, processing, and cleanup
*/
diff --git a/epan/column-utils.c b/epan/column-utils.c
index ecf245c6dc..8851fce7f1 100644
--- a/epan/column-utils.c
+++ b/epan/column-utils.c
@@ -574,7 +574,7 @@ static void
col_set_addr(packet_info *pinfo, int col, address *addr, gboolean is_res,
gboolean is_src)
{
- guint32 ipv4_addr;
+ const char *addr_string;
struct e_in6_addr ipv6_addr;
pinfo->cinfo->col_expr[col][0] = '\0';
@@ -582,37 +582,12 @@ col_set_addr(packet_info *pinfo, int col, address *addr, gboolean is_res,
if (addr->type == AT_NONE)
return; /* no address, nothing to do */
if (is_res) {
- switch (addr->type) {
-
- case AT_ETHER:
- strncpy(pinfo->cinfo->col_buf[col], get_ether_name(addr->data), COL_MAX_LEN);
- pinfo->cinfo->col_buf[col][COL_MAX_LEN - 1] = '\0';
- break;
-
- case AT_IPv4:
- memcpy(&ipv4_addr, addr->data, sizeof ipv4_addr);
- strncpy(pinfo->cinfo->col_buf[col], get_hostname(ipv4_addr), COL_MAX_LEN);
+ addr_string = get_addr_name(addr);
+ if (addr_string != NULL) {
+ strncpy(pinfo->cinfo->col_buf[col], addr_string, COL_MAX_LEN);
pinfo->cinfo->col_buf[col][COL_MAX_LEN - 1] = '\0';
- break;
-
- case AT_IPv6:
- memcpy(&ipv6_addr.s6_addr, addr->data, sizeof ipv6_addr.s6_addr);
- strncpy(pinfo->cinfo->col_buf[col], get_hostname6(&ipv6_addr), COL_MAX_LEN);
- pinfo->cinfo->col_buf[col][COL_MAX_LEN - 1] = '\0';
- break;
-
- case AT_STRINGZ:
- /* XXX - should be done in "address_to_str_buf()", but that routine
- doesn't know COL_MAX_LEN; it should be changed to take the
- maximum length as an argument. */
- strncpy(pinfo->cinfo->col_buf[col], addr->data, COL_MAX_LEN);
- pinfo->cinfo->col_buf[col][COL_MAX_LEN - 1] = '\0';
- break;
-
- default:
+ } else
address_to_str_buf(addr, pinfo->cinfo->col_buf[col]);
- break;
- }
} else {
switch (addr->type) {
diff --git a/epan/dissectors/packet-aoe.c b/epan/dissectors/packet-aoe.c
index 4fdb9e4d3a..0a6196a9da 100644
--- a/epan/dissectors/packet-aoe.c
+++ b/epan/dissectors/packet-aoe.c
@@ -202,7 +202,7 @@ ata_cmd_equal_matched(gconstpointer k1, gconstpointer k2)
static guint
ata_cmd_hash_unmatched(gconstpointer k)
{
- ata_info_t *key = (ata_info_t *)k;
+ const ata_info_t *key = (ata_info_t *)k;
return key->tag;
}
@@ -210,8 +210,8 @@ ata_cmd_hash_unmatched(gconstpointer k)
static gint
ata_cmd_equal_unmatched(gconstpointer k1, gconstpointer k2)
{
- ata_info_t *key1 = (ata_info_t *)k1;
- ata_info_t *key2 = (ata_info_t *)k2;
+ const ata_info_t *key1 = (ata_info_t *)k1;
+ const ata_info_t *key2 = (ata_info_t *)k2;
return (key1->tag==key2->tag)&&(key1->conversation==key2->conversation);
}
diff --git a/epan/prefs.c b/epan/prefs.c
index 9a41a77afd..35f9533420 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -38,6 +38,7 @@
#include <glib.h>
#include <epan/filesystem.h>
+#include <epan/address.h>
#include <epan/addr_resolv.h>
#include <epan/packet.h>
#include <epan/prefs.h>
diff --git a/epan/tap.c b/epan/tap.c
index e73ab58a6f..60ee22e195 100644
--- a/epan/tap.c
+++ b/epan/tap.c
@@ -61,7 +61,7 @@ typedef struct _tap_packet_t {
struct _tap_packet_t *next;
int tap_id;
packet_info *pinfo;
- void *tap_specific_data;
+ const void *tap_specific_data;
} tap_packet_t;
static tap_packet_t *tap_packet_list_free=NULL;
static tap_packet_t *tap_packet_list_queue=NULL;
@@ -167,7 +167,7 @@ register_tap(char *name)
to by the tap specific data pointer.
*/
void
-tap_queue_packet(int tap_id, packet_info *pinfo, void *tap_specific_data)
+tap_queue_packet(int tap_id, packet_info *pinfo, const void *tap_specific_data)
{
tap_packet_t *tpt;
diff --git a/epan/tap.h b/epan/tap.h
index 491ed3cae5..4ecb1fb91d 100644
--- a/epan/tap.h
+++ b/epan/tap.h
@@ -40,7 +40,7 @@ typedef void (*tap_draw_cb)(void *tapdata);
extern void tap_init(void);
extern int register_tap(char *name);
extern int find_tap_id(char *name);
-extern void tap_queue_packet(int tap_id, packet_info *pinfo, void *tap_specific_data);
+extern void tap_queue_packet(int tap_id, packet_info *pinfo, const void *tap_specific_data);
extern void tap_queue_init(epan_dissect_t *edt);
extern void tap_push_tapped_queue(epan_dissect_t *edt);
extern void reset_tap_listeners(void);