Browse Source

[Feature] Optimize rspamd_re_cache_type_from_string

tags/1.2.4
Vsevolod Stakhov 8 years ago
parent
commit
3e1b2d44a1
1 changed files with 34 additions and 18 deletions
  1. 34
    18
      src/libserver/re_cache.c

+ 34
- 18
src/libserver/re_cache.c View File

@@ -1137,37 +1137,53 @@ rspamd_re_cache_type_to_string (enum rspamd_re_type type)
enum rspamd_re_type
rspamd_re_cache_type_from_string (const char *str)
{
enum rspamd_re_type ret = RSPAMD_RE_MAX;
enum rspamd_re_type ret;
guint64 h;

/*
* To optimize this function, we apply hash to input string and
* pre-select it from the values
*/

if (str != NULL) {
if (strcmp (str, "header") == 0) {
h = XXH64 (str, strlen (str), 0xdeadbabe);

switch (h) {
case 0x298b9c8a58887d44LLU:
ret = RSPAMD_RE_HEADER;
}
else if (strcmp (str, "rawheader") == 0) {
break;
case 0x467bfb5cd7ddf890LLU:
ret = RSPAMD_RE_RAWHEADER;
}
else if (strcmp (str, "mime") == 0) {
break;
case 0xda081341fb600389LLU:
ret = RSPAMD_RE_MIME;
}
else if (strcmp (str, "rawmime") == 0) {
break;
case 0xc35831e067a8221dLLU:
ret = RSPAMD_RE_RAWMIME;
}
else if (strcmp (str, "body") == 0) {
break;
case 0xc625e13dbe636de2LLU:
ret = RSPAMD_RE_BODY;
}
else if (strcmp (str, "url") == 0) {
break;
case 0x286edbe164c791d2LLU:
ret = RSPAMD_RE_URL;
}
else if (strcmp (str, "allheader") == 0) {
break;
case 0x796d62205a8778c7LLU:
ret = RSPAMD_RE_ALLHEADER;
}
else if (strcmp (str, "mimeheader") == 0) {
break;
case 0xa3c6c153b3b00a5eLLU:
ret = RSPAMD_RE_MIMEHEADER;
}
else if (strcmp (str, "sabody") == 0) {
break;
case 0x7794501506e604e9LLU:
ret = RSPAMD_RE_SABODY;
break;
default:
ret = RSPAMD_RE_MAX;
break;
}
}
else {
ret = RSPAMD_RE_MAX;
}

return ret;
}

Loading…
Cancel
Save