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:
parent
41cafa2212
commit
1ed26d317c
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue