Version 0.1.7 from FTP
[asterisk/asterisk.git] / include / asterisk / pbx.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Core PBX routines and definitions.
5  * 
6  * Copyright (C) 1999, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13 #ifndef _ASTERISK_PBX_H
14 #define _ASTERISK_PBX_H
15
16 #include <asterisk/sched.h>
17 #include <asterisk/channel.h>
18
19 #if defined(__cplusplus) || defined(c_plusplus)
20 extern "C" {
21 #endif
22
23 #define AST_PBX_KEEP    0
24 #define AST_PBX_REPLACE 1
25
26 /* Max length of an application */
27 #define AST_MAX_APP     32
28
29 /* Special return values from applications to the PBX */
30 #define AST_PBX_KEEPALIVE       10              /* Destroy the thread, but don't hang up the channel */
31
32 struct ast_context;
33
34 /* Register a new context */
35 struct ast_context *ast_context_create(char *name);
36
37 /* Destroy a context */
38 void ast_context_destroy(struct ast_context *);
39
40 /* Find a context */
41 struct ast_context *ast_context_find(char *name);
42
43 /* Create a new thread and start the PBX (or whatever) */
44 int ast_pbx_start(struct ast_channel *c);
45
46 /* Execute the PBX in the current thread */
47 int ast_pbx_run(struct ast_channel *c);
48
49 /* Add an extension to an extension context, this time with an ast_context * */
50 int ast_add_extension2(struct ast_context *con,
51                                       int replace, char *extension, int priority, 
52                                           char *application, void *data, void (*datad)(void *));
53
54 /* Add an application.  The function 'execute' should return non-zero if the line needs to be hung up. */
55 int ast_register_application(char *app, int (*execute)(struct ast_channel *, void *));
56
57 /* Remove an application */
58 int ast_unregister_application(char *app);
59
60 /* If an extension exists, return non-zero */
61 int ast_exists_extension(struct ast_channel *c, char *context, char *exten, int priority);
62
63 /* If "exten" *could be* a valid extension in this context with or without
64    some more digits, return non-zero.  Basically, when this returns 0, no matter
65    what you add to exten, it's not going to be a valid extension anymore */
66 int ast_canmatch_extension(struct ast_channel *c, char *context, char *exten, int priority);
67
68 /* Launch a new extension (i.e. new stack) */
69 int ast_spawn_extension(struct ast_channel *c, char *context, char *exten, int priority);
70
71 /* Execute an extension.  If it's not available, do whatever you should do for
72    default extensions and halt the thread if necessary.  This function does not
73    return, except on error. */
74 int ast_exec_extension(struct ast_channel *c, char *context, char *exten, int priority);
75 /* Longest extension */
76 int ast_pbx_longest_extension(char *context);
77
78 /* Add an include */
79 int ast_context_add_include(char *context, char *include);
80 int ast_context_add_include2(struct ast_context *con, char *include);
81
82 /* Remove an include */
83 int ast_context_remove_include(char *context, char *include);
84 int ast_context_remove_include2(struct ast_context *con, char *include);
85
86 #if defined(__cplusplus) || defined(c_plusplus)
87 }
88 #endif
89
90
91 #endif