]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 2 Apr 2008 20:24:54 +0000 (20:24 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 2 Apr 2008 20:24:54 +0000 (20:24 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@437 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/openzap/src/include/openzap.h
libs/openzap/src/isdn/Q931.c
libs/openzap/src/isdn/include/Q931.h
libs/openzap/src/zap_isdn.c

index 136fa3f8c4e0451e58ffdf680747e7027bb01fdb..3d973fd3a6e74e59c067ebb785e200216cdc7fd7 100644 (file)
@@ -410,6 +410,8 @@ struct zap_isdn_data {
        struct zap_sigmsg sigmsg;
        zio_signal_cb_t sig_cb;
        uint32_t flags;
+       zap_channel_t *channels_local_crv[32768];
+       zap_channel_t *channels_remote_crv[32768];
 };
 
 struct zap_analog_data {
@@ -438,8 +440,6 @@ struct zap_span {
        teletone_tone_map_t tone_detect_map[ZAP_TONEMAP_INVALID+1];
        teletone_multi_tone_t tone_finder[ZAP_TONEMAP_INVALID+1];
        zap_channel_t channels[ZAP_MAX_CHANNELS_SPAN];
-       zap_channel_t *channels_local_crv[32768];
-       zap_channel_t *channels_remote_crv[32768];
        zio_channel_outgoing_call_t outgoing_call;
        zio_channel_request_t channel_request;
        void *mod_data;
index cb9c28ab20c0d02cde49e83a6ef3bad59c1854db..272d7687668d2918c8b828215f543551ca208bd7 100644 (file)
@@ -495,6 +495,19 @@ L3INT    Q931CreateCRV(Q931_TrunkInfo_t *pTrunk, L3INT * callIndex)
     return Q931AllocateCRV(pTrunk, CRV, callIndex);
 }
 
+
+L3INT  Q931ReleaseCRV(Q931_TrunkInfo_t *pTrunk, L3INT CRV)
+{
+       int callIndex;
+       
+       if ((Q931FindCRV(pTrunk, CRV, &callIndex)) == Q931E_NO_ERROR) {
+               pTrunk->call[callIndex].InUse = 0;
+               return Q931E_NO_ERROR;
+       }
+
+       return Q931E_INVALID_CRV;
+}
+
 /*****************************************************************************
 
   Function:     Q931AllocateCRV
index 2da5ba5c01ee0656da493987f4de21eb0ee48ee1..8cea95e5862e8e5b92aefd4488908cd3beb47230 100644 (file)
@@ -918,6 +918,7 @@ L3INT Q931InitMesRestartAck(Q931mes_Generic * pMes);
 L3INT Q931InitMesGeneric(Q931mes_Generic *pMes);
 
 L3INT  Q931CreateCRV(Q931_TrunkInfo_t *pTrunk, L3INT * callIndex);
+L3INT  Q931ReleaseCRV(Q931_TrunkInfo_t *pTrunk, L3INT CRV);
 L3INT  Q931AllocateCRV(Q931_TrunkInfo_t *pTrunk, L3INT iCRV, L3INT * callIndex);
 L3INT   Q931FindCRV(Q931_TrunkInfo_t *pTrunk, L3INT crv, L3INT *callindex);
 L3INT  Q931GetCallState(Q931_TrunkInfo_t *pTrunk, L3INT iCRV);
index 3cde7b5860af848adbe2a0352fdaf4eb23a3aa4b..63a8d4782ab6c381838baf2dff5ae959999302e7 100644 (file)
@@ -85,9 +85,9 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
 #endif
 
        if (gen->CRVFlag) {
-               zchan = span->channels_local_crv[gen->CRV];
+               zchan = isdn_data->channels_local_crv[gen->CRV];
        } else {
-               zchan = span->channels_remote_crv[gen->CRV];
+               zchan = isdn_data->channels_remote_crv[gen->CRV];
        }
 
 
@@ -197,7 +197,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
                        break;
                case Q931mes_SETUP:
                        {
-
+                               
                                Q931ie_CallingNum *callingnum = Q931GetIEPtr(gen->CallingNum, gen->buf);
                                Q931ie_CalledNum *callednum = Q931GetIEPtr(gen->CalledNum, gen->buf);
                                zap_status_t status;
@@ -234,7 +234,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
                                        }
 
                                        if (zchan->state == ZAP_CHANNEL_STATE_DOWN) {
-                                               zchan->span->channels_remote_crv[gen->CRV] = zchan;
+                                               isdn_data->channels_remote_crv[gen->CRV] = zchan;
                                                memset(&zchan->caller_data, 0, sizeof(zchan->caller_data));
 
                                                zap_set_string(zchan->caller_data.cid_num.digits, (char *)callingnum->Digit);
@@ -268,6 +268,10 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
                                        gen->Cause = Q931AppendIE((L3UCHAR *) gen, (L3UCHAR *) &cause);
                                        Q931Rx43(&isdn_data->q931, (L3UCHAR *) gen, gen->Size);
 
+                                       if (gen->CRV) {
+                                               Q931ReleaseCRV(&isdn_data->q931, gen->CRV);
+                                       }
+
                                        if (zchan) {
                                                zap_log(ZAP_LOG_CRIT, "Channel is busy\n");
                                        } else {
@@ -335,6 +339,9 @@ static __inline__ void state_advance(zap_channel_t *zchan)
        switch (zchan->state) {
        case ZAP_CHANNEL_STATE_DOWN:
                {
+                       if (gen->CRV) {
+                               Q931ReleaseCRV(&isdn_data->q931, gen->CRV);
+                       }
                        zap_channel_done(zchan);
                }
                break;
@@ -515,7 +522,7 @@ static __inline__ void state_advance(zap_channel_t *zchan)
                        zap_copy_string((char *)ptrCalledNum->Digit, zchan->caller_data.ani.digits, strlen(zchan->caller_data.ani.digits)+1);
 
                        Q931Rx43(&isdn_data->q931, (L3UCHAR *) gen, gen->Size);
-                       zchan->span->channels_local_crv[gen->CRV] = zchan;
+                       isdn_data->channels_local_crv[gen->CRV] = zchan;
                }
                break;
        case ZAP_CHANNEL_STATE_HANGUP: