Files
asterisk/addons/ooh323c/src/ooh323ep.h
Alexandr Anikin 9530310954 Reworked chan_ooh323 channel module.
Many architectural and functional changes.
Main changes are threading model chanes (many thread in ooh323 stack
instead of one), modifications and improvements in signalling part,
additional codecs support (726, speex), t38 mode support.
This module tested and used in production environment.

(closes issue #15285)
Reported by: may213
Tested by: sles, c0w, OrNix

Review: https://reviewboard.asterisk.org/r/324/



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@227898 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-04 22:10:44 +00:00

679 lines
24 KiB
C

/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooh323ep.h
* This file contains H323 endpoint related functions.
*/
#ifndef OO_H323EP_H_
#define OO_H323EP_H_
#include "ooCapability.h"
#include "ooCalls.h"
#include "ooGkClient.h"
#include "ooports.h"
#include "ooq931.h"
#define DEFAULT_TRACEFILE "trace.log"
#define DEFAULT_TERMTYPE 60
#define DEFAULT_PRODUCTID "ooh323"
#define DEFAULT_CALLERID "objsyscall"
#define DEFAULT_T35COUNTRYCODE 184
#define DEFAULT_T35EXTENSION 0
#define DEFAULT_MANUFACTURERCODE 39
#define DEFAULT_H245CONNECTION_RETRYTIMEOUT 2
#define DEFAULT_CALLESTB_TIMEOUT 60
#define DEFAULT_MSD_TIMEOUT 30
#define DEFAULT_TCS_TIMEOUT 30
#define DEFAULT_LOGICALCHAN_TIMEOUT 30
#define DEFAULT_ENDSESSION_TIMEOUT 15
#define DEFAULT_H323PORT 1720
#ifdef __cplusplus
extern "C" {
#endif
#ifndef EXTERN
#ifdef MAKE_DLL
#define EXTERN __declspec(dllexport)
#else
#define EXTERN
#endif /* MAKE_DLL */
#endif /* EXTERN */
struct OOCapPrefs;
/**
* @defgroup h323ep H323 Endpoint management functions
* @{
*/
/* Default port ranges */
#define TCPPORTSSTART 12000 /*!< Starting TCP port number */
#define TCPPORTSEND 62230 /*!< Ending TCP port number */
#define UDPPORTSSTART 13030 /*!< Starting UDP port number */
#define UDPPORTSEND 13230 /*!< Ending UDP port number */
#define RTPPORTSSTART 14030 /*!< Starting RTP port number */
#define RTPPORTSEND 14230 /*!< Ending RTP port number */
/**
* This structure is used to define the port ranges to be used
* by the application.
*/
typedef struct OOH323Ports {
int start; /*!< Starting port number. */
int max; /*!< Maximum port number. */
int current; /*!< Current port number. */
} OOH323Ports;
/**
* Structure to store all configuration information related to the
* endpoint created by an application
*/
typedef struct OOH323EndPoint {
/**
* This context should be used for allocation of memory for
* items within the endpoint structure.
*/
OOCTXT ctxt;
/**
* This context should be used for allocation of memory for
* message structures.
*/
OOCTXT msgctxt;
char traceFile[MAXFILENAME];
FILE * fptraceFile;
/** Range of port numbers to be used for TCP connections */
OOH323Ports tcpPorts;
/** Range of port numbers to be used for UDP connections */
OOH323Ports udpPorts;
/** Range of port numbers to be used for RTP connections */
OOH323Ports rtpPorts;
ASN1UINT flags;
int termType; /* 50 - Terminal entity with No MC,
60 - Gateway entity with no MC,
70 - Terminal Entity with MC, but no MP etc.*/
int t35CountryCode;
int t35Extension;
int manufacturerCode;
const char *productID;
const char *versionID;
const char *callerid;
char callingPartyNumber[50];
OOSOCKET *stackSocket;
OOAliases *aliases;
int callType;
struct ooH323EpCapability *myCaps;
OOCapPrefs capPrefs;
int noOfCaps;
OOH225MsgCallbacks h225Callbacks;
OOH323CALLBACKS h323Callbacks;
char signallingIP[20];
int listenPort;
OOSOCKET *listener;
OOH323CallData *callList;
OOCallMode callMode; /* audio/audiorx/audiotx/video/fax */
int dtmfmode;
ASN1UINT callEstablishmentTimeout;
ASN1UINT msdTimeout;
ASN1UINT tcsTimeout;
ASN1UINT logicalChannelTimeout;
ASN1UINT sessionTimeout;
int cmdPipe[2];
struct ooGkClient *gkClient;
OOInterface *ifList; /* interface list for the host we are running on*/
OOBOOL isGateway;
OOSOCKET cmdSock;
} OOH323EndPoint;
#define ooEndPoint OOH323EndPoint
/**
* This function is the first function to be invoked before using stack. It
* initializes the H323 Endpoint.
* @param callMode Type of calls to be made(audio/video/fax).
* (OO_CALLMODE_AUDIO, OO_CALLMODE_VIDEO)
* @param tracefile Trace file name.
*
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooH323EpInitialize
(enum OOCallMode callMode, const char* tracefile);
/**
* This function is used to represent the H.323 application endpoint as
* gateway, instead of an H.323 phone endpoint.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetAsGateway(void);
EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int manufacturer,
char* vendor, char* version);
/**
* This function is used to assign a local ip address to be used for call
* signalling.
* @param localip Dotted IP address to be used for call signalling.
* @param listenport Port to be used for listening for incoming calls.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetLocalAddress(const char* localip, int listenport);
/**
* This function is used to set the range of tcp ports the application will
* use for tcp transport.
* @param base Starting port number for the range
* @param max Ending port number for the range.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetTCPPortRange(int base, int max);
/**
* This function is used to set the range of udp ports the application will
* use for udp transport.
* @param base Starting port number for the range
* @param max Ending port number for the range.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetUDPPortRange(int base, int max);
/**
* This function is used to set the range of rtp ports the application will
* use for media streams.
* @param base Starting port number for the range
* @param max Ending port number for the range.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetRTPPortRange(int base, int max);
/**
* This function is used to set the trace level for the H.323 endpoint.
* @param traceLevel Level of tracing.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
*/
EXTERN int ooH323EpSetTraceLevel(int traceLevel);
/**
* This function is used to add the h323id alias for the endpoint.
* @param h323id H323-ID to be set as alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddAliasH323ID(const char* h323id);
/**
* This function is used to add the dialed digits alias for the
* endpoint.
* @param dialedDigits Dialed-Digits to be set as alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddAliasDialedDigits(const char* dialedDigits);
/**
* This function is used to add the url alias for the endpoint.
* @param url URL to be set as an alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddAliasURLID(const char* url);
/**
* This function is used to add an email id as an alias for the endpoint.
* @param email Email id to be set as an alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddAliasEmailID(const char* email);
/**
* This function is used to add an ip address as an alias.
* @param ipaddress IP address to be set as an alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddAliasTransportID(const char* ipaddress);
/**
* This function is used to clear all the aliases used by the
* H323 endpoint.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpClearAllAliases(void);
/**
* This function is used to set the H225 message callbacks for the
* endpoint.
* @param h225Callbacks Callback structure containing various callbacks.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetH225MsgCallbacks(OOH225MsgCallbacks h225Callbacks);
/**
* This function is used to set high level H.323 callbacks for the endpoint.
* Make sure all unused callbacks in the structure are set to NULL before
* calling this function.
* @param h323Callbacks Callback structure containing various high level
* callbacks.
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooH323EpSetH323Callbacks(OOH323CALLBACKS h323Callbacks);
/**
* This function is the last function to be invoked after done using the
* stack. It closes the H323 Endpoint for an application, releasing all
* the associated memory.
*
* @return OO_OK on success
* OO_FAILED on failure
*/
EXTERN int ooH323EpDestroy(void);
/**
* This function is used to enable the auto answer feature for
* incoming calls
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpEnableAutoAnswer(void);
/**
* This function is used to disable the auto answer feature for
* incoming calls.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpDisableAutoAnswer(void);
/**
* This function is used to enable manual ringback. By default the stack sends
* alerting message automatically on behalf of the endpoint application.
* However, if endpoint application wants to do alerting user part first before
* sending out alerting message, it can enable this feature.
*
* @return OO_OK on success, OO_FAILED on failure
*/
EXTERN int ooH323EpEnableManualRingback(void);
/**
* This function is used to disable manual ringback. By default the
* manual ringback feature is disabled, i.e, the stack sends alerting on behalf
* of the application automatically.
*
* @return OO_OK on success, OO_FAILED on failure
*/
EXTERN int ooH323EpDisableManualRingback(void);
/**
* This function is used to enable MediaWaitForConnect.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpEnableMediaWaitForConnect(void);
/**
* This function is used to disable MediaWaitForConnect.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpDisableMediaWaitForConnect(void);
/**
* This function is used to enable faststart.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpEnableFastStart(void);
/**
* This function is used to disable faststart.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpDisableFastStart(void);
/**
* This function is used to enable tunneling.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpEnableH245Tunneling(void);
/**
* This function is used to disable tunneling.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpDisableH245Tunneling(void);
/**
* This function is used to setup/clear TryBeMaster flag
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpTryBeMaster(int);
/**
* This function is used to enable GkRouted calls.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpEnableGkRouted(void);
/**
* This function is used to disable Gkrouted calls.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpDisableGkRouted(void);
/**
* This function is used to set the product ID.
* @param productID New value for the product id.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetProductID (const char * productID);
/**
* This function is used to set version id.
* @param versionID New value for the version id.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetVersionID (const char * versionID);
/**
* This function is used to set callerid to be used for outbound
* calls.
* @param callerID New value for the caller id.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetCallerID (const char * callerID);
/**
* This function is used to set calling party number to be used for outbound
* calls.Note, you can override it for a specific call by using
* ooCallSetCallingPartyNumber function.
* @param number e164 number to be used as calling party number.
*
* @return OO_OK, on success; OO_FAILED, otherwise.
*/
EXTERN int ooH323EpSetCallingPartyNumber(const char * number);
/**
* This function is used to print the current configuration information of
* the H323 endpoint to log file.
*/
void ooH323EpPrintConfig(void);
/**
* This function is used to add G728 capability to the H323 endpoint.
* @param cap Type of G728 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
* @param startTransmitChannel Callback function to start transmit channel.
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG728Capability
(int cap, int txframes, int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add G729 capability to the H323 endpoint.
* @param cap Type of G729 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
* @param startTransmitChannel Callback function to start transmit channel.
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG729Capability
(int cap, int txframes, int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add G7231 capability to the H323 endpoint.
* @param cap Type of G7231 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param silenceSuppression Silence Suppression support
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
* @param startTransmitChannel Callback function to start transmit channel.
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add G711 capability to the H323 endpoint.
* @param cap Type of G711 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
* @param startTransmitChannel Callback function to start transmit channel.
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG711Capability
(int cap, int txframes, int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add a new GSM capability to the endpoint.
* @param cap Type of GSM capability to be added.
* @param framesPerPkt Number of GSM frames pre packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param scrambled Scrambled enabled/disabled for the capability.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
* @param startTransmitChannel Callback function to start transmit channel.
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
OOBOOL comfortNoise,OOBOOL scrambled,int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add H263 video capability to the H323 endpoint.
* @param cap Capability type - OO_H263VIDEO
* @param sqcifMPI Minimum picture interval for encoding/decoding
* of SQCIF pictures.
* @param qcifMPI Minimum picture interval for encoding/decoding
* of QCIF pictures.
* @param cifMPI Minimum picture interval for encoding/decoding
* of CIF pictures.
* @param cif4MPI Minimum picture interval for encoding/decoding
* of CIF4 pictures.
* @param cif16MPI Minimum picture interval for encoding/decoding
* of CIF16 pictures.
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
* which a transmitter can transmit video or a
* receiver can receive video.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
* @param startTransmitChannel Callback function to start transmit channel.
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
unsigned qcifMPI, unsigned cifMPI,
unsigned cif4MPI, unsigned cif16MPI,
unsigned maxBitRate, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to enable rfc 2833 support for the endpoint.
* @param dynamicRTPPayloadType Payload type value to use.
*
* @return OO_OK, on success; OO_FAILED, on failure
*/
EXTERN int ooH323EpEnableDTMFRFC2833(int dynamicRTPPayloadType);
/**
* This function is used to disable rfc 2833 support for the endpoint.
*
* @return OO_OK, on success; OO_FAILED, on failure
*/
EXTERN int ooH323EpDisableDTMFRFC2833(void);
/**
* This function is used to enable the H245(alphanumeric) dtmf capability for
* the endpoint.
* @return OO_OK, on success; OO_FAILED, on failure
*/
EXTERN int ooH323EpEnableDTMFH245Alphanumeric(void);
/**
* This function is used to disable the H245(alphanumeric) dtmf capability for
* the endpoint.
* @return OO_OK, on success; OO_FAILED, on failure
*/
EXTERN int ooH323EpDisableDTMFH245Alphanumeric(void);
/**
* This function is used to enable the H245(signal) dtmf capability for
* the endpoint.
* @return OO_OK, on success; OO_FAILED, on failure
*/
EXTERN int ooH323EpEnableDTMFH245Signal(void);
/**
* This function is used to disable the H245(signal) dtmf capability for
* the endpoint.
* @return OO_OK, on success; OO_FAILED, on failure
*/
EXTERN int ooH323EpDisableDTMFH245Signal(void);
/**/
EXTERN int ooH323EpSetTermType(int value);
EXTERN int ooH323EpAddG726Capability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
EXTERN int ooH323EpAddAMRNBCapability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
EXTERN int ooH323EpAddAMRNBCapability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
EXTERN int ooH323EpAddSpeexCapability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel);
EXTERN int ooH323EpEnableDTMFCISCO(int dynamicRTPPayloadType);
EXTERN int ooH323EpDisableDTMFCISCO(void);
EXTERN int ooH323EpEnableDTMFQ931Keypad(void);
EXTERN int ooH323EpDisableDTMFQ931Keypad(void);
/**/
/**
* This function is used to add callbacks to the gatekeeper client. If user
* application wants to do some special processing of various gatekeeper client
* events, that can be done through these callbacks.
* @param gkClientCallbacks Handle to the callback structure.Make sure all
* the members of the structure are appropriately
* initialized.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetGkClientCallbacks(OOGKCLIENTCALLBACKS gkClientCallbacks);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif