[commit] r10207 - freeswitch/trunk/src/mod/event_handlers/mod_event_socket
Author: anthm Date: Thu Oct 30 19:37:16 2008 New Revision: 10207 Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Log: update filters to have optional - prefix to omit a match within a match from the positive filter Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Thu Oct 30 19:37:16 2008 @@ -239,22 +239,51 @@ } } - if (send && l->filters) { + if (send && l->filters && l->filters->headers) { switch_event_header_t *hp; const char *hval; send = 0; switch_mutex_lock(l->filter_mutex); - for (hp = l->filters->headers; hp && !send; hp = hp->next) { + for (hp = l->filters->headers; hp; hp = hp->next) { if ((hval = switch_event_get_header(event, hp->name))) { + const char *comp_to = hp->value; + int pos = 1, cmp = 0; + + while (comp_to && *comp_to) { + if (*comp_to == '+') { + pos = 1; + } else if (*comp_to == '-') { + pos = 0; + } else if (*comp_to != ' ') { + break; + } + comp_to++; + } + + if (send && pos) { + continue; + } + + if (!comp_to) { + continue; + } + if (*hp->value == '/') { switch_regex_t *re = NULL; int ovector[30]; - send = switch_regex_perform(hval, hp->value, &re, ovector, sizeof(ovector) / sizeof(ovector[0])); + cmp = !!switch_regex_perform(hval, comp_to, &re, ovector, sizeof(ovector) / sizeof(ovector[0])); switch_regex_safe_free(re); } else { - if (!strcasecmp(hp->value, hval)) { + cmp = !strcasecmp(hval, comp_to); + } + + if (cmp) { + if (pos) { send = 1; + } else { + send = 0; + break; } } }
participants (1)
-
Freeswitch SVN