From dee9e32f81fcec8cd5095e4bc5c95cf1a49bbf01 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 19 Feb 2006 16:35:35 +0000 Subject: [PATCH] first version of message parsing --- src/llconclientdlgbase.ui | 4 +++ src/protocol.cpp | 51 +++++++++++++++++++++++++++------------ src/protocol.h | 17 ++++++++++--- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/src/llconclientdlgbase.ui b/src/llconclientdlgbase.ui index 964f3b46..ececc91c 100755 --- a/src/llconclientdlgbase.ui +++ b/src/llconclientdlgbase.ui @@ -360,6 +360,10 @@ text C&onnect + + default + true + diff --git a/src/protocol.cpp b/src/protocol.cpp index cbd19564..d7254efe 100755 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -41,16 +41,15 @@ Protocol message definition /* Implementation *************************************************************/ - -#define MESS_HEADER_LENGTH_BYTE 5 /* ID, cnt, length */ -#define MESS_LEN_WITHOUT_DATA_BYTE ( MESS_HEADER_LENGTH_BYTE + 2 /* CRC */ ) - -bool CProtocol::ParseMessage ( const CVector& vecIn ) +bool CProtocol::ParseMessage ( const CVector& vecIn, + int& iCnt, + int& iID, + CVector& vecData ) { /* return code: true -> ok; false -> error */ - int iID, iCnt, iLenBy, i; + int iLenBy, i; unsigned int iCurPos; // query length of input vector @@ -82,9 +81,9 @@ bool CProtocol::ParseMessage ( const CVector& vecIn ) // now check CRC ----- CCRC CRCObj; - iCurPos = 0; // start from beginning - const int iLenCRCCalc = MESS_HEADER_LENGTH_BYTE + iLenBy; + + iCurPos = 0; // start from beginning for ( i = 0; i < iLenCRCCalc; i++ ) { CRCObj.AddByte ( static_cast ( @@ -96,9 +95,13 @@ bool CProtocol::ParseMessage ( const CVector& vecIn ) return false; // return error code } - -// TODO actual parsing of message data - + // decode data ----- + iCurPos = MESS_HEADER_LENGTH_BYTE; // start from beginning of data + for ( i = 0; i < iLenBy; i++ ) + { + vecData[i] = static_cast ( + GetValFromStream ( vecIn, iCurPos, 1 ) ); + } return true; // everything was ok } @@ -127,8 +130,10 @@ uint32_t CProtocol::GetValFromStream ( const CVector& vecIn, void CProtocol::GenMessage ( CVector& vecOut, const int iCnt, const int iID, - const CVector& vecData) + const CVector& vecData ) { + int i; + // query length of data vector const int iDataLenByte = vecData.Size(); @@ -154,12 +159,28 @@ void CProtocol::GenMessage ( CVector& vecOut, PutValOnStream ( vecOut, iCurPos, static_cast ( iDataLenByte ), 2 ); -// TODO data, CRC + // encode data ----- + for ( i = 0; i < iDataLenByte; i++ ) + { + PutValOnStream ( vecOut, iCurPos, + static_cast ( vecData[i] ), 1 ); + } + // encode CRC ----- + CCRC CRCObj; + iCurPos = 0; // start from beginning + + const int iLenCRCCalc = MESS_HEADER_LENGTH_BYTE + iDataLenByte; + for ( i = 0; i < iLenCRCCalc; i++ ) + { + CRCObj.AddByte ( static_cast ( + GetValFromStream ( vecOut, iCurPos, 1 ) ) ); + } + + PutValOnStream ( vecOut, iCurPos, + static_cast ( CRCObj.GetCRC () ), 2 ); } - - void CProtocol::PutValOnStream ( CVector& vecIn, unsigned int& iPos, const uint32_t iVal, diff --git a/src/protocol.h b/src/protocol.h index 7615e80d..ec4e3009 100755 --- a/src/protocol.h +++ b/src/protocol.h @@ -36,6 +36,10 @@ #define PROTMESSID_JITT_BUF_SIZE 10 // jitter buffer size #define PROTMESSID_PING 11 // for measuring ping time +// lengths of message as defined in protocol.cpp file +#define MESS_HEADER_LENGTH_BYTE 5 /* ID, cnt, length */ +#define MESS_LEN_WITHOUT_DATA_BYTE ( MESS_HEADER_LENGTH_BYTE + 2 /* CRC */ ) + /* Classes ********************************************************************/ class CProtocol @@ -45,7 +49,11 @@ public: virtual ~CProtocol() {} protected: - bool ParseMessage ( const CVector& vecIn ); + bool ParseMessage ( const CVector& vecIn, + int& iCnt, + int& iID, + CVector& vecData ); + void GenMessage ( CVector& vecOut, const int iCnt, const int iID, @@ -55,9 +63,10 @@ protected: unsigned int& iPos, const uint32_t iVal, const unsigned int iNumOfBytes ); - uint32_t GetValFromStream ( const CVector& vecIn, - unsigned int& iPos, - const unsigned int iNumOfBytes ); + + uint32_t GetValFromStream ( const CVector& vecIn, + unsigned int& iPos, + const unsigned int iNumOfBytes ); uint8_t iCounter; };