Files
2022-10-26 12:25:11 +08:00

198 lines
4.1 KiB
C++

#include "stdafx.h"
#include "BBTanStream.h"
BBTanStream::BBTanStream()
{
}
BBTanStream::~BBTanStream()
{
}
VOID BBTanStream::Init()
{
Init_T1();
Init_T2();
//m_StartHandler.insert( m_StartHandler.end(), make_pair( 2, BBTAN_RECURSIVE_HANDLER_NAME(2) ) );
}
VOID BBTanStream::Encode( uRND_CONVKEY& rKEY, BYTE* pBYTE, WORD wMSG_BASE, BYTE& rbyLinkedNo )
{
#if LOG_DEBUG_WRITER(__MOLA_CLIENT_DEBUGGING_WRITELOG__)
{
CHAR buffer[16384];
INT iWritten = 0;
CHAR* pBuffer = buffer;
WORD wLEN = 0;
BYTE* pB = pBYTE;
while( wLEN < wMSG_BASE )
{
BOOL iRET = _snprintf( pBuffer, sizeof(buffer)-iWritten, "[%02X]", *pB );
if( iRET < 0 )
break;
iWritten += iRET;
pBuffer += iRET;
++wLEN;
++pB;
}
_snprintf( pBuffer, sizeof(buffer)-iWritten, "ST\r\n" );
DWORD dwWritten;
WriteFile( shFILE, buffer, wLEN*4+4, &dwWritten, NULL );
FlushFileBuffers( shFILE );
}
#endif //
Converter( m_Sender, rKEY, pBYTE, wMSG_BASE, rbyLinkedNo );
#if LOG_DEBUG_WRITER(__MOLA_CLIENT_DEBUGGING_WRITELOG__)
{
CHAR buffer[16384];
INT iWritten = 0;
CHAR* pBuffer = buffer;
WORD wLEN = 0;
BYTE* pB = pBYTE;
while( wLEN < wMSG_BASE )
{
BOOL iRET = _snprintf( pBuffer, sizeof(buffer)-iWritten, "[%02X]", *pB );
if( iRET < 0 )
break;
iWritten += iRET;
pBuffer += iRET;
++wLEN;
++pB;
}
_snprintf( pBuffer, sizeof(buffer)-iWritten, "EN\r\n" );
DWORD dwWritten;
WriteFile( shFILE, buffer, wLEN*4+4, &dwWritten, NULL );
FlushFileBuffers( shFILE );
}
#endif //
}
VOID BBTanStream::Decode( uRND_CONVKEY& rKEY, BYTE* pBYTE, WORD wMSG_BASE, BYTE& rbyLinkedNo )
{
#if LOG_DEBUG_WRITER(__MOLA_CLIENT_DEBUGGING_WRITELOG__)
{
CHAR buffer[16384];
INT iWritten = 0;
CHAR* pBuffer = buffer;
WORD wLEN = 0;
BYTE* pB = pBYTE;
while( wLEN < wMSG_BASE )
{
BOOL iRET = _snprintf( pBuffer, sizeof(buffer)-iWritten, "[%02X]", *pB );
if( iRET < 0 )
break;
iWritten += iRET;
pBuffer += iRET;
++wLEN;
++pB;
}
_snprintf( pBuffer, sizeof(buffer)-iWritten, "ST\r\n" );
DWORD dwWritten;
WriteFile( shFILE, buffer, wLEN*4+4, &dwWritten, NULL );
FlushFileBuffers( shFILE );
}
#endif //
Converter( m_Receiver, rKEY, pBYTE, wMSG_BASE, rbyLinkedNo );
#if LOG_DEBUG_WRITER(__MOLA_CLIENT_DEBUGGING_WRITELOG__)
{
CHAR buffer[16384];
INT iWritten = 0;
CHAR* pBuffer = buffer;
WORD wLEN = 0;
BYTE* pB = pBYTE;
while( wLEN < wMSG_BASE )
{
BOOL iRET = _snprintf( pBuffer, sizeof(buffer)-iWritten, "[%02X]", *pB );
if( iRET < 0 )
break;
iWritten += iRET;
pBuffer += iRET;
++wLEN;
++pB;
}
_snprintf( pBuffer, sizeof(buffer)-iWritten, "EN\r\n" );
DWORD dwWritten;
WriteFile( shFILE, buffer, wLEN*4+4, &dwWritten, NULL );
FlushFileBuffers( shFILE );
}
#endif //
}
#pragma warning(push)
#pragma warning(disable:4307)
const BYTE sc_RND_A = GETRNDNO_RNG08_T2(BBTAN_KEY_INITIAL_GENERATOR(7));
const BYTE sc_RND_B = GETRNDNO_RNG08_T3(BBTAN_KEY_INITIAL_GENERATOR(9));
const WORD sc_RND_SIZE = GETRNDNO_RNG128_T1((BBTAN_KEY_INITIAL_GENERATOR(4)+BBTAN_KEY_SERVICE_GENERATOR2(9)));
#pragma warning(pop)
VOID BBTanStream::Converter( BBTAN_MAP& rStarter, uRND_CONVKEY& rKEY, BYTE* pBYTE, WORD wMSG_BASE, BYTE& rbyLinkedNo )
{
if( !(2 < wMSG_BASE) ) return;
WORD wCATEnPROTO = *(WORD*)pBYTE;
#if CODE_BACKUP
// <Case1>
BYTE byA1 = (pBYTE[0]&0x0F)<<sc_RND_A | (pBYTE[1]&0x0F);
BYTE byB1 = (pBYTE[1]&0xF0) | (pBYTE[0]&0xF0)>>sc_RND_B;
WORD wCATEnPROTO1 = MAKEWORD( byA1, byB1 );
// <Case2>
BYTE byA2 = (pBYTE[0]&0x0F)<<8 | (pBYTE[1]&0x0F);
BYTE byB2 = (pBYTE[1]&0xF0) | (pBYTE[0]&0xF0)>>8;
WORD wCATEnPROTO2 = MAKEWORD( byA2, byB2 );
#endif
wCATEnPROTO = wCATEnPROTO%256;
#if CODE_TEST(__MOLA_CLIENT_DEBUGGING_BBTAN__)
printf( "STHANDLE %u : %u : %u\n", wCATEnPROTO, wMSG_BASE, rbyLinkedNo );
#endif
BBTAN_MAP_IT it = rStarter.find( (BYTE)wCATEnPROTO );
if( it != rStarter.end() )
{
ConvertBBTanHandler& rHANDLER = it->second;
rHANDLER( rKEY, &pBYTE[2], wMSG_BASE-2, rbyLinkedNo );
}
#if CODE_BACKUP
ConvertBBTanHandler& rHANDLER = rStarter[wCATEnPROTO%256];
rHANDLER( &pBYTE[2], wMSG_BASE-2, rbyLinkedNo );
#endif
}
VOID BBTanStream::Release()
{
}