2001-08-05 21:46:13 +00:00
/*
* Asterisk - - A telephony toolkit for Linux .
*
* Application convenience functions , designed to give consistent
* look and feel to asterisk apps .
*
2004-09-17 15:05:29 +00:00
* Copyright ( C ) 1999 - 2004 , Digium , Inc .
2001-08-05 21:46:13 +00:00
*
2004-09-17 15:05:29 +00:00
* Mark Spencer < markster @ digium . com >
2001-08-05 21:46:13 +00:00
*
* This program is free software , distributed under the terms of
* the GNU General Public License
*/
# ifndef _ASTERISK_APP_H
# define _ASTERISK_APP_H
# if defined(__cplusplus) || defined(c_plusplus)
extern " C " {
# endif
2001-10-31 15:28:08 +00:00
//! Plays a stream and gets DTMF data from a channel
/*!
* \ param c Which channel one is interacting with
* \ param prompt File to pass to ast_streamfile ( the one that you wish to play )
* \ param s The location where the DTMF data will be stored
* \ param maxlen Max Length of the data
* \ param timeout Timeout length waiting for data ( in milliseconds ) . Set to 0 for standard timeout ( six seconds ) , or - 1 for no time out .
*
* This function was designed for application programmers for situations where they need
* to play a message and then get some DTMF data in response to the message . If a digit
* is pressed during playback , it will immediately break out of the message and continue
* execution of your code .
*/
2001-08-05 21:46:13 +00:00
extern int ast_app_getdata ( struct ast_channel * c , char * prompt , char * s , int maxlen , int timeout ) ;
2003-02-23 06:00:11 +00:00
/* Full version with audiofd and controlfd. NOTE: returns '2' on ctrlfd available, not '1' like other full functions */
extern int ast_app_getdata_full ( struct ast_channel * c , char * prompt , char * s , int maxlen , int timeout , int audiofd , int ctrlfd ) ;
2002-12-26 19:38:27 +00:00
//! Record voice (after playing prompt if specified), waiting for silence (in ms) up to a given timeout (in s) or '#'
int ast_app_getvoice ( struct ast_channel * c , char * dest , char * dstfmt , char * prompt , int silence , int maxsec ) ;
2004-12-31 01:11:33 +00:00
void ast_install_vm_functions ( int ( * has_voicemail_func ) ( const char * mailbox , const char * folder ) ,
int ( * messagecount_func ) ( const char * mailbox , int * newmsgs , int * oldmsgs ) ) ;
void ast_uninstall_vm_functions ( void ) ;
2002-12-26 19:38:27 +00:00
//! Determine if a given mailbox has any voicemail
2004-12-31 01:11:33 +00:00
int ast_app_has_voicemail ( const char * mailbox , const char * folder ) ;
2003-03-26 00:15:11 +00:00
//! Determine number of new/old messages in a mailbox
2004-12-31 01:11:33 +00:00
int ast_app_messagecount ( const char * mailbox , int * newmsgs , int * oldmsgs ) ;
2002-12-26 19:38:27 +00:00
2004-03-21 18:15:37 +00:00
//! Safely spawn an external program while closingn file descriptors
extern int ast_safe_system ( const char * s ) ;
2004-05-07 21:14:55 +00:00
//! Send DTMF to chan (optionally entertain peer)
int ast_dtmf_stream ( struct ast_channel * chan , struct ast_channel * peer , char * digits , int between ) ;
2004-05-07 20:39:14 +00:00
2004-05-13 19:01:10 +00:00
//! Stream a filename (or file descriptor) as a generator.
int ast_linear_stream ( struct ast_channel * chan , const char * filename , int fd , int allowoverride ) ;
2004-05-26 23:56:41 +00:00
//! Stream a file with fast forward, pause, reverse.
2004-05-27 00:07:18 +00:00
int ast_control_streamfile ( struct ast_channel * chan , char * file , char * fwd , char * rev , char * stop , char * pause , int skipms ) ;
2004-05-26 15:22:54 +00:00
2004-09-17 15:05:29 +00:00
//! Play a stream and wait for a digit, returning the digit that was pressed
int ast_play_and_wait ( struct ast_channel * chan , char * fn ) ;
2004-09-18 14:01:35 +00:00
//! Record a file for a max amount of time (in seconds), in a given list of formats separated by '|', outputting the duration of the recording, and with a maximum
// permitted silence time in milliseconds of 'maxsilence' under 'silencethreshold' or use '-1' for either or both parameters for defaults.
int ast_play_and_record ( struct ast_channel * chan , char * playfile , char * recordfile , int maxtime_sec , char * fmt , int * duration , int silencethreshold , int maxsilence_ms ) ;
2004-09-17 15:05:29 +00:00
//! Record a message and prepend the message to the given record file after playing the optional playfile (or a beep), storing the duration in 'duration' and with a maximum
2004-09-18 14:01:35 +00:00
// permitted silence time in milliseconds of 'maxsilence' under 'silencethreshold' or use '-1' for either or both parameters for defaults.
int ast_play_and_prepend ( struct ast_channel * chan , char * playfile , char * recordfile , int maxtime_sec , char * fmt , int * duration , int beep , int silencethreshold , int maxsilence_ms ) ;
2004-09-17 15:05:29 +00:00
2004-10-03 16:34:52 +00:00
# define GROUP_CATEGORY_PREFIX "GROUP"
//! Split a group string into group and category, returning a default category if none is provided.
int ast_app_group_split_group ( char * data , char * group , int group_max , char * category , int category_max ) ;
//! Set the group for a channel, splitting the provided data into group and category, if specified.
int ast_app_group_set_channel ( struct ast_channel * chan , char * data ) ;
//! Get the current channel count of the specified group and category.
int ast_app_group_get_count ( char * group , char * category ) ;
//! Get the current channel count of all groups that match the specified pattern and category.
int ast_app_group_match_get_count ( char * groupmatch , char * category ) ;
2004-12-29 18:43:38 +00:00
//! Create an argc argv type structure for app args
2004-12-29 18:46:19 +00:00
int ast_seperate_app_args ( char * buf , char delim , char * * array , int arraylen ) ;
2004-12-29 18:43:38 +00:00
2005-01-05 19:56:47 +00:00
//! Present a dialtone and collect a certain length extension. Returns 1 on valid extension entered, -1 on hangup, or 0 on invalid extension.
int ast_app_dtget ( struct ast_channel * chan , const char * context , char * collect , size_t size , int maxlen , int timeout ) ;
2001-08-05 21:46:13 +00:00
# if defined(__cplusplus) || defined(c_plusplus)
}
# endif
# endif