Revision
15096
Author
gled
Date
2009-10-06 06:39:58 -0500 (Tue, 06 Oct 2009)

Log Message

preliminary exec set var=value support

Modified Paths

Diff

Modified: freeswitch/trunk/contrib/gled/esl2agi/esl2agi.c (15095 => 15096)


--- freeswitch/trunk/contrib/gled/esl2agi/esl2agi.c	2009-10-05 21:31:51 UTC (rev 15095)
+++ freeswitch/trunk/contrib/gled/esl2agi/esl2agi.c	2009-10-06 11:39:58 UTC (rev 15096)
@@ -48,6 +48,7 @@
 
 static command_binding_t exec_bindings[_MAX_CMD] = {
 	{ {"DIAL" , NULL}, handle_dial },
+	{ {"SET" , NULL}, handle_set_variable },
 };
 
 /* 
@@ -465,17 +466,30 @@
 }
 
 /*
- * SET VARIABLE 
+ * SET VARIABLE
+ * TODO: - add support for exec('SET','var=value').
+	 - add support for exec('SET','FUNC(param)=value')
  */
 static int handle_set_variable(esl_handle_t *eslC,int fd,int *argc, char *argv[]) {
 	int res;
 	int size;
 	char *buf=NULL;
 
-	if (*argc != 4)
+	if (*argc < 2 && *argc > 3) /* SET VARIABLE var value or SET var=value */
 		return -1;
 
-	if (argv[2] && argv[3]) {
+	if ( (strstr("=",argv[1])) != NULL ) { /* Support for exec set var=value*/
+		if (strstr("(",argv[1]) != NULL && strstr(")",argv[1]) != NULL ) {
+			/* We should implement * func */
+			return -1;
+		}
+		else {
+			size = strlen(argv[1]);
+			buf = malloc(size + 1);
+			snprintf(buf,size+1,"%s",argv[1]);
+		}
+	}
+	else if (argv[2] && argv[3]) {
 		size = strlen(argv[2]) + strlen(argv[3]) + 1;
 		buf = malloc(size + 1);
 		snprintf(buf,size +1 ,"%s=%s",argv[2],argv[3]);