Revision
16527
Author
anthm
Date
2010-01-27 19:00:04 -0600 (Wed, 27 Jan 2010)

Log Message

fix filters (reported on mailing list use jira next time =/)

Modified Paths

Diff

Modified: freeswitch/trunk/libs/esl/src/esl_event.c (16526 => 16527)


--- freeswitch/trunk/libs/esl/src/esl_event.c	2010-01-27 22:27:26 UTC (rev 16526)
+++ freeswitch/trunk/libs/esl/src/esl_event.c	2010-01-28 01:00:04 UTC (rev 16527)
@@ -254,7 +254,7 @@
 	return (event ? event->body : NULL);
 }
 
-ESL_DECLARE(esl_status_t) esl_event_del_header(esl_event_t *event, const char *header_name)
+ESL_DECLARE(esl_status_t) esl_event_del_header_val(esl_event_t *event, const char *header_name, const char *val)
 {
 	esl_event_header_t *hp, *lp = NULL, *tp;
 	esl_status_t status = ESL_FAIL;
@@ -271,7 +271,7 @@
 		esl_assert(x < 1000);
 		hash = esl_ci_hashfunc_default(header_name, &hlen);
 
-		if (hp->name && (!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name)) {
+		if (hp->name && (!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name) && (esl_strlen_zero(val) || !strcmp(hp->value, val))) {
 			if (lp) {
 				lp->next = hp->next;
 			} else {

Modified: freeswitch/trunk/libs/esl/src/include/esl_event.h (16526 => 16527)


--- freeswitch/trunk/libs/esl/src/include/esl_event.h	2010-01-27 22:27:26 UTC (rev 16526)
+++ freeswitch/trunk/libs/esl/src/include/esl_event.h	2010-01-28 01:00:04 UTC (rev 16527)
@@ -226,7 +226,8 @@
 */
 ESL_DECLARE(esl_status_t) esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data);
 
-ESL_DECLARE(esl_status_t) esl_event_del_header(esl_event_t *event, const char *header_name);
+ESL_DECLARE(esl_status_t) esl_event_del_header_val(esl_event_t *event, const char *header_name, const char *var);
+#define esl_event_del_header(_e, _h) esl_event_del_header_val(_e, _h, NULL)
 
 /*!
   \brief Destroy an event

Modified: freeswitch/trunk/src/include/switch_event.h (16526 => 16527)


--- freeswitch/trunk/src/include/switch_event.h	2010-01-27 22:27:26 UTC (rev 16526)
+++ freeswitch/trunk/src/include/switch_event.h	2010-01-28 01:00:04 UTC (rev 16527)
@@ -182,7 +182,8 @@
 */
 SWITCH_DECLARE(switch_status_t) switch_event_add_header_string(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *data);
 
-SWITCH_DECLARE(switch_status_t) switch_event_del_header(switch_event_t *event, const char *header_name);
+SWITCH_DECLARE(switch_status_t) switch_event_del_header_val(switch_event_t *event, const char *header_name, const char *val);
+#define switch_event_del_header(_e, _h) switch_event_del_header_val(_e, _h, NULL)
 
 /*!
   \brief Destroy an event

Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (16526 => 16527)


--- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	2010-01-27 22:27:26 UTC (rev 16526)
+++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	2010-01-28 01:00:04 UTC (rev 16527)
@@ -1705,36 +1705,44 @@
 
 	if (!strncasecmp(cmd, "filter ", 7)) {
 		char *header_name = cmd + 7;
-		char *header_val;
+		char *header_val = NULL;
 
 		strip_cr(header_name);
 
 		while(header_name && *header_name && *header_name == ' ') header_name++;
 		
-		if (!(header_val = strchr(header_name, ' '))) {
-			switch_snprintf(reply, reply_len, "-ERR invalid syntax");
-			goto done;
+		if ((header_val = strchr(header_name, ' '))) {
+			*header_val++ = '\0';
 		}
-
-		*header_val++ = '\0';
-
-
+		
 		switch_mutex_lock(listener->filter_mutex);		
 		if (!listener->filters) {
 			switch_event_create_plain(&listener->filters, SWITCH_EVENT_CHANNEL_DATA);
 		}
 		
 		if (!strcasecmp(header_name, "delete")) {
-			if (!strcasecmp(header_val, "all")) {
+			header_name = header_val;
+			if ((header_val = strchr(header_name, ' '))) {
+				*header_val++ = '\0';
+			}
+			if (!strcasecmp(header_name, "all")) {
 				switch_event_destroy(&listener->filters);
 				switch_event_create_plain(&listener->filters, SWITCH_EVENT_CHANNEL_DATA);
 			} else {
-				switch_event_del_header(listener->filters, header_val);
+				switch_event_del_header_val(listener->filters, header_name, header_val);
 			}
-			switch_snprintf(reply, reply_len, "+OK filter deleted. [%s]", header_val);
-		} else {
+			switch_snprintf(reply, reply_len, "+OK filter deleted. [%s][%s]", header_name, switch_str_nil(header_val));
+		} else if (header_val) {
+			if (!strcasecmp(header_name, "add")) {
+				header_name = header_val;
+				if ((header_val = strchr(header_name, ' '))) {
+					*header_val++ = '\0';
+				}
+			}
 			switch_event_add_header_string(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
 			switch_snprintf(reply, reply_len, "+OK filter added. [%s]=[%s]", header_name, header_val);
+		} else {
+			switch_snprintf(reply, reply_len, "-ERR invalid syntax");
 		}
 		switch_mutex_unlock(listener->filter_mutex);
 

Modified: freeswitch/trunk/src/switch_event.c (16526 => 16527)


--- freeswitch/trunk/src/switch_event.c	2010-01-27 22:27:26 UTC (rev 16526)
+++ freeswitch/trunk/src/switch_event.c	2010-01-28 01:00:04 UTC (rev 16527)
@@ -697,7 +697,7 @@
 	return (event ? event->body : NULL);
 }
 
-SWITCH_DECLARE(switch_status_t) switch_event_del_header(switch_event_t *event, const char *header_name)
+SWITCH_DECLARE(switch_status_t) switch_event_del_header_val(switch_event_t *event, const char *header_name, const char *val)
 {
 	switch_event_header_t *hp, *lp = NULL, *tp;
 	switch_status_t status = SWITCH_STATUS_FALSE;
@@ -714,7 +714,7 @@
 		switch_assert(x < 1000);
 		hash = switch_ci_hashfunc_default(header_name, &hlen);
 
-		if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name)) {
+		if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name) && (zstr(val) || !strcmp(hp->value, val))) {
 			if (lp) {
 				lp->next = hp->next;
 			} else {