37d65a16d9b653f1717f4e6200460e5d6267b88c
[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 struct ast_context;
30
31 /* Register a new context */
32 struct ast_context *ast_context_create(char *name);
33
34 /* Destroy a context */
35 void ast_context_destroy(struct ast_context *);
36
37 /* Find a context */
38 struct ast_context *ast_context_find(char *name);
39
40 /* Create a new thread and start the PBX (or whatever) */
41 int ast_pbx_start(struct ast_channel *c);
42
43
44
45 /* Add an extension to an extension context, this time with an ast_context * */
46 int ast_add_extension2(struct ast_context *con,
47                                       int replace, char *extension, int priority, 
48                                           char *application, void *data, void (*datad)(void *));
49
50 /* Add an application.  The function 'execute' should return non-zero if the line needs to be hung up. */
51 int ast_register_application(char *app, int (*execute)(struct ast_channel *, void *));
52
53 /* Remove an application */
54 int ast_unregister_application(char *app);
55
56 /* If an extension exists, return non-zero */
57 int ast_exists_extension(struct ast_channel *c, char *context, char *exten, int priority);
58
59 /* Launch a new extension (i.e. new stack) */
60 int ast_spawn_extension(struct ast_channel *c, char *context, char *exten, int priority);
61
62 /* Execute an extension.  If it's not available, do whatever you should do for
63    default extensions and halt the thread if necessary.  This function does not
64    return, except on error. */
65 int ast_exec_extension(struct ast_channel *c, char *context, char *exten, int priority);
66 /* Longest extension */
67 int ast_pbx_longest_extension(char *context);
68
69 #if defined(__cplusplus) || defined(c_plusplus)
70 }
71 #endif
72
73
74 #endif