@ -905,7 +905,7 @@ static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu, int box);
static int advanced_options ( struct ast_channel * chan , struct ast_vm_user * vmu , struct vm_state * vms , int msg , int option , signed char record_gain ) ;
static int dialout ( struct ast_channel * chan , struct ast_vm_user * vmu , char * num , char * outgoing_context ) ;
static int play_record_review ( struct ast_channel * chan , char * playfile , char * recordfile , int maxtime ,
char * fmt , int outsidecaller , struct ast_vm_user * vmu , int * duration , const char * unlockdir ,
char * fmt , int outsidecaller , struct ast_vm_user * vmu , int * duration , int * sound_duration , const char * unlockdir ,
signed char record_gain , struct vm_state * vms , char * flag ) ;
static int vm_tempgreeting ( struct ast_channel * chan , struct ast_vm_user * vmu , struct vm_state * vms , char * fmtc , signed char record_gain ) ;
static int vm_play_folder_name ( struct ast_channel * chan , char * mbox ) ;
@ -5577,6 +5577,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
int res = 0 ;
int msgnum ;
int duration = 0 ;
int sound_duration = 0 ;
int ausemacro = 0 ;
int ousemacro = 0 ;
int ouseexten = 0 ;
@ -5964,13 +5965,13 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
res = ast_streamfile ( chan , " vm-mailboxfull " , chan - > language ) ;
goto leave_vm_out ;
}
res = play_record_review ( chan , NULL , tmptxtfile , vmu - > maxsecs , fmt , 1 , vmu , & duration , NULL , options - > record_gain , vms , flag ) ;
res = play_record_review ( chan , NULL , tmptxtfile , vmu - > maxsecs , fmt , 1 , vmu , & duration , & sound_duration , NULL , options - > record_gain , vms , flag ) ;
if ( txt ) {
fprintf ( txt , " flag=%s \n " , flag ) ;
if ( duration < vmu - > minsecs ) {
if ( sound_ duration < vmu - > minsecs ) {
fclose ( txt ) ;
ast_verb ( 3 , " Recording was %d seconds long but needs to be at least %d - abandoning \n " , duration, vmu - > minsecs ) ;
ast_verb ( 3 , " Recording was %d seconds long but needs to be at least %d - abandoning \n " , sound_ duration, vmu - > minsecs ) ;
ast_filedelete ( tmptxtfile , NULL ) ;
unlink ( tmptxtfile ) ;
if ( ast_check_realtime ( " voicemail_data " ) ) {
@ -6092,7 +6093,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
} else if ( res > 0 & & res ! = ' t ' )
res = 0 ;
if ( duration < vmu - > minsecs )
if ( sound_ duration < vmu - > minsecs )
/* XXX We should really give a prompt too short/option start again, with leave_vm_out called only after a timeout XXX */
pbx_builtin_setvar_helper ( chan , " VMSTATUS " , " FAILED " ) ;
else
@ -6870,7 +6871,7 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu,
strncat ( vms - > introfn , " intro " , sizeof ( vms - > introfn ) ) ;
res = ast_play_and_wait ( chan , INTRO ) ;
res = ast_play_and_wait ( chan , " beep " ) ;
res = play_record_review ( chan , NULL , vms - > introfn , vmu - > maxsecs , vm_fmts , 1 , vmu , ( int * ) duration , NULL , record_gain , vms , flag ) ;
res = play_record_review ( chan , NULL , vms - > introfn , vmu - > maxsecs , vm_fmts , 1 , vmu , ( int * ) duration , NULL , NULL , record_gain , vms , flag ) ;
cmd = ' t ' ;
# else
@ -6903,7 +6904,7 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu,
if ( record_gain )
ast_channel_setoption ( chan , AST_OPTION_RXGAIN , & record_gain , sizeof ( record_gain ) , 0 ) ;
cmd = ast_play_and_prepend ( chan , NULL , msgfile , 0 , vm_fmts , & prepend_duration , 1 , silencethreshold , maxsilence ) ;
cmd = ast_play_and_prepend ( chan , NULL , msgfile , 0 , vm_fmts , & prepend_duration , NULL , 1 , silencethreshold , maxsilence ) ;
if ( cmd = = ' S ' ) { /* If we timed out, tell the user it didn't work properly and clean up the files */
ast_stream_and_wait ( chan , vm_pls_try_again , " " ) ; /* this might be removed if a proper vm_prepend_timeout is ever recorded */
@ -9237,7 +9238,7 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
if ( ast_test_flag ( vmu , VM_FORCENAME ) ) {
snprintf ( prefile , sizeof ( prefile ) , " %s%s/%s/greet " , VM_SPOOL_DIR , vmu - > context , vms - > username ) ;
if ( ast_fileexists ( prefile , NULL , NULL ) < 1 ) {
cmd = play_record_review ( chan , " vm-rec-name " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-name " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
if ( cmd < 0 | | cmd = = ' t ' | | cmd = = ' # ' )
return cmd ;
}
@ -9247,14 +9248,14 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
if ( ast_test_flag ( vmu , VM_FORCEGREET ) ) {
snprintf ( prefile , sizeof ( prefile ) , " %s%s/%s/unavail " , VM_SPOOL_DIR , vmu - > context , vms - > username ) ;
if ( ast_fileexists ( prefile , NULL , NULL ) < 1 ) {
cmd = play_record_review ( chan , " vm-rec-unv " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-unv " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
if ( cmd < 0 | | cmd = = ' t ' | | cmd = = ' # ' )
return cmd ;
}
snprintf ( prefile , sizeof ( prefile ) , " %s%s/%s/busy " , VM_SPOOL_DIR , vmu - > context , vms - > username ) ;
if ( ast_fileexists ( prefile , NULL , NULL ) < 1 ) {
cmd = play_record_review ( chan , " vm-rec-busy " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-busy " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
if ( cmd < 0 | | cmd = = ' t ' | | cmd = = ' # ' )
return cmd ;
}
@ -9289,15 +9290,15 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
switch ( cmd ) {
case ' 1 ' : /* Record your unavailable message */
snprintf ( prefile , sizeof ( prefile ) , " %s%s/%s/unavail " , VM_SPOOL_DIR , vmu - > context , vms - > username ) ;
cmd = play_record_review ( chan , " vm-rec-unv " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-unv " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
break ;
case ' 2 ' : /* Record your busy message */
snprintf ( prefile , sizeof ( prefile ) , " %s%s/%s/busy " , VM_SPOOL_DIR , vmu - > context , vms - > username ) ;
cmd = play_record_review ( chan , " vm-rec-busy " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-busy " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
break ;
case ' 3 ' : /* Record greeting */
snprintf ( prefile , sizeof ( prefile ) , " %s%s/%s/greet " , VM_SPOOL_DIR , vmu - > context , vms - > username ) ;
cmd = play_record_review ( chan , " vm-rec-name " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-name " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
break ;
case ' 4 ' : /* manage the temporary greeting */
cmd = vm_tempgreeting ( chan , vmu , vms , fmtc , record_gain ) ;
@ -9431,12 +9432,12 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st
retries = 0 ;
RETRIEVE ( prefile , - 1 , vmu - > mailbox , vmu - > context ) ;
if ( ast_fileexists ( prefile , NULL , NULL ) < = 0 ) {
play_record_review ( chan , " vm-rec-temp " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
play_record_review ( chan , " vm-rec-temp " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
cmd = ' t ' ;
} else {
switch ( cmd ) {
case ' 1 ' :
cmd = play_record_review ( chan , " vm-rec-temp " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , record_gain , vms , NULL ) ;
cmd = play_record_review ( chan , " vm-rec-temp " , prefile , maxgreet , fmtc , 0 , vmu , & duration , NULL , NULL , record_gain , vms , NULL ) ;
break ;
case ' 2 ' :
DELETE ( prefile , - 1 , prefile , vmu ) ;
@ -13252,7 +13253,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
}
static int play_record_review ( struct ast_channel * chan , char * playfile , char * recordfile , int maxtime , char * fmt ,
int outsidecaller , struct ast_vm_user * vmu , int * duration , const char * unlockdir ,
int outsidecaller , struct ast_vm_user * vmu , int * duration , int * sound_duration , const char * unlockdir ,
signed char record_gain , struct vm_state * vms , char * flag )
{
/* Record message & let caller review or re-record it, or set options if applicable */
@ -13327,7 +13328,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
ast_channel_setoption ( chan , AST_OPTION_RXGAIN , & record_gain , sizeof ( record_gain ) , 0 ) ;
if ( ast_test_flag ( vmu , VM_OPERATOR ) )
canceldtmf = " 0 " ;
cmd = ast_play_and_record_full ( chan , playfile , tempfile , maxtime , fmt , duration , s ilencethreshold, maxsilence , unlockdir , acceptdtmf , canceldtmf ) ;
cmd = ast_play_and_record_full ( chan , playfile , tempfile , maxtime , fmt , duration , s ound_duration, s ilencethreshold, maxsilence , unlockdir , acceptdtmf , canceldtmf ) ;
if ( strchr ( canceldtmf , cmd ) ) {
/* need this flag here to distinguish between pressing '0' during message recording or after */
canceleddtmf = 1 ;
@ -13347,13 +13348,13 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
} else if ( cmd = = ' * ' ) {
break ;
#if 0
} else if ( vmu - > review & & ( * duration < 5 ) ) {
} else if ( vmu - > review & & sound_duration & & ( * sound_ duration < 5 ) ) {
/* Message is too short */
ast_verb ( 3 , " Message too short \n " ) ;
cmd = ast_play_and_wait ( chan , " vm-tooshort " ) ;
cmd = ast_filedelete ( tempfile , NULL ) ;
break ;
} else if ( vmu - > review & & ( cmd = = 2 & & * duration < ( maxsilence + 3 ) ) ) {
} else if ( vmu - > review & & ( cmd = = 2 & & sound_duration & & * sound_ duration < ( maxsilence + 3 ) ) ) {
/* Message is all silence */
ast_verb ( 3 , " Nothing recorded \n " ) ;
cmd = ast_filedelete ( tempfile , NULL ) ;