@ -103,8 +103,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
# define eol "\r\n"
# define MAX_DATETIME_FORMAT 512
# define MAX_NUM_CID_CONTEXTS 10
# define MSGNUM_LENGTH 80
# define MAX_NUM_CID_CONTEXTS 10
# define VM_REVIEW (1 << 0)
# define VM_OPERATOR (1 << 1)
@ -252,12 +251,12 @@ struct vm_zone {
} ;
struct vm_state {
char curbox [ 80 ] ; /*!< Current mailbox */
char username [ 80 ] ; /*!< User name */
char curdir [ AST_MAX_FILENAME_LEN ] ; /*!< Current directory */
char vmbox [ 256 ] ; /*!< Voicemail box */
char fn [ AST_MAX_FILENAME_LEN ] ;
char fn2 [ AST_MAX_FILENAME_LEN ] ;
char curbox [ 80 ] ;
char username [ 80 ] ;
char curdir [ 256 ] ;
char vmbox [ 256 ] ;
char fn [ 256 ] ;
char fn2 [ 256 ] ;
int * deleted ;
int * heard ;
int curmsg ;
@ -300,7 +299,7 @@ static char odbc_table[80];
static char VM_SPOOL_DIR [ AST_CONFIG_MAX_PATH ] ;
static char ext_pass_cmd [ AST_MAX_SHELL_COMMAND ] ;
static char ext_pass_cmd [ 128 ] ;
static char * tdesc = " Comedian Mail (Voicemail System) " ;
@ -394,8 +393,8 @@ static int maxsilence;
static int maxmsg ;
static int silencethreshold = 128 ;
static char serveremail [ 80 ] ;
static char mailcmd [ AST_MAX_SHELL_COMMAND ] ; /* Configurable mail cmd */
static char externnotify [ AST_MAX_SHELL_COMMAND ] ;
static char mailcmd [ 160 ] ; /* Configurable mail cmd */
static char externnotify [ 160 ] ;
# ifdef WITH_SMDI
static struct ast_smdi_interface * smdi_iface = NULL ;
# endif
@ -764,8 +763,8 @@ static void vm_change_password(struct ast_vm_user *vmu, const char *newpassword)
static void vm_change_password_shell ( struct ast_vm_user * vmu , char * newpassword )
{
char buf [ AST_MAX_SHELL_COMMAND ] ;
snprintf ( buf , sizeof ( buf ) , " %s %s %s %s " , ext_pass_cmd , vmu - > context , vmu - > mailbox , newpassword ) ;
char buf [ 255 ] ;
snprintf ( buf , 255 , " %s %s %s %s " , ext_pass_cmd , vmu - > context , vmu - > mailbox , newpassword ) ;
if ( ! ast_safe_system ( buf ) )
ast_copy_string ( vmu - > password , newpassword , sizeof ( vmu - > password ) ) ;
}
@ -850,9 +849,9 @@ static int retrieve_file(char *dir, int msgnum)
SQLULEN colsize ;
FILE * f = NULL ;
char rowdata [ 80 ] ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char full_fn [ AST_MAX_FILENAME_LEN ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char fn [ 256 ] ;
char full_fn [ 256 ] ;
char msgnums [ 80 ] ;
odbc_obj * obj ;
obj = fetch_odbc_obj ( odbc_database , 0 ) ;
@ -974,9 +973,9 @@ yuck:
static int remove_file ( char * dir , int msgnum )
{
char fn [ AST_MAX_FILENAME_LEN ] ;
char full_fn [ AST_MAX_FILENAME_LEN ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char fn [ 256 ] ;
char full_fn [ 256 ] ;
char msgnums [ 80 ] ;
if ( msgnum > - 1 ) {
snprintf ( msgnums , sizeof ( msgnums ) , " %d " , msgnum ) ;
@ -1047,7 +1046,7 @@ static int message_exists(char *dir, int msgnum)
SQLHSTMT stmt ;
char sql [ 256 ] ;
char rowdata [ 20 ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char msgnums [ 20 ] ;
odbc_obj * obj ;
obj = fetch_odbc_obj ( odbc_database , 0 ) ;
@ -1104,7 +1103,7 @@ static void delete_file(char *sdir, int smsg)
int res ;
SQLHSTMT stmt ;
char sql [ 256 ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char msgnums [ 20 ] ;
odbc_obj * obj ;
obj = fetch_odbc_obj ( odbc_database , 0 ) ;
@ -1142,8 +1141,8 @@ static void copy_file(char *sdir, int smsg, char *ddir, int dmsg, char *dmailbox
int res ;
SQLHSTMT stmt ;
char sql [ 512 ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char msgnumd [ MSGNUM_LENGTH ] ;
char msgnums [ 20 ] ;
char msgnumd [ 20 ] ;
odbc_obj * obj ;
delete_file ( ddir , dmsg ) ;
@ -1201,9 +1200,9 @@ static int store_file(char *dir, char *mailboxuser, char *mailboxcontext, int ms
SQLHSTMT stmt ;
SQLINTEGER len ;
char sql [ 256 ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char full_fn [ AST_MAX_FILENAME_LEN ] ;
char msgnums [ 20 ] ;
char fn [ 256 ] ;
char full_fn [ 256 ] ;
char fmt [ 80 ] = " " ;
char * c ;
char * context = " " , * macrocontext = " " , * callerid = " " , * origtime = " " , * duration = " " ;
@ -1320,8 +1319,8 @@ static void rename_file(char *sdir, int smsg, char *mailboxuser, char *mailboxco
int res ;
SQLHSTMT stmt ;
char sql [ 256 ] ;
char msgnums [ MSGNUM_LENGTH ] ;
char msgnumd [ MSGNUM_LENGTH ] ;
char msgnums [ 20 ] ;
char msgnumd [ 20 ] ;
odbc_obj * obj ;
delete_file ( ddir , dmsg ) ;
@ -1396,9 +1395,9 @@ static int count_messages(struct ast_vm_user *vmu, char *dir)
static void rename_file ( char * sfn , char * dfn )
{
char stxt [ AST_MAX_FILENAME_LEN ] ;
char dtxt [ AST_MAX_FILENAME_LEN ] ;
ast_filerename ( sfn , dfn , NULL ) ;
char stxt [ 256 ] ;
char dtxt [ 256 ] ;
ast_filerename ( sfn , dfn , NULL ) ;
snprintf ( stxt , sizeof ( stxt ) , " %s.txt " , sfn ) ;
snprintf ( dtxt , sizeof ( dtxt ) , " %s.txt " , dfn ) ;
rename ( stxt , dtxt ) ;
@ -1456,8 +1455,7 @@ static int copy(char *infile, char *outfile)
static void copy_file ( char * frompath , char * topath )
{
char frompath2 [ AST_MAX_FILENAME_LEN ] , topath2 [ AST_MAX_FILENAME_LEN ] ;
char frompath2 [ 256 ] , topath2 [ 256 ] ;
ast_filecopy ( frompath , topath , NULL ) ;
snprintf ( frompath2 , sizeof ( frompath2 ) , " %s.txt " , frompath ) ;
snprintf ( topath2 , sizeof ( topath2 ) , " %s.txt " , topath ) ;
@ -1470,7 +1468,7 @@ static void copy_file(char *frompath, char *topath)
static int last_message_index ( struct ast_vm_user * vmu , char * dir )
{
int x ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char fn [ 256 ] ;
if ( vm_lock_path ( dir ) )
return ERROR_LOCK_PATH ;
@ -1684,10 +1682,10 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
char host [ MAXHOSTNAMELEN ] = " " ;
char who [ 256 ] ;
char bound [ 256 ] ;
char fname [ AST_MAX_FILENAME_LEN ] ;
char fname [ 256 ] ;
char dur [ 256 ] ;
char tmp [ AST_MAX_FILENAME_LEN ] = " /tmp/astmail-XXXXXX " ;
char mailcommand[ AST_MAX_SHELL_COMMAND ] ;
char tmp [ 80 ] = " /tmp/astmail-XXXXXX " ;
char tmp2[ 256 ] ;
struct tm tm ;
if ( vmu & & ast_strlen_zero ( vmu - > email ) ) {
@ -1696,8 +1694,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
}
if ( ! strcmp ( format , " wav49 " ) )
format = " WAV " ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Attaching file '%s', format '%s', uservm is '%d', global is %d \n " , attach , format , attach_user_voicemail , ast_test_flag ( ( & globalflags ) , VM_ATTACH ) ) ;
ast_log ( LOG_DEBUG , " Attaching file '%s', format '%s', uservm is '%d', global is %d \n " , attach , format , attach_user_voicemail , ast_test_flag ( ( & globalflags ) , VM_ATTACH ) ) ;
/* Make a temporary file instead of piping directly to sendmail, in case the mail
command hangs */
p = vm_mkftemp ( tmp ) ;
@ -1804,10 +1801,9 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
fprintf ( p , " \n \n --%s-- \n . \n " , bound ) ;
}
fclose ( p ) ;
snprintf ( mailcommand , sizeof ( mailcommand ) , " ( %s < %s ; rm -f %s ) & " , mailcmd , tmp , tmp ) ;
ast_safe_system ( mailcommand ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Sent mail to %s with command '%s' \n " , vmu - > email , mailcmd ) ;
snprintf ( tmp2 , sizeof ( tmp2 ) , " ( %s < %s ; rm -f %s ) & " , mailcmd , tmp , tmp ) ;
ast_safe_system ( tmp2 ) ;
ast_log ( LOG_DEBUG , " Sent mail to %s with command '%s' \n " , vmu - > email , mailcmd ) ;
}
return 0 ;
}
@ -1818,8 +1814,8 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char
char host [ MAXHOSTNAMELEN ] = " " ;
char who [ 256 ] ;
char dur [ 256 ] ;
char tmp [ AST_MAX_FILENAME_LEN ] = " /tmp/astmail-XXXXXX " ;
char mailcommand[ AST_MAX_SHELL_COMMAND ] ;
char tmp [ 80 ] = " /tmp/astmail-XXXXXX " ;
char tmp2[ 256 ] ;
struct tm tm ;
FILE * p = vm_mkftemp ( tmp ) ;
@ -1854,7 +1850,7 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char
} else
fprintf ( p , " From: Asterisk PBX <%s> \n " , who ) ;
fprintf ( p , " To: %s \n " , pager ) ;
if ( pagersubject ) {
if ( pagersubject ) {
struct ast_channel * ast ;
if ( ( ast = ast_channel_alloc ( 0 ) ) ) {
char * passdata ;
@ -1888,10 +1884,9 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char
" from %s, on %s " , dur , mailbox , ( cidname ? cidname : ( cidnum ? cidnum : " unknown " ) ) , date ) ;
}
fclose ( p ) ;
snprintf ( mailcommand , sizeof ( mailcommand ) , " ( %s < %s ; rm -f %s ) & " , mailcmd , tmp , tmp ) ;
ast_safe_system ( mailcommand ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Sent page to %s with command '%s' \n " , pager , mailcmd ) ;
snprintf ( tmp2 , sizeof ( tmp2 ) , " ( %s < %s ; rm -f %s ) & " , mailcmd , tmp , tmp ) ;
ast_safe_system ( tmp2 ) ;
ast_log ( LOG_DEBUG , " Sent page to %s with command '%s' \n " , pager , mailcmd ) ;
}
return 0 ;
}
@ -1908,8 +1903,7 @@ static int get_date(char *s, int len)
static int invent_message ( struct ast_channel * chan , char * context , char * ext , int busy , char * ecodes )
{
int res ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char fn [ 256 ] ;
snprintf ( fn , sizeof ( fn ) , " %s%s/%s/greet " , VM_SPOOL_DIR , context , ext ) ;
RETRIEVE ( fn , - 1 ) ;
if ( ast_fileexists ( fn , NULL , NULL ) > 0 ) {
@ -2164,12 +2158,11 @@ static int has_voicemail(const char *mailbox, const char *folder)
{
DIR * dir ;
struct dirent * de ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char fn [ 256 ] ;
char tmp [ 256 ] = " " ;
char * mb , * cur ;
char * context ;
int ret ;
if ( ! folder )
folder = " INBOX " ;
/* If no mailbox, return immediately */
@ -2213,12 +2206,11 @@ static int messagecount(const char *mailbox, int *newmsgs, int *oldmsgs)
{
DIR * dir ;
struct dirent * de ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char fn [ 256 ] ;
char tmp [ 256 ] = " " ;
char * mb , * cur ;
char * context ;
int ret ;
if ( newmsgs )
* newmsgs = 0 ;
if ( oldmsgs )
@ -2287,7 +2279,7 @@ static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu,
static int copy_message ( struct ast_channel * chan , struct ast_vm_user * vmu , int imbox , int msgnum , long duration , struct ast_vm_user * recip , char * fmt )
{
char fromdir [ AST_MAX_FILENAME_LEN ] , todir [ AST_MAX_FILENAME_LEN ] , frompath [ AST_MAX_FILENAME_LEN ] , topath [ AST_MAX_FILENAME_LEN ] ;
char fromdir [ 256 ] , todir [ 256 ] , frompath [ 256 ] , topath [ 256 ] ;
char * frombox = mbox ( imbox ) ;
int recipmsgnum ;
@ -2321,8 +2313,8 @@ static int copy_message(struct ast_channel *chan, struct ast_vm_user *vmu, int i
static void run_externnotify ( char * context , char * extension )
{
char arguments [ AST_MAX_SHELL_COMMAND ] ;
char ext_context [ AST_MAX_EXTENSION ] = " " ;
char arguments [ 255 ] ;
char ext_context [ 256 ] = " " ;
int newvoicemails = 0 , oldvoicemails = 0 ;
# ifdef WITH_SMDI
struct ast_smdi_mwi_message * mwi_msg ;
@ -2359,8 +2351,7 @@ static void run_externnotify(char *context, char *extension)
ast_log ( LOG_ERROR , " Problem in calculating number of voicemail messages available for extension %s \n " , extension ) ;
} else {
snprintf ( arguments , sizeof ( arguments ) , " %s %s %s %d& " , externnotify , context , extension , newvoicemails ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Executing external notification: %s \n " , arguments ) ;
ast_log ( LOG_DEBUG , " Executing %s \n " , arguments ) ;
ast_safe_system ( arguments ) ;
}
}
@ -2373,7 +2364,7 @@ struct leave_vm_options {
static int leave_voicemail ( struct ast_channel * chan , char * ext , struct leave_vm_options * options )
{
char txtfile [ AST_MAX_FILENAME_LEN ] ;
char txtfile [ 256 ] ;
char callerid [ 256 ] ;
FILE * txt ;
int res = 0 ;
@ -2383,14 +2374,14 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
int ousemacro = 0 ;
char date [ 256 ] ;
char dir [ 256 ] ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char prefile [ AST_MAX_FILENAME_LEN ] = " " ;
char tempfile [ AST_MAX_FILENAME_LEN ] = " " ;
char ext_context [ AST_MAX_EXTENSION ] = " " ;
char fn [ 256 ] ;
char prefile [ 256 ] = " " ;
char tempfile [ 256 ] = " " ;
char ext_context [ 256 ] = " " ;
char fmt [ 80 ] ;
char * context ;
char ecodes [ 16 ] = " # " ;
char tmp [ AST_MAX_EXTENSION ] = " " , * tmpptr ;
char tmp [ 256 ] = " " , * tmpptr ;
struct ast_vm_user * vmu ;
struct ast_vm_user svm ;
const char * category = NULL ;
@ -2466,14 +2457,12 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
if ( ast_streamfile ( chan , prefile , chan - > language ) > - 1 )
res = ast_waitstream ( chan , ecodes ) ;
} else {
if ( option_debug )
ast_log ( LOG_DEBUG , " %s doesn't exist, doing what we can \n " , prefile ) ;
ast_log ( LOG_DEBUG , " %s doesn't exist, doing what we can \n " , prefile ) ;
res = invent_message ( chan , vmu - > context , ext , ast_test_flag ( options , OPT_BUSY_GREETING ) , ecodes ) ;
}
DISPOSE ( prefile , - 1 ) ;
if ( res < 0 ) {
if ( option_debug )
ast_log ( LOG_DEBUG , " Hang up during prefile playback \n " ) ;
ast_log ( LOG_DEBUG , " Hang up during prefile playback \n " ) ;
free_user ( vmu ) ;
pbx_builtin_setvar_helper ( chan , " VMSTATUS " , " FAILED " ) ;
return - 1 ;
@ -2665,8 +2654,8 @@ static int resequence_mailbox(struct ast_vm_user *vmu, char *dir)
/* we know max messages, so stop process when number is hit */
int x , dest ;
char sfn [ AST_MAX_FILENAME_LEN ] ;
char dfn [ AST_MAX_FILENAME_LEN ] ;
char sfn [ 256 ] ;
char dfn [ 256 ] ;
if ( vm_lock_path ( dir ) )
return ERROR_LOCK_PATH ;
@ -2698,12 +2687,11 @@ static int say_and_wait(struct ast_channel *chan, int num, const char *language)
static int save_to_folder ( struct ast_vm_user * vmu , char * dir , int msg , char * context , char * username , int box )
{
char sfn [ AST_MAX_FILENAME_LEN ] ;
char dfn [ AST_MAX_FILENAME_LEN ] ;
char ddir [ AST_MAX_FILENAME_LEN ] ;
char sfn [ 256 ] ;
char dfn [ 256 ] ;
char ddir [ 256 ] ;
char * dbox = mbox ( box ) ;
int x ;
make_file ( sfn , sizeof ( sfn ) , dir , msg ) ;
create_dirpath ( ddir , sizeof ( ddir ) , context , username , dbox ) ;
@ -2842,8 +2830,7 @@ static int adsi_load_vmail(struct ast_channel *chan, int *useadsi)
bytes + = adsi_voice_mode ( buf + bytes , 0 ) ;
adsi_transmit_message ( chan , buf , bytes , ADSI_MSG_DOWNLOAD ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Done downloading scripts... \n " ) ;
ast_log ( LOG_DEBUG , " Done downloading scripts... \n " ) ;
# ifdef DISPLAY
/* Add last dot */
@ -2851,8 +2838,7 @@ static int adsi_load_vmail(struct ast_channel *chan, int *useadsi)
bytes + = adsi_display ( buf + bytes , ADSI_COMM_PAGE , 4 , ADSI_JUST_CENT , 0 , " ...... " , " " ) ;
bytes + = adsi_set_line ( buf + bytes , ADSI_COMM_PAGE , 1 ) ;
# endif
if ( option_debug )
ast_log ( LOG_DEBUG , " Restarting session... \n " ) ;
ast_log ( LOG_DEBUG , " Restarting session... \n " ) ;
bytes = 0 ;
/* Load the session now */
@ -2869,7 +2855,6 @@ static int adsi_load_vmail(struct ast_channel *chan, int *useadsi)
static void adsi_begin ( struct ast_channel * chan , int * useadsi )
{
int x ;
if ( ! adsi_available ( chan ) )
return ;
x = adsi_load_session ( chan , adsifdn , adsiver , 1 ) ;
@ -3218,16 +3203,15 @@ static void adsi_goodbye(struct ast_channel *chan)
adsi_transmit_message ( chan , buf , bytes , ADSI_MSG_DISPLAY ) ;
}
/* ! get_folder: voicemail Folder menu
* Plays " press 1 for INBOX messages " etc
* Should possibly be internationalized
/* --- get_folder: Folder menu ---*/
/* Plays "press 1 for INBOX messages" etc
Should possibly be internationalized
*/
static int get_folder ( struct ast_channel * chan , int start )
{
int x ;
int d ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char fn [ 256 ] ;
d = ast_play_and_wait ( chan , " vm-press " ) ; /* "Press" */
if ( d )
return d ;
@ -3314,8 +3298,7 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu,
static int notify_new_message ( struct ast_channel * chan , struct ast_vm_user * vmu , int msgnum , long duration , char * fmt , char * cidnum , char * cidname )
{
char todir [ AST_MAX_FILENAME_LEN ] , fn [ AST_MAX_FILENAME_LEN ] ;
char ext_context [ AST_MAX_EXTENSION ] , * stringp ;
char todir [ 256 ] , fn [ 256 ] , ext_context [ 256 ] , * stringp ;
int newmsgs = 0 , oldmsgs = 0 ;
const char * category = pbx_builtin_getvar_helper ( chan , " VM_CATEGORY " ) ;
@ -3362,15 +3345,15 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
char * fmt , int flag , signed char record_gain )
{
char username [ 70 ] = " " ;
char sys [ AST_MAX_SHELL_COMMAND ] ;
char todir [ AST_MAX_FILENAME_LEN ] ;
char sys [ 256 ] ;
char todir [ 256 ] ;
int todircount = 0 ;
int duration ;
struct ast_config * mif ;
char miffile [ AST_MAX_FILENAME_LEN ] ;
char fn [ AST_MAX_FILENAME_LEN ] ;
char miffile [ 256 ] ;
char fn [ 256 ] ;
char callerid [ 512 ] ;
char ext_context [ AST_MAX_EXTENSION ] = " " ;
char ext_context [ 256 ] = " " ;
int res = 0 , cmd = 0 ;
struct ast_vm_user * receiver = NULL , * vmtmp ;
AST_LIST_HEAD_NOLOCK_STATIC ( extensions , ast_vm_user ) ;
@ -3506,8 +3489,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
snprintf ( todir , sizeof ( todir ) , " %s%s/%s/INBOX " , VM_SPOOL_DIR , vmtmp - > context , vmtmp - > mailbox ) ;
snprintf ( sys , sizeof ( sys ) , " mkdir -p %s \n " , todir ) ;
snprintf ( ext_context , sizeof ( ext_context ) , " %s@%s " , vmtmp - > mailbox , vmtmp - > context ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Running cmd: %s " , sys ) ;
ast_log ( LOG_DEBUG , " %s " , sys ) ;
ast_safe_system ( sys ) ;
res = count_messages ( receiver , todir ) ;
@ -3527,13 +3509,11 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
if ( ! strcasecmp ( s , " wav49 " ) )
s = " WAV " ;
snprintf ( sys , sizeof ( sys ) , " cp %s/msg%04d.%s %s/msg%04d.%s \n " , dir , curmsg , s , todir , todircount , s ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Running cmd: %s " , sys ) ;
ast_log ( LOG_DEBUG , " %s " , sys ) ;
ast_safe_system ( sys ) ;
}
snprintf ( sys , sizeof ( sys ) , " cp %s/msg%04d.txt %s/msg%04d.txt \n " , dir , curmsg , todir , todircount ) ;
if ( option_debug )
ast_log ( LOG_DEBUG , " Running cmd: %s " , sys ) ;
ast_log ( LOG_DEBUG , " %s " , sys ) ;
ast_safe_system ( sys ) ;
snprintf ( fn , sizeof ( fn ) , " %s/msg%04d " , todir , todircount ) ;
@ -3690,7 +3670,7 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
int res = 0 ;
int i ;
char * callerid , * name ;
char prefile [ AST_MAX_FILENAME_LEN ] = " " ;
char prefile [ 256 ] = " " ;
/* If voicemail cid is not enabled, or we didn't get cid or context from the attribute file, leave now. */
@ -3699,15 +3679,13 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
return res ;
/* Strip off caller ID number from name */
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM-CID: composite caller ID received: %s, context: %s \n " , cid , context ) ;
ast_log ( LOG_DEBUG , " VM-CID: composite caller ID received: %s, context: %s \n " , cid , context ) ;
ast_callerid_parse ( cid , & name , & callerid ) ;
if ( ( ! ast_strlen_zero ( callerid ) ) & & strcmp ( callerid , " Unknown " ) ) {
/* Check for internal contexts and only */
/* say extension when the call didn't come from an internal context in the list */
for ( i = 0 ; i < MAX_NUM_CID_CONTEXTS ; i + + ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM-CID: comparing internalcontext: %s \n " , cidinternalcontexts [ i ] ) ;
ast_log ( LOG_DEBUG , " VM-CID: comparing internalcontext: %s \n " , cidinternalcontexts [ i ] ) ;
if ( ( strcmp ( cidinternalcontexts [ i ] , context ) = = 0 ) )
break ;
}
@ -3734,8 +3712,7 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
}
else if ( ! res ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM-CID: Numeric caller id: (%s) \n " , callerid ) ;
ast_log ( LOG_DEBUG , " VM-CID: Numeric caller id: (%s) \n " , callerid ) ;
/* BB: Since this is all nicely figured out, why not say "from phone number" in this case" */
if ( ! callback )
res = wait_file2 ( chan , vms , " vm-from-phonenumber " ) ;
@ -3743,8 +3720,7 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
}
} else {
/* Number unknown */
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM-CID: From an unknown number \n " ) ;
ast_log ( LOG_DEBUG , " VM-CID: From an unknown number \n " ) ;
/* Say "from an unknown caller" as one phrase - it is already recorded by "the voice" anyhow */
res = wait_file2 ( chan , vms , " vm-unknown-caller " ) ;
}
@ -3764,8 +3740,7 @@ static int play_message_duration(struct ast_channel *chan, struct vm_state *vms,
durations = atoi ( duration ) ;
durationm = ( durations / 60 ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM-Duration: duration is: %d seconds converted to: %d minutes \n " , durations , durationm ) ;
ast_log ( LOG_DEBUG , " VM-Duration: duration is: %d seconds converted to: %d minutes \n " , durations , durationm ) ;
if ( ( ! res ) & & ( durationm > = minduration ) ) {
res = ast_say_number ( chan , durationm , AST_DIGIT_ANY , chan - > language , ( char * ) NULL ) ;
@ -3777,7 +3752,7 @@ static int play_message_duration(struct ast_channel *chan, struct vm_state *vms,
static int play_message ( struct ast_channel * chan , struct ast_vm_user * vmu , struct vm_state * vms )
{
int res = 0 ;
char filename [ AST_MAX_FILENAME_LEN ] , * origtime , * cid , * context , * duration ;
char filename [ 256 ] , * origtime , * cid , * context , * duration ;
char * category ;
struct ast_config * msg_cfg ;
@ -4606,12 +4581,11 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
int tries = 0 ;
char newpassword [ 80 ] = " " ;
char newpassword2 [ 80 ] = " " ;
char prefile [ AST_MAX_FILENAME_LEN ] = " " ;
char prefile [ 256 ] = " " ;
unsigned char buf [ 256 ] ;
int bytes = 0 ;
if ( adsi_available ( chan ) ) {
unsigned char buf [ 256 ] ;
bytes + = adsi_logo ( buf + bytes ) ;
bytes + = adsi_display ( buf + bytes , ADSI_COMM_PAGE , 3 , ADSI_JUST_CENT , 0 , " New User Setup " , " " ) ;
bytes + = adsi_display ( buf + bytes , ADSI_COMM_PAGE , 4 , ADSI_JUST_CENT , 0 , " Not Done " , " " ) ;
@ -4685,12 +4659,12 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
int duration = 0 ;
char newpassword [ 80 ] = " " ;
char newpassword2 [ 80 ] = " " ;
char prefile [ AST_MAX_FILENAME_LEN ] = " " ;
char prefile [ 256 ] = " " ;
unsigned char buf [ 256 ] ;
int bytes = 0 ;
if ( adsi_available ( chan ) ) {
unsigned char buf [ 256 ] ;
if ( adsi_available ( chan ) )
{
bytes + = adsi_logo ( buf + bytes ) ;
bytes + = adsi_display ( buf + bytes , ADSI_COMM_PAGE , 3 , ADSI_JUST_CENT , 0 , " Options Menu " , " " ) ;
bytes + = adsi_display ( buf + bytes , ADSI_COMM_PAGE , 4 , ADSI_JUST_CENT , 0 , " Not Done " , " " ) ;
@ -4754,8 +4728,7 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
vm_change_password ( vmu , newpassword ) ;
else
vm_change_password_shell ( vmu , newpassword ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " User %s set password to %s of length %d \n " , vms - > username , newpassword , ( int ) strlen ( newpassword ) ) ;
ast_log ( LOG_DEBUG , " User %s set password to %s of length %d \n " , vms - > username , newpassword , ( int ) strlen ( newpassword ) ) ;
cmd = ast_play_and_wait ( chan , " vm-passchanged " ) ;
break ;
case ' * ' :
@ -4781,7 +4754,7 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st
int cmd = 0 ;
int retries = 0 ;
int duration = 0 ;
char prefile [ AST_MAX_FILENAME_LEN ] = " " ;
char prefile [ 256 ] = " " ;
unsigned char buf [ 256 ] ;
int bytes = 0 ;
@ -5066,7 +5039,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
int valid = 0 ;
struct localuser * u ;
char prefixstr [ 80 ] = " " ;
char ext_context [ AST_MAX_EXTENSION ] = " " ;
char ext_context [ 256 ] = " " ;
int box ;
int useadsi = 0 ;
int skipuser = 0 ;
@ -5762,10 +5735,8 @@ static int handle_show_voicemail_users(int fd, int argc, char *argv[])
struct ast_vm_user * vmu ;
char * output_format = " %-10s %-5s %-25s %-10s %6s \n " ;
if ( ( argc < 3 ) | | ( argc > 5 ) | | ( argc = = 4 ) )
return RESULT_SHOWUSAGE ;
else if ( ( argc = = 5 ) & & strcmp ( argv [ 3 ] , " for " ) )
return RESULT_SHOWUSAGE ;
if ( ( argc < 3 ) | | ( argc > 5 ) | | ( argc = = 4 ) ) return RESULT_SHOWUSAGE ;
else if ( ( argc = = 5 ) & & strcmp ( argv [ 3 ] , " for " ) ) return RESULT_SHOWUSAGE ;
AST_LIST_LOCK ( & users ) ;
if ( ! AST_LIST_EMPTY ( & users ) ) {
@ -5786,7 +5757,7 @@ static int handle_show_voicemail_users(int fd, int argc, char *argv[])
}
}
AST_LIST_TRAVERSE ( & users , vmu , list ) {
char dirname [ AST_MAX_FILENAME_LEN ] ;
char dirname [ 256 ] ;
DIR * vmdir ;
struct dirent * vment ;
int vmcount = 0 ;
@ -5819,8 +5790,7 @@ static int handle_show_voicemail_zones(int fd, int argc, char *argv[])
struct vm_zone * zone = zones ;
char * output_format = " %-15s %-20s %-45s \n " ;
if ( argc ! = 3 )
return RESULT_SHOWUSAGE ;
if ( argc ! = 3 ) return RESULT_SHOWUSAGE ;
if ( zone ) {
ast_cli ( fd , output_format , " Zone " , " Timezone " , " Message Format " ) ;
@ -5991,8 +5961,7 @@ static int load_config(void)
if ( ( notifystr = ast_variable_retrieve ( cfg , " general " , " externnotify " ) ) ) {
ast_copy_string ( externnotify , notifystr , sizeof ( externnotify ) ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " found externnotify: %s \n " , externnotify ) ;
ast_log ( LOG_DEBUG , " found externnotify: %s \n " , externnotify ) ;
# ifdef WITH_SMDI
if ( ! strcasecmp ( externnotify , " smdi " ) ) {
ast_log ( LOG_DEBUG , " Using SMDI for external voicemail notification \n " ) ;
@ -6085,8 +6054,7 @@ static int load_config(void)
ast_set2_flag ( ( & globalflags ) , ast_true ( astattach ) , VM_FORCEGREET ) ;
if ( ( s = ast_variable_retrieve ( cfg , " general " , " cidinternalcontexts " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM_CID Internal context string: %s \n " , s ) ;
ast_log ( LOG_DEBUG , " VM_CID Internal context string: %s \n " , s ) ;
stringp = ast_strdupa ( s ) ;
for ( x = 0 ; x < MAX_NUM_CID_CONTEXTS ; x + + ) {
if ( ! ast_strlen_zero ( stringp ) ) {
@ -6094,51 +6062,44 @@ static int load_config(void)
while ( ( * q = = ' ' ) | | ( * q = = ' \t ' ) ) /* Eat white space between contexts */
q + + ;
ast_copy_string ( cidinternalcontexts [ x ] , q , sizeof ( cidinternalcontexts [ x ] ) ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM_CID Internal context %d: %s \n " , x , cidinternalcontexts [ x ] ) ;
ast_log ( LOG_DEBUG , " VM_CID Internal context %d: %s \n " , x , cidinternalcontexts [ x ] ) ;
} else {
cidinternalcontexts [ x ] [ 0 ] = ' \0 ' ;
}
}
}
if ( ! ( astreview = ast_variable_retrieve ( cfg , " general " , " review " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM Review Option disabled globally \n " ) ;
ast_log ( LOG_DEBUG , " VM Review Option disabled globally \n " ) ;
astreview = " no " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( astreview ) , VM_REVIEW ) ;
if ( ! ( astcallop = ast_variable_retrieve ( cfg , " general " , " operator " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM Operator break disabled globally \n " ) ;
ast_log ( LOG_DEBUG , " VM Operator break disabled globally \n " ) ;
astcallop = " no " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( astcallop ) , VM_OPERATOR ) ;
if ( ! ( astsaycid = ast_variable_retrieve ( cfg , " general " , " saycid " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " VM CID Info before msg disabled globally \n " ) ;
ast_log ( LOG_DEBUG , " VM CID Info before msg disabled globally \n " ) ;
astsaycid = " no " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( astsaycid ) , VM_SAYCID ) ;
if ( ! ( send_voicemail = ast_variable_retrieve ( cfg , " general " , " sendvoicemail " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " Send Voicemail msg disabled globally \n " ) ;
ast_log ( LOG_DEBUG , " Send Voicemail msg disabled globally \n " ) ;
send_voicemail = " no " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( send_voicemail ) , VM_SVMAIL ) ;
if ( ! ( asthearenv = ast_variable_retrieve ( cfg , " general " , " envelope " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " ENVELOPE before msg enabled globally \n " ) ;
ast_log ( LOG_DEBUG , " ENVELOPE before msg enabled globally \n " ) ;
asthearenv = " yes " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( asthearenv ) , VM_ENVELOPE ) ;
if ( ! ( astsaydurationinfo = ast_variable_retrieve ( cfg , " general " , " sayduration " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " Duration info before msg enabled globally \n " ) ;
ast_log ( LOG_DEBUG , " Duration info before msg enabled globally \n " ) ;
astsaydurationinfo = " yes " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( astsaydurationinfo ) , VM_SAYDURATION ) ;
@ -6153,32 +6114,28 @@ static int load_config(void)
}
if ( ! ( astskipcmd = ast_variable_retrieve ( cfg , " general " , " nextaftercmd " ) ) ) {
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " We are not going to skip to the next msg after save/delete \n " ) ;
ast_log ( LOG_DEBUG , " We are not going to skip to the next msg after save/delete \n " ) ;
astskipcmd = " no " ;
}
ast_set2_flag ( ( & globalflags ) , ast_true ( astskipcmd ) , VM_SKIPAFTERCMD ) ;
if ( ( dialoutcxt = ast_variable_retrieve ( cfg , " general " , " dialout " ) ) ) {
ast_copy_string ( dialcontext , dialoutcxt , sizeof ( dialcontext ) ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " found dialout context: %s \n " , dialcontext ) ;
ast_log ( LOG_DEBUG , " found dialout context: %s \n " , dialcontext ) ;
} else {
dialcontext [ 0 ] = ' \0 ' ;
}
if ( ( callbackcxt = ast_variable_retrieve ( cfg , " general " , " callback " ) ) ) {
ast_copy_string ( callcontext , callbackcxt , sizeof ( callcontext ) ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " found callback context: %s \n " , callcontext ) ;
ast_log ( LOG_DEBUG , " found callback context: %s \n " , callcontext ) ;
} else {
callcontext [ 0 ] = ' \0 ' ;
}
if ( ( exitcxt = ast_variable_retrieve ( cfg , " general " , " exitcontext " ) ) ) {
ast_copy_string ( exitcontext , exitcxt , sizeof ( exitcontext ) ) ;
if ( option_debug > 1 )
ast_log ( LOG_DEBUG , " found operator context: %s \n " , exitcontext ) ;
ast_log ( LOG_DEBUG , " found operator context: %s \n " , exitcontext ) ;
} else {
exitcontext [ 0 ] = ' \0 ' ;
}