@ -115,7 +115,7 @@ static agi_command *find_command(char *cmds[], int exact);
AST_THREADSTORAGE ( agi_buf ) ;
AST_THREADSTORAGE ( agi_buf ) ;
# define AGI_BUF_INITSIZE 256
# define AGI_BUF_INITSIZE 256
int ast_agi_ fdprintf( struct ast_channel * chan , int fd , char * fmt , . . . )
int ast_agi_ send( int fd , struct ast_channel * chan , char * fmt , . . . )
{
{
int res = 0 ;
int res = 0 ;
va_list ap ;
va_list ap ;
@ -582,7 +582,7 @@ static enum agi_result launch_netscript(char *agiurl, char *argv[], int *fds, in
}
}
}
}
if ( ast_agi_ fdprintf( NULL , s , " agi_network: yes \n " ) < 0 ) {
if ( ast_agi_ send( s , NULL , " agi_network: yes \n " ) < 0 ) {
if ( errno ! = EINTR ) {
if ( errno ! = EINTR ) {
ast_log ( LOG_WARNING , " Connect to '%s' failed: %s \n " , agiurl , strerror ( errno ) ) ;
ast_log ( LOG_WARNING , " Connect to '%s' failed: %s \n " , agiurl , strerror ( errno ) ) ;
close ( s ) ;
close ( s ) ;
@ -593,7 +593,7 @@ static enum agi_result launch_netscript(char *agiurl, char *argv[], int *fds, in
/* If we have a script parameter, relay it to the fastagi server */
/* If we have a script parameter, relay it to the fastagi server */
/* Script parameters take the form of: AGI(agi://my.example.com/?extension=${EXTEN}) */
/* Script parameters take the form of: AGI(agi://my.example.com/?extension=${EXTEN}) */
if ( ! ast_strlen_zero ( script ) )
if ( ! ast_strlen_zero ( script ) )
ast_agi_ fdprintf( NULL , s , " agi_network_script: %s \n " , script ) ;
ast_agi_ send( s , NULL , " agi_network_script: %s \n " , script ) ;
ast_debug ( 4 , " Wow, connected! \n " ) ;
ast_debug ( 4 , " Wow, connected! \n " ) ;
fds [ 0 ] = s ;
fds [ 0 ] = s ;
@ -722,40 +722,40 @@ static void setup_env(struct ast_channel *chan, char *request, int fd, int enhan
/* Print initial environment, with agi_request always being the first
/* Print initial environment, with agi_request always being the first
thing */
thing */
ast_agi_ fdprintf( chan , fd , " agi_request: %s \n " , request ) ;
ast_agi_ send( fd , chan , " agi_request: %s \n " , request ) ;
ast_agi_ fdprintf( chan , fd , " agi_channel: %s \n " , chan - > name ) ;
ast_agi_ send( fd , chan , " agi_channel: %s \n " , chan - > name ) ;
ast_agi_ fdprintf( chan , fd , " agi_language: %s \n " , chan - > language ) ;
ast_agi_ send( fd , chan , " agi_language: %s \n " , chan - > language ) ;
ast_agi_ fdprintf( chan , fd , " agi_type: %s \n " , chan - > tech - > type ) ;
ast_agi_ send( fd , chan , " agi_type: %s \n " , chan - > tech - > type ) ;
ast_agi_ fdprintf( chan , fd , " agi_uniqueid: %s \n " , chan - > uniqueid ) ;
ast_agi_ send( fd , chan , " agi_uniqueid: %s \n " , chan - > uniqueid ) ;
ast_agi_ fdprintf( chan , fd , " agi_version: %s \n " , ast_get_version ( ) ) ;
ast_agi_ send( fd , chan , " agi_version: %s \n " , ast_get_version ( ) ) ;
/* ANI/DNIS */
/* ANI/DNIS */
ast_agi_ fdprintf( chan , fd , " agi_callerid: %s \n " , S_OR ( chan - > cid . cid_num , " unknown " ) ) ;
ast_agi_ send( fd , chan , " agi_callerid: %s \n " , S_OR ( chan - > cid . cid_num , " unknown " ) ) ;
ast_agi_ fdprintf( chan , fd , " agi_calleridname: %s \n " , S_OR ( chan - > cid . cid_name , " unknown " ) ) ;
ast_agi_ send( fd , chan , " agi_calleridname: %s \n " , S_OR ( chan - > cid . cid_name , " unknown " ) ) ;
ast_agi_ fdprintf( chan , fd , " agi_callingpres: %d \n " , chan - > cid . cid_pres ) ;
ast_agi_ send( fd , chan , " agi_callingpres: %d \n " , chan - > cid . cid_pres ) ;
ast_agi_ fdprintf( chan , fd , " agi_callingani2: %d \n " , chan - > cid . cid_ani2 ) ;
ast_agi_ send( fd , chan , " agi_callingani2: %d \n " , chan - > cid . cid_ani2 ) ;
ast_agi_ fdprintf( chan , fd , " agi_callington: %d \n " , chan - > cid . cid_ton ) ;
ast_agi_ send( fd , chan , " agi_callington: %d \n " , chan - > cid . cid_ton ) ;
ast_agi_ fdprintf( chan , fd , " agi_callingtns: %d \n " , chan - > cid . cid_tns ) ;
ast_agi_ send( fd , chan , " agi_callingtns: %d \n " , chan - > cid . cid_tns ) ;
ast_agi_ fdprintf( chan , fd , " agi_dnid: %s \n " , S_OR ( chan - > cid . cid_dnid , " unknown " ) ) ;
ast_agi_ send( fd , chan , " agi_dnid: %s \n " , S_OR ( chan - > cid . cid_dnid , " unknown " ) ) ;
ast_agi_ fdprintf( chan , fd , " agi_rdnis: %s \n " , S_OR ( chan - > cid . cid_rdnis , " unknown " ) ) ;
ast_agi_ send( fd , chan , " agi_rdnis: %s \n " , S_OR ( chan - > cid . cid_rdnis , " unknown " ) ) ;
/* Context information */
/* Context information */
ast_agi_ fdprintf( chan , fd , " agi_context: %s \n " , chan - > context ) ;
ast_agi_ send( fd , chan , " agi_context: %s \n " , chan - > context ) ;
ast_agi_ fdprintf( chan , fd , " agi_extension: %s \n " , chan - > exten ) ;
ast_agi_ send( fd , chan , " agi_extension: %s \n " , chan - > exten ) ;
ast_agi_ fdprintf( chan , fd , " agi_priority: %d \n " , chan - > priority ) ;
ast_agi_ send( fd , chan , " agi_priority: %d \n " , chan - > priority ) ;
ast_agi_ fdprintf( chan , fd , " agi_enhanced: %s \n " , enhanced ? " 1.0 " : " 0.0 " ) ;
ast_agi_ send( fd , chan , " agi_enhanced: %s \n " , enhanced ? " 1.0 " : " 0.0 " ) ;
/* User information */
/* User information */
ast_agi_ fdprintf( chan , fd , " agi_accountcode: %s \n " , chan - > accountcode ? chan - > accountcode : " " ) ;
ast_agi_ send( fd , chan , " agi_accountcode: %s \n " , chan - > accountcode ? chan - > accountcode : " " ) ;
ast_agi_ fdprintf( chan , fd , " agi_threadid: %ld \n " , ( long ) pthread_self ( ) ) ;
ast_agi_ send( fd , chan , " agi_threadid: %ld \n " , ( long ) pthread_self ( ) ) ;
/* Send any parameters to the fastagi server that have been passed via the agi application */
/* Send any parameters to the fastagi server that have been passed via the agi application */
/* Agi application paramaters take the form of: AGI(/path/to/example/script|${EXTEN}) */
/* Agi application paramaters take the form of: AGI(/path/to/example/script|${EXTEN}) */
for ( count = 1 ; count < argc ; count + + )
for ( count = 1 ; count < argc ; count + + )
ast_agi_ fdprintf( chan , fd , " agi_arg_%d: %s \n " , count , argv [ count ] ) ;
ast_agi_ send( fd , chan , " agi_arg_%d: %s \n " , count , argv [ count ] ) ;
/* End with empty return */
/* End with empty return */
ast_agi_ fdprintf( chan , fd , " \n " ) ;
ast_agi_ send( fd , chan , " \n " ) ;
}
}
static int handle_answer ( struct ast_channel * chan , AGI * agi , int argc , char * argv [ ] )
static int handle_answer ( struct ast_channel * chan , AGI * agi , int argc , char * argv [ ] )
@ -766,7 +766,7 @@ static int handle_answer(struct ast_channel *chan, AGI *agi, int argc, char *arg
if ( chan - > _state ! = AST_STATE_UP )
if ( chan - > _state ! = AST_STATE_UP )
res = ast_answer ( chan ) ;
res = ast_answer ( chan ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -779,7 +779,7 @@ static int handle_waitfordigit(struct ast_channel *chan, AGI *agi, int argc, cha
if ( sscanf ( argv [ 3 ] , " %d " , & to ) ! = 1 )
if ( sscanf ( argv [ 3 ] , " %d " , & to ) ! = 1 )
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
res = ast_waitfordigit_full ( chan , to , agi - > audio , agi - > ctrl ) ;
res = ast_waitfordigit_full ( chan , to , agi - > audio , agi - > ctrl ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -798,7 +798,7 @@ static int handle_sendtext(struct ast_channel *chan, AGI *agi, int argc, char *a
parsing , then here , add a newline at the end of the string
parsing , then here , add a newline at the end of the string
before sending it to ast_sendtext - - DUDE */
before sending it to ast_sendtext - - DUDE */
res = ast_sendtext ( chan , argv [ 2 ] ) ;
res = ast_sendtext ( chan , argv [ 2 ] ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -811,14 +811,14 @@ static int handle_recvchar(struct ast_channel *chan, AGI *agi, int argc, char *a
res = ast_recvchar ( chan , atoi ( argv [ 2 ] ) ) ;
res = ast_recvchar ( chan , atoi ( argv [ 2 ] ) ) ;
if ( res = = 0 ) {
if ( res = = 0 ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (timeout) \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (timeout) \n " , res ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
if ( res > 0 ) {
if ( res > 0 ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (hangup) \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (hangup) \n " , res ) ;
return RESULT_FAILURE ;
return RESULT_FAILURE ;
}
}
@ -831,10 +831,10 @@ static int handle_recvtext(struct ast_channel *chan, AGI *agi, int argc, char *a
buf = ast_recvtext ( chan , atoi ( argv [ 2 ] ) ) ;
buf = ast_recvtext ( chan , atoi ( argv [ 2 ] ) ) ;
if ( buf ) {
if ( buf ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (%s) \n " , buf ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (%s) \n " , buf ) ;
ast_free ( buf ) ;
ast_free ( buf ) ;
} else {
} else {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=-1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=-1 \n " ) ;
}
}
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -859,9 +859,9 @@ static int handle_tddmode(struct ast_channel *chan, AGI *agi, int argc, char *ar
}
}
res = ast_channel_setoption ( chan , AST_OPTION_TDD , & x , sizeof ( char ) , 0 ) ;
res = ast_channel_setoption ( chan , AST_OPTION_TDD , & x , sizeof ( char ) , 0 ) ;
if ( res ! = RESULT_SUCCESS ) {
if ( res ! = RESULT_SUCCESS ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
} else {
} else {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
}
}
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -878,7 +878,7 @@ static int handle_sendimage(struct ast_channel *chan, AGI *agi, int argc, char *
if ( ! ast_check_hangup ( chan ) ) {
if ( ! ast_check_hangup ( chan ) ) {
res = 0 ;
res = 0 ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -913,7 +913,7 @@ static int handle_controlstreamfile(struct ast_channel *chan, AGI *agi, int argc
res = ast_control_streamfile ( chan , argv [ 3 ] , fwd , rev , stop , suspend , NULL , skipms , NULL ) ;
res = ast_control_streamfile ( chan , argv [ 3 ] , fwd , rev , stop , suspend , NULL , skipms , NULL ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -935,7 +935,7 @@ static int handle_streamfile(struct ast_channel *chan, AGI *agi, int argc, char
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
if ( ! ( fs = ast_openstream ( chan , argv [ 2 ] , chan - > language ) ) ) {
if ( ! ( fs = ast_openstream ( chan , argv [ 2 ] , chan - > language ) ) ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d endpos=%ld \n " , 0 , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d endpos=%ld \n " , 0 , sample_offset ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -963,7 +963,7 @@ static int handle_streamfile(struct ast_channel *chan, AGI *agi, int argc, char
/* Stop this command, don't print a result line, as there is a new command */
/* Stop this command, don't print a result line, as there is a new command */
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d endpos=%ld \n " , res , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d endpos=%ld \n " , res , sample_offset ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -990,7 +990,7 @@ static int handle_getoption(struct ast_channel *chan, AGI *agi, int argc, char *
}
}
if ( ! ( fs = ast_openstream ( chan , argv [ 2 ] , chan - > language ) ) ) {
if ( ! ( fs = ast_openstream ( chan , argv [ 2 ] , chan - > language ) ) ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d endpos=%ld \n " , 0 , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d endpos=%ld \n " , 0 , sample_offset ) ;
ast_log ( LOG_WARNING , " Unable to open %s \n " , argv [ 2 ] ) ;
ast_log ( LOG_WARNING , " Unable to open %s \n " , argv [ 2 ] ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1028,7 +1028,7 @@ static int handle_getoption(struct ast_channel *chan, AGI *agi, int argc, char *
res = 0 ;
res = 0 ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d endpos=%ld \n " , res , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d endpos=%ld \n " , res , sample_offset ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1048,7 +1048,7 @@ static int handle_saynumber(struct ast_channel *chan, AGI *agi, int argc, char *
res = ast_say_number_full ( chan , num , argv [ 3 ] , chan - > language , argc > 4 ? argv [ 4 ] : NULL , agi - > audio , agi - > ctrl ) ;
res = ast_say_number_full ( chan , num , argv [ 3 ] , chan - > language , argc > 4 ? argv [ 4 ] : NULL , agi - > audio , agi - > ctrl ) ;
if ( res = = 1 )
if ( res = = 1 )
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1064,7 +1064,7 @@ static int handle_saydigits(struct ast_channel *chan, AGI *agi, int argc, char *
res = ast_say_digit_str_full ( chan , argv [ 2 ] , argv [ 3 ] , chan - > language , agi - > audio , agi - > ctrl ) ;
res = ast_say_digit_str_full ( chan , argv [ 2 ] , argv [ 3 ] , chan - > language , agi - > audio , agi - > ctrl ) ;
if ( res = = 1 ) /* New command */
if ( res = = 1 ) /* New command */
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1078,7 +1078,7 @@ static int handle_sayalpha(struct ast_channel *chan, AGI *agi, int argc, char *a
res = ast_say_character_str_full ( chan , argv [ 2 ] , argv [ 3 ] , chan - > language , agi - > audio , agi - > ctrl ) ;
res = ast_say_character_str_full ( chan , argv [ 2 ] , argv [ 3 ] , chan - > language , agi - > audio , agi - > ctrl ) ;
if ( res = = 1 ) /* New command */
if ( res = = 1 ) /* New command */
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1093,7 +1093,7 @@ static int handle_saydate(struct ast_channel *chan, AGI *agi, int argc, char *ar
res = ast_say_date ( chan , num , argv [ 3 ] , chan - > language ) ;
res = ast_say_date ( chan , num , argv [ 3 ] , chan - > language ) ;
if ( res = = 1 )
if ( res = = 1 )
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1108,7 +1108,7 @@ static int handle_saytime(struct ast_channel *chan, AGI *agi, int argc, char *ar
res = ast_say_time ( chan , num , argv [ 3 ] , chan - > language ) ;
res = ast_say_time ( chan , num , argv [ 3 ] , chan - > language ) ;
if ( res = = 1 )
if ( res = = 1 )
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1142,7 +1142,7 @@ static int handle_saydatetime(struct ast_channel *chan, AGI *agi, int argc, char
if ( res = = 1 )
if ( res = = 1 )
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1156,7 +1156,7 @@ static int handle_sayphonetic(struct ast_channel *chan, AGI *agi, int argc, char
res = ast_say_phonetic_str_full ( chan , argv [ 2 ] , argv [ 3 ] , chan - > language , agi - > audio , agi - > ctrl ) ;
res = ast_say_phonetic_str_full ( chan , argv [ 2 ] , argv [ 3 ] , chan - > language , agi - > audio , agi - > ctrl ) ;
if ( res = = 1 ) /* New command */
if ( res = = 1 ) /* New command */
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
return ( res > = 0 ) ? RESULT_SUCCESS : RESULT_FAILURE ;
}
}
@ -1179,11 +1179,11 @@ static int handle_getdata(struct ast_channel *chan, AGI *agi, int argc, char *ar
if ( res = = 2 ) /* New command */
if ( res = = 2 ) /* New command */
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
else if ( res = = 1 )
else if ( res = = 1 )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%s (timeout) \n " , data ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%s (timeout) \n " , data ) ;
else if ( res < 0 )
else if ( res < 0 )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=-1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=-1 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%s \n " , data ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%s \n " , data ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1193,7 +1193,7 @@ static int handle_setcontext(struct ast_channel *chan, AGI *agi, int argc, char
if ( argc ! = 3 )
if ( argc ! = 3 )
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
ast_copy_string ( chan - > context , argv [ 2 ] , sizeof ( chan - > context ) ) ;
ast_copy_string ( chan - > context , argv [ 2 ] , sizeof ( chan - > context ) ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1202,7 +1202,7 @@ static int handle_setextension(struct ast_channel *chan, AGI *agi, int argc, cha
if ( argc ! = 3 )
if ( argc ! = 3 )
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
ast_copy_string ( chan - > exten , argv [ 2 ] , sizeof ( chan - > exten ) ) ;
ast_copy_string ( chan - > exten , argv [ 2 ] , sizeof ( chan - > exten ) ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1219,7 +1219,7 @@ static int handle_setpriority(struct ast_channel *chan, AGI *agi, int argc, char
}
}
ast_explicit_goto ( chan , NULL , NULL , pri ) ;
ast_explicit_goto ( chan , NULL , NULL , pri ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1294,12 +1294,12 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, char
if ( ! res )
if ( ! res )
res = ast_waitstream ( chan , argv [ 4 ] ) ;
res = ast_waitstream ( chan , argv [ 4 ] ) ;
if ( res ) {
if ( res ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (randomerror) endpos=%ld \n " , res , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (randomerror) endpos=%ld \n " , res , sample_offset ) ;
} else {
} else {
fs = ast_writefile ( argv [ 2 ] , argv [ 3 ] , NULL , O_CREAT | O_WRONLY | ( sample_offset ? O_APPEND : 0 ) , 0 , AST_FILE_MODE ) ;
fs = ast_writefile ( argv [ 2 ] , argv [ 3 ] , NULL , O_CREAT | O_WRONLY | ( sample_offset ? O_APPEND : 0 ) , 0 , AST_FILE_MODE ) ;
if ( ! fs ) {
if ( ! fs ) {
res = - 1 ;
res = - 1 ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (writefile) \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (writefile) \n " , res ) ;
if ( sildet )
if ( sildet )
ast_dsp_free ( sildet ) ;
ast_dsp_free ( sildet ) ;
return RESULT_FAILURE ;
return RESULT_FAILURE ;
@ -1319,14 +1319,14 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, char
res = ast_waitfor ( chan , - 1 ) ;
res = ast_waitfor ( chan , - 1 ) ;
if ( res < 0 ) {
if ( res < 0 ) {
ast_closestream ( fs ) ;
ast_closestream ( fs ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (waitfor) endpos=%ld \n " , res , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (waitfor) endpos=%ld \n " , res , sample_offset ) ;
if ( sildet )
if ( sildet )
ast_dsp_free ( sildet ) ;
ast_dsp_free ( sildet ) ;
return RESULT_FAILURE ;
return RESULT_FAILURE ;
}
}
f = ast_read ( chan ) ;
f = ast_read ( chan ) ;
if ( ! f ) {
if ( ! f ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (hangup) endpos=%ld \n " , - 1 , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (hangup) endpos=%ld \n " , - 1 , sample_offset ) ;
ast_closestream ( fs ) ;
ast_closestream ( fs ) ;
if ( sildet )
if ( sildet )
ast_dsp_free ( sildet ) ;
ast_dsp_free ( sildet ) ;
@ -1341,7 +1341,7 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, char
ast_stream_rewind ( fs , 200 ) ;
ast_stream_rewind ( fs , 200 ) ;
ast_truncstream ( fs ) ;
ast_truncstream ( fs ) ;
sample_offset = ast_tellstream ( fs ) ;
sample_offset = ast_tellstream ( fs ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (dtmf) endpos=%ld \n " , f - > subclass , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (dtmf) endpos=%ld \n " , f - > subclass , sample_offset ) ;
ast_closestream ( fs ) ;
ast_closestream ( fs ) ;
ast_frfree ( f ) ;
ast_frfree ( f ) ;
if ( sildet )
if ( sildet )
@ -1386,7 +1386,7 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, char
ast_truncstream ( fs ) ;
ast_truncstream ( fs ) ;
sample_offset = ast_tellstream ( fs ) ;
sample_offset = ast_tellstream ( fs ) ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d (timeout) endpos=%ld \n " , res , sample_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d (timeout) endpos=%ld \n " , res , sample_offset ) ;
ast_closestream ( fs ) ;
ast_closestream ( fs ) ;
}
}
@ -1416,7 +1416,7 @@ static int handle_autohangup(struct ast_channel *chan, AGI *agi, int argc, char
whentohangup . tv_usec = ( timeout - whentohangup . tv_sec ) * 1000000.0 ;
whentohangup . tv_usec = ( timeout - whentohangup . tv_sec ) * 1000000.0 ;
}
}
ast_channel_setwhentohangup_tv ( chan , whentohangup ) ;
ast_channel_setwhentohangup_tv ( chan , whentohangup ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1427,7 +1427,7 @@ static int handle_hangup(struct ast_channel *chan, AGI *agi, int argc, char **ar
if ( argc = = 1 ) {
if ( argc = = 1 ) {
/* no argument: hangup the current channel */
/* no argument: hangup the current channel */
ast_softhangup ( chan , AST_SOFTHANGUP_EXPLICIT ) ;
ast_softhangup ( chan , AST_SOFTHANGUP_EXPLICIT ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
} else if ( argc = = 2 ) {
} else if ( argc = = 2 ) {
/* one argument: look for info on the specified channel */
/* one argument: look for info on the specified channel */
@ -1435,12 +1435,12 @@ static int handle_hangup(struct ast_channel *chan, AGI *agi, int argc, char **ar
if ( c ) {
if ( c ) {
/* we have a matching channel */
/* we have a matching channel */
ast_softhangup ( c , AST_SOFTHANGUP_EXPLICIT ) ;
ast_softhangup ( c , AST_SOFTHANGUP_EXPLICIT ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
ast_channel_unlock ( c ) ;
ast_channel_unlock ( c ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
/* if we get this far no channel name matched the argument given */
/* if we get this far no channel name matched the argument given */
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=-1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=-1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
} else {
} else {
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
@ -1482,7 +1482,7 @@ static int handle_exec(struct ast_channel *chan, AGI *agi, int argc, char **argv
ast_log ( LOG_WARNING , " Could not find application (%s) \n " , argv [ 1 ] ) ;
ast_log ( LOG_WARNING , " Could not find application (%s) \n " , argv [ 1 ] ) ;
res = - 2 ;
res = - 2 ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , res ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , res ) ;
/* Even though this is wrong, users are depending upon this result. */
/* Even though this is wrong, users are depending upon this result. */
return res ;
return res ;
@ -1505,7 +1505,7 @@ static int handle_setcallerid(struct ast_channel *chan, AGI *agi, int argc, char
ast_set_callerid ( chan , l , n , NULL ) ;
ast_set_callerid ( chan , l , n , NULL ) ;
}
}
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1514,18 +1514,18 @@ static int handle_channelstatus(struct ast_channel *chan, AGI *agi, int argc, ch
struct ast_channel * c ;
struct ast_channel * c ;
if ( argc = = 2 ) {
if ( argc = = 2 ) {
/* no argument: supply info on the current channel */
/* no argument: supply info on the current channel */
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , chan - > _state ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , chan - > _state ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
} else if ( argc = = 3 ) {
} else if ( argc = = 3 ) {
/* one argument: look for info on the specified channel */
/* one argument: look for info on the specified channel */
c = ast_get_channel_by_name_locked ( argv [ 2 ] ) ;
c = ast_get_channel_by_name_locked ( argv [ 2 ] ) ;
if ( c ) {
if ( c ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%d \n " , c - > _state ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%d \n " , c - > _state ) ;
ast_channel_unlock ( c ) ;
ast_channel_unlock ( c ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
/* if we get this far no channel name matched the argument given */
/* if we get this far no channel name matched the argument given */
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=-1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=-1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
} else {
} else {
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
@ -1537,7 +1537,7 @@ static int handle_setvariable(struct ast_channel *chan, AGI *agi, int argc, char
if ( argv [ 3 ] )
if ( argv [ 3 ] )
pbx_builtin_setvar_helper ( chan , argv [ 2 ] , argv [ 3 ] ) ;
pbx_builtin_setvar_helper ( chan , argv [ 2 ] , argv [ 3 ] ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1557,9 +1557,9 @@ static int handle_getvariable(struct ast_channel *chan, AGI *agi, int argc, char
}
}
if ( ret )
if ( ret )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (%s) \n " , ret ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (%s) \n " , ret ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1578,9 +1578,9 @@ static int handle_getvariablefull(struct ast_channel *chan, AGI *agi, int argc,
}
}
if ( chan2 ) {
if ( chan2 ) {
pbx_substitute_variables_helper ( chan2 , argv [ 3 ] , tmp , sizeof ( tmp ) - 1 ) ;
pbx_substitute_variables_helper ( chan2 , argv [ 3 ] , tmp , sizeof ( tmp ) - 1 ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (%s) \n " , tmp ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (%s) \n " , tmp ) ;
} else {
} else {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
}
}
if ( chan2 & & ( chan2 ! = chan ) )
if ( chan2 & & ( chan2 ! = chan ) )
ast_channel_unlock ( chan2 ) ;
ast_channel_unlock ( chan2 ) ;
@ -1599,7 +1599,7 @@ static int handle_verbose(struct ast_channel *chan, AGI *agi, int argc, char **a
ast_verb ( level , " %s: %s \n " , chan - > data , argv [ 1 ] ) ;
ast_verb ( level , " %s: %s \n " , chan - > data , argv [ 1 ] ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1613,9 +1613,9 @@ static int handle_dbget(struct ast_channel *chan, AGI *agi, int argc, char **arg
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
res = ast_db_get ( argv [ 2 ] , argv [ 3 ] , tmp , sizeof ( tmp ) ) ;
res = ast_db_get ( argv [ 2 ] , argv [ 3 ] , tmp , sizeof ( tmp ) ) ;
if ( res )
if ( res )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (%s) \n " , tmp ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (%s) \n " , tmp ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1627,7 +1627,7 @@ static int handle_dbput(struct ast_channel *chan, AGI *agi, int argc, char **arg
if ( argc ! = 5 )
if ( argc ! = 5 )
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
res = ast_db_put ( argv [ 2 ] , argv [ 3 ] , argv [ 4 ] ) ;
res = ast_db_put ( argv [ 2 ] , argv [ 3 ] , argv [ 4 ] ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%c \n " , res ? ' 0 ' : ' 1 ' ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%c \n " , res ? ' 0 ' : ' 1 ' ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1638,7 +1638,7 @@ static int handle_dbdel(struct ast_channel *chan, AGI *agi, int argc, char **arg
if ( argc ! = 4 )
if ( argc ! = 4 )
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
res = ast_db_del ( argv [ 2 ] , argv [ 3 ] ) ;
res = ast_db_del ( argv [ 2 ] , argv [ 3 ] ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%c \n " , res ? ' 0 ' : ' 1 ' ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%c \n " , res ? ' 0 ' : ' 1 ' ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1653,7 +1653,7 @@ static int handle_dbdeltree(struct ast_channel *chan, AGI *agi, int argc, char *
else
else
res = ast_db_deltree ( argv [ 2 ] , NULL ) ;
res = ast_db_deltree ( argv [ 2 ] , NULL ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=%c \n " , res ? ' 0 ' : ' 1 ' ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=%c \n " , res ? ' 0 ' : ' 1 ' ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1688,7 +1688,7 @@ static char *handle_cli_agi_debug(struct ast_cli_entry *e, int cmd, struct ast_c
static int handle_noop ( struct ast_channel * chan , AGI * agi , int arg , char * argv [ ] )
static int handle_noop ( struct ast_channel * chan , AGI * agi , int arg , char * argv [ ] )
{
{
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1698,7 +1698,7 @@ static int handle_setmusic(struct ast_channel *chan, AGI *agi, int argc, char *a
ast_moh_start ( chan , argc > 3 ? argv [ 3 ] : NULL , NULL ) ;
ast_moh_start ( chan , argc > 3 ? argv [ 3 ] : NULL , NULL ) ;
else if ( ! strncasecmp ( argv [ 2 ] , " off " , 3 ) )
else if ( ! strncasecmp ( argv [ 2 ] , " off " , 3 ) )
ast_moh_stop ( chan ) ;
ast_moh_stop ( chan ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1706,14 +1706,14 @@ static int handle_speechcreate(struct ast_channel *chan, AGI *agi, int argc, cha
{
{
/* If a structure already exists, return an error */
/* If a structure already exists, return an error */
if ( agi - > speech ) {
if ( agi - > speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
if ( ( agi - > speech = ast_speech_new ( argv [ 2 ] , AST_FORMAT_SLINEAR ) ) )
if ( ( agi - > speech = ast_speech_new ( argv [ 2 ] , AST_FORMAT_SLINEAR ) ) )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1726,12 +1726,12 @@ static int handle_speechset(struct ast_channel *chan, AGI *agi, int argc, char *
/* Check to make sure speech structure exists */
/* Check to make sure speech structure exists */
if ( ! agi - > speech ) {
if ( ! agi - > speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
ast_speech_change ( agi - > speech , argv [ 2 ] , argv [ 3 ] ) ;
ast_speech_change ( agi - > speech , argv [ 2 ] , argv [ 3 ] ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1741,9 +1741,9 @@ static int handle_speechdestroy(struct ast_channel *chan, AGI *agi, int argc, ch
if ( agi - > speech ) {
if ( agi - > speech ) {
ast_speech_destroy ( agi - > speech ) ;
ast_speech_destroy ( agi - > speech ) ;
agi - > speech = NULL ;
agi - > speech = NULL ;
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
} else {
} else {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
}
}
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
@ -1755,14 +1755,14 @@ static int handle_speechloadgrammar(struct ast_channel *chan, AGI *agi, int argc
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
if ( ! agi - > speech ) {
if ( ! agi - > speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
if ( ast_speech_grammar_load ( agi - > speech , argv [ 3 ] , argv [ 4 ] ) )
if ( ast_speech_grammar_load ( agi - > speech , argv [ 3 ] , argv [ 4 ] ) )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1773,14 +1773,14 @@ static int handle_speechunloadgrammar(struct ast_channel *chan, AGI *agi, int ar
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
if ( ! agi - > speech ) {
if ( ! agi - > speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
if ( ast_speech_grammar_unload ( agi - > speech , argv [ 3 ] ) )
if ( ast_speech_grammar_unload ( agi - > speech , argv [ 3 ] ) )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1791,14 +1791,14 @@ static int handle_speechactivategrammar(struct ast_channel *chan, AGI *agi, int
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
if ( ! agi - > speech ) {
if ( ! agi - > speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
if ( ast_speech_grammar_activate ( agi - > speech , argv [ 3 ] ) )
if ( ast_speech_grammar_activate ( agi - > speech , argv [ 3 ] ) )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1809,14 +1809,14 @@ static int handle_speechdeactivategrammar(struct ast_channel *chan, AGI *agi, in
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
if ( ! agi - > speech ) {
if ( ! agi - > speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
if ( ast_speech_grammar_deactivate ( agi - > speech , argv [ 3 ] ) )
if ( ast_speech_grammar_deactivate ( agi - > speech , argv [ 3 ] ) )
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
else
else
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1856,7 +1856,7 @@ static int handle_speechrecognize(struct ast_channel *chan, AGI *agi, int argc,
return RESULT_SHOWUSAGE ;
return RESULT_SHOWUSAGE ;
if ( ! speech ) {
if ( ! speech ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1870,7 +1870,7 @@ static int handle_speechrecognize(struct ast_channel *chan, AGI *agi, int argc,
/* We want frames coming in signed linear */
/* We want frames coming in signed linear */
old_read_format = chan - > readformat ;
old_read_format = chan - > readformat ;
if ( ast_set_read_format ( chan , AST_FORMAT_SLINEAR ) ) {
if ( ast_set_read_format ( chan , AST_FORMAT_SLINEAR ) ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
}
}
@ -1975,13 +1975,13 @@ static int handle_speechrecognize(struct ast_channel *chan, AGI *agi, int argc,
i + + ;
i + + ;
}
}
/* Print out */
/* Print out */
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (speech) endpos=%ld results=%d %s \n " , current_offset , i , tmp ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (speech) endpos=%ld results=%d %s \n " , current_offset , i , tmp ) ;
} else if ( ! strcasecmp ( reason , " dtmf " ) ) {
} else if ( ! strcasecmp ( reason , " dtmf " ) ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (digit) digit=%c endpos=%ld \n " , dtmf , current_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (digit) digit=%c endpos=%ld \n " , dtmf , current_offset ) ;
} else if ( ! strcasecmp ( reason , " hangup " ) | | ! strcasecmp ( reason , " timeout " ) ) {
} else if ( ! strcasecmp ( reason , " hangup " ) | | ! strcasecmp ( reason , " timeout " ) ) {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=1 (%s) endpos=%ld \n " , reason , current_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=1 (%s) endpos=%ld \n " , reason , current_offset ) ;
} else {
} else {
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 endpos=%ld \n " , current_offset ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 endpos=%ld \n " , current_offset ) ;
}
}
return RESULT_SUCCESS ;
return RESULT_SUCCESS ;
@ -1989,7 +1989,7 @@ static int handle_speechrecognize(struct ast_channel *chan, AGI *agi, int argc,
static int handle_asyncagi_break ( struct ast_channel * chan , AGI * agi , int argc , char * argv [ ] )
static int handle_asyncagi_break ( struct ast_channel * chan , AGI * agi , int argc , char * argv [ ] )
{
{
ast_agi_ fdprintf( chan , agi - > fd , " 200 result=0 \n " ) ;
ast_agi_ send( agi - > fd , chan , " 200 result=0 \n " ) ;
return AST_PBX_KEEPALIVE ;
return AST_PBX_KEEPALIVE ;
}
}
@ -2404,21 +2404,50 @@ int ast_agi_unregister(struct ast_module *mod, agi_command *cmd)
return unregistered ;
return unregistered ;
}
}
void ast_agi_register_multiple ( struct ast_module * mod , agi_command * cmd , int len )
int ast_agi_register_multiple ( struct ast_module * mod , struct agi_command * cmd , unsigned int len )
{
{
int i ;
unsigned int i , x = 0 ;
for ( i = 0 ; i < len ; i + + )
for ( i = 0 ; i < len ; i + + ) {
ast_agi_register ( mod , cmd + i ) ;
if ( ast_agi_register ( mod , cmd + i ) = = 1 ) {
x + + ;
continue ;
}
/* registration failed, unregister everything
that had been registered up to that point
*/
for ( ; x > 0 ; x - - ) {
/* we are intentionally ignoring the
result of ast_agi_unregister ( ) here ,
but it should be safe to do so since
we just registered these commands and
the only possible way for unregistration
to fail is if the command is not
registered
*/
( void ) ast_agi_unregister ( mod , cmd + x - 1 ) ;
}
return - 1 ;
}
return 0 ;
}
}
void ast_agi_unregister_multiple ( struct ast_module * mod , agi_command * cmd , int len )
int ast_agi_unregister_multiple ( struct ast_module * mod , struct agi_command * cmd , unsigned int len )
{
{
int i ;
unsigned int i ;
int res = 0 ;
for ( i = 0 ; i < len ; i + + ) {
/* remember whether any of the unregistration
attempts failed . . . there is no recourse if
any of them do
*/
res | = ast_agi_unregister ( mod , cmd + i ) ;
}
for ( i = 0 ; i < len ; i + + )
return res ;
ast_agi_unregister ( mod , cmd + i ) ;
}
}
static agi_command * find_command ( char * cmds [ ] , int exact )
static agi_command * find_command ( char * cmds [ ] , int exact )
@ -2560,9 +2589,9 @@ static int agi_handle_command(struct ast_channel *chan, AGI *agi, char *buf, int
" Result: %s \r \n " , chan - > name , command_id , ami_cmd , resultcode , ami_res ) ;
" Result: %s \r \n " , chan - > name , command_id , ami_cmd , resultcode , ami_res ) ;
switch ( res ) {
switch ( res ) {
case RESULT_SHOWUSAGE :
case RESULT_SHOWUSAGE :
ast_agi_ fdprintf( chan , agi - > fd , " 520-Invalid command syntax. Proper usage follows: \n " ) ;
ast_agi_ send( agi - > fd , chan , " 520-Invalid command syntax. Proper usage follows: \n " ) ;
ast_agi_ fdprintf( chan , agi - > fd , c - > usage ) ;
ast_agi_ send( agi - > fd , NULL , " %s " , c - > usage ) ;
ast_agi_ fdprintf( chan , agi - > fd , " 520 End of proper usage. \n " ) ;
ast_agi_ send( agi - > fd , chan , " 520 End of proper usage. \n " ) ;
break ;
break ;
case AST_PBX_KEEPALIVE :
case AST_PBX_KEEPALIVE :
/* We've been asked to keep alive, so do so */
/* We've been asked to keep alive, so do so */
@ -2574,7 +2603,7 @@ static int agi_handle_command(struct ast_channel *chan, AGI *agi, char *buf, int
return - 1 ;
return - 1 ;
}
}
} else if ( ( c = find_command ( argv , 0 ) ) ) {
} else if ( ( c = find_command ( argv , 0 ) ) ) {
ast_agi_ fdprintf( chan , agi - > fd , " 511 Command Not Permitted on a dead channel \n " ) ;
ast_agi_ send( agi - > fd , chan , " 511 Command Not Permitted on a dead channel \n " ) ;
manager_event ( EVENT_FLAG_CALL , " AGIExec " ,
manager_event ( EVENT_FLAG_CALL , " AGIExec " ,
" SubEvent: End \r \n "
" SubEvent: End \r \n "
" Channel: %s \r \n "
" Channel: %s \r \n "
@ -2583,7 +2612,7 @@ static int agi_handle_command(struct ast_channel *chan, AGI *agi, char *buf, int
" ResultCode: 511 \r \n "
" ResultCode: 511 \r \n "
" Result: Command not permitted on a dead channel \r \n " , chan - > name , command_id , ami_cmd ) ;
" Result: Command not permitted on a dead channel \r \n " , chan - > name , command_id , ami_cmd ) ;
} else {
} else {
ast_agi_ fdprintf( chan , agi - > fd , " 510 Invalid or unknown command \n " ) ;
ast_agi_ send( agi - > fd , chan , " 510 Invalid or unknown command \n " ) ;
manager_event ( EVENT_FLAG_CALL , " AGIExec " ,
manager_event ( EVENT_FLAG_CALL , " AGIExec " ,
" SubEvent: End \r \n "
" SubEvent: End \r \n "
" Channel: %s \r \n "
" Channel: %s \r \n "
@ -3004,7 +3033,10 @@ static struct ast_cli_entry cli_agi[] = {
static int unload_module ( void )
static int unload_module ( void )
{
{
ast_cli_unregister_multiple ( cli_agi , sizeof ( cli_agi ) / sizeof ( struct ast_cli_entry ) ) ;
ast_cli_unregister_multiple ( cli_agi , sizeof ( cli_agi ) / sizeof ( struct ast_cli_entry ) ) ;
ast_agi_unregister_multiple ( ast_module_info - > self , commands , sizeof ( commands ) / sizeof ( struct agi_command ) ) ;
/* we can safely ignore the result of ast_agi_unregister_multiple() here, since it cannot fail, as
we know that these commands were registered by this module and are still registered
*/
( void ) ast_agi_unregister_multiple ( ast_module_info - > self , commands , ARRAY_LEN ( commands ) ) ;
ast_unregister_application ( eapp ) ;
ast_unregister_application ( eapp ) ;
ast_unregister_application ( deadapp ) ;
ast_unregister_application ( deadapp ) ;
ast_manager_unregister ( " AGI " ) ;
ast_manager_unregister ( " AGI " ) ;
@ -3014,7 +3046,10 @@ static int unload_module(void)
static int load_module ( void )
static int load_module ( void )
{
{
ast_cli_register_multiple ( cli_agi , sizeof ( cli_agi ) / sizeof ( struct ast_cli_entry ) ) ;
ast_cli_register_multiple ( cli_agi , sizeof ( cli_agi ) / sizeof ( struct ast_cli_entry ) ) ;
ast_agi_register_multiple ( ast_module_info - > self , commands , sizeof ( commands ) / sizeof ( struct agi_command ) ) ;
/* we can safely ignore the result of ast_agi_register_multiple() here, since it cannot fail, as
no other commands have been registered yet
*/
( void ) ast_agi_register_multiple ( ast_module_info - > self , commands , ARRAY_LEN ( commands ) ) ;
ast_register_application ( deadapp , deadagi_exec , deadsynopsis , descrip ) ;
ast_register_application ( deadapp , deadagi_exec , deadsynopsis , descrip ) ;
ast_register_application ( eapp , eagi_exec , esynopsis , descrip ) ;
ast_register_application ( eapp , eagi_exec , esynopsis , descrip ) ;
ast_manager_register2 ( " AGI " , EVENT_FLAG_CALL , action_add_agi_cmd , " Add an AGI command to execute by Async AGI " , mandescr_asyncagi ) ;
ast_manager_register2 ( " AGI " , EVENT_FLAG_CALL , action_add_agi_cmd , " Add an AGI command to execute by Async AGI " , mandescr_asyncagi ) ;