better implement Q931Uie_GenericDigits.

git-svn-id: http://svn.openzap.org/svn/openzap/trunk@172 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
Michael Jerris 2007-05-29 02:42:32 +00:00
parent 27cfa656c3
commit 68b898c69e
4 changed files with 65 additions and 23 deletions

View File

@ -710,6 +710,7 @@ static const char *q931_error_names[] = {
"Q931E_RESTARTIND", /* -3027 */ "Q931E_RESTARTIND", /* -3027 */
"Q931E_SEGMENT", /* -3028 */ "Q931E_SEGMENT", /* -3028 */
"Q931E_SIGNAL", /* -3029 */ "Q931E_SIGNAL", /* -3029 */
"Q931E_GENERIC_DIGITS" /* -3030 */
}; };

View File

@ -3000,23 +3000,60 @@ L3INT Q931Uie_GenericDigits(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3U
ie *pIE = &pMsg->GenericDigits; ie *pIE = &pMsg->GenericDigits;
L3INT Off = 0; L3INT Off = 0;
L3INT Octet = 0; L3INT Octet = 0;
L3INT x=0; L3INT x;
L3INT IESize; L3INT IESize;
*pIE=0; *pIE=0;
/* Octet 1 */ /* Octet 1 */
pie->IEId = IBuf[Octet++]; pie->IEId = IBuf[Octet];
Octet ++;
/* Octet 2 */ /* Octet 2 */
IESize = IBuf[Octet++]; IESize = IBuf[Octet ++];
/* Octet 3 */
pie->Type = (IBuf[Octet]) & 0x1F;
pie->Encoding = (IBuf[Octet] >> 5) & 0x07;
Octet ++;
/* Octet 4*/
if (pie->Type == 0) { /* BCD Even */
x = 0;
do {
pie->Digit[x++] = IBuf[Octet+Off] & 0x0f;
pie->Digit[x++] = (IBuf[Octet+Off] >> 4) & 0x0f;
Off++;
} while (Q931MoreIE());
} else if (pie->Type == 1) { /* BCD Odd */
x = 0;
do {
pie->Digit[x++] = IBuf[Octet+Off] & 0x0f;
if (Q931MoreIE()) {
pie->Digit[x] = (IBuf[Octet+Off] >> 4) & 0x0f;
}
x++;
Off++;
} while (Q931MoreIE());
} else if (pie->Type == 2) { /* IA5 */
x = 0;
do {
pie->Digit[x++] = IBuf[Octet+Off] & 0x7f;
Off++;
} while (Q931MoreIE());
} else {
/* Binary encoding type unkown */
Q931SetError(pTrunk, Q931E_GENERIC_DIGITS, Octet, Off);
return Q931E_GENERIC_DIGITS;
}
Q931IESizeTest(Q931E_GENERIC_DIGITS);
Q931SetIE(*pIE, *OOff); Q931SetIE(*pIE, *OOff);
*IOff = (*IOff) + Octet + Off; *IOff = (*IOff) + Octet + Off;
*OOff = (*OOff) + sizeof(Q931ie_GenericDigits) + x -1; *OOff = (*OOff) + sizeof(Q931ie_CallingSub) + x -1;
pie->Size = (L3UCHAR)(sizeof(Q931ie_CallingSub) + x -1);
pie->Size = (L3UCHAR)(sizeof(Q931ie_GenericDigits) + x -1);
return Q931E_NO_ERROR; return Q931E_NO_ERROR;
} }
@ -3036,7 +3073,7 @@ L3INT Q931Uie_GenericDigits(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3U
L3INT Q931Pie_GenericDigits(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet) L3INT Q931Pie_GenericDigits(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet)
{ {
OBuf[(*Octet)++] = (Q931ie_GENERIC_DIGITS & 0xFF); OBuf[(*Octet)++] = (Q931ie_GENERIC_DIGITS & 0xFF);
OBuf[(*Octet)++] = 2; OBuf[(*Octet)++] = 0;
return Q931E_NO_ERROR; return Q931E_NO_ERROR;
} }

View File

@ -153,7 +153,8 @@ typedef enum {
Q931E_PROGIND = -3026, Q931E_PROGIND = -3026,
Q931E_RESTARTIND = -3027, Q931E_RESTARTIND = -3027,
Q931E_SEGMENT = -3028, Q931E_SEGMENT = -3028,
Q931E_SIGNAL = -3029 Q931E_SIGNAL = -3029,
Q931E_GENERIC_DIGITS = -3030
} q931_error_t; } q931_error_t;

View File

@ -1077,6 +1077,9 @@ typedef struct
{ {
L3UCHAR IEId; /* 00110111 */ L3UCHAR IEId; /* 00110111 */
L3UCHAR Size; /* Length of Information Element */ L3UCHAR Size; /* Length of Information Element */
L3UCHAR Type; /* Type of number */
L3UCHAR Encoding; /* Encoding of number */
L3UCHAR Digit[1]; /* Number digits (IA5) */
} Q931ie_GenericDigits; } Q931ie_GenericDigits;