return rc;
}
+/*****************************************************************************\r
+\r
+ Function: Q931Uie_GenericDigits\r
+\r
+ Parameters: pIE[OUT] ptr to Information Element id.\r
+ IBuf[IN] ptr to a packed ie.\r
+ OBuf[OUT] ptr to buffer for Unpacked ie.\r
+ IOff[IN\OUT] Input buffer offset\r
+ OOff[IN\OUT] Output buffer offset\r
+\r
+\r
+ Ibuf and OBuf points directly to buffers. The IOff and OOff\r
+ must be updated, but are otherwise not used in the ie unpack.\r
+\r
+ Return Value: Error Message\r
+\r
+*****************************************************************************/\r
+L3INT Q931Uie_GenericDigits(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)\r
+{\r
+ Q931ie_GenericDigits * pie = (Q931ie_GenericDigits*)OBuf;\r
+ ie *pIE = &pMsg->GenericDigits;\r
+ L3INT Off = 0;\r
+ L3INT Octet = 0;\r
+ L3INT x=0;\r
+ L3INT IESize;\r
+\r
+ *pIE=0;\r
+\r
+ /* Octet 1 */\r
+ pie->IEId = IBuf[Octet++];\r
+\r
+ /* Octet 2 */\r
+ IESize = IBuf[Octet++]; \r
+\r
+ Q931SetIE(*pIE, *OOff);\r
+\r
+ *IOff = (*IOff) + Octet + Off;\r
+ *OOff = (*OOff) + sizeof(Q931ie_GenericDigits) + x -1;\r
+ \r
+ pie->Size = (L3UCHAR)(sizeof(Q931ie_GenericDigits) + x -1);\r
+\r
+ return Q931E_NO_ERROR;\r
+}\r
+\r
+/*****************************************************************************\r
+\r
+ Function: Q931Pie_GenericDigits\r
+\r
+ Parameters: IBuf[IN] Ptr to struct.\r
+ OBuf[OUT] Ptr tp packed output buffer.\r
+ Octet[IN/OUT] Offset into OBuf.\r
+\r
+ Return Value: Error code, 0 = OK\r
+\r
+*****************************************************************************/\r
+\r
+L3INT Q931Pie_GenericDigits(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet)\r
+{\r
+ OBuf[(*Octet)++] = (Q931ie_GENERIC_DIGITS & 0xFF);\r
+ OBuf[(*Octet)++] = 2;\r
+\r
+ return Q931E_NO_ERROR;\r
+}\r
L3INT ir=0;
L3INT OOff=0;
L3INT rc=Q931E_NO_ERROR;
+ L3UINT last_codeset = mes->codeset;
+ L3UCHAR shift_lock = 1;
while(IOff < Size)
{
- switch(IBuf[IOff])
+ if (!shift_lock) {
+ mes->codeset = last_codeset;
+ }
+
+ if ((IBuf[IOff] & 0xF0) == Q931ie_SHIFT ) {
+ mes->codeset = ((IBuf[IOff] & 0x07) << 8);
+ shift_lock = (IBuf[IOff] & 0x08);
+ IOff++;
+ }
+
+ switch(mes->codeset | IBuf[IOff])
{
case Q931ie_SENDING_COMPLETE:
case Q931ie_BEARER_CAPABILITY:
/* TODO: Implement this ie */
IOff = IOff + 4;
break;
- case Q931ie_SHIFT:
- /* TODO: Implement this ie */
- IOff++;
- break;
default:
return Q931E_ILLEGAL_IE;
break;