From 6d857dc80814feb3ffde439894d8f812e0c93910 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Tue, 12 Jun 2007 01:38:45 +0000 Subject: [PATCH] add auto acks. git-svn-id: http://svn.openzap.org/svn/openzap/trunk@246 a93c3328-9c30-0410-af19-c9cd2b2d52af --- libs/freetdm/src/isdn/Q931StateTE.c | 10 +++++- libs/freetdm/src/isdn/Q931api.c | 49 +++++++++++++++------------- libs/freetdm/src/isdn/include/Q931.h | 2 ++ 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/libs/freetdm/src/isdn/Q931StateTE.c b/libs/freetdm/src/isdn/Q931StateTE.c index 6d92423ec7..2b81d2dcf7 100644 --- a/libs/freetdm/src/isdn/Q931StateTE.c +++ b/libs/freetdm/src/isdn/Q931StateTE.c @@ -298,6 +298,10 @@ L3INT Q931ProcConnectTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT iFrom) { /* TODO Add proc here*/ ret = Q931Tx34(pTrunk,buf,pMes->Size); + if (pTrunk->autoConnectAck) { + Q931AckConnect(pTrunk, buf); + } + } return ret; } @@ -419,8 +423,12 @@ L3INT Q931ProcSetupTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT iFrom) /* Send setup indication to user */ ret = Q931Tx34(pTrunk,(L3UCHAR*)pMes,pMes->Size); - if(ret != Q931E_NO_ERROR) + if(ret != Q931E_NO_ERROR) { + if (pTrunk->autoSetupAck) { + Q931AckSetup(pTrunk, buf); + } return ret; + } else { /* Must be full queue, meaning we can't process the call */ diff --git a/libs/freetdm/src/isdn/Q931api.c b/libs/freetdm/src/isdn/Q931api.c index 641f34a7ce..e13d4791d7 100644 --- a/libs/freetdm/src/isdn/Q931api.c +++ b/libs/freetdm/src/isdn/Q931api.c @@ -214,33 +214,12 @@ L3INT Q931GetUniqueCRV(Q931_TrunkInfo_t *pTrunk) return crv++; } -L3INT Q931InitMesSetup(Q931mes_Generic *pMes) +L3INT Q931InitMesGeneric(Q931mes_Generic *pMes) { + memset(pMes, 0, sizeof(*pMes)); pMes->ProtDisc = 0x80; - pMes->CRV = 0; /* CRV to be allocated, might be receive*/ - pMes->MesType = Q931mes_SETUP; - pMes->Size = Q931GetMesSize(pMes); - pMes->SendComplete =0; /* Sending Complete */ - pMes->RepeatInd =0; /* Repeat Indicator */ - pMes->BearerCap =0; /* Bearer Capability */ - pMes->ChanID =0; /* Channel ID */ - pMes->ProgInd =0; /* Progress Indicator */ - pMes->NetFac =0; /* Network-specific facilities */ - pMes->Display =0; /* Display */ - pMes->DateTime =0; /* Date/Time */ - pMes->KeypadFac =0; /* Keypad Facility */ - pMes->Signal =0; /* Signal */ - pMes->CallingNum =0; /* Calling party number */ - pMes->CallingSub =0; /* Calling party sub address */ - pMes->CalledNum =0; /* Called party number */ - pMes->CalledSub =0; /* Called party sub address */ - pMes->TransNetSel =0; /* Transit network selection */ - pMes->LLRepeatInd =0; /* Repeat Indicator 2 LLComp */ - pMes->LLComp =0; /* Low layer compatibility */ - pMes->HLComp =0; /* High layer compatibility */ - return 0; } @@ -557,5 +536,29 @@ L3INT Q931AckRestart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf) return RetCode; } +L3INT Q931AckSetup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf) +{ + L3INT RetCode; + + Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace]; + ptr->MesType = Q931mes_SETUP_ACKNOWLEDGE; + + RetCode = Q931Proc[pTrunk->Dialect][ptr->MesType](pTrunk, buf, 4); + + return RetCode; +} + +L3INT Q931AckConnect(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf) +{ + L3INT RetCode; + + Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace]; + ptr->MesType = Q931mes_CONNECT_ACKNOWLEDGE; + + RetCode = Q931Proc[pTrunk->Dialect][ptr->MesType](pTrunk, buf, 4); + + return RetCode; +} + Q931_ENUM_NAMES(DIALECT_TYPE_NAMES, DIALECT_STRINGS) Q931_STR2ENUM(q931_str2Q931Diaelct_type, q931_Q931Diaelct_type2str, Q931Dialect_t, DIALECT_TYPE_NAMES, Q931_Dialect_Count) diff --git a/libs/freetdm/src/isdn/include/Q931.h b/libs/freetdm/src/isdn/include/Q931.h index b230c96e35..b0bb3f4275 100644 --- a/libs/freetdm/src/isdn/include/Q931.h +++ b/libs/freetdm/src/isdn/include/Q931.h @@ -938,6 +938,8 @@ L3INT Q931InitIEHLComp(Q931ie_HLComp * pIE); L3INT Q931Disconnect(Q931_TrunkInfo_t *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause); L3INT Q931ReleaseComplete(Q931_TrunkInfo_t *pTrunk, L3INT iTo); L3INT Q931AckRestart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf); +L3INT Q931AckConnect(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf); +L3INT Q931AckSetup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf); L3INT Q931Api_InitTrunk(Q931_TrunkInfo_t *pTrunk, Q931Dialect_t Dialect,