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 .
*
2005-01-21 07:06:25 +00:00
* Copyright ( C ) 1999 - 2005 , 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
2005-02-17 14:57:36 +00:00
/* IVR stuff */
/* Callback function for IVR, returns 0 on completion, -1 on hangup or digit if
interrupted */
typedef int ( * ast_ivr_callback ) ( struct ast_channel * chan , char * option , void * cbdata ) ;
typedef enum {
AST_ACTION_UPONE , /* adata is unused */
AST_ACTION_EXIT , /* adata is the return value for ast_ivr_menu_run if channel was not hungup */
AST_ACTION_CALLBACK , /* adata is an ast_ivr_callback */
AST_ACTION_PLAYBACK , /* adata is file to play */
AST_ACTION_BACKGROUND , /* adata is file to play */
AST_ACTION_PLAYLIST , /* adata is list of files, separated by ; to play */
AST_ACTION_MENU , /* adata is a pointer to an ast_ivr_menu */
AST_ACTION_REPEAT , /* adata is max # of repeats, cast to a pointer */
AST_ACTION_RESTART , /* adata is like repeat, but resets repeats to 0 */
AST_ACTION_TRANSFER , /* adata is a string with exten[@context] */
AST_ACTION_WAITOPTION , /* adata is a timeout, or 0 for defaults */
AST_ACTION_NOOP , /* adata is unused */
} ast_ivr_action ;
struct ast_ivr_option {
char * option ;
ast_ivr_action action ;
void * adata ;
} ;
/*
Special " options " are :
" s " - " start here (one time greeting) "
" g " - " greeting/instructions "
" t " - " timeout "
" h " - " hangup "
" i " - " invalid selection "
*/
struct ast_ivr_menu {
char * title ; /* Title of menu */
unsigned int flags ; /* Flags */
2005-02-26 19:06:09 +00:00
struct ast_ivr_option * options ; /* All options */
2005-02-17 14:57:36 +00:00
} ;
2005-02-26 19:06:09 +00:00
# define AST_IVR_DECLARE_MENU(holder,title,flags,foo...) \
static struct ast_ivr_option __options_ # # holder [ ] = foo ; \
static struct ast_ivr_menu holder = { title , flags , __options_ # # holder }
2005-02-17 14:57:36 +00:00
/*! Runs an IVR menu, returns 0 on successful completion, -1 on hangup, or -2 on user error in menu */
extern int ast_ivr_menu_run ( struct ast_channel * c , struct ast_ivr_menu * menu , void * cbdata ) ;
2005-01-15 23:48:12 +00:00
/*! Plays a stream and gets DTMF data from a channel */
2001-10-31 15:28:08 +00:00
/*!
* \ 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 ) ;
2005-01-15 23:48:12 +00:00
/*! Record voice (after playing prompt if specified), waiting for silence (in ms) up to a given timeout (in s) or '#' */
2002-12-26 19:38:27 +00:00
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 ) ;
2005-01-15 23:48:12 +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
2005-01-15 23:48:12 +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
2005-01-15 23:48:12 +00:00
/*! Safely spawn an external program while closingn file descriptors */
2004-03-21 18:15:37 +00:00
extern int ast_safe_system ( const char * s ) ;
2005-01-15 23:48:12 +00:00
/*! Send DTMF to chan (optionally entertain peer) */
2004-05-07 21:14:55 +00:00
int ast_dtmf_stream ( struct ast_channel * chan , struct ast_channel * peer , char * digits , int between ) ;
2004-05-07 20:39:14 +00:00
2005-01-15 23:48:12 +00:00
/*! Stream a filename (or file descriptor) as a generator. */
2004-05-13 19:01:10 +00:00
int ast_linear_stream ( struct ast_channel * chan , const char * filename , int fd , int allowoverride ) ;
2005-01-15 23:48:12 +00:00
/*! Stream a file with fast forward, pause, reverse. */
2005-01-10 14:46:59 +00:00
int ast_control_streamfile ( struct ast_channel * chan , const char * file , const char * fwd , const char * rev , const char * stop , const char * pause , int skipms ) ;
2004-05-26 15:22:54 +00:00
2005-01-15 23:48:12 +00:00
/*! Play a stream and wait for a digit, returning the digit that was pressed */
2005-01-10 14:46:59 +00:00
int ast_play_and_wait ( struct ast_channel * chan , const char * fn ) ;
2004-09-17 15:05:29 +00:00
2005-01-15 23:48:12 +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 */
2005-01-23 09:05:01 +00:00
/* permitted silence time in milliseconds of 'maxsilence' under 'silencethreshold' or use '-1' for either or both parameters for defaults.
calls ast_unlock_path ( ) on ' path ' if passed */
int ast_play_and_record ( struct ast_channel * chan , const char * playfile , const char * recordfile , int maxtime_sec , const char * fmt , int * duration , int silencethreshold , int maxsilence_ms , const char * path ) ;
2004-09-17 15:05:29 +00:00
2005-01-15 23:48:12 +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 */
/* permitted silence time in milliseconds of 'maxsilence' under 'silencethreshold' or use '-1' for either or both parameters for defaults. */
2004-09-18 14:01:35 +00:00
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
2005-01-23 09:05:01 +00:00
/* Lock a path */
int ast_lock_path ( const char * path ) ;
/* Unlock a path */
int ast_unlock_path ( const char * path ) ;
2004-10-03 16:34:52 +00:00
# define GROUP_CATEGORY_PREFIX "GROUP"
2005-01-15 23:48:12 +00:00
/*! Split a group string into group and category, returning a default category if none is provided. */
2004-10-03 16:34:52 +00:00
int ast_app_group_split_group ( char * data , char * group , int group_max , char * category , int category_max ) ;
2005-01-15 23:48:12 +00:00
/*! Set the group for a channel, splitting the provided data into group and category, if specified. */
2004-10-03 16:34:52 +00:00
int ast_app_group_set_channel ( struct ast_channel * chan , char * data ) ;
2005-01-15 23:48:12 +00:00
/*! Get the current channel count of the specified group and category. */
2004-10-03 16:34:52 +00:00
int ast_app_group_get_count ( char * group , char * category ) ;
2005-01-15 23:48:12 +00:00
/*! Get the current channel count of all groups that match the specified pattern and category. */
2004-10-03 16:34:52 +00:00
int ast_app_group_match_get_count ( char * groupmatch , char * category ) ;
2005-01-15 23:48:12 +00:00
/*! Create an argc argv type structure for app args */
2005-02-16 02:58:18 +00:00
int ast_separate_app_args ( char * buf , char delim , char * * array , int arraylen ) ;
2004-12-29 18:43:38 +00:00
2005-02-17 20:04:10 +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. Note that if 'collect' holds digits already, new digits will be appended, so be sure it's initialized properly */
2005-01-05 19:56:47 +00:00
int ast_app_dtget ( struct ast_channel * chan , const char * context , char * collect , size_t size , int maxlen , int timeout ) ;
2005-01-15 23:48:12 +00:00
/*! Allow to record message and have a review option */
2005-01-23 09:05:01 +00:00
int ast_record_review ( struct ast_channel * chan , const char * playfile , const char * recordfile , int maxtime , const char * fmt , int * duration , const char * path ) ;
2005-01-07 07:23:31 +00:00
2001-08-05 21:46:13 +00:00
# if defined(__cplusplus) || defined(c_plusplus)
}
# endif
# endif