Modified: freeswitch/trunk/contrib/gled/esl2agi/esl2agi.c (15096 => 15097)
--- freeswitch/trunk/contrib/gled/esl2agi/esl2agi.c 2009-10-06 11:39:58 UTC (rev 15096)
+++ freeswitch/trunk/contrib/gled/esl2agi/esl2agi.c 2009-10-06 11:46:53 UTC (rev 15097)
@@ -49,6 +49,7 @@
static command_binding_t exec_bindings[_MAX_CMD] = {
{ {"DIAL" , NULL}, handle_dial },
{ {"SET" , NULL}, handle_set_variable },
+ { {"SIPADDHEADER",NULL}, handle_sipaddheader },
};
/*
@@ -396,6 +397,23 @@
}
/*
+ * SIPADDHEADER(header=value)
+ * TODO: split on = and set the sip_h_header var
+ */
+static int handle_sipaddheader(esl_handle_t *eslC,int fd,int *argc, char *argv[]) {
+ int res;
+ int size;
+ char *buf=NULL;
+
+ res = -1;
+ size = safe_int_snprintf_buffer(&buf,"200 result=%d\n\n",res);
+
+ res = write(fd,buf,size);
+ free(buf);
+ return res;
+}
+
+/*
* Hangup AGI cmd
* TODO: - Add arg support to know which channel we want to hangup.
*/
@@ -437,19 +455,24 @@
int size;
char *buf=NULL;
- if (*argc < 3 && *argc > 4)
- return -1;
+ if (*argc < 3 && *argc > 4) {
+ res = -1;
+ goto end;
+ }
if (argv[2]) {
size = strlen(argv[2]) + 30;
buf = malloc(size + 1);
snprintf(buf,size +1 ,"origination_caller_id_number=%s",argv[2]);
}
- else
- return -1;
+ else {
+ res = -1;
+ goto end;
+ }
res = do_execute(eslC,"set",buf,NULL,NULL);
+end:
size = safe_int_snprintf_buffer(&buf,"200 result=%d\n\n",res);
res = write(fd,buf,size);
@@ -467,7 +490,7 @@
/*
* SET VARIABLE
- * TODO: - add support for exec('SET','var=value').
+ * TODO: - verify 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[]) {
@@ -475,13 +498,16 @@
int size;
char *buf=NULL;
- if (*argc < 2 && *argc > 3) /* SET VARIABLE var value or SET var=value */
- return -1;
+ if (*argc < 2 && *argc > 3) { /* SET VARIABLE var value or SET var=value */
+ res = -1;
+ goto end;
+ }
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;
+ /* TODO implement * func */
+ res = -1;
+ goto end;
}
else {
size = strlen(argv[1]);
@@ -494,11 +520,13 @@
buf = malloc(size + 1);
snprintf(buf,size +1 ,"%s=%s",argv[2],argv[3]);
}
- else
- return -1;
+ else {
+ res = -1;
+ goto end;
+ }
res = do_execute(eslC,"set",buf,NULL,NULL);
-
+end:
size = safe_int_snprintf_buffer(&buf,"200 result=%d\n\n",res);
res = write(fd,buf,size);
@@ -518,9 +546,11 @@
esl_event_t *reply=NULL;
- if (*argc < 3 || *argc > 5)
- return -1;
-
+ if (*argc < 3 || *argc > 5) {
+ offset=-1;
+ goto end;
+ }
+
if (argv[3] && strncasecmp("\"\"",argv[3],2) ) {
/* We should set playback_terminators var there */
buf = malloc(strlen(argv[3])+22);
@@ -570,6 +600,8 @@
}
if (buf != NULL)
free(buf);
+
+end:
if (offset < 0) {
if ( write(fd,"200 result=-1 endpos=0\n\n",128) < 0 ) {
return -1;
Modified: freeswitch/trunk/contrib/gled/esl2agi/esl2agi.h (15096 => 15097)
--- freeswitch/trunk/contrib/gled/esl2agi/esl2agi.h 2009-10-06 11:39:58 UTC (rev 15096)
+++ freeswitch/trunk/contrib/gled/esl2agi/esl2agi.h 2009-10-06 11:46:53 UTC (rev 15097)
@@ -120,6 +120,8 @@
static int handle_dial(esl_handle_t *eslC,int fd,int *argc, char *argv[]);
+static int handle_sipaddheader(esl_handle_t *eslC,int fd,int *argc, char *argv[]);
+
/* TODO
* - ANSWER : OK
* - EXEC application OPTIONS