diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2001-09-19 14:40:16 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2001-09-19 14:40:16 +0000 |
commit | 4b33b7328e724457a0938f3aa0bec50fa2193659 (patch) | |
tree | 6e8d0452ef2a3fe6708c438eb80d7bb1116afcc1 /include | |
parent | 8f9e214719a49012c6fd80a5cd71c8df84f77c1d (diff) |
Version 0.1.9 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@358 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include')
-rwxr-xr-x | include/asterisk/channel.h | 31 | ||||
-rwxr-xr-x | include/asterisk/pbx.h | 108 |
2 files changed, 129 insertions, 10 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h index 3d0a30277..ef6cc4fff 100755 --- a/include/asterisk/channel.h +++ b/include/asterisk/channel.h @@ -27,7 +27,7 @@ extern "C" { #ifdef DEBUG_THREADS -#define TRIES 500 +#define TRIES 50 #include <errno.h> #include <string.h> @@ -136,6 +136,9 @@ struct ast_channel { char exten[AST_MAX_EXTENSION]; /* Current extension number */ int priority; /* Current extension priority */ void *app[AST_CHANNEL_MAX_STACK]; /* Application information -- see assigned numbers */ + char dtmfq[AST_MAX_EXTENSION]; /* Any/all queued DTMF characters */ + int deferdtmf; /* Are DTMF digits being deferred */ + struct ast_frame dtmff; /* DTMF frame */ struct ast_channel_pvt *pvt; /* Private channel implementation details */ jmp_buf jmp[AST_CHANNEL_MAX_STACK]; /* Jump buffer used for returning from applications */ @@ -202,6 +205,12 @@ int ast_indicate(struct ast_channel *chan, int condition); Returns < 0 on failure, 0 if nothing ever arrived, and the # of ms remaining otherwise */ int ast_waitfor(struct ast_channel *chan, int ms); +/* Big momma function here. Wait for activity on any of the n channels, or any of the nfds + file descriptors. Returns the channel with activity, or NULL on error or if an FD + came first. If the FD came first, it will be returned in outfd, otherwise, outfd + will be -1 */ +struct ast_channel *ast_waitfor_nandfds(struct ast_channel **chan, int n, int *fds, int nfds, int *exception, int *outfd, int *ms); + /* Wait for input on an array of channels for a given # of milliseconds. Return channel with activity, or NULL if none has activity. time "ms" is modified in-place, if applicable */ @@ -235,7 +244,8 @@ char ast_waitfordigit(struct ast_channel *c, int ms); /* Read in a digit string "s", max length "len", maximum timeout between digits "timeout" (-1 for none), terminated by anything in "enders". Give them rtimeout - for the first digit */ + for the first digit. Returns 0 on normal return, or 1 on a timeout. In the case of + a timeout, any digits that were read before the timeout will still be available in s. */ int ast_readstring(struct ast_channel *c, char *s, int len, int timeout, int rtimeout, char *enders); #define AST_BRIDGE_DTMF_CHANNEL_0 (1 << 0) /* Report DTMF on channel 0 */ @@ -275,6 +285,23 @@ int ast_channel_setoption(struct ast_channel *channel, int option, void *data, i /* Query the value of an option, optionally blocking until a reply is received */ struct ast_frame *ast_channel_queryoption(struct ast_channel *channel, int option, void *data, int *datalen, int block); +/* Returns 0 if channel does not support HTML or non-zero if it does */ +int ast_channel_supports_html(struct ast_channel *channel); + +/* Send HTML or URL on link. Returns 0 on success or -1 on failure */ +int ast_channel_sendhtml(struct ast_channel *channel, int subclass, char *data, int datalen); + +/* Send URL on link. Returns 0 on success or -1 on failure */ +int ast_channel_sendurl(struct ast_channel *channel, char *url); + +/* Defer DTMF so that you only read things like hangups and audio. Returns + non-zero if channel was already DTMF-deferred or 0 if channel is just now + being DTMF-deferred */ +int ast_channel_defer_dtmf(struct ast_channel *chan); + +/* Undo defer. ast_read will return any dtmf characters that were queued */ +void ast_channel_undefer_dtmf(struct ast_channel *chan); + #ifdef DO_CRASH #define CRASH do { *((int *)0) = 0; } while(0) #else diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index ee28e2ec6..b456e5ce0 100755 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -30,6 +30,30 @@ extern "C" { #define AST_PBX_KEEPALIVE 10 /* Destroy the thread, but don't hang up the channel */ struct ast_context; +struct ast_exten; +struct ast_include; +struct ast_ignorepat; +struct ast_sw; + +struct ast_switch { + struct ast_switch *next; /* NULL */ + char *name; /* Name of the switch */ + char *description; /* Description of the switch */ + int (*exists)(struct ast_channel *chan, char *context, char *exten, int priority, char *callerid, char *data); + int (*canmatch)(struct ast_channel *chan, char *context, char *exten, int priority, char *callerid, char *data); + int (*exec)(struct ast_channel *chan, char *context, char *exten, int priority, char *callerid, int newstack, char *data); +}; + +/* Register an alternative switch */ +extern int ast_register_switch(struct ast_switch *sw); + +/* Unregister an alternative switch */ +extern void ast_unregister_switch(struct ast_switch *sw); + +/* Look up an application */ +extern struct ast_app *pbx_findapp(char *app); + +int pbx_exec(struct ast_channel *c, struct ast_app *app, void *data, int newstack); /* Register a new context */ struct ast_context *ast_context_create(char *name, char *registrar); @@ -47,9 +71,15 @@ int ast_pbx_start(struct ast_channel *c); /* Execute the PBX in the current thread */ int ast_pbx_run(struct ast_channel *c); -/* Add an extension to an extension context, this time with an ast_context * */ +/* Add and extension to an extension context. Callerid is a pattern to match CallerID, or NULL to match any + callerid */ +int ast_add_extension(char *context, int replace, char *extension, int priority, char *callerid, + char *application, void *data, void (*datad)(void *), char *registrar); + +/* Add an extension to an extension context, this time with an ast_context *. CallerID is a pattern to match + on callerid, or NULL to not care about callerid */ int ast_add_extension2(struct ast_context *con, - int replace, char *extension, int priority, + int replace, char *extension, int priority, char *callerid, char *application, void *data, void (*datad)(void *), char *registrar); @@ -64,25 +94,23 @@ int ast_register_application(char *app, int (*execute)(struct ast_channel *, voi int ast_unregister_application(char *app); /* If an extension exists, return non-zero */ -int ast_exists_extension(struct ast_channel *c, char *context, char *exten, int priority); +int ast_exists_extension(struct ast_channel *c, char *context, char *exten, int priority, char *callerid); /* If "exten" *could be* a valid extension in this context with or without some more digits, return non-zero. Basically, when this returns 0, no matter what you add to exten, it's not going to be a valid extension anymore */ -int ast_canmatch_extension(struct ast_channel *c, char *context, char *exten, int priority); +int ast_canmatch_extension(struct ast_channel *c, char *context, char *exten, int priority, char *callerid); /* Determine if a given extension matches a given pattern (in NXX format) */ int ast_extension_match(char *pattern, char *extension); /* Launch a new extension (i.e. new stack) */ -int ast_spawn_extension(struct ast_channel *c, char *context, char *exten, int priority); +int ast_spawn_extension(struct ast_channel *c, char *context, char *exten, int priority, char *callerid); /* Execute an extension. If it's not available, do whatever you should do for default extensions and halt the thread if necessary. This function does not return, except on error. */ -int ast_exec_extension(struct ast_channel *c, char *context, char *exten, int priority); -/* Longest extension */ -int ast_pbx_longest_extension(char *context); +int ast_exec_extension(struct ast_channel *c, char *context, char *exten, int priority, char *callerid); /* Add an include */ int ast_context_add_include(char *context, char *include, char *registrar); @@ -92,6 +120,70 @@ int ast_context_add_include2(struct ast_context *con, char *include, char *regis int ast_context_remove_include(char *context, char *include, char *registrar); int ast_context_remove_include2(struct ast_context *con, char *include, char *registrar); +/* Add a switch */ +int ast_context_add_switch(char *context, char *sw, char *data, char *registrar); +int ast_context_add_switch2(struct ast_context *con, char *sw, char *data, char *registrar); + +/* Remove a switch */ +int ast_context_remove_switch(char *context, char *sw, char *data, char *registrar); +int ast_context_remove_switch2(struct ast_context *con, char *sw, char *data, char *registrar); + +/* Simply remove extension from context */ +int ast_context_remove_extension(char *context, char *extension, int priority, + char *registrar); +int ast_context_remove_extension2(struct ast_context *con, char *extension, + int priority, char *registrar); + +/* Add an ignorepat */ +int ast_context_add_ignorepat(char *context, char *ignorepat, char *registrar); +int ast_context_add_ignorepat2(struct ast_context *con, char *ignorepat, char *registrar); + +/* Remove an ignorepat */ +int ast_context_remove_ignorepat(char *context, char *ignorepat, char *registrar); +int ast_context_remove_ignorepat2(struct ast_context *con, char *ignorepat, char *registrar); + +/* Check if a number should be ignored with respect to dialtone cancellation. Returns 0 if + the pattern should not be ignored, or non-zero if the pattern should be ignored */ +int ast_ignore_pattern(char *context, char *pattern); + +/* Locking functions for outer modules, especially for completion functions */ +int ast_lock_contexts(void); +int ast_unlock_contexts(void); + +int ast_lock_context(struct ast_context *con); +int ast_unlock_context(struct ast_context *con); + +/* Functions for returning values from structures */ +char *ast_get_context_name(struct ast_context *con); +char *ast_get_extension_name(struct ast_exten *exten); +char *ast_get_include_name(struct ast_include *include); +char *ast_get_ignorepat_name(struct ast_ignorepat *ip); +char *ast_get_switch_name(struct ast_sw *sw); +char *ast_get_switch_data(struct ast_sw *sw); + +/* Other extension stuff */ +int ast_get_extension_priority(struct ast_exten *exten); +char *ast_get_extension_app(struct ast_exten *e); +void *ast_get_extension_app_data(struct ast_exten *e); + +/* Registrar info functions ... */ +char *ast_get_context_registrar(struct ast_context *c); +char *ast_get_extension_registrar(struct ast_exten *e); +char *ast_get_include_registrar(struct ast_include *i); +char *ast_get_ignorepat_registrar(struct ast_ignorepat *ip); +char *ast_get_switch_registrar(struct ast_sw *sw); + +/* Walking functions ... */ +struct ast_context *ast_walk_contexts(struct ast_context *con); +struct ast_exten *ast_walk_context_extensions(struct ast_context *con, + struct ast_exten *priority); +struct ast_exten *ast_walk_extension_priorities(struct ast_exten *exten, + struct ast_exten *priority); +struct ast_include *ast_walk_context_includes(struct ast_context *con, + struct ast_include *inc); +struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con, + struct ast_ignorepat *ip); +struct ast_sw *ast_walk_context_switches(struct ast_context *con, struct ast_sw *sw); #if defined(__cplusplus) || defined(c_plusplus) } #endif |