[svn-commits] may: branch 10 r344159 - in /branches/10: ./ addons/ooh323c/src/
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Wed Nov 9 12:51:06 CST 2011
Author: may
Date: Wed Nov 9 12:51:02 2011
New Revision: 344159
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=344159
Log:
Generate response to Status Enquiry message with Status q.931 message.
Some PBXes require this for call status checking
(closes issue ASTERISK-18748)
Reported by: Fabrizio Lazzaretti
Patches:
ASTERISK-18748-5.patch (License #5415) patch uploaded by may213
Tested by: Fabrizio Lazzaretti
........
Merged revisions 344158 from http://svn.asterisk.org/svn/asterisk/branches/1.8
Modified:
branches/10/ (props changed)
branches/10/addons/ooh323c/src/oochannels.c
branches/10/addons/ooh323c/src/ooh245.c
branches/10/addons/ooh323c/src/ooh323.c
branches/10/addons/ooh323c/src/ooq931.c
branches/10/addons/ooh323c/src/ooq931.h
branches/10/addons/ooh323c/src/ootypes.h
Propchange: branches/10/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.
Propchange: branches/10/
------------------------------------------------------------------------------
svn:mergeinfo = /branches/1.8:344158
Modified: branches/10/addons/ooh323c/src/oochannels.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/ooh323c/src/oochannels.c?view=diff&rev=344159&r1=344158&r2=344159
==============================================================================
--- branches/10/addons/ooh323c/src/oochannels.c (original)
+++ branches/10/addons/ooh323c/src/oochannels.c Wed Nov 9 12:51:02 2011
@@ -1588,6 +1588,10 @@
/* if(gH323ep.h323Callbacks.onAlerting && call->callState < OO_CALL_CLEAR)
gH323ep.h323Callbacks.onAlerting(call); */
break;
+ case OOStatus:
+ OOTRACEINFO3("Sent Message - Status (%s, %s) \n", call->callType,
+ call->callToken);
+ break;
case OOConnect:
OOTRACEINFO3("Sent Message - Connect (%s, %s)\n", call->callType,
call->callToken);
Modified: branches/10/addons/ooh323c/src/ooh245.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/ooh323c/src/ooh245.c?view=diff&rev=344159&r1=344158&r2=344159
==============================================================================
--- branches/10/addons/ooh323c/src/ooh245.c (original)
+++ branches/10/addons/ooh323c/src/ooh245.c Wed Nov 9 12:51:02 2011
@@ -16,6 +16,7 @@
#include "asterisk.h"
#include "asterisk/lock.h"
#include "ooh245.h"
+#include "ooq931.h"
#include "ooCalls.h"
#include "printHandler.h"
#include "ooh323ep.h"
@@ -957,6 +958,9 @@
/*Since Cap exchange and MasterSlave Procedures are done */
if(gH323ep.h323Callbacks.openLogicalChannels)
gH323ep.h323Callbacks.openLogicalChannels(call);
+
+ /* ooSendStatusInquiry(call); */
+
if(!ooGetTransmitLogicalChannel(call))
ooOpenLogicalChannels(call);
#if 0
@@ -2173,6 +2177,9 @@
{
if(gH323ep.h323Callbacks.openLogicalChannels)
gH323ep.h323Callbacks.openLogicalChannels(call);
+
+ /* ooSendStatusInquiry(call); */
+
if(!ooGetTransmitLogicalChannel(call))
ooOpenLogicalChannels(call);
#if 0
@@ -3121,7 +3128,12 @@
we can accept new capability set only. We must remember also that new join caps
will be previously joined caps with new cap set.
*/
- if(call->remoteTermCapSeqNo == tcs->sequenceNumber)
+
+/* 20111103 */
+/* for addition for previous we must check repeated tcs if it's not first
+ tcs i.e. SeqNo is not null */
+
+ if(call->remoteTermCapSeqNo && call->remoteTermCapSeqNo == tcs->sequenceNumber)
call->localTermCapState = OO_LocalTermCapExchange_Idle;
}
@@ -3208,6 +3220,9 @@
if(gH323ep.h323Callbacks.openLogicalChannels)
gH323ep.h323Callbacks.openLogicalChannels(call);
+
+ /* ooSendStatusInquiry(call); */
+
if(!ooGetTransmitLogicalChannel(call))
ooOpenLogicalChannels(call);
#if 0
Modified: branches/10/addons/ooh323c/src/ooh323.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/ooh323c/src/ooh323.c?view=diff&rev=344159&r1=344158&r2=344159
==============================================================================
--- branches/10/addons/ooh323c/src/ooh323.c (original)
+++ branches/10/addons/ooh323c/src/ooh323.c Wed Nov 9 12:51:02 2011
@@ -1803,6 +1803,7 @@
case Q931StatusEnquiryMsg:
OOTRACEINFO3("H.225 Status Inquiry message Received (%s, %s)\n",
call->callType, call->callToken);
+ ooSendStatus(call);
ooFreeQ931Message(call->msgctxt, q931Msg);
break;
case Q931SetupAckMsg:
Modified: branches/10/addons/ooh323c/src/ooq931.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/ooh323c/src/ooq931.c?view=diff&rev=344159&r1=344158&r2=344159
==============================================================================
--- branches/10/addons/ooh323c/src/ooq931.c (original)
+++ branches/10/addons/ooh323c/src/ooq931.c Wed Nov 9 12:51:02 2011
@@ -235,6 +235,15 @@
msg->causeIE = ie;
OOTRACEDBGB1(" Cause IE = {\n");
OOTRACEDBGB2(" %s\n", ooGetQ931CauseValueText(ie->data[1]&0x7f));
+ OOTRACEDBGB1(" }\n");
+ }
+
+ /* Handle CallState ie */
+ if(ie->discriminator == Q931CallStateIE)
+ {
+ msg->causeIE = ie;
+ OOTRACEDBGB1(" CallState IE = {\n");
+ OOTRACEDBGB2(" %d\n", ie->data[0]);
OOTRACEDBGB1(" }\n");
}
@@ -405,6 +414,7 @@
(*q931msg)->callingPartyNumberIE = NULL;
(*q931msg)->calledPartyNumberIE = NULL;
(*q931msg)->causeIE = NULL;
+ (*q931msg)->callstateIE = NULL;
return OO_OK;
}
}
@@ -682,6 +692,10 @@
}
else if(pq931Msg->messageType == Q931InformationMsg){
msgbuf[i++] = OOInformationMessage;
+ }
+ else if(pq931Msg->messageType == Q931StatusMsg ||
+ pq931Msg->messageType == Q931StatusEnquiryMsg){
+ msgbuf[i++] = OOStatus;
}
else if(pq931Msg->messageType == Q931FacilityMsg){
msgbuf[i++] = OOFacility;
@@ -753,8 +767,8 @@
msgbuf[i++] = 0x88;
}*/
- /*Add display ie. */
- if(!ooUtilsIsStrEmpty(call->ourCallerId))
+ /*Add display ie. for all but Status message as per ASTERISK-18748 */
+ if(!ooUtilsIsStrEmpty(call->ourCallerId) && (pq931Msg->messageType != Q931StatusMsg))
{
msgbuf[i++] = Q931DisplayIE;
ieLen = strlen(call->ourCallerId)+1;
@@ -791,6 +805,13 @@
msgbuf[i++] = pq931Msg->keypadIE->length;
memcpy(msgbuf+i, pq931Msg->keypadIE->data, pq931Msg->keypadIE->length);
i += pq931Msg->keypadIE->length;
+ }
+
+ if(pq931Msg->callstateIE) {
+ msgbuf[i++] = Q931CallStateIE;
+ msgbuf[i++] = pq931Msg->callstateIE->length;
+ memcpy(msgbuf+i, pq931Msg->callstateIE->data, pq931Msg->callstateIE->length);
+ i += pq931Msg->callstateIE->length;
}
/* Note: Have to fix this, though it works. Need to get rid of ie list.
@@ -1741,6 +1762,138 @@
return ret;
}
+/*
+
+*/
+
+int ooSendStatus(OOH323CallData *call)
+{
+ int ret;
+ H225Status_UUIE *status;
+ Q931Message *q931msg=NULL;
+ /* OOCTXT *pctxt = &gH323ep.msgctxt; */
+ OOCTXT *pctxt = call->msgctxt;
+
+ OOTRACEDBGC3("Building StatusMsg (%s, %s)\n", call->callType,
+ call->callToken);
+ ret = ooCreateQ931Message(pctxt, &q931msg, Q931StatusMsg);
+ if(ret != OO_OK)
+ {
+ OOTRACEERR1("Error: In allocating memory for - H225 Status "
+ "message\n");
+ return OO_FAILED;
+ }
+
+ q931msg->callReference = call->callReference;
+
+ q931msg->userInfo = (H225H323_UserInformation*)memAllocZ(pctxt,
+ sizeof(H225H323_UserInformation));
+ if(!q931msg->userInfo)
+ {
+ OOTRACEERR1("ERROR:Memory - ooSendStatus - userInfo\n");
+ return OO_FAILED;
+ }
+ q931msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent=1;
+ q931msg->userInfo->h323_uu_pdu.h245Tunneling =
+ OO_TESTFLAG(call->flags, OO_M_TUNNELING);
+ q931msg->userInfo->h323_uu_pdu.h323_message_body.t =
+ T_H225H323_UU_PDU_h323_message_body_status;
+
+ status = (H225Status_UUIE*)memAllocZ(pctxt,
+ sizeof(H225Status_UUIE));
+ if(!status)
+ {
+ OOTRACEERR1("ERROR:Memory - ooSendStatus \n");
+ return OO_FAILED;
+ }
+ q931msg->userInfo->h323_uu_pdu.h323_message_body.u.status = status;
+
+ status->callIdentifier.guid.numocts =
+ call->callIdentifier.guid.numocts;
+ memcpy(status->callIdentifier.guid.data,
+ call->callIdentifier.guid.data,
+ call->callIdentifier.guid.numocts);
+ status->protocolIdentifier = gProtocolID;
+
+ ooQ931SetCauseIE(pctxt, q931msg, Q931StatusEnquiryResponse, 0, 0);
+ ooQ931SetCallStateIE(pctxt, q931msg, 10);
+
+ OOTRACEDBGA3("Built Status (%s, %s)\n", call->callType,
+ call->callToken);
+ ret = ooSendH225Msg(call, q931msg);
+ if(ret != OO_OK)
+ {
+ OOTRACEERR3("Error:Failed to enqueue Status message to outbound queue.(%s, %s)\n", call->callType, call->callToken);
+ }
+
+ /* memReset(&gH323ep.msgctxt); */
+ memReset(call->msgctxt);
+
+ return ret;
+}
+
+int ooSendStatusInquiry(OOH323CallData *call)
+{
+ int ret;
+ H225StatusInquiry_UUIE *statusInq;
+ Q931Message *q931msg=NULL;
+ /* OOCTXT *pctxt = &gH323ep.msgctxt; */
+ OOCTXT *pctxt = call->msgctxt;
+
+ OOTRACEDBGC3("Building StatusInquryMsg (%s, %s)\n", call->callType,
+ call->callToken);
+ ret = ooCreateQ931Message(pctxt, &q931msg, Q931StatusEnquiryMsg);
+ if(ret != OO_OK)
+ {
+ OOTRACEERR1("Error: In allocating memory for - H225 Status "
+ "message\n");
+ return OO_FAILED;
+ }
+
+ q931msg->callReference = call->callReference;
+
+ q931msg->userInfo = (H225H323_UserInformation*)memAllocZ(pctxt,
+ sizeof(H225H323_UserInformation));
+ if(!q931msg->userInfo)
+ {
+ OOTRACEERR1("ERROR:Memory - ooSendStatus - userInfo\n");
+ return OO_FAILED;
+ }
+ q931msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent=1;
+ q931msg->userInfo->h323_uu_pdu.h245Tunneling =
+ OO_TESTFLAG(call->flags, OO_M_TUNNELING);
+ q931msg->userInfo->h323_uu_pdu.h323_message_body.t =
+ T_H225H323_UU_PDU_h323_message_body_statusInquiry;
+
+ statusInq = (H225StatusInquiry_UUIE*)memAllocZ(pctxt,
+ sizeof(H225StatusInquiry_UUIE));
+ if(!statusInq)
+ {
+ OOTRACEERR1("ERROR:Memory - ooSendStatusInquiry \n");
+ return OO_FAILED;
+ }
+ q931msg->userInfo->h323_uu_pdu.h323_message_body.u.statusInquiry = statusInq;
+
+ statusInq->callIdentifier.guid.numocts =
+ call->callIdentifier.guid.numocts;
+ memcpy(statusInq->callIdentifier.guid.data,
+ call->callIdentifier.guid.data,
+ call->callIdentifier.guid.numocts);
+ statusInq->protocolIdentifier = gProtocolID;
+
+ OOTRACEDBGA3("Built StatusInquiry (%s, %s)\n", call->callType,
+ call->callToken);
+ ret = ooSendH225Msg(call, q931msg);
+ if(ret != OO_OK)
+ {
+ OOTRACEERR3("Error:Failed to enqueue Status message to outbound queue.(%s, %s)\n", call->callType, call->callToken);
+ }
+
+ /* memReset(&gH323ep.msgctxt); */
+ memReset(call->msgctxt);
+
+ return ret;
+}
int ooSendReleaseComplete(OOH323CallData *call)
{
int ret;
@@ -3250,6 +3403,28 @@
pmsg->calledPartyNumberIE->data[0] = (0x80|((type&7)<<4)|(plan&15));
memcpy(pmsg->calledPartyNumberIE->data+1, number, len);
+ return OO_OK;
+}
+
+int ooQ931SetCallStateIE
+ (OOCTXT* pctxt, Q931Message *pmsg, unsigned char callstate)
+{
+ if(pmsg->callstateIE){
+ memFreePtr(pctxt, pmsg->callstateIE);
+ pmsg->callstateIE = NULL;
+ }
+
+ pmsg->callstateIE = (Q931InformationElement*)
+ memAllocZ(pctxt, sizeof(Q931InformationElement));
+ if(!pmsg->callstateIE)
+ {
+ OOTRACEERR1("Error:Memory - ooQ931SetCallstateIE - causeIE\n");
+ return OO_FAILED;
+ }
+ pmsg->callstateIE->discriminator = Q931CallStateIE;
+ pmsg->callstateIE->length = 1;
+ pmsg->callstateIE->data[0] = callstate;
+
return OO_OK;
}
Modified: branches/10/addons/ooh323c/src/ooq931.h
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/ooh323c/src/ooq931.h?view=diff&rev=344159&r1=344158&r2=344159
==============================================================================
--- branches/10/addons/ooh323c/src/ooq931.h (original)
+++ branches/10/addons/ooh323c/src/ooq931.h Wed Nov 9 12:51:02 2011
@@ -246,6 +246,7 @@
Q931InformationElement *calledPartyNumberIE;
Q931InformationElement *causeIE;
Q931InformationElement *keypadIE;
+ Q931InformationElement *callstateIE;
H225H323_UserInformation *userInfo;
} Q931Message;
@@ -468,6 +469,10 @@
EXTERN int ooSendAlerting(struct OOH323CallData *call);
EXTERN int ooSendProgress(struct OOH323CallData *call);
+
+EXTERN int ooSendStatus(struct OOH323CallData *call);
+
+EXTERN int ooSendStatusInquiry(struct OOH323CallData *call);
/**
* This function is invoked to send Facility message.
@@ -714,6 +719,9 @@
(OOCTXT *pctxt, Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding,
unsigned location);
+EXTERN int ooQ931SetCallStateIE
+ (OOCTXT *pctxt, Q931Message *pmsg, unsigned char callstate);
+
/**
* This function is used to convert a call clear reason to cause and
* reason code. It is used when local user is endoing the call and
Modified: branches/10/addons/ooh323c/src/ootypes.h
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/ooh323c/src/ootypes.h?view=diff&rev=344159&r1=344158&r2=344159
==============================================================================
--- branches/10/addons/ooh323c/src/ootypes.h (original)
+++ branches/10/addons/ooh323c/src/ootypes.h Wed Nov 9 12:51:02 2011
@@ -190,8 +190,9 @@
#define OORequestMode 133
#define OORequestDelayResponse 134
#define OORequestDelayRequest 135
-
-#define OO_MSGTYPE_MAX 135
+#define OOStatus 136
+
+#define OO_MSGTYPE_MAX 136
/* Timer types */
#define OO_CALLESTB_TIMER (1<<0)
More information about the svn-commits
mailing list