]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add message pack and unpack functions for Restart and RestartAck from Jan. Thanks...
authorMichael Jerris <mike@jerris.com>
Wed, 23 May 2007 04:10:50 +0000 (04:10 +0000)
committerMichael Jerris <mike@jerris.com>
Wed, 23 May 2007 04:10:50 +0000 (04:10 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@105 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/openzap/src/isdn/Q931mes.c

index d52a06efc84b69e38f00496d87866736b172b1b5..a75db9db2e7b8974477af29872553f9d0ec95db1 100644 (file)
@@ -983,65 +983,151 @@ L3INT Q931Pmes_ReleaseComplete(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT IS
     return rc;
 }
 
-/*****************************************************************************
-
-  Function:     Q931Umes_Restart
-
-*****************************************************************************/
-L3INT Q931Umes_Restart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O)
-{
-    L3BOOL RetCode = L3FALSE;
-
-    NoWarning(OBuf);
-    NoWarning(IBuf);
-
-    return RetCode;
-}
-
-/*****************************************************************************
-
-  Function:     Q931Pmes_Restart
-
-*****************************************************************************/
-L3INT Q931Pmes_Restart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
-{
-    L3BOOL RetCode = L3FALSE;
-
-    NoWarning(OBuf);
-    NoWarning(IBuf);
-
-    return RetCode;
-}
-
-/*****************************************************************************
-
-  Function:     Q931Umes_RestartAck
-
-*****************************************************************************/
-L3INT Q931Umes_RestartAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O)
-{
-    L3BOOL RetCode = L3FALSE;
-
-    NoWarning(OBuf);
-    NoWarning(IBuf);
-
-    return RetCode;
-}
-
-/*****************************************************************************
-
-  Function:     Q931Pmes_RestartAck
-
-*****************************************************************************/
-L3INT Q931Pmes_RestartAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
-{
-    L3BOOL RetCode = L3FALSE;
-
-    NoWarning(OBuf);
-    NoWarning(IBuf);
-
-    return RetCode;
-}
+/*****************************************************************************\r
+\r
+  Function:     Q931Umes_Restart\r
+\r
+*****************************************************************************/\r
+L3INT Q931Umes_Restart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)\r
+{\r
+    L3INT OOff=0;\r
+    Q931mes_Restart *mes = (Q931mes_Restart*)OBuf;\r
+    L3INT rc=Q931E_NO_ERROR;\r
+    while(IOff < Size)\r
+    {\r
+        switch(IBuf[IOff])\r
+        {\r
+        case Q931ie_CHANNEL_IDENTIFICATION:\r
+            rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID,&IBuf[IOff], &OBuf[OOff], &IOff, &OOff);\r
+            if(rc != Q931E_NO_ERROR) \r
+                return rc;\r
+            break;\r
+        case Q931ie_DISPLAY:\r
+            rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display,&IBuf[IOff], &OBuf[OOff], &IOff, &OOff);\r
+            if(rc != Q931E_NO_ERROR) \r
+                return rc;\r
+            break;\r
+        case Q931ie_RESTART_INDICATOR:\r
+            rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->RestartInd,&IBuf[IOff], &OBuf[OOff], &IOff, &OOff);\r
+            if(rc != Q931E_NO_ERROR) \r
+                return rc;\r
+            break;\r
+        default:\r
+            return Q931E_ILLEGAL_IE;\r
+            break;\r
+        }\r
+    }\r
+    mes->Size = sizeof(Q931mes_Restart) - 1 + OOff;\r
+    return Q931E_NO_ERROR;\r
+}\r
+\r
+/*****************************************************************************\r
+\r
+  Function:     Q931Pmes_Restart\r
+\r
+*****************************************************************************/\r
+L3INT Q931Pmes_Restart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)\r
+{\r
+    L3INT rc = Q931E_NO_ERROR;\r
+    Q931mes_Restart *pMes = (Q931mes_Restart *)IBuf;\r
+    L3INT Octet = 0;\r
+\r
+    /* Q931 Message Header */\r
+\r
+    OBuf[Octet++]    = pMes->ProtDisc;        /* Protocol discriminator        */\r
+    OBuf[Octet++]    = 2;                    /* length is 2 octets            */\r
+    OBuf[Octet++]    = (L3UCHAR)(pMes->CRV>>8);    /* msb                            */\r
+    OBuf[Octet++]    = (L3UCHAR)(pMes->CRV);    /* lsb                            */\r
+    OBuf[Octet++]    = pMes->MesType;        /* message header                */\r
+    \r
+    /* ChanID */\r
+    if(Q931IsIEPresent(pMes->ChanID))\r
+        if((rc=Q931Pie[pTrunk->Dialect][pMes->MesType](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet))!=0)\r
+            return rc;\r
+    /* Display */\r
+    if(Q931IsIEPresent(pMes->Display))\r
+        if((rc=Q931Pie[pTrunk->Dialect][pMes->MesType](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet))!=0)\r
+            return rc;\r
+    /* RestartInd */\r
+    if(Q931IsIEPresent(pMes->RestartInd))\r
+        if((rc=Q931Pie[pTrunk->Dialect][pMes->MesType](pTrunk, Q931GetIEPtr(pMes->RestartInd,pMes->buf), OBuf, &Octet))!=0)\r
+            return rc;\r
+\r
+    return rc;\r
+}\r
+\r
+/*****************************************************************************\r
+\r
+  Function:     Q931Umes_RestartAck\r
+\r
+*****************************************************************************/\r
+L3INT Q931Umes_RestartAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)\r
+{\r
+    L3INT OOff=0;\r
+    Q931mes_RestartAck *mes = (Q931mes_RestartAck*)OBuf;\r
+    L3INT rc=Q931E_NO_ERROR;\r
+    while(IOff < Size)\r
+    {\r
+        switch(IBuf[IOff])\r
+        {\r
+        case Q931ie_CHANNEL_IDENTIFICATION:\r
+            rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID,&IBuf[IOff], &OBuf[OOff], &IOff, &OOff);\r
+            if(rc != Q931E_NO_ERROR) \r
+                return rc;\r
+            break;\r
+        case Q931ie_DISPLAY:\r
+            rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display,&IBuf[IOff], &OBuf[OOff], &IOff, &OOff);\r
+            if(rc != Q931E_NO_ERROR) \r
+                return rc;\r
+            break;\r
+        case Q931ie_RESTART_INDICATOR:\r
+            rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->RestartInd,&IBuf[IOff], &OBuf[OOff], &IOff, &OOff);\r
+            if(rc != Q931E_NO_ERROR) \r
+                return rc;\r
+            break;\r
+        default:\r
+            return Q931E_ILLEGAL_IE;\r
+            break;\r
+        }\r
+    }\r
+    mes->Size = sizeof(Q931mes_RestartAck) - 1 + OOff;\r
+    return Q931E_NO_ERROR;\r
+}\r
+\r
+/*****************************************************************************\r
+\r
+  Function:     Q931Pmes_RestartAck\r
+\r
+*****************************************************************************/\r
+L3INT Q931Pmes_RestartAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)\r
+{\r
+    L3INT rc = Q931E_NO_ERROR;\r
+    Q931mes_RestartAck *pMes = (Q931mes_RestartAck *)IBuf;\r
+    L3INT Octet = 0;\r
+\r
+    /* Q931 Message Header */\r
+\r
+    OBuf[Octet++]    = pMes->ProtDisc;        /* Protocol discriminator        */\r
+    OBuf[Octet++]    = 2;                    /* length is 2 octets            */\r
+    OBuf[Octet++]    = (L3UCHAR)(pMes->CRV>>8);    /* msb                            */\r
+    OBuf[Octet++]    = (L3UCHAR)(pMes->CRV);    /* lsb                            */\r
+    OBuf[Octet++]    = pMes->MesType;        /* message header                */\r
+    \r
+    /* ChanID */\r
+    if(Q931IsIEPresent(pMes->ChanID))\r
+        if((rc=Q931Pie[pTrunk->Dialect][pMes->MesType](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet))!=0)\r
+            return rc;\r
+    /* Display */\r
+    if(Q931IsIEPresent(pMes->Display))\r
+        if((rc=Q931Pie[pTrunk->Dialect][pMes->MesType](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet))!=0)\r
+            return rc;\r
+    /* RestartInd */\r
+    if(Q931IsIEPresent(pMes->RestartInd))\r
+        if((rc=Q931Pie[pTrunk->Dialect][pMes->MesType](pTrunk, Q931GetIEPtr(pMes->RestartInd,pMes->buf), OBuf, &Octet))!=0)\r
+            return rc;\r
+\r
+    return rc;\r
+}\r
 
 /*****************************************************************************