[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