c330dd883ae6b6afed0b3a77e60d6c5168279161
[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 /* 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 context[80];
60         int     noFastStart;
61         int     noH245Tunneling;
62         int     noSilenceSuppression;
63         int inUse;
64         int outgoinglimit;
65         int bridge;
66         int nat;
67         int dtmfmode;
68         struct sockaddr_in addr;
69         int delme;
70         struct oh323_peer *next;
71 };
72
73 /* structure to hold the H.323 aliases which get registered to 
74    the H.323 endpoint and gatekeeper */
75 struct oh323_alias {
76         char name[80];
77         char e164[20];                          /* tells a GK to route this E.164 to this alias */
78         char prefix[500];                       /* tells a GK this alias supports these prefixes */
79         char secret[20];                        /* the H.235 password to send to the GK for authentication */
80         char context[80];
81         struct oh323_alias *next;       
82 };
83
84 /** call_option struct is filled from the 
85         PBX application and passed through make_call 
86         function*/
87 typedef struct call_options {
88         char               *callerid;
89         int                             noFastStart;
90         int                             noH245Tunnelling;
91         int                             noSilenceSuppression;
92         unsigned int    port;
93 } call_options_t;
94
95 /** call_details struct call detail records 
96         to asterisk for processing and used for matching up 
97         asterisk channels to acutal h.323 connections */
98 typedef struct call_details {   
99         unsigned int call_reference;
100
101         const char *call_token;                         
102         const char *call_source_aliases;
103         const char *call_dest_alias;
104         const char *call_source_e164;
105         const char *call_dest_e164;
106         const char *sourceIp;
107 } call_details_t;
108
109 typedef struct rtp_info {
110         char *addr;
111         unsigned int port;
112 } rtp_info_t;
113
114 /* This is a callback prototype function, called pass
115    DTMF down the RTP. */
116 typedef int (*send_digit_cb)(unsigned, char);
117 send_digit_cb   on_send_digit; 
118
119 /* This is a callback prototype function, called to collect
120    the external RTP port from Asterisk. */
121 typedef rtp_info_t *(*on_connection_cb)(unsigned);
122 on_connection_cb        on_create_connection; 
123
124 /* This is a callback prototype function, called upon
125    an incoming call happens. */
126 typedef int (*setup_incoming_cb)(call_details_t);
127 setup_incoming_cb               on_incoming_call;
128
129 /* This is a callback prototype function, called upon
130    an outbound call. */
131 typedef int (*setup_outbound_cb)(call_details_t);
132 setup_outbound_cb       on_outgoing_call; 
133
134 /* This is a callback prototype function, called when the openh323 
135    OnStartLogicalChannel is invoked. */
136 typedef void (*start_logchan_cb)(unsigned int, const char *, int);
137 start_logchan_cb        on_start_logical_channel; 
138
139 /* This is a callback protoype function, called when the openh323
140    OnConnectionEstablished is inovked */
141 typedef void (*con_established_cb)(unsigned);
142 con_established_cb              on_connection_established;
143
144 /* This is a callback prototype function, called when the openH323
145    OnConnectionCleared callback is invoked */
146 typedef void (*clear_con_cb)(call_details_t);
147 clear_con_cb            on_connection_cleared;
148
149 /* debug flag */
150 int h323debug;
151
152 #define H323_DTMF_RFC2833       (1 << 0)
153 #define H323_DTMF_INBAND        (1 << 1)
154
155 #ifdef __cplusplus
156 extern "C" {
157 #endif   
158     
159         void h323_gk_urq(void);
160         void h323_end_point_create(void);
161         void h323_end_process(void);
162         int  h323_end_point_exist(void);
163     
164         void h323_debug(int, unsigned);
165
166         /* callback function handler*/
167         void h323_callback_register(setup_incoming_cb,
168                                                                 setup_outbound_cb,
169                                                                 on_connection_cb,
170                                                                 start_logchan_cb,
171                                                                 clear_con_cb,
172                                                                 con_established_cb,
173                                                                 send_digit_cb);
174
175
176         int h323_set_capability(int, int);
177         int h323_set_alias(struct oh323_alias *);
178         int h323_set_gk(int, char *, char *);
179
180         void h323_set_id(char *);
181
182         /* H323 listener related funcions */
183         int h323_start_listener(int, struct sockaddr_in);
184
185         void h323_native_bridge(const char *, char *, char *);
186
187         /* Send a DTMF tone to remote endpoint */
188         void h323_send_tone(const char *call_token, char tone);
189
190         /* H323 create and destroy sessions */
191         int h323_make_call(char *host, call_details_t *cd, call_options_t);
192         int h323_clear_call(const char *);
193         int h323_answering_call(const char *token, int);
194         
195         int h323_show_codec(int fd, int argc, char *argv[]);
196
197
198 #ifdef __cplusplus
199 }
200 #endif
201
202
203