Merged revisions 317837 via svnmerge from
[asterisk/asterisk.git] / addons / ooh323c / src / ooq931.h
1 /*
2  * Copyright (C) 2004-2005 by Objective Systems, Inc.
3  *
4  * This software is furnished under an open source license and may be 
5  * used and copied only in accordance with the terms of this license. 
6  * The text of the license may generally be found in the root 
7  * directory of this installation in the COPYING file.  It 
8  * can also be viewed online at the following URL:
9  *
10  *   http://www.obj-sys.com/open/license.html
11  *
12  * Any redistributions of this file including modified versions must 
13  * maintain this copyright notice.
14  *
15  *****************************************************************************/
16 /**
17  * @file ooq931.h 
18  * This file contains functions to support call signalling. 
19  */
20
21 #ifndef _OOQ931HDR_H_
22 #define _OOQ931HDR_H_
23
24 #include "ooasn1.h"
25 #include "ootypes.h"
26 #include "H323-MESSAGES.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #ifndef EXTERN
33 #ifdef MAKE_DLL
34 #define EXTERN __declspec(dllexport)
35 #else
36 #define EXTERN
37 #endif /* MAKE_DLL */
38 #endif /* EXTERN */
39
40 /** 
41  * @defgroup q931 Q.931/H.2250 Message Handling
42  * @{
43  */
44 /* Maximum length of the Calling/Called party number number */
45 #define OO_MAX_NUMBER_LENGTH 50
46
47 /* Maximum value for a call token identifier */
48 #define OO_MAX_CALL_TOKEN 999999
49
50 /* Q.931 packet must be at least 5 bytes long */
51 #define Q931_E_TOOSHORT         (-1001)  
52 /* callReference field must be 2 bytes long */
53 #define Q931_E_INVCALLREF       (-1002)  
54 /* invalid length of message */
55 #define Q931_E_INVLENGTH        (-1003)  
56
57 enum Q931MsgTypes {
58    Q931NationalEscapeMsg  = 0x00,
59    Q931AlertingMsg        = 0x01,
60    Q931CallProceedingMsg  = 0x02,
61    Q931ConnectMsg         = 0x07,
62    Q931ConnectAckMsg      = 0x0f,
63    Q931ProgressMsg        = 0x03,
64    Q931SetupMsg           = 0x05,
65    Q931SetupAckMsg        = 0x0d,
66    Q931ResumeMsg          = 0x26,
67    Q931ResumeAckMsg       = 0x2e,
68    Q931ResumeRejectMsg    = 0x22,
69    Q931SuspendMsg         = 0x25,
70    Q931SuspendAckMsg      = 0x2d,
71    Q931SuspendRejectMsg   = 0x21,
72    Q931UserInformationMsg = 0x20,
73    Q931DisconnectMsg      = 0x45,
74    Q931ReleaseMsg         = 0x4d,
75    Q931ReleaseCompleteMsg = 0x5a,
76    Q931RestartMsg         = 0x46,
77    Q931RestartAckMsg      = 0x4e,
78    Q931SegmentMsg         = 0x60,
79    Q931CongestionCtrlMsg  = 0x79,
80    Q931InformationMsg     = 0x7b,
81    Q931NotifyMsg          = 0x6e,
82    Q931StatusMsg          = 0x7d,
83    Q931StatusEnquiryMsg   = 0x75,
84    Q931FacilityMsg        = 0x62
85 };
86
87 enum Q931IECodes {
88    Q931BearerCapabilityIE   = 0x04,
89    Q931CauseIE              = 0x08,
90    Q931FacilityIE           = 0x1c,
91    Q931ProgressIndicatorIE  = 0x1e,
92    Q931CallStateIE          = 0x14,
93    Q931DisplayIE            = 0x28,
94    Q931SignalIE             = 0x34,
95    Q931CallingPartyNumberIE = 0x6c,
96    Q931CalledPartyNumberIE  = 0x70,
97    Q931RedirectingNumberIE  = 0x74,
98    Q931UserUserIE           = 0x7e,
99    Q931KeypadIE             = 0x2c
100 };
101
102 enum Q931InformationTransferCapability {
103    Q931TransferSpeech,
104    Q931TransferUnrestrictedDigital = 8,
105    Q931TransferRestrictedDigital = 9,
106    Q931Transfer3_1kHzAudio = 16,
107    Q931TrasnferUnrestrictedDigitalWithTones = 17,
108    Q931TransferVideo = 24
109 };
110
111 enum Q931CauseValues {
112    Q931UnallocatedNumber           = 0x01,
113    Q931NoRouteToNetwork            = 0x02,
114    Q931NoRouteToDestination        = 0x03,
115    Q931ChannelUnacceptable         = 0x06,
116    Q931NormalCallClearing          = 0x10,
117    Q931UserBusy                    = 0x11,
118    Q931NoResponse                  = 0x12,
119    Q931NoAnswer                    = 0x13,
120    Q931SubscriberAbsent            = 0x14,
121    Q931CallRejected                = 0x15,
122    Q931NumberChanged               = 0x16,
123    Q931Redirection                 = 0x17,
124    Q931DestinationOutOfOrder       = 0x1b,
125    Q931InvalidNumberFormat         = 0x1c,
126    Q931NormalUnspecified           = 0x1f,
127    Q931StatusEnquiryResponse       = 0x1e,
128    Q931NoCircuitChannelAvailable   = 0x22,
129    Q931NetworkOutOfOrder           = 0x26,
130    Q931TemporaryFailure            = 0x29,
131    Q931Congestion                  = 0x2a,
132    Q931RequestedCircuitUnAvailable = 0x2c,
133    Q931ResourcesUnavailable        = 0x2f,
134    Q931IncompatibleDestination     = 0x58,
135    Q931ProtocolErrorUnspecified    = 0x6f,
136    Q931RecoveryOnTimerExpiry       = 0x66,
137    Q931InvalidCallReference        = 0x51,
138    Q931ErrorInCauseIE              = 0
139 };
140
141 enum Q931SignalInfo {
142    Q931SignalDialToneOn,
143    Q931SignalRingBackToneOn,
144    Q931SignalInterceptToneOn,
145    Q931SignalNetworkCongestionToneOn,
146    Q931SignalBusyToneOn,
147    Q931SignalConfirmToneOn,
148    Q931SignalAnswerToneOn,
149    Q931SignalCallWaitingTone,
150    Q931SignalOffhookWarningTone,
151    Q931SignalPreemptionToneOn,
152    Q931SignalTonesOff = 0x3f,
153    Q931SignalAlertingPattern0 = 0x40,
154    Q931SignalAlertingPattern1,
155    Q931SignalAlertingPattern2,
156    Q931SignalAlertingPattern3,
157    Q931SignalAlertingPattern4,
158    Q931SignalAlertingPattern5,
159    Q931SignalAlertingPattern6,
160    Q931SignalAlertingPattern7,
161    Q931SignalAlretingOff = 0x4f,
162    Q931SignalErrorInIE = 0x100
163 };
164
165 enum Q931NumberingPlanCodes {
166    Q931UnknownPlan          = 0x00,
167    Q931ISDNPlan             = 0x01,
168    Q931DataPlan             = 0x03,
169    Q931TelexPlan            = 0x04,
170    Q931NationalStandardPlan = 0x08,
171    Q931PrivatePlan          = 0x09,
172    Q931ReservedPlan         = 0x0f
173 };
174
175 enum Q931TypeOfNumberCodes {
176    Q931UnknownType          = 0x00,
177    Q931InternationalType    = 0x01,
178    Q931NationalType         = 0x02,
179    Q931NetworkSpecificType  = 0x03,
180    Q931SubscriberType       = 0x04,
181    Q931AbbreviatedType      = 0x06,
182    Q931ReservedType         = 0x07
183 };
184
185 enum Q931CodingStandard{
186   Q931CCITTStd = 0,
187   Q931ReservedInternationalStd,
188   Q931NationalStd,
189   Q931NetworkStd
190 };
191
192 enum Q931TransferMode {
193   Q931TransferCircuitMode = 0,   /* 00 */
194   Q931TransferPacketMode  = 2   /* 10 */
195 };
196
197 enum Q931TransferRate{
198   Q931TransferRatePacketMode = 0x00,  /* 00000 */
199   Q931TransferRate64Kbps     = 0x10,  /* 10000 */
200   Q931TransferRate128kbps    = 0x11,  /* 10001 */
201   Q931TransferRate384kbps    = 0x13,  /* 10011 */
202   Q931TransferRate1536kbps   = 0x15,  /* 10101 */
203   Q931TransferRate1920kbps   = 0x17   /* 10111 */
204 };
205
206 enum Q931UserInfoLayer1Protocol{
207   Q931UserInfoLayer1CCITTStdRate = 1,
208   Q931UserInfoLayer1G711ULaw,
209   Q931UserInfoLayer1G711ALaw,
210   Q931UserInfoLayer1G721ADPCM,
211   Q931UserInfoLayer1G722G725,
212   Q931UserInfoLayer1H261,
213   Q931UserInfoLayer1NonCCITTStdRate,
214   Q931UserInfoLayer1CCITTStdRateV120,
215   Q931UserInfoLayer1X31
216 };
217
218 /*
219   Structure to build store outgoing encoded UUIE
220   The different fields in the structure have octet lengths 
221   as specified in the spec. 
222 */
223 typedef struct Q931InformationElement {
224    int discriminator;
225    int offset;
226    int length;
227    ASN1OCTET data[1];
228 } Q931InformationElement;
229
230 /**
231  * Q.931 message structure. Contains context for memory allocation, 
232  * protocol discriminator, call reference, meesage type and list of 
233  * user-user information elements (IEs).
234  */
235 typedef struct Q931Message {
236    ASN1UINT protocolDiscriminator;
237    ASN1UINT callReference;
238    ASN1BOOL fromDestination;
239    ASN1UINT messageType;      /* Q931MsgTypes */
240    ASN1UINT tunneledMsgType;  /* The H245 message this message is tunneling*/
241    ASN1INT  logicalChannelNo; /* channel number associated with tunneled */
242                               /* message, 0 if no channel */
243    DList ies;    
244    Q931InformationElement *bearerCapabilityIE;
245    Q931InformationElement *callingPartyNumberIE;
246    Q931InformationElement *calledPartyNumberIE;
247    Q931InformationElement *causeIE;
248    Q931InformationElement *keypadIE;
249    H225H323_UserInformation *userInfo;
250 } Q931Message;
251
252 /**
253  * This structure is used to hold an H.323 alias address.
254  */
255 typedef struct OOAliases {
256    int type;           /*!< H.225 AliasAddress choice option (t value) */
257    char *value;        /*!< H.225 AliasAddress value */
258    OOBOOL registered;
259    struct OOAliases *next;
260 } OOAliases;
261
262 #define ooAliases OOAliases
263
264 struct OOH323CallData;
265
266 /*
267  * These are message callbacks which can be used by user applications
268  * to perform application specific things on receiving a particular 
269  * message or before sending a particular message. For ex. user application
270  * can change values of some parameters of setup message before it is actually
271  * sent out.
272  */
273 /**
274  * This callback is triggered when an H.225 SETUP message is received by 
275  * the application.
276  * @param call  The call the message is associated with.
277  * @param pmsg  Q.931 message structure.
278  * @return OO_OK if message processing successful or OO_FAILED if not.
279  */
280 typedef int (*cb_OnReceivedSetup)
281    (struct OOH323CallData *call, struct Q931Message *pmsg);
282
283 /**
284  * This callback is triggered when an H.225 CONNECT message is received by 
285  * the application.
286  * @param call  The call the message is associated with.
287  * @param pmsg  Q.931 message structure.
288  * @return OO_OK if message processing successful or OO_FAILED if not.
289  */
290 typedef int (*cb_OnReceivedConnect)
291    (struct OOH323CallData *call, struct Q931Message *pmsg);
292
293 /**
294  * This callback is triggered after an H.225 SETUP message has been 
295  * constructed and is ready to be sent out.  It provides the application 
296  * with an opportunity to add additional non-standard information.
297  * @param call  The call the message is associated with.
298  * @param pmsg  Q.931 message structure.
299  * @return OO_OK if message processing successful or OO_FAILED if not.
300  */
301 typedef int (*cb_OnBuiltSetup)
302    (struct OOH323CallData *call, struct Q931Message *pmsg);
303
304 /**
305  * This callback is triggered after an H.225 CONNECT message has been 
306  * constructed and is ready to be sent out.  It provides the application 
307  * with an opportunity to add additional non-standard information.
308  * @param call  The call the message is associated with.
309  * @param pmsg  Q.931 message structure.
310  * @return OO_OK if message processing successful or OO_FAILED if not.
311  */
312 typedef int (*cb_OnBuiltConnect)
313    (struct OOH323CallData *call, struct Q931Message *pmsg);
314
315 /**
316  * This structure holds the various callback functions that are 
317  * triggered when H.225 messages are received or constructed.
318  * @see ooH323EpSetH225MsgCallbacks
319  */
320 typedef struct OOH225MsgCallbacks {
321    cb_OnReceivedSetup onReceivedSetup;
322    cb_OnReceivedConnect onReceivedConnect;
323    cb_OnBuiltSetup onBuiltSetup;
324    cb_OnBuiltConnect onBuiltConnect;
325 } OOH225MsgCallbacks;
326
327 /**
328  * This function is invoked to decode a Q931 message. 
329  * 
330  * @param call     Handle to call which owns the message.
331  * @param msg      Pointer to the Q931 message
332  * @param length   Length of the encoded data
333  * @param data     Pointer to the data to be decoded
334  *
335  * @return         Completion status - 0 on success, -1 on failure
336  */
337 EXTERN int ooQ931Decode 
338 (struct OOH323CallData *call, Q931Message* msg, int length, ASN1OCTET *data, int docallbacks);
339
340 /**
341  * This function is used to decode the UUIE of the message from the list of
342  * ies. It decodes the User-User ie and populates the userInfo field of the
343  * message.
344  * @param q931Msg    Pointer to the message whose User-User ie has to be 
345  *                   decoded.    
346  *
347  * @return           OO_OK, on success. OO_FAILED, on failure.
348  */ 
349 EXTERN int ooDecodeUUIE(OOCTXT* pctxt, Q931Message *q931Msg);
350
351 /**
352  * This function is used to encode the UUIE field of the Q931 message.
353  * It encodes UUIE and adds the encoded data to the list of ies.
354  * @param q931msg        Pointer to the Q931 message whose UUIE field has to be
355  *                       encoded.
356  *
357  * @return               OO_OK, on success. OO_FAILED, on failure.
358  */
359 EXTERN int ooEncodeUUIE(OOCTXT* pctxt, Q931Message *q931msg);
360
361 /**
362  * This function is invoked to retrieve an IE element from a Q931 message. 
363  * 
364  * @param q931msg  Pointer to the Q931 message
365  * @param ieCode   IE code for the IE element to be retrieved
366  *
367  * @return         Pointer to a Q931InformationElement contating 
368  *                 the IE element.
369  */
370 EXTERN Q931InformationElement* ooQ931GetIE (const Q931Message* q931msg, 
371                                             int ieCode);
372
373 /**
374  * This function is invoked to print a Q931 message. 
375  * 
376  * @param q931msg  Pointer to the Q931 message
377  *
378  * @return         - none
379  */
380 EXTERN void ooQ931Print (const Q931Message* q931msg);
381
382
383 /**
384  * This function is invoked to create an outgoing Q931 message. 
385  * 
386  * @param msg      Reference to the pointer of type Q931 message.
387  * @param msgType  Type of Q931 message to be created
388  *
389  * @return         Completion status - 0 on success, -1 on failure
390  */
391 EXTERN int ooCreateQ931Message(OOCTXT* pctxt, Q931Message **msg, int msgType);
392
393 /**
394  * This function is invoked to generate a unique call reference number. 
395  *
396  * @return         - call reference number
397  */
398 EXTERN ASN1USINT ooGenerateCallReference(void);
399
400
401 /**
402  * This function is used to generate a unique call identifier for the call.
403  * @param callid      Pointer to the callid structure, which will be populated
404  *                    with the generated callid.
405  *
406  * @return            OO_OK, on success. OO_FAILED, on failure.
407  */
408 EXTERN int ooGenerateCallIdentifier(H225CallIdentifier *callid);
409
410 /**
411  * This function is invoked to release the memory used up by a Q931 message 
412  * 
413  * @param q931Msg  Pointer to a Q931 message which has to be freed.
414  *
415  * @return         Completion status - 0 on success, -1 on failure
416  */
417 EXTERN int ooFreeQ931Message(OOCTXT* pctxt, Q931Message *q931Msg);
418
419 /**
420  * This function is invoked to retrive the outgoing message buffer for 
421  * Q931 message
422  *
423  * @param call     Pointer to call for which outgoing Q931 message has to be 
424  *                 retrieved.
425  * @param msgbuf   Pointer to a buffer in which retrieved message will
426  *                 be returned.
427  * @param len      Pointer to int in which length of the buffer will
428  *                 be returned.
429  * @param msgType  Pointer to integer in which message type of the ougoing
430  *                 message is returned.
431  *
432  * @return         Completion status - 0 on success, -1 on failure
433  */
434 EXTERN int ooGetOutgoingQ931Msgbuf
435 (struct OOH323CallData *call, ASN1OCTET * msgbuf, int* len, int *msgType);
436
437 /**
438  * This function is invoked to send a ReleaseComplete message for 
439  * the currently active call.
440  *
441  * @param call    Pointer to the call for which ReleaseComplete message have 
442  *                to be sent.  
443  *
444  * @return         Completion status - 0 on success, -1 on failure
445  */
446 EXTERN int ooSendReleaseComplete(struct OOH323CallData *call);
447
448 /**
449  * This function is invoked to send a call proceeding message in response to
450  * received setup message.
451  *
452  * @param call    Pointer to the call for which CallProceeding message have to
453  *                be sent.  
454  *
455  * @return        Completion status - 0 on success, -1 on failure
456  */
457 EXTERN int ooSendCallProceeding(struct OOH323CallData *call);
458
459 /**
460  * This function is invoked to send alerting message in response to received  
461  * setup message. 
462  *
463  * @param call     Pointer to the call for which Alerting message have to be 
464  *                 sent.  
465  *
466  * @return         Completion status - 0 on success, -1 on failure
467  */
468 EXTERN int ooSendAlerting(struct OOH323CallData *call);
469
470 EXTERN int ooSendProgress(struct OOH323CallData *call);
471
472 /**
473  * This function is invoked to send Facility message.
474  *
475  * @param call     Pointer to the call for which Facility message have to be 
476  *                 sent.  
477  *
478  * @return         Completion status - 0 on success, -1 on failure
479  */
480 EXTERN int ooSendFacility(struct OOH323CallData *call);
481
482
483 /**
484  * This function is used to send dtmf data as Q931 keypad information element
485  * as part of information message.
486  * @param call     Pointer to the call for dtmf data has to be sent.
487  * @param data     Dtmf data to be sent.
488  *
489  * @return         OO_OK, on success; OO_FAILED, on failure.
490  */
491 EXTERN int ooQ931SendDTMFAsKeyPadIE
492           (struct OOH323CallData *call, const char* data);
493
494 /**
495  * This function is invoked to send a Connect message in response to received  
496  * setup message. 
497  *
498  * @param call      Pointer to the call for which connect message has to be 
499  *                  sent.  
500  *
501  * @return          Completion status - 0 on success, -1 on failure
502  */
503 EXTERN int ooSendConnect(struct OOH323CallData *call);
504
505 /**
506  * This function is used to send a SETUP message for outgoing call. It first
507  * creates an H.225 TCP connection with the remote end point and then sends 
508  * SETUP message over this connection.
509  * @param dest      Destination - IP:Port/alias.
510  * @param callToken Unique token for the new call.
511  * @param opts      Call specific options. If passed a non-null value, these
512  *                  options will override global endpoint settings.
513  *
514  * @return          OO_OK, on success. OO_FAILED, on failure
515  */
516 EXTERN int ooH323MakeCall(char *dest, char *callToken, ooCallOptions *opts);
517
518 /**
519  * Helper function used to make a call once it is approved by the Gk.
520  * In case of no gk, this function is directly called to make a call.
521  * @param call        Handle to the new call.
522  *
523  * @return            OO_OK, on success. OO_FAILED, on failure
524  */
525 int ooH323CallAdmitted( struct OOH323CallData *call);
526
527 /**
528  * This function is used to handle a call forward request sent to local
529  * endpoint by remote endpoint.
530  * @param call        Handle to the call which is being forwarded
531  *
532  * @return            OO_OK, on success. OO_FAILED, on failure.
533  */
534 EXTERN int ooH323HandleCallFwdRequest(struct OOH323CallData *call);
535
536 /**
537  * This function is used for forwarding/redirecting a call to third party.
538  * @param callToken   callToken for the call which has to be redirected.
539  * @param dest        Address to which call has to be forwarded. Can be 
540  *                    IP:Port or alias.
541  *
542  * @return            OO_OK, on success. OO_FAILED, on failure.
543  */
544 EXTERN int ooH323ForwardCall(char* callToken, char *dest);
545
546 /**
547  * This function is used to hangup a currently active call. It sets the call
548  * state to CLEARING and initiates closing of all logical channels.
549  * @param callToken Unique token of the call to be hanged.
550  * @param reason    Reason for ending call.
551  *
552  * @return          OO_OK, on success. OO_FAILED, on failure.
553  */
554 EXTERN int ooH323HangCall(char * callToken, OOCallClearReason reason, int q931);
555
556
557 /** 
558  * Function to accept a call by sending connect. This function is used
559  * as a helper function to ooSendConnect.
560  * @param call      Pointer to the call for which connect has to be sent
561  *
562  * @return          OO_OK, on success. OO_FAILED, on failure.
563  */
564 EXTERN int ooAcceptCall(struct OOH323CallData *call);
565
566 /*
567  * An helper function to ooMakeCall.
568  * @param call      Pointer to the new call.
569  *
570  * @return          OO_OK, on success. OO_FAILED, on failure.
571  */
572 EXTERN int ooH323MakeCall_helper(struct OOH323CallData *call);
573
574 /**
575  * This function is used to parse the destination
576  * @param call      Handle to related call.
577  * @param dest      Destination string to be parsed.
578  * @param parsedIP  Pointer to buffer in which parsed ip:port will be returned.
579  * @param len       Length of the buffer passed.
580  * @param aliasList Aliase List in which new aliases will be added.
581  *
582  * @return          OO_OK, on success. OO_FAILED, on failure.
583  */
584 int ooParseDestination
585    (struct OOH323CallData *call, char *dest, char *parsedIP, unsigned len,
586     OOAliases** aliasList);
587
588 /**
589  * This function is used to generate a new call token
590  * @param callToken Handle to the buffer in which new call token will be
591  *                  returned
592  * @param size      size of the buffer
593  *
594  * @return          OO_OK, on success. OO_FAILED, on failure.
595  */
596 int ooGenerateCallToken (char *callToken, size_t size);
597
598
599 /**
600  * This function sends an encoded H.245 message buffer as a tunneled 
601  * H.245 Facility message.
602  * @param call             Pointer to the call for which H.245 message has to
603  *                         be tunneled.
604  * @param msgbuf           Pointer to the encoded H.245 message to be tunneled.
605  *
606  * @param h245Len          Length of the encoded H.245 message buffer.
607  * @param h245MsgType      Type of the H245 message
608  * @param associatedChan   The logical channel number with which the tunneled
609  *                         message is associated. In case of no channel, this
610  *                         value should be 0.
611  *
612  * @return                 OO_OK, on success. OO_FAILED, on failure.
613  */
614 EXTERN int ooSendAsTunneledMessage
615 (struct OOH323CallData *call, ASN1OCTET* msgbuf, 
616  int h245Len, int h245MsgType, int associatedChan); 
617  
618
619 /**
620  * This function is used to encode an H.225 message.
621  * @param call            Handle to the call.
622  * @param pq931Msg        Pointer to the message to be encoded.
623  * @param msgbuf          Pointer to the buffer in which encoded message will 
624  *                        be returned.
625  * @param size            Size of the buffer passed.
626  *
627  * @return                OO_OK, on success. OO_FAILED, on failure.
628  */
629 int ooEncodeH225Message(struct OOH323CallData *call, Q931Message *pq931Msg, 
630                         char *msgbuf, int size);
631
632 /**
633  * This is a callback function which is called when there is no CONNECT 
634  * response from the remote endpoint after the SETUP has been sent and timeout
635  * period has passed.
636  * @param data            The callback data registered at the time of timer 
637  *                        creation.
638  *
639  * @return                OO_OK, on success. OO_FAILED, on failure.
640  */
641 int ooCallEstbTimerExpired(void *data);
642
643
644
645 /**
646  * This function is used to add a keypad IE to a Q931 message for sending dtmf.
647  * @param pmsg            Q931 message to which keypad ie has to be
648  *                        added.
649  * @param data            DTMF data to be sent.
650  *
651  * @return                OO_OK on success, OO_FAILED, on failure.
652  */
653 EXTERN int ooQ931SetKeypadIE(OOCTXT* pctxt, Q931Message *pmsg, const char* data);
654
655 /**
656  * This function is used to add a bearer capability IE to a Q931 message.
657  * @param pmsg            Q931 message to which bearer capability ie has to be
658  *                        added.
659  * @param codingStandard  Coding standard to be used.
660  * @param capability      Information transfer capability
661  * @param transferMode    Information transfer mode.(circuit/packet modes).
662  * @param transferRate    Information transfer rate.
663  * @param userInfoLayer1  User information layer 1 protocol.
664  *
665  * @return                OO_OK on success, OO_FAILED, on failure.
666  */
667 EXTERN int ooSetBearerCapabilityIE
668    (OOCTXT* pctxt, Q931Message *pmsg, enum Q931CodingStandard codingStandard, 
669     enum Q931InformationTransferCapability capability, 
670     enum Q931TransferMode transferMode, enum Q931TransferRate transferRate,
671     enum Q931UserInfoLayer1Protocol userInfoLayer1);
672
673 /**
674  * This function is used to add a called party number ie to a q931 message.
675  * @param pmsg            Q931 message to which CalledPartyNumber IE has to be
676  *                        added.
677  * @param number          Number for called party.
678  * @param plan            Numbering Plan used
679  * @param type            Type of number
680  *
681  * @return                OO_OK, on success. OO_FAILED, on failure.
682  */
683 EXTERN int ooQ931SetCalledPartyNumberIE
684    (OOCTXT *pctxt, Q931Message *pmsg, const char *number, unsigned plan, unsigned type);
685
686
687 /**
688  * This function is used to add a CallingPartyNumber ie to a q931 message.
689  * @param pmsg            Q931 message to which CallingPartyNumber IE has to be
690  *                        added.
691  * @param number          Number for calling party.
692  * @param plan            Numbering Plan used
693  * @param type            Type of number
694  * @param presentation    Presentation of the address is allowed or restricted.
695  * @param screening       Whether address was provided by endpoint or screened
696  *                        by gatekeeper.
697  *
698  * @return                OO_OK, on success. OO_FAILED, on failure.
699  */
700 EXTERN int ooQ931SetCallingPartyNumberIE
701    (OOCTXT* pctxt, Q931Message *pmsg, const char *number, unsigned plan, unsigned type, 
702     unsigned presentation, unsigned screening);
703
704 /** 
705  * This function is used to set a cause ie for a q931 message.
706  * @param pmsg        Valid Q931 Message
707  * @param cause       Q931 Cause Value
708  * @param coding      coding standard used. 0 for ITU-T standard coding
709  * @param location    location. 0 for user.
710  *
711  * @return            OO_OK, on success. OO_FAILED, on failure.
712  */
713 EXTERN int ooQ931SetCauseIE
714    (OOCTXT *pctxt, Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding, 
715     unsigned location);
716
717 /**
718  * This function is used to convert a call clear reason to cause and 
719  * reason code. It is used when local user is endoing the call and 
720  * sending releaseComplete.
721  * @param clearReason   Reason for ending call.
722  * @param cause         Pointer to Q931CauseVaules enum in which cause
723  *                      will be returned.
724  * @param reasonCode    Pointer to unsigned int in which reasonCode will
725  *                      be returned.
726  *
727  * @return              OO_OK, on success. OO_FAILED, on failure.
728  */
729 EXTERN int ooQ931GetCauseAndReasonCodeFromCallClearReason
730    (OOCallClearReason clearReason, enum Q931CauseValues *cause, 
731     unsigned *reasonCode);
732
733 /**
734  * This function is used to convert a cause value and reason code received
735  * in ReleaseComplete message from remote endpoint into a CallClearReason.
736  * @param cause         cause value received.
737  * @param reasonCode    reasonCode received.
738  *
739  * @return              Returns a CallClearReason.
740  */
741 EXTERN OOCallClearReason ooGetCallClearReasonFromCauseAndReasonCode
742    (enum Q931CauseValues cause, unsigned reasonCode);
743
744 /**
745  * This function is used to retrieve the description text for a 
746  * message type.
747  *
748  * @param msgType  Message type.
749  * @return         The text description string.
750  */
751 EXTERN const char* ooGetMsgTypeText (int msgType);
752
753 /**
754  * This function is used to retrieve the text description for a Q931 Cause
755  * value in Cause IE.
756  * @param val     Q931 Cause value
757  * @return        The text description string
758  */
759 EXTERN const char* ooGetQ931CauseValueText (int val);
760
761 EXTERN int ooH323NewCall(char *callToken);
762
763 EXTERN char* ooQ931GetMessageTypeName(int messageType, char* buf);
764 EXTERN char* ooQ931GetIEName(int number, char* buf);
765 EXTERN int ooSendTCSandMSD(struct OOH323CallData *call);
766 EXTERN int ooSendStartH245Facility(struct OOH323CallData *call);
767
768 /** 
769  * @} 
770  */
771 #ifdef __cplusplus
772 }
773 #endif
774
775 #endif /* __Q931HDR_H */