$(SRC)/isdn/Q931mes.o \
$(SRC)/isdn/Q931StateNT.o \
$(SRC)/isdn/Q931StateTE.o \
-$(SRC)/isdn/nationalie.o \
$(SRC)/isdn/nationalmes.o \
$(SRC)/isdn/nationalStateNT.o \
$(SRC)/isdn/nationalStateTE.o \
RelativePath="..\src\isdn\mfifo.c"\r
>\r
</File>\r
- <File\r
- RelativePath="..\src\isdn\nationalie.c"\r
- >\r
- </File>\r
<File\r
RelativePath="..\src\isdn\nationalmes.c"\r
>\r
these table entries during system inititialization of a stack.
*****************************************************************************/
-L3INT (*Q931Proc [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *,L3INT);
+q931proc_func_t *Q931Proc[Q931MAXDLCT][Q931MAXMES];
-L3INT (*Q931Umes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size);
-L3INT (*Q931Pmes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
+q931umes_func_t *Q931Umes[Q931MAXDLCT][Q931MAXMES];
+q931pmes_func_t *Q931Pmes[Q931MAXDLCT][Q931MAXMES];
-L3INT (*Q931Uie [Q931MAXDLCT][Q931MAXIE]) (Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT (*Q931Pie [Q931MAXDLCT][Q931MAXIE]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
+q931uie_func_t *Q931Uie[Q931MAXDLCT][Q931MAXIE];
+q931pie_func_t *Q931Pie[Q931MAXDLCT][Q931MAXIE];
-L3UINT Q931MsgieOffset[Q931MAXIE];
-
-void Q931Initialize_MsgieOffset()
-{
- L3INT x;
- Q931mes_Generic msg;
- ie *index;
-
- for(x=0; x<Q931MAXIE; x++) {
- switch(x)
- {
- case Q931ie_SWITCHOOK:
- index = &msg.Switchhook;
- break;
- case Q931ie_FEATURE_ACTIVATION:
- index = &msg.FeatAct;
- break;
- case Q931ie_FEATURE_INDICATION:
- index = &msg.FeatInd;
- break;
- case Q931ie_CALL_IDENTITY:
- index = &msg.CallID;
- break;
- case Q931ie_SHIFT:
- index = &msg.Shift;
- break;
- case Q931ie_MORE_DATA:
- index = &msg.MoreData;
- break;
- case Q931ie_SENDING_COMPLETE:
- index = &msg.SendComplete;
- break;
- case Q931ie_CONGESTION_LEVEL:
- index = &msg.CongestionLevel;
- break;
- case Q931ie_REPEAT_INDICATOR:
- index = &msg.RepeatInd;
- break;
- case Q931ie_SEGMENTED_MESSAGE:
- index = &msg.Segment;
- break;
- case Q931ie_BEARER_CAPABILITY:
- index = &msg.BearerCap;
- break;
- case Q931ie_CAUSE:
- index = &msg.Cause;
- break;
- case Q931ie_CALL_STATE:
- index = &msg.CallState;
- break;
- case Q931ie_CHANNEL_IDENTIFICATION:
- index = &msg.ChanID;
- break;
- case Q931ie_PROGRESS_INDICATOR:
- index = &msg.ProgInd;
- break;
- case Q931ie_NETWORK_SPECIFIC_FACILITIES:
- index = &msg.NetFac;
- break;
- case Q931ie_NOTIFICATION_INDICATOR:
- index = &msg.NotifInd;
- break;
- case Q931ie_DISPLAY:
- index = &msg.Display;
- break;
- case Q931ie_DATETIME:
- index = &msg.DateTime;
- break;
- case Q931ie_KEYPAD_FACILITY:
- index = &msg.KeypadFac;
- break;
- case Q931ie_SIGNAL:
- index = &msg.Signal;
- break;
- case Q931ie_INFORMATION_RATE:
- index = &msg.InfoRate;
- break;
- case Q931ie_END_TO_END_TRANSIT_DELAY:
- index = &msg.EndEndTxDelay;
- break;
- case Q931ie_TRANSIT_DELAY_SELECTION_AND_IND:
- index = &msg.TransDelSelInd;
- break;
- case Q931ie_PACKED_LAYER_BIMARY_PARAMETERS:
- index = &msg.PackParam;
- break;
- case Q931ie_PACKED_LAYER_WINDOW_SIZE:
- index = &msg.PackWinSize;
- break;
- case Q931ie_PACKED_SIZE:
- index = &msg.PackSize;
- break;
- case Q931ie_CALLING_PARTY_NUMBER:
- index = &msg.CallingNum;
- break;
- case Q931ie_CALLING_PARTY_SUBADDRESS:
- index = &msg.CallingSub;
- break;
- case Q931ie_CALLED_PARTY_NUMBER:
- index = &msg.CalledNum;
- break;
- case Q931ie_CALLED_PARTY_SUBADDRESS:
- index = &msg.CalledSub;
- break;
- case Q931ie_REDIRECTING_NUMBER:
- index = &msg.RedirNum;
- break;
- case Q931ie_TRANSIT_NETWORK_SELECTION:
- index = &msg.TransNetSel;
- break;
- case Q931ie_RESTART_INDICATOR:
- index = &msg.RestartInd;
- break;
- case Q931ie_LOW_LAYER_COMPATIBILITY:
- index = &msg.LLComp;
- break;
- case Q931ie_HIGH_LAYER_COMPATIBILITY:
- index = &msg.HLComp;
- break;
- case Q931ie_USER_USER:
- index = &msg.UserUser;
- break;
- case Q931ie_ESCAPE_FOR_EX:
- index = &msg.Escape;
- break;
- default:
- index = NULL;
- break;
- }
-
- if (index) {
- Q931MsgieOffset[x] = (L3UINT)((L3UCHAR *)index - (L3UCHAR *)&msg);
- } else {
- Q931MsgieOffset[x] = 0;
- }
- }
-}
-
-ie *Q931MegGetIE(Q931mes_Generic *msg, L3UINT ie_type)
-{
- L3UINT offset = Q931MsgieOffset[ie_type];
-
- if (!offset) {
- return NULL;
- }
-
- return (ie *)((L3UCHAR *)msg + offset);
-
-}
void (*Q931CreateDialectCB[Q931MAXDLCT]) (L3UCHAR iDialect)=
{
Description: Dummy function for message processing
*****************************************************************************/
-L3INT Q931UieDummy(Q931_TrunkInfo_t *pTrunk,ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931UieDummy(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
return Q931E_UNKNOWN_IE;
}
Description: Dummy function for message processing
*****************************************************************************/
-L3INT Q931PmesDummy(Q931_TrunkInfo_t *pTrunk,Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
+L3INT Q931PmesDummy(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{
return Q931E_UNKNOWN_MESSAGE;
}
{
L3INT x,y;
- /* Initialize the Message offset ie Table */
- Q931Initialize_MsgieOffset();
-
/* Secure the callbacks to default procs */
Q931ErrorProc = Q931ErrorDummy;
return 1;
}
-void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect,
- L3INT (*Q931ProcFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom),
- L3INT (*Q931UmesFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size),
- L3INT (*Q931PmesFunc)(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
-)
+void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect, q931proc_func_t *Q931ProcFunc, q931umes_func_t *Q931UmesFunc, q931pmes_func_t *Q931PmesFunc)
{
if(Q931ProcFunc != NULL)
Q931Proc[dialect][mes] = Q931ProcFunc;
Q931Pmes[dialect][mes] = Q931PmesFunc;
}
-void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect,
- L3INT (*Q931PieProc)(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet),
- L3INT (*Q931UieProc)(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
-)
+void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect, q931pie_func_t *Q931PieProc, q931uie_func_t *Q931UieProc)
{
if(Q931PieProc != NULL)
Q931Pie[dialect][iec] = Q931PieProc;
*****************************************************************************/
-L3INT Q931Uie_BearerCap(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_BearerCap(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_BearerCap * pie = (Q931ie_BearerCap*)OBuf;
+ ie *pIE = &pMsg->BearerCap;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CallID(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CallID(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_CallID * pie = (Q931ie_CallID*)OBuf;
+ ie *pIE = &pMsg->CallID;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x=0;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CallState(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CallState(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_CallState * pie = (Q931ie_CallState*)OBuf;
+ ie *pIE = &pMsg->CallState;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CalledSub(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CalledSub(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_CalledSub * pie = (Q931ie_CalledSub*)OBuf;
+ ie *pIE = &pMsg->CalledSub;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CalledNum(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CalledNum(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_CalledNum * pie = (Q931ie_CalledNum*)OBuf;
+ ie *pIE = &pMsg->CalledNum;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CallingNum(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CallingNum(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
- Q931ie_CallingNum * pie = (Q931ie_CallingNum*)OBuf;
+ Q931ie_CallingNum * pie = (Q931ie_CallingNum*)OBuf;
+ ie *pIE = &pMsg->CallingNum;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CallingSub(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CallingSub(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_CallingSub * pie = (Q931ie_CallingSub*)OBuf;
+ ie *pIE = &pMsg->CallingSub;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_Cause * pie = (Q931ie_Cause*)OBuf;
+ ie *pIE = &pMsg->Cause;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_CongLevel(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_CongLevel(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_CongLevel *pie = (Q931ie_CongLevel*)OBuf;
+ ie *pIE = &pMsg->CongestionLevel;
L3INT Off = 0;
L3INT Octet = 0;
Return Value: Error code, 0 = OK
*****************************************************************************/
-L3INT Q931Uie_ChanID(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_ChanID(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_ChanID * pie = (Q931ie_ChanID*)OBuf;
+ ie *pIE = &pMsg->ChanID;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_DateTime(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_DateTime(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_DateTime * pie = (Q931ie_DateTime*)OBuf;
+ ie *pIE = &pMsg->DateTime;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize=0;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_Display(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_Display(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_Display * pie = (Q931ie_Display*)OBuf;
+ ie *pIE = &pMsg->Display;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_HLComp(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_HLComp(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_HLComp * pie = (Q931ie_HLComp*)OBuf;
+ ie *pIE = &pMsg->HLComp;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_KeypadFac(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_KeypadFac(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_KeypadFac * pie = (Q931ie_KeypadFac*)OBuf;
+ ie *pIE = &pMsg->KeypadFac;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_LLComp(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_LLComp(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_LLComp * pie = (Q931ie_LLComp*)OBuf;
+ ie *pIE = &pMsg->LLComp;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_NetFac(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_NetFac(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_NetFac * pie = (Q931ie_NetFac*)OBuf;
+ ie *pIE = &pMsg->NetFac;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x=0;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_NotifInd(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_NotifInd(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_NotifInd * pie = (Q931ie_NotifInd*)OBuf;
+ ie *pIE = &pMsg->NotifInd;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_ProgInd(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_ProgInd(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_ProgInd * pie = (Q931ie_ProgInd*)OBuf;
+ ie *pIE = &pMsg->ProgInd;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_RepeatInd(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_RepeatInd(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_RepeatInd *pie = (Q931ie_RepeatInd*)OBuf;
+ ie *pIE = &pMsg->RepeatInd;
L3INT Off = 0;
L3INT Octet = 0;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_RevChargeInd(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_RevChargeInd(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
ie iE;
+ /* ie *pIE = &pMsg->RevChargeInd; */
Q931SetIE(iE, *OOff);
return iE;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_RestartInd(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_RestartInd(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_RestartInd * pie = (Q931ie_RestartInd*)OBuf;
+ ie *pIE = &pMsg->RestartInd;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_Segment(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_Segment(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_Segment * pie = (Q931ie_Segment*)OBuf;
+ ie *pIE = &pMsg->Segment;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_SendComplete(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_SendComplete(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_SendComplete *pie = (Q931ie_SendComplete*)OBuf;
+ ie *pIE = &pMsg->SendComplete;
L3INT Off = 0;
L3INT Octet = 0;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_Signal(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_Signal(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_Signal * pie = (Q931ie_Signal*)OBuf;
+ ie *pIE = &pMsg->Signal;
L3INT Off = 0;
L3INT Octet = 0;
L3INT IESize;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_TransNetSel(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_TransNetSel(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_TransNetSel * pie = (Q931ie_TransNetSel*)OBuf;
+ ie *pIE = &pMsg->TransNetSel;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x=0;
Return Value: Error Message
*****************************************************************************/
-L3INT Q931Uie_UserUser(Q931_TrunkInfo_t *pTrunk, ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
+L3INT Q931Uie_UserUser(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{
Q931ie_UserUser * pie = (Q931ie_UserUser*)OBuf;
+ ie *pIE = &pMsg->UserUser;
L3INT Off = 0;
L3INT Octet = 0;
L3INT x=0;
switch(IBuf[IOff])
{
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_HIGH_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->HLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_HIGH_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->HLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DATETIME:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->DateTime, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_LOW_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->LLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_HIGH_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->HLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
-
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_SENDING_COMPLETE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->SendComplete, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
-
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
-
case Q931ie_KEYPAD_FACILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->KeypadFac, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
-
case Q931ie_CALLED_PARTY_NUMBER:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CalledNum, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
-
default:
return Q931E_ILLEGAL_IE;
break;
switch(IBuf[IOff])
{
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
-
case Q931ie_NOTIFICATION_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->NotifInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
-
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_HIGH_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->HLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_RESTART_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->RestartInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_RESTART_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->RestartInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CALL_IDENTITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_SENDING_COMPLETE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->SendComplete, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
- case Q931ie_REPEAT_INDICATOR:
- if(ir==0)
- {
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->RepeatInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- ir++;
- }
- else if(ir==1)
- {
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->LLRepeatInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- ir++;
- }
- else
- {
- return Q931E_ILLEGAL_IE;
- }
- break;
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_NETWORK_SPECIFIC_FACILITIES:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->NetFac, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DATETIME:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->DateTime, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_KEYPAD_FACILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->KeypadFac, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLING_PARTY_NUMBER:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallingNum, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLING_PARTY_SUBADDRESS:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallingSub, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLED_PARTY_NUMBER:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CalledSub, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLED_PARTY_SUBADDRESS:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CalledSub, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_TRANSIT_NETWORK_SELECTION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->TransNetSel, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_LOW_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->LLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_HIGH_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->HLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
+ case Q931ie_REPEAT_INDICATOR:
+ if(ir < 2) {
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ ir++;
+ } else {
+ return Q931E_ILLEGAL_IE;
+ }
+ break;
default:
return Q931E_ILLEGAL_IE;
break;
switch(IBuf[IOff])
{
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALL_STATE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallState, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CALL_IDENTITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
switch(IBuf[IOff])
{
case Q931ie_CAUSE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Cause, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
L3UCHAR ProtDisc; /* Protocol Discriminator */
L3UCHAR MesType; /* Message type */
L3INT CRV; /* Call reference value */
+ L3UINT codeset; /* Current Codeset - Temporary variable */
+ /* used for the Q931Uie functions */
+ /* in a parsed message this will only */
+ /* indicate the codeset of the last */
+ /* ie parsed */
ie Shift;
ie MoreData;
The proc tables are defined in Q931.c and initialized in Q931Initialize.
*****************************************************************************/
-extern L3INT (*Q931Proc [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *,L3INT);
+typedef L3INT (q931proc_func_t) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *, L3INT);
-extern L3INT (*Q931Umes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size);
-extern L3INT (*Q931Pmes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
+typedef L3INT (q931umes_func_t) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size);
+typedef L3INT (q931pmes_func_t) (Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
-extern L3INT (*Q931Uie [Q931MAXDLCT][Q931MAXIE] ) (Q931_TrunkInfo_t *pTrunk,ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-extern L3INT (*Q931Pie [Q931MAXDLCT][Q931MAXIE] ) (Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
+typedef L3INT (q931uie_func_t) (Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
+typedef L3INT (q931pie_func_t) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-extern L3UINT Q931MsgieOffset[Q931MAXIE];
+extern q931proc_func_t *Q931Proc[Q931MAXDLCT][Q931MAXMES];
+
+extern q931umes_func_t *Q931Umes[Q931MAXDLCT][Q931MAXMES];
+extern q931pmes_func_t *Q931Pmes[Q931MAXDLCT][Q931MAXMES];
+
+extern q931uie_func_t *Q931Uie[Q931MAXDLCT][Q931MAXIE];
+extern q931pie_func_t *Q931Pie[Q931MAXDLCT][Q931MAXIE];
/*****************************************************************************
*****************************************************************************/
-extern Q931_TrunkInfo_t Q931Trunk[Q931MAXTRUNKS];
-
#include "Q931ie.h"
#include "Q932.h"
void Q931SetMesCreateCB(L3INT (*callback)());
void Q931SetDialectCreateCB(L3INT (*callback)(L3INT));
void Q931SetHeaderSpace(L3INT space);
-void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect,
- L3INT (*Q931ProcFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom),
- L3INT (*Q931UmesFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size),
- L3INT (*Q931PmesFunc)(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize));
-void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect,
- L3INT (*Q931PieProc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet),
- L3INT (*Q931UieProc)(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff));
+void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect, q931proc_func_t *Q931ProcFunc, q931umes_func_t *Q931UmesFunc, q931pmes_func_t *Q931PmesFunc);
+void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect, q931pie_func_t *Q931PieProc, q931uie_func_t *Q931UieProc);
void Q931Initialize();
void Q931AddDialect(L3UCHAR iDialect, void (*Q931CreateDialectCB)(L3UCHAR iDialect));
void Q931AddStateEntry(L3UCHAR iD, L3INT iState, L3INT iMes, L3UCHAR cDir);
L3BOOL Q931IsEventLegal(L3UCHAR iD, L3INT iState, L3INT iMes, L3UCHAR cDir);
-ie *Q931MegGetIE(Q931mes_Generic *msg, L3UINT ie_type);
-
/*****************************************************************************
Q.931 Low Level API Function Prototyping. Implemented in Q931API.c
#define Q931ie_USER_USER 0x7e /* 0111 1110 */
#define Q931ie_ESCAPE_FOR_EX 0x7f /* 0111 1111 */
+#define Q931ie_GENERIC_DIGITS 0x37 /* 0011 0111 */
+
+
/*****************************************************************************
/* 111 All interfaces */
}Q931ie_RestartInd;
+/*****************************************************************************
+
+ Struct: Q931ie_GenericDigits
+
+
+*****************************************************************************/
+
+typedef struct
+{
+ L3UCHAR IEId; /* 00110111 */
+ L3UCHAR Size; /* Length of Information Element */
+} Q931ie_GenericDigits;
+
/*****************************************************************************
*****************************************************************************/
-L3INT Q931Pie_BearerCap(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_ChanID(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_ProgInd(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_Display(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_Signal(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_HLComp(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_Segment(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_DateTime(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_Cause(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_SendComplete(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_KeypadFac(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_NotifInd(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CallID(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_RepeatInd(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_NetFac(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CallingNum(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CallingSub(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CalledNum(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CalledSub(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CalledNum(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_TransNetSel(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_LLComp(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_CallState(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_RestartInd(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT Q931Pie_UserUser(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-
-L3INT Q931Uie_BearerCap(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
+q931pie_func_t Q931Pie_BearerCap;
+q931pie_func_t Q931Pie_ChanID;
+q931pie_func_t Q931Pie_ProgInd;
+q931pie_func_t Q931Pie_Display;
+q931pie_func_t Q931Pie_Signal;
+q931pie_func_t Q931Pie_HLComp;
+q931pie_func_t Q931Pie_Segment;
+q931pie_func_t Q931Pie_DateTime;
+q931pie_func_t Q931Pie_Cause;
+q931pie_func_t Q931Pie_SendComplete;
+q931pie_func_t Q931Pie_KeypadFac;
+q931pie_func_t Q931Pie_NotifInd;
+q931pie_func_t Q931Pie_CallID;
+q931pie_func_t Q931Pie_RepeatInd;
+q931pie_func_t Q931Pie_NetFac;
+q931pie_func_t Q931Pie_CallingNum;
+q931pie_func_t Q931Pie_CallingSub;
+q931pie_func_t Q931Pie_CalledNum;
+q931pie_func_t Q931Pie_CalledSub;
+q931pie_func_t Q931Pie_CalledNum;
+q931pie_func_t Q931Pie_TransNetSel;
+q931pie_func_t Q931Pie_LLComp;
+q931pie_func_t Q931Pie_CallState;
+q931pie_func_t Q931Pie_RestartInd;
+q931pie_func_t Q931Pie_UserUser;
+
+q931pie_func_t Q931Pie_GenericDigits;
+
L3USHORT Q931Uie_CRV(Q931_TrunkInfo_t *pTrunk,L3UCHAR * IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_ChanID(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_ProgInd(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_Display(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_Signal(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_HLComp(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_Segment(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_DateTime(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_SendComplete(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_KeypadFac(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_NotifInd(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_CallID(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_RepeatInd(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_NetFac(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_CallingNum(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_CallingSub(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_CalledNum(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_CalledSub(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_TransNetSel(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_LLComp(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_CallState(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_RestartInd(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
-L3INT Q931Uie_UserUser(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
+
+q931uie_func_t Q931Uie_BearerCap;
+q931uie_func_t Q931Uie_ChanID;
+q931uie_func_t Q931Uie_ProgInd;
+q931uie_func_t Q931Uie_Display;
+q931uie_func_t Q931Uie_Signal;
+q931uie_func_t Q931Uie_HLComp;
+q931uie_func_t Q931Uie_Segment;
+q931uie_func_t Q931Uie_DateTime;
+q931uie_func_t Q931Uie_Cause;
+q931uie_func_t Q931Uie_SendComplete;
+q931uie_func_t Q931Uie_KeypadFac;
+q931uie_func_t Q931Uie_NotifInd;
+q931uie_func_t Q931Uie_CallID;
+q931uie_func_t Q931Uie_RepeatInd;
+q931uie_func_t Q931Uie_NetFac;
+q931uie_func_t Q931Uie_CallingNum;
+q931uie_func_t Q931Uie_CallingSub;
+q931uie_func_t Q931Uie_CalledNum;
+q931uie_func_t Q931Uie_CalledSub;
+q931uie_func_t Q931Uie_TransNetSel;
+q931uie_func_t Q931Uie_LLComp;
+q931uie_func_t Q931Uie_CallState;
+q931uie_func_t Q931Uie_RestartInd;
+q931uie_func_t Q931Uie_UserUser;
+
+q931uie_func_t Q931Uie_GenericDigits;
#endif /* _Q931IE_NL */
*****************************************************************************/
-/* Single octet information elements */
-
-/* Variable Length Information Elements */
-#define nationalie_GENERIC_DIGITS 0x37 /* 0011 0111 */
-
-
-
-/*****************************************************************************
-
- Struct: nationalie_GenericDigits
-
-
-*****************************************************************************/
-
-typedef struct
-{
- L3UCHAR IEId; /* 00110111 */
- L3UCHAR Size; /* Length of Information Element */
-}nationalie_GenericDigits;
-
-
-/*****************************************************************************
-
- Q.931 Information Element Pack/Unpack functions. Implemented in nationalie.c
-
-*****************************************************************************/
-
-L3INT nationalPie_GenericDigits(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
-L3INT nationalUie_GenericDigits(Q931_TrunkInfo_t *pTrunk,ie *pIE, L3UCHAR * IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff);
-
-
/*****************************************************************************
Q.931 Message Pack/Unpack functions. Implemented in nationalmes.c
Q931SetIEProc(Q931ie_LOW_LAYER_COMPATIBILITY, i,Q931Pie_LLComp, Q931Uie_LLComp);
Q931SetIEProc(Q931ie_HIGH_LAYER_COMPATIBILITY, i,Q931Pie_HLComp, Q931Uie_HLComp);
Q931SetIEProc(Q931ie_USER_USER, i,Q931Pie_UserUser, Q931Uie_UserUser);
- Q931SetIEProc(nationalie_GENERIC_DIGITS, i,nationalPie_GenericDigits, nationalUie_GenericDigits);
+ Q931SetIEProc(Q931ie_GENERIC_DIGITS, i,Q931Pie_GenericDigits, Q931Uie_GenericDigits);
/* The following define a state machine. The point is that the Message */
/* procs can when search this to find out if the message/state */
Q931SetIEProc(Q931ie_LOW_LAYER_COMPATIBILITY, i,Q931Pie_LLComp, Q931Uie_LLComp);
Q931SetIEProc(Q931ie_HIGH_LAYER_COMPATIBILITY, i,Q931Pie_HLComp, Q931Uie_HLComp);
Q931SetIEProc(Q931ie_USER_USER, i,Q931Pie_UserUser, Q931Uie_UserUser);
- Q931SetIEProc(nationalie_GENERIC_DIGITS, i,nationalPie_GenericDigits, nationalUie_GenericDigits);
+ Q931SetIEProc(Q931ie_GENERIC_DIGITS, i,Q931Pie_GenericDigits, Q931Uie_GenericDigits);
/* The following define a state machine. The point is that the Message */
/* procs can when search this to find out if the message/state */
+++ /dev/null
-/*****************************************************************************
-
- FileName: nationalie.c
-
- Contents: Information Element Pack/Unpack functions.
-
- These functions will pack out a National ISDN message from the bit
- packed original format into structs that are easier to process
- and pack the same structs back into bit fields when sending
- messages out.
-
- The messages contains a short for each possible IE. The MSB
- bit flags the precense of an IE, while the remaining bits
- are the offset into a buffer to find the actual IE.
-
- Each IE are supported by 3 functions:
-
- nationalPie_XXX Pack struct into Q.931 IE
- nationalUie_XXX Unpack Q.931 IE into struct
- nationalInitIEXXX Initialize IE (see nationalapi.c).
-
- License/Copyright:
-
- Copyright (c) 2007, Jan Vidar Berger, Case Labs, Ltd. All rights reserved.
- email:janvb@caselaboratories.com
-
- Copyright (c) 2007, Michael Jerris. All rights reserved.
- email:mike@jerris.com
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * Neither the name of the Case Labs, Ltd nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*****************************************************************************/
-
-#include "national.h"
-
-/*****************************************************************************
-
- Macro: Q931MoreIE
-
- Description: Local helper macro detecting if there is more IE space left
- based on the 3 standard parameters Octet, Off and IESpace.
- This can be used to test if the IE is completed to avoid
- that the header of the next IE is interpreted as a part of
- the current IE.
-
-*****************************************************************************/
-#define Q931MoreIE() (Octet+Off - 2< IESize)
-
-#define Q931IESizeTest(x) {\
- if(Octet + Off - 2!= IESize)\
- {\
- Q931SetError(pTrunk,x, Octet, Off);\
- return x;\
- }\
- }
-
-/*****************************************************************************
-
- Function: nationalUie_GenericDigits
-
- Parameters: pIE[OUT] ptr to Information Element id.
- IBuf[IN] ptr to a packed ie.
- OBuf[OUT] ptr to buffer for Unpacked ie.
- IOff[IN\OUT] Input buffer offset
- OOff[IN\OUT] Output buffer offset
-
-
- Ibuf and OBuf points directly to buffers. The IOff and OOff
- must be updated, but are otherwise not used in the ie unpack.
-
- Return Value: Error Message
-
-*****************************************************************************/
-L3INT nationalUie_GenericDigits(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
-{
- nationalie_GenericDigits * pie = (nationalie_GenericDigits*)OBuf;
- L3INT Off = 0;
- L3INT Octet = 0;
- L3INT x=0;
- L3INT IESize;
-
- *pIE=0;
-
- /* Octet 1 */
- pie->IEId = IBuf[Octet++];
-
- /* Octet 2 */
- IESize = IBuf[Octet++];
-
- Q931SetIE(*pIE, *OOff);
-
- *IOff = (*IOff) + Octet + Off;
- *OOff = (*OOff) + sizeof(nationalie_GenericDigits) + x -1;
-
- pie->Size = (L3UCHAR)(sizeof(nationalie_GenericDigits) + x -1);
-
- return Q931E_NO_ERROR;
-}
-
-/*****************************************************************************
-
- Function: nationalPie_GenericDigits
-
- Parameters: IBuf[IN] Ptr to struct.
- OBuf[OUT] Ptr tp packed output buffer.
- Octet[IN/OUT] Offset into OBuf.
-
- Return Value: Error code, 0 = OK
-
-*****************************************************************************/
-
-L3INT nationalPie_GenericDigits(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet)
-{
- OBuf[(*Octet)++] = nationalie_GENERIC_DIGITS ;
- OBuf[(*Octet)++] = 2;
-
- return Q931E_NO_ERROR;
-}
-
switch(IBuf[IOff])
{
case Q931ie_SENDING_COMPLETE:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->SendComplete, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
- case Q931ie_REPEAT_INDICATOR:
- if(ir==0)
- {
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->RepeatInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- ir++;
- }
- else if(ir==1)
- {
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->LLRepeatInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- ir++;
- }
- else
- {
- return Q931E_ILLEGAL_IE;
- }
- break;
case Q931ie_BEARER_CAPABILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->BearerCap, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CHANNEL_IDENTIFICATION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ChanID, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_PROGRESS_INDICATOR:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->ProgInd, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_NETWORK_SPECIFIC_FACILITIES:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->NetFac, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DISPLAY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Display, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_DATETIME:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->DateTime, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_KEYPAD_FACILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->KeypadFac, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_SIGNAL:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->Signal, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLING_PARTY_NUMBER:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallingNum, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLING_PARTY_SUBADDRESS:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CallingSub, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLED_PARTY_NUMBER:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CalledSub, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_CALLED_PARTY_SUBADDRESS:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->CalledSub, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_TRANSIT_NETWORK_SELECTION:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->TransNetSel, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_LOW_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->LLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
- if(rc != Q931E_NO_ERROR)
- return rc;
- break;
case Q931ie_HIGH_LAYER_COMPATIBILITY:
- rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, &mes->HLComp, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
if(rc != Q931E_NO_ERROR)
return rc;
break;
- case nationalie_GENERIC_DIGITS:
+ case Q931ie_REPEAT_INDICATOR:
+ if(ir < 2) {
+ rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
+ ir++;
+ } else {
+ return Q931E_ILLEGAL_IE;
+ }
+ break;
+ case Q931ie_GENERIC_DIGITS:
/* TODO: Implement this ie */
IOff = IOff + 4;
break;