Add decoder tables.

This commit is contained in:
brazilofmux 2007-09-12 22:17:12 -07:00
parent fe5a1df4fb
commit 5c952d04b0
2 changed files with 104 additions and 7 deletions

View file

@ -31,8 +31,16 @@ typedef struct
QUEUE_BLOCK *pTail;
} QUEUE_INFO;
QUEUE_INFO *pQueue_In = NULL;
QUEUE_INFO *pQueue_Out = NULL;
QUEUE_INFO Queue_In;
QUEUE_INFO Queue_Out;
QUEUE_INFO Queue_Frame;
// Decoder
//
int iState = 0;
size_t nLength = 0;
UINT32 nChannel = 0;
size_t nLengthRemaining = 0;
CHANNEL_INFO *aChannels = NULL;
int nChannels = 0;
@ -69,6 +77,12 @@ MUX_RESULT Channel0_Call(CHANNEL_INFO *pci, size_t nBuffer, void *pBuffer)
return MUX_E_NOTIMPLEMENTED;
}
void Pipe_InitializeQueueInfo(QUEUE_INFO *pqi)
{
pqi->pHead = NULL;
pqi->pTail = NULL;
}
void Pipe_AppendToQueue(QUEUE_INFO *pqi, size_t n, const char *p)
{
if ( 0 != n
@ -138,7 +152,86 @@ void Pipe_AppendToQueue(QUEUE_INFO *pqi, size_t n, const char *p)
}
}
void Pipe_ParseQueue(QUEUE_INFO *pqi)
void Pipe_FreeQueue(QUEUE_INFO *pqi)
{
if (NULL != pqi)
{
QUEUE_BLOCK *pBlock = pqi->pHead;
// Free all the QUEUE_BLOCKs finally the owning QUEUE_INFO structure.
//
while (NULL != pBlock)
{
QUEUE_BLOCK *qBlock = pBlock->pNext;
delete pBlock;
pBlock = qBlock;
}
delete pqi;
}
}
// CallMagic 0xC39B71F9 - 17, 14, 9, 20
// ReturnMagic 0x35972DD0 - 7, 13, 6, 18
// MsgMagic 0xF69E1836 - 19, 15, 3, 8
// DiscMagic 0x960AA381 - 12, 1, 16, 10
// EndMagic 0x27118B26 - 5, 2, 11, 4
//
const UINT8 decoder_itt[256] =
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
//
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, // 0
0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, // 1
0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 6, 0, 0, // 2
0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6
0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7
0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, // 8
0, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 14, 0, 0, 15, 0, // 9
0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B
0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C
18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E
0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0 // F
};
const UINT8 decoder_stt[21][23] =
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
//
{ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1, 0, 17, 0 }, // 0 Start
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 }, // 1 Call0
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 2 Call1
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4 }, // 3 Call2
{ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }, // 4 Call3/Return3/Msg3/Disc3
{ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 }, // 5 Length0
{ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, // 6 Length1
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }, // 7 Length2
{ 12, 12, 12, 12, 12, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 }, // 8 Length3
{ 12, 12, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 }, // 9 End0
{ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12 }, // 10 End1
{ 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 }, // 11 End2
{ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1, 0, 17, 0 }, // 12 Cleanup
{ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1, 0, 17, 0 }, // 13 Accept
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0 }, // 14 Return0
{ 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 15 Return1
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0 }, // 16 Return2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0 }, // 17 Msg0
{ 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 18 Msg1
{ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 19 Msg2
{ 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 20 Disc0
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0 }, // 21 Disc1
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // 22 Disc2
};
// Decode bytes out of Queue_In to Queue_Frame.
//
void Pipe_DecodeFrames(void)
{
}
@ -146,6 +239,10 @@ void Pipe_ParseQueue(QUEUE_INFO *pqi)
void Stub_ShoveChars(int fdServer)
{
Pipe_InitializeQueueInfo(Queue_In);
Pipe_InitializeQueueInfo(Queue_Out);
Pipe_InitializeQueueInfo(Queue_Frame);
for (;;)
{
char arg[MAX_STRING];
@ -165,8 +262,8 @@ void Stub_ShoveChars(int fdServer)
break;
}
Pipe_AppendToQueue(pQueue_In, len, arg);
Pipe_ParseQueue(pQueue_In);
Pipe_AppendToQueue(Queue_In, len, arg);
Pipe_DecodeFrames(Queue_In);
}
}

View file

@ -110,7 +110,7 @@ III. Packet Format.
A. Call Frame.
CallMagic 0x359771F9
CallMagic 0xC39B71F9
Length 0x--------
ToChannel 0x--------
Data..................
@ -130,7 +130,7 @@ III. Packet Format.
C. Message Frame (non-blocking).
ReturnMagic 0x35971836
MsgMagic 0xF69E1836
Length 0x--------
ToChannel 0x--------
Data..................