Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef MSG_MCLASS_HASH_H
00026
00027 #define MSG_MCLASS_HASH_H
00028
00040 #include <sofia-sip/su_config.h>
00041
00042 #ifndef BNF_H
00043 #include <sofia-sip/bnf.h>
00044 #endif
00045
00046 SOFIA_BEGIN_DECLS
00047
00049 #define MC_HASH(s, n) (msg_header_name_hash(s, NULL) % (unsigned)(n))
00050
00052 su_inline
00053 unsigned short msg_header_name_hash(char const *s, isize_t *llen)
00054 {
00055 unsigned short hash = 0;
00056 size_t i;
00057
00058 for (i = 0; s[i]; i++) {
00059 unsigned char c = s[i];
00060 if (!(_bnf_table[c] & bnf_token))
00061 break;
00062 if (c >= 'A' && c <= 'Z')
00063 hash += (c + 'a' - 'A');
00064 else
00065 hash += c;
00066 hash *= 38501U;
00067 }
00068
00069 if (llen)
00070 *llen = i;
00071
00072 return hash;
00073 }
00074
00075 SOFIA_END_DECLS
00076
00077 #endif