912b0815205818fbfc5711a67d9b4a8ebf6476f9
[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_oh323 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 /** call_option struct is filled from the 
34         PBX application and passed through make_call 
35         function*/
36 typedef struct call_options {
37         char            *callerid;
38         int             noFastStart;
39         int             noH245Tunnelling;
40         int             noSilenceSuppression;
41         int             progress_setup;
42         int             progress_alert;
43         int             progress_audio;
44         unsigned int    port;
45 } call_options_t;
46
47 extern call_options_t global_options;
48
49 /* structure to hold the valid asterisk users */
50 struct oh323_user {
51         char name[80];
52         char context[80];
53         char secret[80];
54         char callerid[80];
55         char accountcode[20];
56         int amaflags;
57         int inUse;
58         int incominglimit;
59         int bridge;
60         int nat;
61         int dtmfmode;
62         int host;
63         call_options_t call_options;
64         struct ast_ha *ha;
65         struct sockaddr_in addr;
66         struct oh323_user *next;
67 };
68
69 /* structure to hold the valid asterisk peers 
70    All peers are registered to a GK if there is one */
71 struct oh323_peer {
72         char name[80];
73         char context[80];
74         int inUse;
75         int outgoinglimit;
76         int bridge;
77         int nat;
78         int dtmfmode;
79         struct sockaddr_in addr;
80         int delme;
81         call_options_t call_options;
82         struct oh323_peer *next;
83 };
84
85 /* structure to hold the H.323 aliases which get registered to 
86    the H.323 endpoint and gatekeeper */
87 struct oh323_alias {
88         char name[80];
89         char e164[20];                          /* tells a GK to route this E.164 to this alias */
90         char prefix[500];                       /* tells a GK this alias supports these prefixes */
91         char secret[20];                        /* the H.235 password to send to the GK for authentication */
92         char context[80];
93         struct oh323_alias *next;       
94 };
95
96 /** call_details struct call detail records 
97         to asterisk for processing and used for matching up 
98         asterisk channels to acutal h.323 connections */
99 typedef struct call_details {   
100         unsigned int call_reference;
101
102         const char *call_token;                         
103         const char *call_source_aliases;
104         const char *call_dest_alias;
105         const char *call_source_e164;
106         const char *call_dest_e164;
107         const char *call_redir_e164;
108         const char *sourceIp;
109 } call_details_t;
110
111 typedef struct rtp_info {
112         char *addr;
113         unsigned int port;
114 } rtp_info_t;
115
116 /* This is a callback prototype function, called pass
117    DTMF down the RTP. */
118 typedef int (*send_digit_cb)(unsigned, char);
119 send_digit_cb   on_send_digit; 
120
121 /* This is a callback prototype function, called to collect
122    the external RTP port from Asterisk. */
123 typedef rtp_info_t *(*on_connection_cb)(unsigned);
124 on_connection_cb        on_create_connection; 
125
126 /* This is a callback prototype function, called upon
127    an incoming call happens. */
128 typedef call_options_t *(*setup_incoming_cb)(call_details_t);
129 setup_incoming_cb               on_incoming_call;
130
131 /* This is a callback prototype function, called upon
132    an outbound call. */
133 typedef int (*setup_outbound_cb)(call_details_t);
134 setup_outbound_cb       on_outgoing_call; 
135
136 /* This is a callback prototype function, called when the openh323 
137    OnStartLogicalChannel is invoked.
138    2 more arguments - direction and payload type.
139  */
140 typedef void (*start_logchan_cb)(unsigned int, const char *, int, int, int);
141 start_logchan_cb        on_start_logical_channel; 
142
143 /* This is a callback protoype function, called when the openh323
144    OnConnectionEstablished is inovked */
145 typedef void (*con_established_cb)(unsigned);
146 con_established_cb              on_connection_established;
147
148 /* This is a callback prototype function, called when the openH323
149    OnConnectionCleared callback is invoked */
150 typedef void (*clear_con_cb)(call_details_t);
151 clear_con_cb            on_connection_cleared;
152
153 /* This is a callback prototype function, called when the openh323 
154    OnReceivedAckPDU is invoked. */
155 typedef void (*setup_rtp_cb)(unsigned int, const char *, int);
156 setup_rtp_cb            on_setup_rtp_peer; 
157
158 typedef int (*progress_cb)(unsigned, int);
159 progress_cb             on_progress;
160
161 /* debug flag */
162 int h323debug;
163
164 #define H323_DTMF_RFC2833       (1 << 0)
165 #define H323_DTMF_INBAND        (1 << 1)
166
167 /* Required to declare global variables from chan_h323.c */
168 #ifndef BOOL
169 #define BOOL int
170 #endif
171
172 #ifdef __cplusplus
173 extern "C" {
174 #endif   
175
176         /* chan_h323 global parameters */
177         extern BOOL noFastStart;
178         extern BOOL noH245Tunnelling;
179         extern BOOL noSilenceSuppression;
180     
181         void h323_gk_urq(void);
182         void h323_end_point_create(void);
183         void h323_end_process(void);
184         int  h323_end_point_exist(void);
185     
186         void h323_debug(int, unsigned);
187
188         /* callback function handler*/
189         void h323_callback_register(setup_incoming_cb,
190                                         setup_outbound_cb,
191                                         on_connection_cb,
192                                         start_logchan_cb,
193                                         clear_con_cb,
194                                         con_established_cb,
195                                         send_digit_cb,
196                                         progress_cb);
197
198         int h323_set_capability(int, int);
199         int h323_set_alias(struct oh323_alias *);
200         int h323_set_gk(int, char *, char *);
201
202         void h323_set_id(char *);
203
204         /* H323 listener related funcions */
205         int h323_start_listener(int, struct sockaddr_in);
206
207         void h323_native_bridge(const char *, char *, char *);
208
209         /* Send a DTMF tone to remote endpoint */
210         void h323_send_tone(const char *call_token, char tone);
211
212         /* H323 create and destroy sessions */
213         int h323_make_call(char *host, call_details_t *cd, call_options_t *call_options);
214         int h323_clear_call(const char *);
215         int h323_answering_call(const char *token, int);
216         
217         int h323_show_codec(int fd, int argc, char *argv[]);
218
219
220 #ifdef __cplusplus
221 }
222 #endif
223
224
225