moved string parsing in separate function
This commit is contained in:
parent
266107b969
commit
c01905fc51
2 changed files with 96 additions and 79 deletions
168
src/protocol.cpp
168
src/protocol.cpp
|
@ -603,7 +603,7 @@ bool CProtocol::EvaluateJitBufMes ( const CVector<uint8_t>& vecData )
|
||||||
// check size
|
// check size
|
||||||
if ( vecData.Size() != 2 )
|
if ( vecData.Size() != 2 )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// extract jitter buffer size
|
// extract jitter buffer size
|
||||||
|
@ -613,7 +613,7 @@ bool CProtocol::EvaluateJitBufMes ( const CVector<uint8_t>& vecData )
|
||||||
if ( ( iData < MIN_NET_BUF_SIZE_NUM_BL ) ||
|
if ( ( iData < MIN_NET_BUF_SIZE_NUM_BL ) ||
|
||||||
( iData > MAX_NET_BUF_SIZE_NUM_BL ) )
|
( iData > MAX_NET_BUF_SIZE_NUM_BL ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// invoke message action
|
// invoke message action
|
||||||
|
@ -660,17 +660,18 @@ bool CProtocol::EvaluateChanGainMes ( const CVector<uint8_t>& vecData )
|
||||||
// check size
|
// check size
|
||||||
if ( vecData.Size() != 3 )
|
if ( vecData.Size() != 3 )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// channel ID
|
// channel ID
|
||||||
const int iCurID =
|
const int iCurID =
|
||||||
static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
||||||
|
|
||||||
// actual gain, we convert from integer to double with range 0..1
|
// gain (read integer value)
|
||||||
const int iData =
|
const int iData =
|
||||||
static_cast<int> ( GetValFromStream ( vecData, iPos, 2 ) );
|
static_cast<int> ( GetValFromStream ( vecData, iPos, 2 ) );
|
||||||
|
|
||||||
|
// we convert the gain from integer to double with range 0..1
|
||||||
const double dNewGain = static_cast<double> ( iData ) / ( 1 << 15 );
|
const double dNewGain = static_cast<double> ( iData ) / ( 1 << 15 );
|
||||||
|
|
||||||
// invoke message action
|
// invoke message action
|
||||||
|
@ -717,41 +718,33 @@ void CProtocol::CreateConClientListMes ( const CVector<CChannelShortInfo>& vecCh
|
||||||
bool CProtocol::EvaluateConClientListMes ( const CVector<uint8_t>& vecData )
|
bool CProtocol::EvaluateConClientListMes ( const CVector<uint8_t>& vecData )
|
||||||
{
|
{
|
||||||
unsigned int iPos = 0; // init position pointer
|
unsigned int iPos = 0; // init position pointer
|
||||||
int iData;
|
|
||||||
const unsigned int iDataLen = vecData.Size();
|
const unsigned int iDataLen = vecData.Size();
|
||||||
CVector<CChannelShortInfo> vecChanInfo ( 0 );
|
CVector<CChannelShortInfo> vecChanInfo ( 0 );
|
||||||
|
|
||||||
while ( iPos < iDataLen )
|
while ( iPos < iDataLen )
|
||||||
{
|
{
|
||||||
// check size (the first 7 bytes)
|
// check size (the first 5 bytes)
|
||||||
if ( iDataLen - iPos < 7 )
|
if ( iDataLen - iPos < 5 )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// channel ID (1 byte)
|
// channel ID (1 byte)
|
||||||
const int iChanID = static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
const int iChanID =
|
||||||
|
static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
||||||
|
|
||||||
// IP address (4 bytes)
|
// IP address (4 bytes)
|
||||||
const int iIpAddr = static_cast<int> ( GetValFromStream ( vecData, iPos, 4 ) );
|
const int iIpAddr =
|
||||||
|
static_cast<int> ( GetValFromStream ( vecData, iPos, 4 ) );
|
||||||
|
|
||||||
// number of bytes for name string (2 bytes)
|
// name
|
||||||
const unsigned int iStringLen =
|
QString strCurStr;
|
||||||
static_cast<unsigned int> ( GetValFromStream ( vecData, iPos, 2 ) );
|
if ( GetStringFromStream ( vecData,
|
||||||
|
iPos,
|
||||||
// check size
|
MAX_LEN_FADER_TAG,
|
||||||
if ( iDataLen - iPos < iStringLen )
|
strCurStr ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
|
||||||
|
|
||||||
// name string (n bytes)
|
|
||||||
QString strCurStr = "";
|
|
||||||
for ( unsigned int j = 0; j < iStringLen; j++ )
|
|
||||||
{
|
|
||||||
// byte-by-byte copying of the string data
|
|
||||||
iData = static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
|
||||||
strCurStr += QString ( (char*) &iData );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add channel information to vector
|
// add channel information to vector
|
||||||
|
@ -798,29 +791,20 @@ bool CProtocol::EvaluateChanNameMes ( const CVector<uint8_t>& vecData )
|
||||||
{
|
{
|
||||||
unsigned int iPos = 0; // init position pointer
|
unsigned int iPos = 0; // init position pointer
|
||||||
|
|
||||||
// check size (the first 2 bytes)
|
// channel name
|
||||||
if ( vecData.Size() < 2 )
|
QString strName;
|
||||||
|
if ( GetStringFromStream ( vecData,
|
||||||
|
iPos,
|
||||||
|
MAX_LEN_FADER_TAG,
|
||||||
|
strName ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// number of bytes for name string (2 bytes)
|
|
||||||
const int iStrLen =
|
|
||||||
static_cast<int> ( GetValFromStream ( vecData, iPos, 2 ) );
|
|
||||||
|
|
||||||
// check size
|
// check size
|
||||||
if ( ( vecData.Size() - 2 != iStrLen ) || ( iStrLen > MAX_LEN_FADER_TAG ) )
|
if ( ( vecData.Size() - 2 ) != strName.size() )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
|
||||||
|
|
||||||
// name string (n bytes)
|
|
||||||
QString strName = "";
|
|
||||||
for ( int i = 0; i < iStrLen; i++ )
|
|
||||||
{
|
|
||||||
// byte-by-byte copying of the string data
|
|
||||||
int iData = static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
|
||||||
strName += QString ( (char*) &iData );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// invoke message action
|
// invoke message action
|
||||||
|
@ -844,7 +828,7 @@ bool CProtocol::EvaluateReqChanNameMes()
|
||||||
|
|
||||||
void CProtocol::CreateChatTextMes ( const QString strChatText )
|
void CProtocol::CreateChatTextMes ( const QString strChatText )
|
||||||
{
|
{
|
||||||
unsigned int iPos = 0; // init position pointer
|
unsigned int iPos = 0; // init position pointer
|
||||||
const int iStrLen = strChatText.size(); // get string size
|
const int iStrLen = strChatText.size(); // get string size
|
||||||
|
|
||||||
// size of message body
|
// size of message body
|
||||||
|
@ -863,30 +847,20 @@ bool CProtocol::EvaluateChatTextMes ( const CVector<uint8_t>& vecData )
|
||||||
{
|
{
|
||||||
unsigned int iPos = 0; // init position pointer
|
unsigned int iPos = 0; // init position pointer
|
||||||
|
|
||||||
// check size (the first 2 bytes)
|
// chat text
|
||||||
if ( vecData.Size() < 2 )
|
QString strChatText;
|
||||||
|
if ( GetStringFromStream ( vecData,
|
||||||
|
iPos,
|
||||||
|
MAX_LEN_CHAT_TEXT_PLUS_HTML,
|
||||||
|
strChatText ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// number of bytes for chat text string (2 bytes)
|
|
||||||
const int iStrLen =
|
|
||||||
static_cast<int> ( GetValFromStream ( vecData, iPos, 2 ) );
|
|
||||||
|
|
||||||
// check size
|
// check size
|
||||||
if ( ( vecData.Size() - 2 != iStrLen ) ||
|
if ( ( vecData.Size() - 2 ) != strChatText.size() )
|
||||||
( iStrLen > MAX_LEN_CHAT_TEXT_PLUS_HTML ) )
|
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
|
||||||
|
|
||||||
// chat text string (n bytes)
|
|
||||||
QString strChatText = "";
|
|
||||||
for ( int i = 0; i < iStrLen; i++ )
|
|
||||||
{
|
|
||||||
// byte-by-byte copying of the string data
|
|
||||||
int iData = static_cast<int> ( GetValFromStream ( vecData, iPos, 1 ) );
|
|
||||||
strChatText += QString ( (char*) &iData );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// invoke message action
|
// invoke message action
|
||||||
|
@ -915,7 +889,7 @@ bool CProtocol::EvaluatePingMes ( const CVector<uint8_t>& vecData )
|
||||||
// check size
|
// check size
|
||||||
if ( vecData.Size() != 4 )
|
if ( vecData.Size() != 4 )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
emit PingReceived ( static_cast<int> ( GetValFromStream ( vecData, iPos, 4 ) ) );
|
emit PingReceived ( static_cast<int> ( GetValFromStream ( vecData, iPos, 4 ) ) );
|
||||||
|
@ -989,7 +963,7 @@ bool CProtocol::EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
|
||||||
// check size
|
// check size
|
||||||
if ( vecData.Size() != iEntrLen )
|
if ( vecData.Size() != iEntrLen )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// length of the base network packet (frame) in bytes (4 bytes)
|
// length of the base network packet (frame) in bytes (4 bytes)
|
||||||
|
@ -999,7 +973,7 @@ bool CProtocol::EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
|
||||||
if ( ( ReceivedNetwTranspProps.iBaseNetworkPacketSize < 1 ) ||
|
if ( ( ReceivedNetwTranspProps.iBaseNetworkPacketSize < 1 ) ||
|
||||||
( ReceivedNetwTranspProps.iBaseNetworkPacketSize > MAX_SIZE_BYTES_NETW_BUF ) )
|
( ReceivedNetwTranspProps.iBaseNetworkPacketSize > MAX_SIZE_BYTES_NETW_BUF ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// block size factor (2 bytes)
|
// block size factor (2 bytes)
|
||||||
|
@ -1010,7 +984,7 @@ bool CProtocol::EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
|
||||||
( ReceivedNetwTranspProps.iBlockSizeFact != FRAME_SIZE_FACTOR_DEFAULT ) &&
|
( ReceivedNetwTranspProps.iBlockSizeFact != FRAME_SIZE_FACTOR_DEFAULT ) &&
|
||||||
( ReceivedNetwTranspProps.iBlockSizeFact != FRAME_SIZE_FACTOR_SAFE ) )
|
( ReceivedNetwTranspProps.iBlockSizeFact != FRAME_SIZE_FACTOR_SAFE ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// number of channels of the audio signal, only mono (1 channel) or
|
// number of channels of the audio signal, only mono (1 channel) or
|
||||||
|
@ -1021,7 +995,7 @@ bool CProtocol::EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
|
||||||
if ( ( ReceivedNetwTranspProps.iNumAudioChannels != 1 ) &&
|
if ( ( ReceivedNetwTranspProps.iNumAudioChannels != 1 ) &&
|
||||||
( ReceivedNetwTranspProps.iNumAudioChannels != 2 ) )
|
( ReceivedNetwTranspProps.iNumAudioChannels != 2 ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
// sample rate of the audio stream (4 bytes)
|
// sample rate of the audio stream (4 bytes)
|
||||||
|
@ -1057,7 +1031,8 @@ bool CProtocol::EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
|
||||||
|
|
||||||
void CProtocol::CreateReqNetwTranspPropsMes()
|
void CProtocol::CreateReqNetwTranspPropsMes()
|
||||||
{
|
{
|
||||||
CreateAndSendMessage ( PROTMESSID_REQ_NETW_TRANSPORT_PROPS, CVector<uint8_t> ( 0 ) );
|
CreateAndSendMessage ( PROTMESSID_REQ_NETW_TRANSPORT_PROPS,
|
||||||
|
CVector<uint8_t> ( 0 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CProtocol::EvaluateReqNetwTranspPropsMes()
|
bool CProtocol::EvaluateReqNetwTranspPropsMes()
|
||||||
|
@ -1124,7 +1099,7 @@ bool CProtocol::EvaluateCLPingMes ( const CHostAddress& InetAddr,
|
||||||
// check size
|
// check size
|
||||||
if ( vecData.Size() != 4 )
|
if ( vecData.Size() != 4 )
|
||||||
{
|
{
|
||||||
return true;
|
return true; // return error code
|
||||||
}
|
}
|
||||||
|
|
||||||
emit CLPingReceived ( InetAddr,
|
emit CLPingReceived ( InetAddr,
|
||||||
|
@ -1284,7 +1259,7 @@ bool CProtocol::ParseMessageFrame ( const CVector<uint8_t>& vecIn,
|
||||||
GetValFromStream ( vecIn, iCurPos, 1 ) );
|
GetValFromStream ( vecIn, iCurPos, 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // everything was ok
|
return false; // no error
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CProtocol::GetValFromStream ( const CVector<uint8_t>& vecIn,
|
uint32_t CProtocol::GetValFromStream ( const CVector<uint8_t>& vecIn,
|
||||||
|
@ -1308,6 +1283,43 @@ uint32_t CProtocol::GetValFromStream ( const CVector<uint8_t>& vecIn,
|
||||||
return iRet;
|
return iRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CProtocol::GetStringFromStream ( const CVector<uint8_t>& vecIn,
|
||||||
|
unsigned int& iPos,
|
||||||
|
const unsigned int iMaxStringLen,
|
||||||
|
QString& strOut )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
note: iPos is automatically incremented in this function
|
||||||
|
*/
|
||||||
|
// check if at least two bytes are available
|
||||||
|
const unsigned int iInLen = vecIn.Size();
|
||||||
|
if ( ( iInLen - iPos ) < 2 )
|
||||||
|
{
|
||||||
|
return true; // return error code
|
||||||
|
}
|
||||||
|
|
||||||
|
// number of bytes for string (2 bytes)
|
||||||
|
const unsigned int iStrLen =
|
||||||
|
static_cast<unsigned int> ( GetValFromStream ( vecIn, iPos, 2 ) );
|
||||||
|
|
||||||
|
if ( ( ( iInLen - iPos ) < iStrLen ) ||
|
||||||
|
( iStrLen > iMaxStringLen ) )
|
||||||
|
{
|
||||||
|
return true; // return error code
|
||||||
|
}
|
||||||
|
|
||||||
|
// string (n bytes)
|
||||||
|
strOut = "";
|
||||||
|
for ( unsigned int i = 0; i < iStrLen; i++ )
|
||||||
|
{
|
||||||
|
// byte-by-byte copying of the string data
|
||||||
|
int iData = static_cast<int> ( GetValFromStream ( vecIn, iPos, 1 ) );
|
||||||
|
strOut += QString ( (char*) &iData );
|
||||||
|
}
|
||||||
|
|
||||||
|
return false; // no error
|
||||||
|
}
|
||||||
|
|
||||||
void CProtocol::GenMessageFrame ( CVector<uint8_t>& vecOut,
|
void CProtocol::GenMessageFrame ( CVector<uint8_t>& vecOut,
|
||||||
const int iCnt,
|
const int iCnt,
|
||||||
const int iID,
|
const int iID,
|
||||||
|
@ -1388,22 +1400,22 @@ void CProtocol::PutValOnStream ( CVector<uint8_t>& vecIn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProtocol::PutStringOnStream ( CVector<uint8_t>& vecData,
|
void CProtocol::PutStringOnStream ( CVector<uint8_t>& vecIn,
|
||||||
unsigned int& iPos,
|
unsigned int& iPos,
|
||||||
const QString& sString )
|
const QString& sString )
|
||||||
{
|
{
|
||||||
// get the string size
|
// get the string size
|
||||||
const int iCurStrLen = sString.size();
|
const int iStrLen = sString.size();
|
||||||
|
|
||||||
// number of bytes for string (2 bytes)
|
// number of bytes for string (2 bytes)
|
||||||
PutValOnStream ( vecData, iPos,
|
PutValOnStream ( vecIn, iPos,
|
||||||
static_cast<uint32_t> ( iCurStrLen ), 2 );
|
static_cast<uint32_t> ( iStrLen ), 2 );
|
||||||
|
|
||||||
// actual string (n bytes)
|
// actual string (n bytes)
|
||||||
for ( int j = 0; j < iCurStrLen; j++ )
|
for ( int j = 0; j < iStrLen; j++ )
|
||||||
{
|
{
|
||||||
// byte-by-byte copying of the string data
|
// byte-by-byte copying of the string data
|
||||||
PutValOnStream ( vecData, iPos,
|
PutValOnStream ( vecIn, iPos,
|
||||||
static_cast<uint32_t> ( sString[j].toAscii() ), 1 );
|
static_cast<uint32_t> ( sString[j].toAscii() ), 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,7 +158,7 @@ protected:
|
||||||
const uint32_t iVal,
|
const uint32_t iVal,
|
||||||
const unsigned int iNumOfBytes );
|
const unsigned int iNumOfBytes );
|
||||||
|
|
||||||
void PutStringOnStream ( CVector<uint8_t>& vecData,
|
void PutStringOnStream ( CVector<uint8_t>& vecIn,
|
||||||
unsigned int& iPos,
|
unsigned int& iPos,
|
||||||
const QString& sString );
|
const QString& sString );
|
||||||
|
|
||||||
|
@ -166,6 +166,11 @@ protected:
|
||||||
unsigned int& iPos,
|
unsigned int& iPos,
|
||||||
const unsigned int iNumOfBytes );
|
const unsigned int iNumOfBytes );
|
||||||
|
|
||||||
|
bool GetStringFromStream ( const CVector<uint8_t>& vecIn,
|
||||||
|
unsigned int& iPos,
|
||||||
|
const unsigned int iMaxStringLen,
|
||||||
|
QString& strOut );
|
||||||
|
|
||||||
bool IsConnectionLessMessageID ( const int iID ) const
|
bool IsConnectionLessMessageID ( const int iID ) const
|
||||||
{ return (iID >= 1000) & (iID < 2000); }
|
{ return (iID >= 1000) & (iID < 2000); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue