summaryrefslogtreecommitdiff
path: root/addons/ooh323c/src/ooCalls.h
diff options
context:
space:
mode:
authorAlexandr Anikin <may@telecom-service.ru>2009-11-04 22:10:44 +0000
committerAlexandr Anikin <may@telecom-service.ru>2009-11-04 22:10:44 +0000
commit953031095415efa4558ca7eff29d7c85ff8efe89 (patch)
treec8a21eb3b2896c7f5b558913cb7ea914b40a06ce /addons/ooh323c/src/ooCalls.h
parent317435a93200520218c4e9f4bbb8c0258f363876 (diff)
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
Diffstat (limited to 'addons/ooh323c/src/ooCalls.h')
-rw-r--r--addons/ooh323c/src/ooCalls.h72
1 files changed, 69 insertions, 3 deletions
diff --git a/addons/ooh323c/src/ooCalls.h b/addons/ooh323c/src/ooCalls.h
index 64d62d6e1..68dd3bfbd 100644
--- a/addons/ooh323c/src/ooCalls.h
+++ b/addons/ooh323c/src/ooCalls.h
@@ -22,6 +22,7 @@
#include "ooLogChan.h"
#include "ooCapability.h"
+#include <regex.h>
#ifdef __cplusplus
extern "C" {
@@ -54,6 +55,10 @@ extern "C" {
#define OO_M_DISABLEGK ASN1UINTCNT(0x01000000)
#define OO_M_MANUALRINGBACK ASN1UINTCNT(0x10000000)
+#define OO_M_TRYBEMASTER ASN1UINTCNT(0x00000010)
+#define OO_M_AUDIOSESSION ASN1UINTCNT(0x00000100)
+#define OO_M_DATASESSION ASN1UINTCNT(0x00000200)
+#define OO_M_T38SUPPORTED ASN1UINTCNT(0x00000400)
/**
* Call states.
@@ -67,7 +72,8 @@ typedef enum {
OO_CALL_CLEAR, /*!< Call marked for clearing */
OO_CALL_CLEAR_RELEASERECVD, /*!< Release command received. */
OO_CALL_CLEAR_RELEASESENT, /*!< Release sent */
- OO_CALL_CLEARED /*!< Call cleared */
+ OO_CALL_CLEARED, /*!< Call cleared */
+ OO_CALL_REMOVED /* call removed */
} OOCallState;
/**
@@ -128,6 +134,12 @@ typedef struct EXTERN FastStartResponse {
ASN1DynOctStr *elem;
} FastStartResponse;
+typedef struct OOH323Regex {
+ regex_t regex;
+ int inuse;
+ ast_mutex_t lock;
+} OOH323Regex;
+
/**
* This structure is used to maintain all information on an active call.
@@ -136,9 +148,19 @@ typedef struct EXTERN FastStartResponse {
*/
typedef struct OOH323CallData {
OOCTXT *pctxt;
+ OOCTXT *msgctxt;
+ pthread_t callThread;
+ ast_cond_t gkWait;
+ ast_mutex_t Lock;
+ OOBOOL Monitor;
+ OOBOOL fsSent;
+ OOSOCKET CmdChan;
+ OOSOCKET cmdSock;
+ ast_mutex_t* CmdChanLock;
char callToken[20]; /* ex: ooh323c_call_1 */
char callType[10]; /* incoming/outgoing */
OOCallMode callMode;
+ int transfercap;
ASN1USINT callReference;
char ourCallerId[256];
H225CallIdentifier callIdentifier;/* The call identifier for the active
@@ -149,9 +171,11 @@ typedef struct OOH323CallData {
ASN1UINT flags;
OOCallState callState;
OOCallClearReason callEndReason;
+ int q931cause;
unsigned h245ConnectionAttempts;
OOH245SessionState h245SessionState;
int dtmfmode;
+ int dtmfcodec;
OOMediaInfo *mediaInfo;
OOCallFwdData *pCallFwdData;
char localIP[20];/* Local IP address */
@@ -165,7 +189,8 @@ typedef struct OOH323CallData {
char *remoteDisplayName;
struct OOAliases *remoteAliases;
struct OOAliases *ourAliases; /*aliases used in the call for us */
- OOMasterSlaveState masterSlaveState; /*!< Master-Slave state */
+ OOMasterSlaveState masterSlaveState; /*!< Master-Slave state */
+ OOMSAckStatus msAckStatus; /* Master-Slave ack's status */
ASN1UINT statusDeterminationNumber;
OOCapExchangeState localTermCapState;
OOCapExchangeState remoteTermCapState;
@@ -185,7 +210,15 @@ typedef struct OOH323CallData {
unsigned nextSessionID; /* Note by default 1 is audio session, 2 is video and 3 is data, from 3 onwards master decides*/
DList timerList;
ASN1UINT msdRetries;
+ ASN1UINT8 requestSequence;
+ ASN1UINT reqFlags;
+ ASN1UINT t38sides;
+ H235TimeStamp alertingTime, connectTime, endTime; /* time data for gatekeeper */
FastStartResponse *pFastStartRes; /* fast start response */
+ struct OOH323Regex* rtpMask;
+ char rtpMaskStr[120];
+ char lastDTMF;
+ ASN1UINT nextDTMFstamp;
void *usrData; /*!<User can set this to user specific data*/
struct OOH323CallData* next;
struct OOH323CallData* prev;
@@ -278,6 +311,14 @@ typedef int (*cb_OnReceivedDTMF)
(struct OOH323CallData *call, const char *dtmf);
/**
+ * This callback function is triggered when dtmf is received over Q.931(keypad)
+ * or H.245(alphanumeric) or H.245(signal). This is not triggered when rfc
+ * 2833 based dtmf is received.
+ */
+typedef void (*cb_OnModeChanged)
+ (struct OOH323CallData *call, int isT38Mode);
+
+/**
* This structure holds all of the H.323 signaling callback function
* addresses.
* @see ooH323EpSetH323Callbacks
@@ -285,6 +326,7 @@ typedef int (*cb_OnReceivedDTMF)
typedef struct OOH323CALLBACKS {
cb_OnAlerting onNewCallCreated;
cb_OnAlerting onAlerting;
+ cb_OnAlerting onProgress;
cb_OnIncomingCall onIncomingCall;
cb_OnOutgoingCall onOutgoingCall;
cb_OnCallEstablished onCallEstablished;
@@ -292,6 +334,7 @@ typedef struct OOH323CALLBACKS {
cb_OnCallCleared onCallCleared;
cb_OpenLogicalChannels openLogicalChannels;
cb_OnReceivedDTMF onReceivedDTMF;
+ cb_OnModeChanged onModeChanged;
} OOH323CALLBACKS;
/**
@@ -717,7 +760,7 @@ EXTERN int ooCallDisableDTMFQ931Keypad(OOH323CallData *call);
*
* @return Pointer to the call if found, NULL otherwise.
*/
-EXTERN OOH323CallData* ooFindCallByToken(char *callToken);
+EXTERN OOH323CallData* ooFindCallByToken(const char *callToken);
/**
* This function is used to end a call. Based on what stage of clearance the
@@ -815,6 +858,29 @@ EXTERN const char* ooGetCallStateText (OOCallState callState);
* @}
*/
+int isRunning(char *callToken);
+
+int ooCallAddG726Capability(struct OOH323CallData *call, int cap, int txframes,
+ int rxframes, OOBOOL silenceSuppression, int dir,
+ cb_StartReceiveChannel startReceiveChannel,
+ cb_StartTransmitChannel startTransmitChannel,
+ cb_StopReceiveChannel stopReceiveChannel,
+ cb_StopTransmitChannel stopTransmitChannel);
+int ooCallAddAMRNBCapability(struct OOH323CallData *call, int cap, int txframes,
+ int rxframes, OOBOOL silenceSuppression, int dir,
+ cb_StartReceiveChannel startReceiveChannel,
+ cb_StartTransmitChannel startTransmitChannel,
+ cb_StopReceiveChannel stopReceiveChannel,
+ cb_StopTransmitChannel stopTransmitChannel);
+int ooCallAddSpeexCapability(struct OOH323CallData *call, int cap, int txframes,
+ int rxframes, OOBOOL silenceSuppression, int dir,
+ cb_StartReceiveChannel startReceiveChannel,
+ cb_StartTransmitChannel startTransmitChannel,
+ cb_StopReceiveChannel stopReceiveChannel,
+ cb_StopTransmitChannel stopTransmitChannel);
+int ooCallEnableDTMFCISCO(struct OOH323CallData *call, int dynamicRTPPayloadType);
+int ooCallDisableDTMFCISCO(struct OOH323CallData *call);
+
#ifdef __cplusplus
}
#endif