massive changes, very broken, do not use (from airport)
[asterisk/asterisk.git] / channels / h323 / chan_h323.h
1 /*
2  * chan_h323.h
3  *
4  * OpenH323 Channel Driver for ASTERISK PBX.
5  *                      By Jeremy McNamara
6  *                      For The NuFone Network
7  *      
8  * This code has been derived from code created by 
9  *              Michael Manousos and Mark Spencer
10  *
11  * This file is part of the chan_h323 driver for Asterisk
12  *
13  * chan_h323 is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version. 
17  *
18  * chan_h323 is distributed WITHOUT ANY WARRANTY; without even 
19  * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
20  * PURPOSE. See the GNU General Public License for more details. 
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
25  *
26  * Version Info: $Id$
27  */
28
29 #include <arpa/inet.h>
30
31 static struct sockaddr_in bindaddr;
32
33 /* structure to hold the valid asterisk users */
34 struct oh323_user {
35         char name[80];
36         char context[80];
37         char secret[80];
38         char callerid[80];
39         char accountcode[20];
40         int amaflags;
41         int noFastStart;
42         int noH245Tunneling;
43         int noSilenceSuppression;
44         int inUse;
45         int incominglimit;
46         int bridge;
47         int nat;
48         int dtmfmode;
49         int host;
50         struct ast_ha *ha;
51         struct sockaddr_in addr;
52         struct oh323_user *next;
53 };
54
55 /* structure to hold the valid asterisk peers 
56    All peers are registered to a GK if there is one */
57 struct oh323_peer {
58         char name[80];
59         char mailbox[AST_MAX_EXTENSION];
60         int capability;
61         int noFastStart;
62         int noH245Tunneling;
63         int noSilenceSuppression;
64         int inUse;
65         int outgoinglimit;
66         int bridge;
67         int nat;
68         int dtmfmode;
69         int delme;
70         struct sockaddr_in addr;
71         struct ast_ha *ha;
72         struct oh323_peer *next;
73 };
74
75 /* structure to hold the H.323 aliases which get registered to 
76    the H.323 endpoint and gatekeeper */
77 struct oh323_alias {
78         char name[80];
79         char e164[20];                          /* tells a GK to route this E.164 to this alias */
80         char prefix[500];                       /* tells a GK this alias supports these prefixes */
81         char secret[20];                        /* the H.235 password to send to the GK for authentication */
82         char context[80];
83         struct oh323_alias *next;       
84 };
85
86 /** call_option struct is filled from the 
87         PBX application and passed through make_call 
88         function*/
89 typedef struct call_options {
90         char            *callerid;
91         char            *callername;
92         int             noFastStart;
93         int             noH245Tunneling;
94         int             noSilenceSuppression;
95         unsigned int    port;
96 } call_options_t;
97
98 /** call_details struct call detail records 
99         to asterisk for processing and used for matching up 
100         asterisk channels to acutal h.323 connections */
101 typedef struct call_details {   
102         unsigned int call_reference;
103         char *call_token;                               
104         char *call_source_aliases;
105         char *call_dest_alias;
106         char *call_source_name;
107         char *call_source_e164;
108         char *call_dest_e164;
109         char *sourceIp;
110 } call_details_t;
111
112 typedef struct rtp_info {
113         const char *addr;
114         unsigned int port;
115 } rtp_info_t;
116
117 /* This is a callback prototype function, called pass
118    DTMF down the RTP. */
119 typedef int (*send_digit_cb)(unsigned, char, const char *);
120 extern send_digit_cb    on_send_digit; 
121
122 /* This is a callback prototype function, called to collect
123    the external RTP port from Asterisk. */
124 typedef rtp_info_t *(*on_connection_cb)(unsigned, const char *);
125 extern on_connection_cb on_create_connection; 
126
127 /* This is a callback prototype function, called upon
128    an incoming call happens. */
129 typedef int (*setup_incoming_cb)(call_details_t);
130 extern setup_incoming_cb                on_incoming_call;
131
132 /* This is a callback prototype function, called upon
133    an outbound call. */
134 typedef int (*setup_outbound_cb)(call_details_t);
135 extern setup_outbound_cb        on_outgoing_call; 
136
137 /* This is a callback prototype function, called when the openh323 
138    OnStartLogicalChannel is invoked. */
139 typedef void (*start_logchan_cb)(unsigned int, const char *, int, const char *);
140 extern start_logchan_cb on_start_logical_channel; 
141
142 /* This is a callback prototype function, called when openh323
143    OnAlerting is invoked */
144 typedef void (*chan_ringing_cb)(unsigned, const char *);
145 extern chan_ringing_cb          on_chan_ringing;
146
147 /* This is a callback protoype function, called when the openh323
148    OnConnectionEstablished is inovked */
149 typedef void (*con_established_cb)(unsigned, const char *);
150 extern con_established_cb               on_connection_established;
151
152 /* This is a callback prototype function, called when the openH323
153    OnConnectionCleared callback is invoked */
154 typedef void (*clear_con_cb)(call_details_t);
155 extern clear_con_cb             on_connection_cleared;
156
157 typedef int (*answer_call_cb)(unsigned, const char *);
158 extern answer_call_cb           on_answer_call;
159
160 /* debug flag */
161 extern int h323debug;
162
163 #define H323_DTMF_RFC2833       (1 << 0)
164 #define H323_DTMF_INBAND        (1 << 1)
165
166 #ifdef __cplusplus
167 extern "C" {
168 #endif   
169     
170         void h323_gk_urq(void);
171         void h323_end_point_create(int, int);
172         void h323_end_process(void);
173         int  h323_end_point_exist(void);
174     
175         void h323_debug(int, unsigned);
176
177         /* callback function handler*/
178         void h323_callback_register(setup_incoming_cb,  
179                                     setup_outbound_cb,
180                                     on_connection_cb,
181                                     start_logchan_cb,
182                                     clear_con_cb,
183                                     chan_ringing_cb,
184                                     con_established_cb,
185                                     send_digit_cb,
186                                     answer_call_cb);
187
188
189         int h323_set_capability(int, int);
190         int h323_set_alias(struct oh323_alias *);
191         int h323_set_gk(int, char *, char *);
192
193         void h323_set_id(char *);
194         void h323_show_tokens(void);
195
196         /* H323 listener related funcions */
197         int h323_start_listener(int, struct sockaddr_in);
198
199         void h323_native_bridge(const char *, const char *, char *);
200
201         /* Send a DTMF tone to remote endpoint */
202         void h323_send_tone(const char *call_token, char tone);
203
204         /* H323 create and destroy sessions */
205         int h323_make_call(char *host, call_details_t *cd, call_options_t);
206         int h323_clear_call(const char *);
207         void h323_set_options(int nofs, int noh245tun); 
208         
209         /* H.323 alerting and progress */
210         int h323_send_alerting(const char *token);
211         int h323_send_progress(const char *token);
212
213         int h323_answering_call(const char *token, int);
214         int h323_soft_hangup(const char *data); 
215         int h323_show_codec(int fd, int argc, char *argv[]);
216
217
218 #ifdef __cplusplus
219 }
220 #endif
221
222
223