]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
remove codeset form generic message struct, it doesn't belong there, this is still...
authorMichael Jerris <mike@jerris.com>
Tue, 29 May 2007 15:32:37 +0000 (15:32 +0000)
committerMichael Jerris <mike@jerris.com>
Tue, 29 May 2007 15:32:37 +0000 (15:32 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@178 a93c3328-9c30-0410-af19-c9cd2b2d52af

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

index f57365ecda25d064f34258cb80ab4e7a54988edf..6c0b65613c4ece5ff02527267d0244591b66aed3 100644 (file)
@@ -334,9 +334,6 @@ L3INT Q931Rx23(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT Size)
     /* Message Type */
     m->MesType = Mes[IOff++];
 
-    /* Starting Codeset */
-       m->codeset = Q931_CODESET_0;
-
        if (m->ProtDisc != 8) {
                return Q931E_UNKNOWN_MESSAGE;
        }
index 87f0bb8d627c1e685fcdd4840d051957a3eba845..4e16a2a5554ece4ae70d3e8b83ff4589dc3e083e 100644 (file)
@@ -372,11 +372,6 @@ typedef struct
     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;
index 4f498670da95edc3ea0a80e15e17d6b49da15dba..f6f2870db019c61a12cefcc53bcbb746b283351d 100644 (file)
@@ -98,7 +98,7 @@ typedef enum {
 
 /* Variable Length Codeset 6 Information Elements */
 
-#define Q931ie_GENERIC_DIGITS (Q931_CODESET_6 | 0x37) /* 0011 0111       */
+#define Q931ie_GENERIC_DIGITS                                  0x37 /* 0011 0111       */
 
 
 
index 7d40b273ee45ed5967728c2d91414100606fe725..62cecf9270ac8e45e6f02de6e0fc120c7f68e131 100644 (file)
@@ -56,55 +56,74 @@ L3INT nationalUmes_Setup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generi
        L3INT ir=0;
        L3INT OOff=0;
        L3INT rc=Q931E_NO_ERROR;
-       L3UINT last_codeset = mes->codeset;
+       L3UCHAR last_codeset = 0, codeset = 0;
        L3UCHAR shift_lock = 1;
 
        while(IOff < Size)
        {
                if (!shift_lock) {
-                       mes->codeset = last_codeset;
+                       codeset = last_codeset;
                }
 
                if ((IBuf[IOff] & 0xF0) == Q931ie_SHIFT ) {
-                       mes->codeset = ((IBuf[IOff] & 0x07) << 8);
                        shift_lock = (IBuf[IOff] & 0x08);
+                       if (shift_lock) {
+                               last_codeset = codeset;
+                       }
+                       codeset = ((IBuf[IOff] & 0x07) << 8);
                        IOff++;
                }
 
-               switch(mes->codeset | IBuf[IOff])
-               {
-               case Q931ie_SENDING_COMPLETE:
-               case Q931ie_BEARER_CAPABILITY:
-               case Q931ie_CHANNEL_IDENTIFICATION:
-               case Q931ie_PROGRESS_INDICATOR:
-               case Q931ie_NETWORK_SPECIFIC_FACILITIES:
-               case Q931ie_DISPLAY:
-               case Q931ie_DATETIME:
-               case Q931ie_KEYPAD_FACILITY:
-               case Q931ie_SIGNAL:
-               case Q931ie_CALLING_PARTY_NUMBER:
-               case Q931ie_CALLING_PARTY_SUBADDRESS:
-               case Q931ie_CALLED_PARTY_NUMBER:
-               case Q931ie_CALLED_PARTY_SUBADDRESS:
-               case Q931ie_TRANSIT_NETWORK_SELECTION:
-               case Q931ie_LOW_LAYER_COMPATIBILITY:
-               case Q931ie_HIGH_LAYER_COMPATIBILITY:
-               case Q931ie_GENERIC_DIGITS:
-                       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) {
+               if (codeset == 0) {
+                       switch(IBuf[IOff])
+                       {
+                       case Q931ie_SENDING_COMPLETE:
+                       case Q931ie_BEARER_CAPABILITY:
+                       case Q931ie_CHANNEL_IDENTIFICATION:
+                       case Q931ie_PROGRESS_INDICATOR:
+                       case Q931ie_NETWORK_SPECIFIC_FACILITIES:
+                       case Q931ie_DISPLAY:
+                       case Q931ie_DATETIME:
+                       case Q931ie_KEYPAD_FACILITY:
+                       case Q931ie_SIGNAL:
+                       case Q931ie_CALLING_PARTY_NUMBER:
+                       case Q931ie_CALLING_PARTY_SUBADDRESS:
+                       case Q931ie_CALLED_PARTY_NUMBER:
+                       case Q931ie_CALLED_PARTY_SUBADDRESS:
+                       case Q931ie_TRANSIT_NETWORK_SELECTION:
+                       case Q931ie_LOW_LAYER_COMPATIBILITY:
+                       case Q931ie_HIGH_LAYER_COMPATIBILITY:
                                rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
-                               ir++;
-                       } else {
+                               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;
                        }
-                       break;
-               default:
+               } else if (codeset == 6) {
+                       switch(IBuf[IOff])
+                       {
+                       case Q931ie_GENERIC_DIGITS:
+                               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;
+                       }
+
+               } else {
                        return Q931E_ILLEGAL_IE;
-                       break;
                }
        }
     mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;