Add a macro for hashing the bytes of an address into a hash value.

Use it in the IAX2 dissector and in the conversation code.

svn path=/trunk/; revision=21577
This commit is contained in:
Guy Harris 2007-04-26 00:51:33 +00:00
parent 41cafa2212
commit 1ed26d317c
3 changed files with 20 additions and 28 deletions

View File

@ -122,6 +122,19 @@ typedef struct _address {
(to)->data = SE_COPY_ADDRESS_data; \
}
/*
* Hash an address into a hash value.
*/
#define HASH_ADDRESS(hash_val, addr) { \
const guint8 *HASH_ADDRESS_data; \
int HASH_ADDRESS_index; \
HASH_ADDRESS_data = (addr).data; \
for (HASH_ADDRESS_index = 0; \
HASH_ADDRESS_index < (addr).len;
HASH_ADDRESS_index++) \
hash_val += addrdata[HASH_ADDRESS_index]; \
}
/* Types of port numbers Wireshark knows about. */
typedef enum {
PT_NONE, /* no port number */

View File

@ -187,17 +187,11 @@ conversation_hash_exact(gconstpointer v)
{
const conversation_key *key = (const conversation_key *)v;
guint hash_val;
int i;
hash_val = 0;
for (i = 0; i < key->addr1.len; i++)
hash_val += key->addr1.data[i];
HASH_ADDRESS(hash_val, key->addr1);
hash_val += key->port1;
for (i = 0; i < key->addr2.len; i++)
hash_val += key->addr2.data[i];
HASH_ADDRESS(hash_val, key->addr2);
hash_val += key->port2;
return hash_val;
@ -264,14 +258,10 @@ conversation_hash_no_addr2(gconstpointer v)
{
const conversation_key *key = (const conversation_key *)v;
guint hash_val;
int i;
hash_val = 0;
for (i = 0; i < key->addr1.len; i++)
hash_val += key->addr1.data[i];
HASH_ADDRESS(hash_val, key->addr1);
hash_val += key->port1;
hash_val += key->port2;
return hash_val;
@ -322,16 +312,11 @@ conversation_hash_no_port2(gconstpointer v)
{
const conversation_key *key = (const conversation_key *)v;
guint hash_val;
int i;
hash_val = 0;
for (i = 0; i < key->addr1.len; i++)
hash_val += key->addr1.data[i];
HASH_ADDRESS(hash_val, key->addr1);
hash_val += key->port1;
for (i = 0; i < key->addr2.len; i++)
hash_val += key->addr2.data[i];
HASH_ADDRESS(hash_val, key->addr2);
return hash_val;
}
@ -381,12 +366,9 @@ conversation_hash_no_addr2_or_port2(gconstpointer v)
{
const conversation_key *key = (const conversation_key *)v;
guint hash_val;
int i;
hash_val = 0;
for (i = 0; i < key->addr1.len; i++)
hash_val += key->addr1.data[i];
HASH_ADDRESS(hash_val, key->addr1);
hash_val += key->port1;
return hash_val;

View File

@ -477,10 +477,7 @@ static guint iax_circuit_hash (gconstpointer v)
int i;
hash_val = 0;
addrdata = key->addr.data;
for (i = 0; i < key->addr.len; i++)
hash_val += (guint)(addrdata[i]);
HASH_ADDRESS(hash_val, key->addr);
hash_val += (guint)(key->ptype);
hash_val += (guint)(key->port);
hash_val += (guint)(key->callno);