4a267747fffbdc2276d7cdb957e3acbdaf4ec2d7
[asterisk/asterisk.git] / include / asterisk / manager.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * External call management support 
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  * Includes code and algorithms from the Zapata library.
14  *
15  */
16
17 #ifndef _ASTERISK_MANAGER_H
18 #define _ASTERISK_MANAGER_H
19
20 #include <stdarg.h>
21 #include <sys/types.h>
22 #include <sys/socket.h>
23 #include <netinet/in.h>
24 #include <arpa/inet.h>
25
26 /* 
27  * Call management packages are text fields of the form a: b.  There is
28  * always exactly one space after the colon.
29  *
30  * The first header type is the "Event" header.  Other headers vary from
31  * event to event.  Headers end with standard \r\n termination.
32  *
33  * Some standard headers:
34  *
35  * Action: <action>                     -- request or notification of a particular action
36  * Response: <response>         -- response code, like "200 OK"
37  *
38  */
39  
40 #define DEFAULT_MANAGER_PORT 5038       /* Default port for Asterisk management via TCP */
41
42 #define EVENT_FLAG_SYSTEM               (1 << 0) /* System events such as module load/unload */
43 #define EVENT_FLAG_CALL                 (1 << 1) /* Call event, such as state change, etc */
44 #define EVENT_FLAG_LOG                  (1 << 2) /* Log events */
45 #define EVENT_FLAG_VERBOSE              (1 << 3) /* Verbose messages */
46 #define EVENT_FLAG_COMMAND              (1 << 4) /* Ability to read/set commands */
47 #define EVENT_FLAG_AGENT                (1 << 5) /* Ability to read/set agent info */
48
49 /* JDG: export manager structures */
50 #define MAX_HEADERS 80
51 #define MAX_LEN 256
52
53 struct mansession {
54         pthread_t t;
55         pthread_mutex_t lock;
56         struct sockaddr_in sin;
57         int fd;
58         int blocking;
59         char username[80];
60         int authenticated;
61         int readperm;
62         int writeperm;
63         char inbuf[MAX_LEN];
64         int inlen;
65         
66         struct mansession *next;
67 };
68
69
70 struct message {
71         int hdrcount;
72         char headers[MAX_HEADERS][MAX_LEN];
73 };
74
75 struct manager_action {
76         char action[256];
77         char *synopsis;
78         int authority;
79         int (*func)(struct mansession *s, struct message *m);
80         struct manager_action *next;
81 };
82
83 /* External routines may register/unregister manager callbacks this way */
84 int ast_manager_register( char *action, int authority, 
85                                          int (*func)(struct mansession *s, struct message *m), char *synopsis);
86 int ast_manager_unregister( char *action );
87 /* /JDG */
88
89 /* External routines may send asterisk manager events this way */
90 extern int manager_event(int category, char *event, char *contents, ...)
91         __attribute__ ((format (printf, 3,4)));
92
93 /* Called by Asterisk initialization */
94 extern int init_manager(void);
95 extern int reload_manager(void);
96 #endif