mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-18 07:48:14 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user