added new protocol messages for network transport properties; removed unnecessary protocol events

This commit is contained in:
Volker Fischer 2009-02-24 18:20:33 +00:00
parent 1bc8c5f84c
commit 2cd15abb8a
9 changed files with 207 additions and 60 deletions

View file

@ -858,9 +858,6 @@ EPutDataStat CChannel::PutData ( const CVector<unsigned char>& vecbyData,
// set status flags // set status flags
eRet = PS_PROT_OK; eRet = PS_PROT_OK;
bIsProtocolPacket = true; bIsProtocolPacket = true;
// create message for protocol status
emit ProtocolStatus ( true );
} }
} }
@ -941,9 +938,6 @@ EPutDataStat CChannel::PutData ( const CVector<unsigned char>& vecbyData,
// the protocol parsing failed and this was no audio block, // the protocol parsing failed and this was no audio block,
// we treat this as protocol error (unkown packet) // we treat this as protocol error (unkown packet)
eRet = PS_PROT_ERR; eRet = PS_PROT_ERR;
// create message for protocol status
emit ProtocolStatus ( false );
} }
} }

View file

@ -208,7 +208,6 @@ signals:
void ReqJittBufSize(); void ReqJittBufSize();
void ReqConnClientsList(); void ReqConnClientsList();
void ConClientListMesReceived ( CVector<CChannelShortInfo> vecChanInfo ); void ConClientListMesReceived ( CVector<CChannelShortInfo> vecChanInfo );
void ProtocolStatus ( bool bOk );
void NameHasChanged(); void NameHasChanged();
void ChatTextReceived ( QString strChatText ); void ChatTextReceived ( QString strChatText );
void PingReceived ( int iMs ); void PingReceived ( int iMs );

View file

@ -47,9 +47,6 @@ CClient::CClient ( const quint16 iPortNumber ) :
QObject::connect ( &Channel, SIGNAL ( ReqJittBufSize() ), QObject::connect ( &Channel, SIGNAL ( ReqJittBufSize() ),
this, SLOT ( OnReqJittBufSize() ) ); this, SLOT ( OnReqJittBufSize() ) );
QObject::connect ( &Channel, SIGNAL ( ProtocolStatus ( bool ) ),
this, SLOT ( OnProtocolStatus ( bool ) ) );
QObject::connect ( &Channel, QObject::connect ( &Channel,
SIGNAL ( ConClientListMesReceived ( CVector<CChannelShortInfo> ) ), SIGNAL ( ConClientListMesReceived ( CVector<CChannelShortInfo> ) ),
SIGNAL ( ConClientListMesReceived ( CVector<CChannelShortInfo> ) ) ); SIGNAL ( ConClientListMesReceived ( CVector<CChannelShortInfo> ) ) );
@ -157,19 +154,6 @@ bool CClient::SetServerAddr ( QString strNAddr )
return true; return true;
} }
void CClient::OnProtocolStatus ( bool bOk )
{
// show protocol status in GUI
if ( bOk )
{
PostWinMessage ( MS_PROTOCOL, MUL_COL_LED_RED );
}
else
{
PostWinMessage ( MS_PROTOCOL, MUL_COL_LED_GREEN );
}
}
void CClient::Start() void CClient::Start()
{ {
// init object // init object

View file

@ -201,7 +201,6 @@ protected:
public slots: public slots:
void OnSendProtMessage ( CVector<uint8_t> vecMessage ); void OnSendProtMessage ( CVector<uint8_t> vecMessage );
void OnReqJittBufSize(); void OnReqJittBufSize();
void OnProtocolStatus ( bool bOk );
void OnNewConnection(); void OnNewConnection();
void OnReceivePingMessage ( int iMs ); void OnReceivePingMessage ( int iMs );

View file

@ -93,6 +93,8 @@
// if you want to change this paramter, there has to be done code modifications // if you want to change this paramter, there has to be done code modifications
// on other places, too! The code tag "MAX_NUM_CHANNELS_TAG" shows these places // on other places, too! The code tag "MAX_NUM_CHANNELS_TAG" shows these places
// (just search for the tag in the entire code) // (just search for the tag in the entire code)
// note: since in the protocol messages the channel ID is only a byte, a
// maximum of 8 channels are possible, see e.g. "PROTMESSID_CHANNEL_GAIN"!
#define MAX_NUM_CHANNELS 6 // max number channels for server #define MAX_NUM_CHANNELS 6 // max number channels for server
// length of the moving average buffer for response time measurement // length of the moving average buffer for response time measurement
@ -130,9 +132,8 @@ typedef unsigned int _MESSAGE_IDENT;
#define MS_JIT_BUF_PUT 3 #define MS_JIT_BUF_PUT 3
#define MS_JIT_BUF_GET 4 #define MS_JIT_BUF_GET 4
#define MS_PACKET_RECEIVED 5 #define MS_PACKET_RECEIVED 5
#define MS_PROTOCOL 6 #define MS_ERROR_IN_THREAD 6
#define MS_ERROR_IN_THREAD 7 #define MS_SET_JIT_BUF_SIZE 7
#define MS_SET_JIT_BUF_SIZE 8
#define MUL_COL_LED_RED 0 #define MUL_COL_LED_RED 0
#define MUL_COL_LED_YELLOW 1 #define MUL_COL_LED_YELLOW 1

View file

@ -104,6 +104,27 @@ MESSAGES
| 4 bytes transmit time in ms | | 4 bytes transmit time in ms |
+-----------------------------+ +-----------------------------+
- Properties for network transport: PROTMESSID_NETW_TRANSPORT_PROPS
+-------------------+------------------+-----------------+------------------+-----------------------+----------------------+
| 4 bytes netw size | 4 bytes aud size | 1 byte num chan | 4 bytes sam rate | 2 bytes audiocod type | 4 bytes audiocod arg |
+-------------------+------------------+-----------------+------------------+-----------------------+----------------------+
- "netw size": length of the network packet in bytes
- "aud size": length of the mono audio block size in samples
- "num chan": number of channels of the audio signal, e.g. "2" is stereo
- "sam rate": sample rate of the audio stream
- "audiocod type": audio coding type, the following types are supported:
- 0: none, no audio coding applied
- 1: IMA-ADPCM
- 2: MS-ADPCM
- "audiocod arg": argument for the audio coder, if not used this value shall be set to 0
- Request properties for network transport: PROTMESSID_REQ_NETW_TRANSPORT_PROPS
note: does not have any data -> n = 0
****************************************************************************** ******************************************************************************
* *
* This program is free software; you can redistribute it and/or modify it under * This program is free software; you can redistribute it and/or modify it under
@ -369,6 +390,16 @@ for ( int i = 0; i < iNumBytes; i++ ) {
bRet = EvaluatePingMes ( vecData ); bRet = EvaluatePingMes ( vecData );
break; break;
case PROTMESSID_NETW_TRANSPORT_PROPS:
bRet = EvaluateNetwTranspPropsMes ( vecData );
break;
case PROTMESSID_REQ_NETW_TRANSPORT_PROPS:
bRet = EvaluateReqNetwTranspPropsMes ( vecData );
break;
} }
// send acknowledge message // send acknowledge message
@ -691,7 +722,7 @@ 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 current list entry // size of message body
const int iEntrLen = 2 /* string size */ + iStrLen; const int iEntrLen = 2 /* string size */ + iStrLen;
// build data vector // build data vector
@ -774,6 +805,109 @@ bool CProtocol::EvaluatePingMes ( const CVector<uint8_t>& vecData )
return false; // no error return false; // no error
} }
void CProtocol::CreateNetwTranspPropsMes ( const CNetworkTransportProps& NetTrProps )
{
unsigned int iPos = 0; // init position pointer
// size of current message body
const int iEntrLen = 4 /* netw size */ + 4 /* aud size */ + 1 /* num chan */ +
4 /* sam rate */ + 2 /* audiocod type */ + 4 /* audiocod arg */;
// build data vector
CVector<uint8_t> vecData ( iEntrLen );
// length of the network packet in bytes (4 bytes)
PutValOnStream ( vecData, iPos,
static_cast<uint32_t> ( NetTrProps.iNetworkPacketSize ), 4 );
// length of the mono audio block size in samples (4 bytes)
PutValOnStream ( vecData, iPos,
static_cast<uint32_t> ( NetTrProps.iMonoAudioBlockSize ), 4 );
// number of channels of the audio signal, e.g. "2" is stereo (1 byte)
PutValOnStream ( vecData, iPos,
static_cast<uint32_t> ( NetTrProps.iNumAudioChannels ), 1 );
// sample rate of the audio stream (4 bytes)
PutValOnStream ( vecData, iPos,
static_cast<uint32_t> ( NetTrProps.iSampleRate ), 4 );
// audio coding type (2 bytes)
PutValOnStream ( vecData, iPos,
static_cast<uint32_t> ( NetTrProps.eAudioCodingType ), 2 );
// argument for the audio coder (4 bytes)
PutValOnStream ( vecData, iPos,
static_cast<uint32_t> ( NetTrProps.iAudioCodingArg ), 4 );
CreateAndSendMessage ( PROTMESSID_NETW_TRANSPORT_PROPS, vecData );
}
bool CProtocol::EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
{
unsigned int iPos = 0; // init position pointer
CNetworkTransportProps ReceivedNetwTranspProps;
// size of current message body
const int iEntrLen = 4 /* netw size */ + 4 /* aud size */ + 1 /* num chan */ +
4 /* sam rate */ + 2 /* audiocod type */ + 4 /* audiocod arg */;
// check size
if ( vecData.Size() != iEntrLen )
{
return true;
}
// length of the network packet in bytes (4 bytes)
ReceivedNetwTranspProps.iNetworkPacketSize =
static_cast<unsigned int> ( GetValFromStream ( vecData, iPos, 4 ) );
// length of the mono audio block size in samples (4 bytes)
ReceivedNetwTranspProps.iMonoAudioBlockSize =
static_cast<unsigned int> ( GetValFromStream ( vecData, iPos, 4 ) );
// number of channels of the audio signal, e.g. "2" is stereo (1 byte)
ReceivedNetwTranspProps.iNumAudioChannels =
static_cast<unsigned int> ( GetValFromStream ( vecData, iPos, 1 ) );
// sample rate of the audio stream (4 bytes)
ReceivedNetwTranspProps.iSampleRate =
static_cast<unsigned int> ( GetValFromStream ( vecData, iPos, 4 ) );
// audio coding type (2 bytes) with error check
const int iRecCodingType =
static_cast<unsigned short> ( GetValFromStream ( vecData, iPos, 2 ) );
if ( ( iRecCodingType != CNetworkTransportProps::ACT_NONE ) &&
( iRecCodingType != CNetworkTransportProps::ACT_IMA_ADPCM ) &&
( iRecCodingType != CNetworkTransportProps::ACT_MS_ADPCM ) )
{
return true;
}
// argument for the audio coder (4 bytes)
ReceivedNetwTranspProps.iAudioCodingArg =
static_cast<unsigned int> ( GetValFromStream ( vecData, iPos, 4 ) );
// invoke message action
emit NetTranspPropsReceived ( ReceivedNetwTranspProps );
return false; // no error
}
void CProtocol::CreateReqNetwTranspPropsMes()
{
CreateAndSendMessage ( PROTMESSID_REQ_NETW_TRANSPORT_PROPS, CVector<uint8_t> ( 0 ) );
}
bool CProtocol::EvaluateReqNetwTranspPropsMes ( const CVector<uint8_t>& vecData )
{
// invoke message action
emit ReqNetTranspProps();
return false; // no error
}
/******************************************************************************\ /******************************************************************************\

View file

@ -36,19 +36,21 @@
/* Definitions ****************************************************************/ /* Definitions ****************************************************************/
// protocol message IDs // protocol message IDs
#define PROTMESSID_ILLEGAL 0 // illegal ID #define PROTMESSID_ILLEGAL 0 // illegal ID
#define PROTMESSID_ACKN 1 // acknowledge #define PROTMESSID_ACKN 1 // acknowledge
#define PROTMESSID_JITT_BUF_SIZE 10 // jitter buffer size #define PROTMESSID_JITT_BUF_SIZE 10 // jitter buffer size
#define PROTMESSID_REQ_JITT_BUF_SIZE 11 // request jitter buffer size #define PROTMESSID_REQ_JITT_BUF_SIZE 11 // request jitter buffer size
#define PROTMESSID_PING 12 // OLD, not used anymore #define PROTMESSID_PING 12 // OLD, not used anymore
#define PROTMESSID_NET_BLSI_FACTOR 13 // network buffer size factor #define PROTMESSID_NET_BLSI_FACTOR 13 // network buffer size factor
#define PROTMESSID_CHANNEL_GAIN 14 // set channel gain for mix #define PROTMESSID_CHANNEL_GAIN 14 // set channel gain for mix
#define PROTMESSID_CONN_CLIENTS_LIST 15 // connected client list #define PROTMESSID_CONN_CLIENTS_LIST 15 // connected client list
#define PROTMESSID_SERVER_FULL 16 // server full message #define PROTMESSID_SERVER_FULL 16 // server full message
#define PROTMESSID_REQ_CONN_CLIENTS_LIST 17 // request connected client list #define PROTMESSID_REQ_CONN_CLIENTS_LIST 17 // request connected client list
#define PROTMESSID_CHANNEL_NAME 18 // set channel name for fader tag #define PROTMESSID_CHANNEL_NAME 18 // set channel name for fader tag
#define PROTMESSID_CHAT_TEXT 19 // contains a chat text #define PROTMESSID_CHAT_TEXT 19 // contains a chat text
#define PROTMESSID_PING_MS 20 // for measuring ping time #define PROTMESSID_PING_MS 20 // for measuring ping time
#define PROTMESSID_NETW_TRANSPORT_PROPS 21 // properties for network transport
#define PROTMESSID_REQ_NETW_TRANSPORT_PROPS 22 // request properties for network transport
// lengths of message as defined in protocol.cpp file // lengths of message as defined in protocol.cpp file
#define MESS_HEADER_LENGTH_BYTE 7 // TAG (2), ID (2), cnt (1), length (2) #define MESS_HEADER_LENGTH_BYTE 7 // TAG (2), ID (2), cnt (1), length (2)
@ -68,15 +70,16 @@ public:
void CreateJitBufMes ( const int iJitBufSize ); void CreateJitBufMes ( const int iJitBufSize );
void CreateReqJitBufMes(); void CreateReqJitBufMes();
void CreateReqConnClientsList();
void CreateServerFullMes();
void CreateNetwBlSiFactMes ( const int iNetwBlSiFact ); void CreateNetwBlSiFactMes ( const int iNetwBlSiFact );
void CreateChanGainMes ( const int iChanID, const double dGain ); void CreateChanGainMes ( const int iChanID, const double dGain );
void CreateConClientListMes ( const CVector<CChannelShortInfo>& vecChanInfo );
void CreateServerFullMes();
void CreateReqConnClientsList();
void CreateChanNameMes ( const QString strName ); void CreateChanNameMes ( const QString strName );
void CreateChatTextMes ( const QString strChatText ); void CreateChatTextMes ( const QString strChatText );
void CreatePingMes ( const int iMs ); void CreatePingMes ( const int iMs );
void CreateNetwTranspPropsMes ( const CNetworkTransportProps& NetTrProps );
void CreateConClientListMes ( const CVector<CChannelShortInfo>& vecChanInfo ); void CreateReqNetwTranspPropsMes();
void CreateAndSendAcknMess ( const int& iID, const int& iCnt ); void CreateAndSendAcknMess ( const int& iID, const int& iCnt );
@ -136,16 +139,18 @@ protected:
void CreateAndSendMessage ( const int iID, const CVector<uint8_t>& vecData ); void CreateAndSendMessage ( const int iID, const CVector<uint8_t>& vecData );
bool EvaluateJitBufMes ( const CVector<uint8_t>& vecData ); bool EvaluateJitBufMes ( const CVector<uint8_t>& vecData );
bool EvaluateReqJitBufMes ( const CVector<uint8_t>& vecData ); bool EvaluateReqJitBufMes ( const CVector<uint8_t>& vecData );
bool EvaluateReqConnClientsList ( const CVector<uint8_t>& vecData ); bool EvaluateNetwBlSiFactMes ( const CVector<uint8_t>& vecData );
bool EvaluateServerFullMes ( const CVector<uint8_t>& vecData ); bool EvaluateChanGainMes ( const CVector<uint8_t>& vecData );
bool EvaluateNetwBlSiFactMes ( const CVector<uint8_t>& vecData ); bool EvaluateConClientListMes ( const CVector<uint8_t>& vecData );
bool EvaluateChanGainMes ( const CVector<uint8_t>& vecData ); bool EvaluateServerFullMes ( const CVector<uint8_t>& vecData );
bool EvaluateChanNameMes ( const CVector<uint8_t>& vecData ); bool EvaluateReqConnClientsList ( const CVector<uint8_t>& vecData );
bool EvaluateChatTextMes ( const CVector<uint8_t>& vecData ); bool EvaluateChanNameMes ( const CVector<uint8_t>& vecData );
bool EvaluateConClientListMes ( const CVector<uint8_t>& vecData ); bool EvaluateChatTextMes ( const CVector<uint8_t>& vecData );
bool EvaluatePingMes ( const CVector<uint8_t>& vecData ); bool EvaluatePingMes ( const CVector<uint8_t>& vecData );
bool EvaluateNetwTranspPropsMes ( const CVector<uint8_t>& vecData );
bool EvaluateReqNetwTranspPropsMes ( const CVector<uint8_t>& vecData );
int iOldRecID, iOldRecCnt; int iOldRecID, iOldRecCnt;
@ -165,15 +170,17 @@ signals:
// receiving // receiving
void ChangeJittBufSize ( int iNewJitBufSize ); void ChangeJittBufSize ( int iNewJitBufSize );
void ReqJittBufSize();
void ChangeNetwBlSiFact ( int iNewNetwBlSiFact ); void ChangeNetwBlSiFact ( int iNewNetwBlSiFact );
void ChangeChanGain ( int iChanID, double dNewGain ); void ChangeChanGain ( int iChanID, double dNewGain );
void ConClientListMesReceived ( CVector<CChannelShortInfo> vecChanInfo );
void ServerFull();
void ReqConnClientsList();
void ChangeChanName ( QString strName ); void ChangeChanName ( QString strName );
void ChatTextReceived ( QString strChatText ); void ChatTextReceived ( QString strChatText );
void PingReceived ( int iMs ); void PingReceived ( int iMs );
void ConClientListMesReceived ( CVector<CChannelShortInfo> vecChanInfo ); void NetTranspPropsReceived ( CNetworkTransportProps NetworkTransportProps );
void ReqJittBufSize(); void ReqNetTranspProps();
void ReqConnClientsList();
void ServerFull();
}; };
#endif /* !defined ( PROTOCOL_H__3B123453_4344_BB2392354455IUHF1912__INCLUDED_ ) */ #endif /* !defined ( PROTOCOL_H__3B123453_4344_BB2392354455IUHF1912__INCLUDED_ ) */

View file

@ -97,7 +97,7 @@ void CSocket::OnDataReceived()
{ {
// client // client
// check if packet comes from the server we want to connect // check if packet comes from the server we want to connect
if ( ! ( pChannel->GetAddress() == RecHostAddr ) ) if ( !( pChannel->GetAddress() == RecHostAddr ) )
{ {
return; return;
} }

View file

@ -407,6 +407,35 @@ public:
QString strName; QString strName;
}; };
class CNetworkTransportProps
{
public:
enum EAudioCodingType
{
ACT_NONE = 0,
ACT_IMA_ADPCM = 1,
ACT_MS_ADPCM = 2
};
CNetworkTransportProps() : iNetworkPacketSize ( 0 ), iMonoAudioBlockSize ( 0 ),
iNumAudioChannels ( 0 ), iSampleRate ( 0 ),
eAudioCodingType ( ACT_NONE ), iAudioCodingArg ( 0 ) {}
CNetworkTransportProps ( const unsigned int iNNPS, const unsigned int iNMABS,
const unsigned int iNNACH, const unsigned int iNSR,
const EAudioCodingType eNACT, const int iNACA ) :
iNetworkPacketSize ( iNNPS ), iMonoAudioBlockSize ( iNMABS ),
iNumAudioChannels ( iNNACH ), iSampleRate ( iNSR ), eAudioCodingType ( eNACT ),
iAudioCodingArg ( iNACA ) {}
unsigned int iNetworkPacketSize;
unsigned int iMonoAudioBlockSize;
unsigned int iNumAudioChannels;
unsigned int iSampleRate;
EAudioCodingType eAudioCodingType;
int iAudioCodingArg;
};
// Audio Reverbration ---------------------------------------------------------- // Audio Reverbration ----------------------------------------------------------
class CAudioReverb class CAudioReverb