summaryrefslogtreecommitdiff
path: root/channels/chan_iax2.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2007-02-23 22:26:00 +0000
committerRussell Bryant <russell@russellbryant.com>2007-02-23 22:26:00 +0000
commitb85a5ffbe3f687c1ad5a5f6ea0831c805b10fdf6 (patch)
treeca1f3e944d4bcb58ce697e1fbe70b94bbe46e1a9 /channels/chan_iax2.c
parentacf96db39fe2411c163783394c0e939797fa42cb (diff)
Make the hashing function calculate something that makes more sense.
(Thanks to bmd on #asterisk-dev for pointing out my pointless math). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@56487 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r--channels/chan_iax2.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 958a95aba..6781b2a4e 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -633,7 +633,7 @@ struct chan_iax2_pvt {
int frames_received;
AST_LIST_ENTRY(chan_iax2_pvt) entry;
- unsigned int hash;
+ unsigned short hash;
};
/* Somewhat arbitrary prime number */
@@ -1265,15 +1265,10 @@ static int make_trunk(unsigned short callno, int locked)
return res;
}
-static inline unsigned int peer_hash_val(const struct sockaddr_in *sin, unsigned short callno)
+static inline unsigned short peer_hash_val(const struct sockaddr_in *sin, unsigned short callno)
{
- return ( (sin->sin_addr.s_addr & 0xFF000000) ^
- (sin->sin_addr.s_addr & 0x00FF0000) ^
- (sin->sin_addr.s_addr & 0x0000FF00) ^
- (sin->sin_addr.s_addr & 0x000000FF) ^
- (sin->sin_port & 0xFF00) ^ (sin->sin_port ^ 0x00FF) ^
- (callno & 0xFF00) ^ (callno & 0x00FF) )
- % PVT_HASH_SIZE;
+ return ( (sin->sin_addr.s_addr >> 16) ^ sin->sin_addr.s_addr ^
+ sin->sin_port ^ callno ) % PVT_HASH_SIZE;
}
static inline void hash_on_peer(struct chan_iax2_pvt *pvt)
@@ -1298,7 +1293,7 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc
struct timeval now;
char host[80];
if (new <= NEW_ALLOW) {
- unsigned int hash = peer_hash_val(sin, callno);
+ unsigned short hash = peer_hash_val(sin, callno);
const struct chan_iax2_pvt *pvt;
AST_RWLIST_RDLOCK(&pvt_hash_tbl[hash]);
AST_RWLIST_TRAVERSE(&pvt_hash_tbl[hash], pvt, entry) {