[svn-commits] trunk - r191 /trunk/asterisk-ooh323c/ooh323c/src/
svn-commits at lists.digium.com
svn-commits at lists.digium.com
Mon Jan 23 15:06:53 MST 2006
Author: objsys
Date: Mon Jan 23 16:06:52 2006
New Revision: 191
URL: http://svn.digium.com/view/asterisk-addons?rev=191&view=rev
Log:
ECS support for call hold
Modified:
trunk/asterisk-ooh323c/ooh323c/src/ooCalls.c
trunk/asterisk-ooh323c/ooh323c/src/ooCalls.h
trunk/asterisk-ooh323c/ooh323c/src/oochannels.c
trunk/asterisk-ooh323c/ooh323c/src/ooh245.c
Modified: trunk/asterisk-ooh323c/ooh323c/src/ooCalls.c
URL: http://svn.digium.com/view/asterisk-addons/trunk/asterisk-ooh323c/ooh323c/src/ooCalls.c?rev=191&r1=190&r2=191&view=diff
==============================================================================
--- trunk/asterisk-ooh323c/ooh323c/src/ooCalls.c (original)
+++ trunk/asterisk-ooh323c/ooh323c/src/ooCalls.c Mon Jan 23 16:06:52 2006
@@ -780,6 +780,7 @@
"OO_CALL_WAITING_ADMISSION",
"OO_CALL_CONNECTING",
"OO_CALL_CONNECTED",
+ "OO_CALL_PAUSED",
"OO_CALL_CLEAR",
"OO_CALL_CLEAR_RELEASERECVD",
"OO_CALL_CLEAR_RELEASESENT",
Modified: trunk/asterisk-ooh323c/ooh323c/src/ooCalls.h
URL: http://svn.digium.com/view/asterisk-addons/trunk/asterisk-ooh323c/ooh323c/src/ooCalls.h?rev=191&r1=190&r2=191&view=diff
==============================================================================
--- trunk/asterisk-ooh323c/ooh323c/src/ooCalls.h (original)
+++ trunk/asterisk-ooh323c/ooh323c/src/ooCalls.h Mon Jan 23 16:06:52 2006
@@ -62,6 +62,7 @@
OO_CALL_WAITING_ADMISSION, /*!< Call waiting for admission by GK */
OO_CALL_CONNECTING, /*!< Call in process of connecting */
OO_CALL_CONNECTED, /*!< Call currently connected. */
+ OO_CALL_PAUSED, /*!< Call Paused for hold/transfer. */
OO_CALL_CLEAR, /*!< Call marked for clearing */
OO_CALL_CLEAR_RELEASERECVD, /*!< Release command received. */
OO_CALL_CLEAR_RELEASESENT, /*!< Release sent */
@@ -73,6 +74,7 @@
*/
typedef enum {
OO_H245SESSION_IDLE,
+ OO_H245SESSION_PAUSED,
OO_H245SESSION_ACTIVE,
OO_H245SESSION_ENDSENT,
OO_H245SESSION_ENDRECVD,
Modified: trunk/asterisk-ooh323c/ooh323c/src/oochannels.c
URL: http://svn.digium.com/view/asterisk-addons/trunk/asterisk-ooh323c/ooh323c/src/oochannels.c?rev=191&r1=190&r2=191&view=diff
==============================================================================
--- trunk/asterisk-ooh323c/ooh323c/src/oochannels.c (original)
+++ trunk/asterisk-ooh323c/ooh323c/src/oochannels.c Mon Jan 23 16:06:52 2006
@@ -960,7 +960,7 @@
message boundary. Has to be done at channel level, as channels
know the message formats and can determine boundaries
*/
- if(recvLen<=0)
+ if(recvLen<=0 && call->h245SessionState != OO_H245SESSION_PAUSED)
{
if(recvLen == 0)
OOTRACEINFO3("Closing H.245 channels as remote end point closed H.245"
@@ -977,6 +977,33 @@
call->callState = OO_CALL_CLEAR;
}
return OO_FAILED;
+ }
+ if(call->h245SessionState == OO_H245SESSION_PAUSED)
+ {
+ ooLogicalChannel *temp;
+
+ OOTRACEINFO3("Call Paused, closing logical channels"
+ " (%s, %s)\n", call->callType, call->callToken);
+
+ temp = call->logicalChans;
+ while(temp)
+ {
+ if(temp->state == OO_LOGICALCHAN_ESTABLISHED)
+ {
+ /* Sending closelogicalchannel only for outgoing channels*/
+ if(!strcmp(temp->dir, "transmit"))
+ {
+ ooSendCloseLogicalChannel(call, temp);
+ }
+ }
+ temp = temp->next;
+ }
+ call->masterSlaveState = OO_MasterSlave_Idle;
+ call->callState = OO_CALL_PAUSED;
+ call->localTermCapState = OO_LocalTermCapExchange_Idle;
+ call->remoteTermCapState = OO_RemoteTermCapExchange_Idle;
+ call->h245SessionState = OO_H245SESSION_IDLE;
+ call->logicalChans = NULL;
}
OOTRACEDBGC1("Receiving H245 message\n");
if(recvLen != 4)
@@ -1482,17 +1509,20 @@
"(%s, %s)\n", call->callType, call->callToken);
break;
case OOTerminalCapabilitySet:
- if(OO_TESTFLAG (call->flags, OO_M_TUNNELING)){
+ if(OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
/* If session isn't marked active yet, do it. possible in case of
tunneling */
- if(call->h245SessionState == OO_H245SESSION_IDLE)
+ if(call->h245SessionState == OO_H245SESSION_IDLE ||
+ call->h245SessionState == OO_H245SESSION_PAUSED) {
call->h245SessionState = OO_H245SESSION_ACTIVE;
+ }
OOTRACEINFO3("Tunneled Message - TerminalCapabilitySet (%s, %s)\n",
call->callType, call->callToken);
}
- else
+ else {
OOTRACEINFO3("Sent Message - TerminalCapabilitySet (%s, %s)\n",
call->callType, call->callToken);
+ }
/* Start TCS timer */
cbData = (ooTimerCallback*) memAlloc(call->pctxt,
sizeof(ooTimerCallback));
Modified: trunk/asterisk-ooh323c/ooh323c/src/ooh245.c
URL: http://svn.digium.com/view/asterisk-addons/trunk/asterisk-ooh323c/ooh323c/src/ooh245.c?rev=191&r1=190&r2=191&view=diff
==============================================================================
--- trunk/asterisk-ooh323c/ooh323c/src/ooh245.c (original)
+++ trunk/asterisk-ooh323c/ooh323c/src/ooh245.c Mon Jan 23 16:06:52 2006
@@ -270,7 +270,6 @@
ooSendMsg(call, OOH245MSG);
}
else{
-
dListAppend (call->pctxt, &call->pH245Channel->outQueue, encodebuf);
OOTRACEDBGC4("Queued H245 messages %d. (%s, %s)\n",
call->pH245Channel->outQueue.count,
@@ -659,9 +658,10 @@
OOTRACEERR3("Error:Failed to enqueue TCS message to outbound queue. "
"(%s, %s)\n", call->callType, call->callToken);
}
- else
+ else {
call->localTermCapState = OO_LocalTermCapSetSent;
-
+ }
+
ooFreeH245Message(call,ph245msg);
return ret;
@@ -2407,7 +2407,7 @@
gH323ep.h323Callbacks.onReceivedDTMF(call,indication->u.alphanumeric);
}
else if((indication->t == T_H245UserInputIndication_signal) &&
- (call->dtmfmode & OO_CAP_DTMF_H245_signal)) {
+ (call->dtmfmode & OO_CAP_DTMF_H245_signal)) {
if(gH323ep.h323Callbacks.onReceivedDTMF)
gH323ep.h323Callbacks.onReceivedDTMF(call,
indication->u.signal->signalType);
@@ -2439,35 +2439,39 @@
if(!tcs->m.capabilityTablePresent)
{
- OOTRACEWARN3("Warn:Ignoring TCS as no capability table present(%s, %s)\n",
- call->callType, call->callToken);
- ooSendTerminalCapabilitySetReject(call, tcs->sequenceNumber,
- T_H245TerminalCapabilitySetReject_cause_unspecified);
- return OO_OK;
+ // OOTRACEWARN3("Warn:Ignoring TCS as no capability table present(%s, %s)\n",
+ OOTRACEWARN3("Empty TCS found. Pausing call...(%s, %s)\n",
+ call->callType, call->callToken);
+ call->h245SessionState = OO_H245SESSION_PAUSED;
+ //ooSendTerminalCapabilitySetReject(call, tcs->sequenceNumber,
+ // T_H245TerminalCapabilitySetReject_cause_unspecified);
+ //return OO_OK;
}
call->remoteTermCapSeqNo = tcs->sequenceNumber;
- for(k=0; k<(int)tcs->capabilityTable.count; k++)
- {
- pNode = dListFindByIndex(&tcs->capabilityTable, k);
- if(pNode)
+ if(tcs->m.capabilityTablePresent) {
+ for(k=0; k<(int)tcs->capabilityTable.count; k++)
{
- OOTRACEDBGC4("Processing CapabilityTable Entry %d (%s, %s)\n", k,
- call->callType, call->callToken);
- capEntry = (H245CapabilityTableEntry*) pNode->data;
- if(capEntry->m.capabilityPresent){
- ret = ooAddRemoteCapability(call, &capEntry->capability);
- if(ret != OO_OK)
- {
- OOTRACEERR4("Error:Failed to process remote capability in "
- "capability table at index %d. (%s, %s)\n",
- k, call->callType, call->callToken);
+ pNode = dListFindByIndex(&tcs->capabilityTable, k);
+ if(pNode)
+ {
+ OOTRACEDBGC4("Processing CapabilityTable Entry %d (%s, %s)\n",
+ k, call->callType, call->callToken);
+ capEntry = (H245CapabilityTableEntry*) pNode->data;
+ if(capEntry->m.capabilityPresent){
+ ret = ooAddRemoteCapability(call, &capEntry->capability);
+ if(ret != OO_OK)
+ {
+ OOTRACEERR4("Error:Failed to process remote capability in "
+ "capability table at index %d. (%s, %s)\n",
+ k, call->callType, call->callToken);
+ }
+ ooCapabilityUpdateJointCapabilities(call, &capEntry->capability);
}
- ooCapabilityUpdateJointCapabilities(call, &capEntry->capability);
- }
- }
- pNode = NULL;
- capEntry=NULL;
+ }
+ pNode = NULL;
+ capEntry=NULL;
+ }
}
@@ -3475,12 +3479,12 @@
call->callToken);
if(call->h245SessionState != OO_H245SESSION_IDLE &&
- call->h245SessionState != OO_H245SESSION_CLOSED)
- {
+ call->h245SessionState != OO_H245SESSION_CLOSED &&
+ call->h245SessionState != OO_H245SESSION_PAUSED) {
+
ret = ooCloseH245Connection(call);
- if(ret != OO_OK)
- {
+ if(ret != OO_OK) {
OOTRACEERR3("Error:Failed to close H.245 connection (%s, %s)\n",
call->callType, call->callToken);
}
More information about the svn-commits
mailing list