]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add Q931MegGetIE function to simplify the Pmes functions.
authorMichael Jerris <mike@jerris.com>
Thu, 24 May 2007 20:16:45 +0000 (20:16 +0000)
committerMichael Jerris <mike@jerris.com>
Thu, 24 May 2007 20:16:45 +0000 (20:16 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@147 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/freetdm/src/isdn/Q931.c
libs/freetdm/src/isdn/include/Q931.h

index afc57539d037be7ae9fd91025cddf1ffac2d6596..2f3bf63028438d98d1aa81f085d4a45ed04c2b96 100644 (file)
@@ -64,6 +64,156 @@ L3INT (*Q931Pmes  [Q931MAXDLCT][Q931MAXMES])        (Q931_TrunkInfo_t *pTrunk, Q931mes_
 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);
 
+L3UINT Q931MsgieOffset[Q931MAXIE];
+
+void Q931Initialize_MsgieOffset()
+{
+       L3INT x;
+       Q931mes_Generic msg;
+       ie *index;
+       
+       for(x=0; x<Q931MAXIE; x++) {
+               switch(x)
+               {
+               case Q931ie_SWITCHOOK:\r
+                       index = &msg.Switchhook;
+                       break;
+               case Q931ie_FEATURE_ACTIVATION:\r
+                       index = &msg.FeatAct;
+                       break;
+               case Q931ie_FEATURE_INDICATION:\r
+                       index = &msg.FeatInd;
+                       break;
+               case Q931ie_CALL_IDENTITY:\r
+                       index = &msg.CallID;
+                       break;
+               case Q931ie_SHIFT:\r
+                       index = &msg.Shift;
+                       break;
+               case Q931ie_MORE_DATA:\r
+                       index = &msg.MoreData;
+                       break;
+               case Q931ie_SENDING_COMPLETE:\r
+                       index = &msg.SendComplete;
+                       break;
+               case Q931ie_CONGESTION_LEVEL:\r
+                       index = &msg.CongestionLevel;
+                       break;
+               case Q931ie_REPEAT_INDICATOR:\r
+                       index = &msg.RepeatInd;
+                       break;
+               case Q931ie_SEGMENTED_MESSAGE:\r
+                       index = &msg.Segment;
+                       break;
+               case Q931ie_BEARER_CAPABILITY:\r
+                       index = &msg.BearerCap;
+                       break;
+               case Q931ie_CAUSE:\r
+                       index = &msg.Cause;
+                       break;
+               case Q931ie_CALL_STATE:\r
+                       index = &msg.CallState;
+                       break;
+               case Q931ie_CHANNEL_IDENTIFICATION:\r
+                       index = &msg.ChanID;
+                       break;
+               case Q931ie_PROGRESS_INDICATOR:\r
+                       index = &msg.ProgInd;
+                       break;
+               case Q931ie_NETWORK_SPECIFIC_FACILITIES:\r
+                       index = &msg.NetFac;
+                       break;
+               case Q931ie_NOTIFICATION_INDICATOR:\r
+                       index = &msg.NotifInd;
+                       break;
+               case Q931ie_DISPLAY:\r
+                       index = &msg.Display;
+                       break;
+               case Q931ie_DATETIME:\r
+                       index = &msg.DateTime;
+                       break;
+               case Q931ie_KEYPAD_FACILITY:\r
+                       index = &msg.KeypadFac;
+                       break;
+               case Q931ie_SIGNAL:\r
+                       index = &msg.Signal;
+                       break;\r
+               case Q931ie_INFORMATION_RATE:\r
+                       index = &msg.InfoRate;
+                       break;
+               case Q931ie_END_TO_END_TRANSIT_DELAY:\r
+                       index = &msg.EndEndTxDelay;
+                       break;
+               case Q931ie_TRANSIT_DELAY_SELECTION_AND_IND:\r
+                       index = &msg.TransDelSelInd;
+                       break;
+               case Q931ie_PACKED_LAYER_BIMARY_PARAMETERS:\r
+                       index = &msg.PackParam;
+                       break;
+               case Q931ie_PACKED_LAYER_WINDOW_SIZE:\r
+                       index = &msg.PackWinSize;
+                       break;
+               case Q931ie_PACKED_SIZE:\r
+                       index = &msg.PackSize;
+                       break;
+               case Q931ie_CALLING_PARTY_NUMBER:\r
+                       index = &msg.CallingNum;
+                       break;
+               case Q931ie_CALLING_PARTY_SUBADDRESS:\r
+                       index = &msg.CallingSub;
+                       break;
+               case Q931ie_CALLED_PARTY_NUMBER:\r
+                       index = &msg.CalledNum;
+                       break;
+               case Q931ie_CALLED_PARTY_SUBADDRESS:\r
+                       index = &msg.CalledSub;
+                       break;
+               case Q931ie_REDIRECTING_NUMBER:\r
+                       index = &msg.RedirNum;
+                       break;
+               case Q931ie_TRANSIT_NETWORK_SELECTION:\r
+                       index = &msg.TransNetSel;
+                       break;
+               case Q931ie_RESTART_INDICATOR:\r
+                       index = &msg.RestartInd;
+                       break;
+               case Q931ie_LOW_LAYER_COMPATIBILITY:\r
+                       index = &msg.LLComp;
+                       break;
+               case Q931ie_HIGH_LAYER_COMPATIBILITY:\r
+                       index = &msg.HLComp;
+                       break;
+               case Q931ie_USER_USER:\r
+                       index = &msg.UserUser;
+                       break;
+               case Q931ie_ESCAPE_FOR_EX:\r
+                       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)=
 {
        NULL,
@@ -227,6 +377,9 @@ void Q931Initialize()
 {
     L3INT x,y;
 
+       /* Initialize the Message offset ie Table */
+       Q931Initialize_MsgieOffset();
+
        /* Secure the callbacks to default procs */
     Q931ErrorProc = Q931ErrorDummy;
 
index 445f948c96a63542e6023387cf18ab06b16a08e4..2b5a51700c651c99e97c363945120a294b0d0937 100644 (file)
@@ -1413,6 +1413,10 @@ typedef struct
     ie              HLComp;         /* High Layer Compatibility             */
     ie              UserUser;       /* User-user                            */
     ie              Escape;         /* Escape for extension                 */
+       ie                              Switchhook;
+       ie                              FeatAct;
+       ie                              FeatInd;
+
        L3UCHAR                 buf[1];                 /* Buffer for IE's                                              */
 
 }Q931mes_Generic;
@@ -1593,6 +1597,8 @@ extern L3INT (*Q931Pmes  [Q931MAXDLCT][Q931MAXMES])   (Q931_TrunkInfo_t *pTrunk,
 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);
 
+extern L3UINT Q931MsgieOffset[Q931MAXIE];
+
 /*****************************************************************************
     
   Macro:        GetIETotoSize
@@ -1924,6 +1930,8 @@ void Q931SetGetTimeCB(L3ULONG (*callback)());
 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