Version 0.1.2 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 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 /* If "exten" *could be* a valid extension in this context with or without
60    some more digits, return non-zero.  Basically, when this returns 0, no matter
61    what you add to exten, it's not going to be a valid extension anymore */
62 int ast_canmatch_extension(struct ast_channel *c, char *context, char *exten, int priority);
63
64 /* Launch a new extension (i.e. new stack) */
65 int ast_spawn_extension(struct ast_channel *c, char *context, char *exten, int priority);
66
67 /* Execute an extension.  If it's not available, do whatever you should do for
68    default extensions and halt the thread if necessary.  This function does not
69    return, except on error. */
70 int ast_exec_extension(struct ast_channel *c, char *context, char *exten, int priority);
71 /* Longest extension */
72 int ast_pbx_longest_extension(char *context);
73
74 #if defined(__cplusplus) || defined(c_plusplus)
75 }
76 #endif
77
78
79 #endif