Version 0.1.9 from FTP

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@358 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2001-09-19 14:40:16 +00:00
parent e2fa665ed5
commit 888125eae4
3 changed files with 341 additions and 37 deletions

View File

@@ -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

View File

@@ -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