autodial update
[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 #include <asterisk/lock.h>
27
28 /* 
29  * Call management packages are text fields of the form a: b.  There is
30  * always exactly one space after the colon.
31  *
32  * The first header type is the "Event" header.  Other headers vary from
33  * event to event.  Headers end with standard \r\n termination.
34  *
35  * Some standard headers:
36  *
37  * Action: <action>                     -- request or notification of a particular action
38  * Response: <response>         -- response code, like "200 OK"
39  *
40  */
41  
42 #define DEFAULT_MANAGER_PORT 5038       /* Default port for Asterisk management via TCP */
43
44 #define EVENT_FLAG_SYSTEM               (1 << 0) /* System events such as module load/unload */
45 #define EVENT_FLAG_CALL                 (1 << 1) /* Call event, such as state change, etc */
46 #define EVENT_FLAG_LOG                  (1 << 2) /* Log events */
47 #define EVENT_FLAG_VERBOSE              (1 << 3) /* Verbose messages */
48 #define EVENT_FLAG_COMMAND              (1 << 4) /* Ability to read/set commands */
49 #define EVENT_FLAG_AGENT                (1 << 5) /* Ability to read/set agent info */
50 #define EVENT_FLAG_USER                 (1 << 6) /* Ability to read/set user info */
51 #define EVENT_FLAG_CUSTOM1                 (1 << 7) /* Ability to read/set user info */
52 #define EVENT_FLAG_CUSTOM2                 (1 << 8) /* Ability to read/set user info */
53 #define EVENT_FLAG_CUSTOM3                 (1 << 9) /* Ability to read/set user info */
54
55 /* Export manager structures */
56 #define MAX_HEADERS 80
57 #define MAX_LEN 256
58
59 struct mansession {
60         pthread_t t;
61         ast_mutex_t lock;
62         struct sockaddr_in sin;
63         int fd;
64         int blocking;
65         char username[80];
66         char challenge[10];
67         int authenticated;
68         int readperm;
69         int writeperm;
70         char inbuf[MAX_LEN];
71         int inlen;
72         int send_events;
73         struct mansession *next;
74 };
75
76
77 struct message {
78         int hdrcount;
79         char headers[MAX_HEADERS][MAX_LEN];
80 };
81
82 struct manager_action {
83         /*! Name of the action */
84         char *action;
85         /*! Short description of the action */
86         char *synopsis;
87         /*! Detailed description of the action */
88         char *description;
89         /*! Permission required for action.  EVENT_FLAG_* */
90         int authority;
91         /*! Function to be called */
92         int (*func)(struct mansession *s, struct message *m);
93         /*! For easy linking */
94         struct manager_action *next;
95 };
96
97 int ast_carefulwrite(int fd, char *s, int len, int timeoutms);
98
99 /* External routines may register/unregister manager callbacks this way */
100 #define ast_manager_register(a, b, c, d) ast_manager_register2(a, b, c, d, NULL)
101 int ast_manager_register2( char *action, int authority, 
102                                          int (*func)(struct mansession *s, struct message *m), char *synopsis, char *description);
103 int ast_manager_unregister( char *action );
104
105 /* External routines may send asterisk manager events this way */
106 extern int manager_event(int category, char *event, char *contents, ...)
107         __attribute__ ((format (printf, 3,4)));
108
109 extern char *astman_get_header(struct message *m, char *var);
110 extern void astman_send_error(struct mansession *s, struct message *m, char *error);
111 extern void astman_send_response(struct mansession *s, struct message *m, char *resp, char *msg);
112 extern void astman_send_ack(struct mansession *s, struct message *m, char *msg);
113
114 /* Called by Asterisk initialization */
115 extern int init_manager(void);
116 extern int reload_manager(void);
117 #endif