[Freeswitch-svn] [commit] r10207 - freeswitch/trunk/src/mod/event_handlers/mod_event_socket
Freeswitch SVN
anthm at freeswitch.org
Thu Oct 30 19:37:16 EDT 2008
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;
}
}
}
More information about the Freeswitch-svn
mailing list