connection less messages system requires the host address to always be available (not stored in channel object)
This commit is contained in:
parent
e2f028eae7
commit
0cff6af6d8
9 changed files with 163 additions and 93 deletions
|
@ -551,5 +551,8 @@ int CChannel::GetUploadRateKbps()
|
||||||
// CConnectionLessChannel implementation ***************************************
|
// CConnectionLessChannel implementation ***************************************
|
||||||
CConnectionLessChannel::CConnectionLessChannel()
|
CConnectionLessChannel::CConnectionLessChannel()
|
||||||
{
|
{
|
||||||
// TODO
|
// connections -------------------------------------------------------------
|
||||||
|
QObject::connect ( &Protocol,
|
||||||
|
SIGNAL ( CLMessReadyForSending ( CHostAddress, CVector<uint8_t> ) ),
|
||||||
|
SIGNAL ( CLMessReadyForSending ( CHostAddress, CVector<uint8_t> ) ) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,7 +119,7 @@ public:
|
||||||
void CreateReqJitBufMes() { Protocol.CreateReqJitBufMes(); }
|
void CreateReqJitBufMes() { Protocol.CreateReqJitBufMes(); }
|
||||||
void CreateReqConnClientsList() { Protocol.CreateReqConnClientsList(); }
|
void CreateReqConnClientsList() { Protocol.CreateReqConnClientsList(); }
|
||||||
void CreateChatTextMes ( const QString& strChatText ) { Protocol.CreateChatTextMes ( strChatText ); }
|
void CreateChatTextMes ( const QString& strChatText ) { Protocol.CreateChatTextMes ( strChatText ); }
|
||||||
void CreatePingMes ( const int iMs ) { Protocol.CreatePingMes ( iMs, false ); }
|
void CreatePingMes ( const int iMs ) { Protocol.CreatePingMes ( iMs ); }
|
||||||
|
|
||||||
void CreateConClientListMes ( const CVector<CChannelShortInfo>& vecChanInfo )
|
void CreateConClientListMes ( const CVector<CChannelShortInfo>& vecChanInfo )
|
||||||
{
|
{
|
||||||
|
@ -199,23 +199,23 @@ public:
|
||||||
CConnectionLessChannel();
|
CConnectionLessChannel();
|
||||||
virtual ~CConnectionLessChannel() {}
|
virtual ~CConnectionLessChannel() {}
|
||||||
|
|
||||||
void SetAddress ( const CHostAddress NAddr ) { InetAddr = NAddr; }
|
|
||||||
CHostAddress GetAddress() const { return InetAddr; }
|
|
||||||
|
|
||||||
bool ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
bool ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
const int iNumBytes )
|
const int iNumBytes,
|
||||||
|
const CHostAddress& InetAddr )
|
||||||
{
|
{
|
||||||
return Protocol.ParseConnectionLessMessage ( vecbyData, iNumBytes );
|
return Protocol.ParseConnectionLessMessage ( vecbyData, iNumBytes, InetAddr );
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateAndImmSendServerFullMes() { Protocol.CreateAndImmSendServerFullMes(); }
|
void CreateCLServerFullMes ( const CHostAddress& InetAddr )
|
||||||
|
{ Protocol.CreateCLServerFullMes ( InetAddr ); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// connection parameters
|
|
||||||
CHostAddress InetAddr;
|
|
||||||
|
|
||||||
// network protocol
|
// network protocol
|
||||||
CProtocol Protocol;
|
CProtocol Protocol;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void CLMessReadyForSending ( CHostAddress InetAddr,
|
||||||
|
CVector<uint8_t> vecMessage );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,10 @@ CClient::CClient ( const quint16 iPortNumber ) :
|
||||||
SIGNAL ( MessReadyForSending ( CVector<uint8_t> ) ),
|
SIGNAL ( MessReadyForSending ( CVector<uint8_t> ) ),
|
||||||
this, SLOT ( OnSendProtMessage ( CVector<uint8_t> ) ) );
|
this, SLOT ( OnSendProtMessage ( CVector<uint8_t> ) ) );
|
||||||
|
|
||||||
|
QObject::connect ( &ConnLessChannel,
|
||||||
|
SIGNAL ( CLMessReadyForSending ( CHostAddress, CVector<uint8_t> ) ),
|
||||||
|
this, SLOT ( OnSendCLProtMessage ( CHostAddress, CVector<uint8_t> ) ) );
|
||||||
|
|
||||||
QObject::connect ( &Channel, SIGNAL ( ReqJittBufSize() ),
|
QObject::connect ( &Channel, SIGNAL ( ReqJittBufSize() ),
|
||||||
this, SLOT ( OnReqJittBufSize() ) );
|
this, SLOT ( OnReqJittBufSize() ) );
|
||||||
|
|
||||||
|
@ -123,6 +127,14 @@ void CClient::OnSendProtMessage ( CVector<uint8_t> vecMessage )
|
||||||
Socket.SendPacket ( vecMessage, Channel.GetAddress() );
|
Socket.SendPacket ( vecMessage, Channel.GetAddress() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CClient::OnSendCLProtMessage ( CHostAddress InetAddr,
|
||||||
|
CVector<uint8_t> vecMessage )
|
||||||
|
{
|
||||||
|
// the protocol queries me to call the function to send the message
|
||||||
|
// send it through the network
|
||||||
|
Socket.SendPacket ( vecMessage, InetAddr );
|
||||||
|
}
|
||||||
|
|
||||||
void CClient::OnNewConnection()
|
void CClient::OnNewConnection()
|
||||||
{
|
{
|
||||||
// a new connection was successfully initiated, send name and request
|
// a new connection was successfully initiated, send name and request
|
||||||
|
|
|
@ -293,6 +293,7 @@ protected:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void OnSendProtMessage ( CVector<uint8_t> vecMessage );
|
void OnSendProtMessage ( CVector<uint8_t> vecMessage );
|
||||||
|
void OnSendCLProtMessage ( CHostAddress InetAddr, CVector<uint8_t> vecMessage );
|
||||||
void OnReqJittBufSize() { Channel.CreateJitBufMes ( Channel.GetSockBufNumFrames() ); }
|
void OnReqJittBufSize() { Channel.CreateJitBufMes ( Channel.GetSockBufNumFrames() ); }
|
||||||
void OnReqChanName() { Channel.SetRemoteName ( strName ); }
|
void OnReqChanName() { Channel.SetRemoteName ( strName ); }
|
||||||
void OnNewConnection();
|
void OnNewConnection();
|
||||||
|
|
149
src/protocol.cpp
149
src/protocol.cpp
|
@ -8,7 +8,8 @@
|
||||||
Protocol message definition
|
Protocol message definition
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
- All messages received need to be acknowledged by an acknowledge packet
|
- All messages received need to be acknowledged by an acknowledge packet (except
|
||||||
|
of connection less messages)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,9 +19,9 @@ MAIN FRAME
|
||||||
+-------------+------------+------------+------------------+ ...
|
+-------------+------------+------------+------------------+ ...
|
||||||
| 2 bytes TAG | 2 bytes ID | 1 byte cnt | 2 bytes length n | ...
|
| 2 bytes TAG | 2 bytes ID | 1 byte cnt | 2 bytes length n | ...
|
||||||
+-------------+------------+------------+------------------+ ...
|
+-------------+------------+------------+------------------+ ...
|
||||||
... --------------+-------------+
|
... --------------+-------------+
|
||||||
... n bytes data | 2 bytes CRC |
|
... n bytes data | 2 bytes CRC |
|
||||||
... --------------+-------------+
|
... --------------+-------------+
|
||||||
|
|
||||||
- TAG is an all zero bit word to identify protocol messages
|
- TAG is an all zero bit word to identify protocol messages
|
||||||
- message ID defined by the defines PROTMESSID_x
|
- message ID defined by the defines PROTMESSID_x
|
||||||
|
@ -31,10 +32,11 @@ MAIN FRAME
|
||||||
Generator polynom: G_16(x) = x^16 + x^12 + x^5 + 1, initial state: all ones
|
Generator polynom: G_16(x) = x^16 + x^12 + x^5 + 1, initial state: all ones
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MESSAGES
|
MESSAGES
|
||||||
--------
|
--------
|
||||||
|
|
||||||
- Acknowledgement message: PROTMESSID_ACKN
|
- PROTMESSID_ACKN: Acknowledgement message
|
||||||
|
|
||||||
+-----------------------------------+
|
+-----------------------------------+
|
||||||
| 2 bytes ID of message to be ackn. |
|
| 2 bytes ID of message to be ackn. |
|
||||||
|
@ -43,47 +45,43 @@ MESSAGES
|
||||||
note: the cnt value is the same as of the message to be acknowledged
|
note: the cnt value is the same as of the message to be acknowledged
|
||||||
|
|
||||||
|
|
||||||
- Jitter buffer size: PROTMESSID_JITT_BUF_SIZE
|
- PROTMESSID_JITT_BUF_SIZE: Jitter buffer size
|
||||||
|
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
| 2 bytes number of blocks |
|
| 2 bytes number of blocks |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
|
|
||||||
|
|
||||||
- Request jitter buffer size: PROTMESSID_REQ_JITT_BUF_SIZE
|
- PROTMESSID_REQ_JITT_BUF_SIZE: Request jitter buffer size
|
||||||
|
|
||||||
note: does not have any data -> n = 0
|
note: does not have any data -> n = 0
|
||||||
|
|
||||||
|
|
||||||
- Server full message: PROTMESSID_SERVER_FULL
|
- PROTMESSID_CHANNEL_GAIN: Gain of channel
|
||||||
|
|
||||||
note: does not have any data -> n = 0
|
|
||||||
|
|
||||||
|
|
||||||
- Gain of channel: PROTMESSID_CHANNEL_GAIN
|
|
||||||
|
|
||||||
+-------------------+--------------+
|
+-------------------+--------------+
|
||||||
| 1 byte channel ID | 2 bytes gain |
|
| 1 byte channel ID | 2 bytes gain |
|
||||||
+-------------------+--------------+
|
+-------------------+--------------+
|
||||||
|
|
||||||
|
|
||||||
- IP number and name of connected clients: PROTMESSID_CONN_CLIENTS_LIST
|
- PROTMESSID_CONN_CLIENTS_LIST: IP number and name of connected clients
|
||||||
|
|
||||||
for each connected client append following data:
|
for each connected client append following data:
|
||||||
|
|
||||||
+-------------------+--------------------+------------------+ ...
|
+-------------------+--------------------+------------------+ ...
|
||||||
| 1 byte channel ID | 4 bytes IP address | 2 bytes number n | ...
|
| 1 byte channel ID | 4 bytes IP address | 2 bytes number n | ...
|
||||||
+-------------------+--------------------+------------------+ ...
|
+-------------------+--------------------+------------------+ ...
|
||||||
... ----------------------+
|
... ----------------------+
|
||||||
... n bytes UTF-8 string |
|
... n bytes UTF-8 string |
|
||||||
... ----------------------+
|
... ----------------------+
|
||||||
|
|
||||||
- Request connected clients list: PROTMESSID_REQ_CONN_CLIENTS_LIST
|
|
||||||
|
- PROTMESSID_REQ_CONN_CLIENTS_LIST: Request connected clients list
|
||||||
|
|
||||||
note: does not have any data -> n = 0
|
note: does not have any data -> n = 0
|
||||||
|
|
||||||
|
|
||||||
- Name of channel: PROTMESSID_CHANNEL_NAME
|
- PROTMESSID_CHANNEL_NAME: Name of channel
|
||||||
|
|
||||||
for each connected client append following data:
|
for each connected client append following data:
|
||||||
|
|
||||||
|
@ -91,33 +89,37 @@ MESSAGES
|
||||||
| 2 bytes number n | n bytes UTF-8 string |
|
| 2 bytes number n | n bytes UTF-8 string |
|
||||||
+------------------+----------------------+
|
+------------------+----------------------+
|
||||||
|
|
||||||
- Request name of channel: PROTMESSID_REQ_CHANNEL_NAME
|
|
||||||
|
|
||||||
- Chat text: PROTMESSID_CHAT_TEXT
|
- PROTMESSID_REQ_CHANNEL_NAME: Request name of channel
|
||||||
|
|
||||||
|
note: does not have any data -> n = 0
|
||||||
|
|
||||||
|
|
||||||
|
- PROTMESSID_CHAT_TEXT: Chat text
|
||||||
|
|
||||||
+------------------+----------------------+
|
+------------------+----------------------+
|
||||||
| 2 bytes number n | n bytes UTF-8 string |
|
| 2 bytes number n | n bytes UTF-8 string |
|
||||||
+------------------+----------------------+
|
+------------------+----------------------+
|
||||||
|
|
||||||
|
|
||||||
- Ping message (for measuring the ping time): PROTMESSID_PING_MS
|
- PROTMESSID_PING_MS: Ping message (for measuring the ping time)
|
||||||
|
|
||||||
+-----------------------------+
|
+-----------------------------+
|
||||||
| 4 bytes transmit time in ms |
|
| 4 bytes transmit time in ms |
|
||||||
+-----------------------------+
|
+-----------------------------+
|
||||||
|
|
||||||
|
|
||||||
- Properties for network transport: PROTMESSID_NETW_TRANSPORT_PROPS
|
- PROTMESSID_NETW_TRANSPORT_PROPS: Properties for network transport
|
||||||
|
|
||||||
+------------------------+-------------------------+-----------------+ ...
|
+------------------------+-------------------------+-----------------+ ...
|
||||||
| 4 bytes base netw size | 2 bytes block size fact | 1 byte num chan | ...
|
| 4 bytes base netw size | 2 bytes block size fact | 1 byte num chan | ...
|
||||||
+------------------------+-------------------------+-----------------+ ...
|
+------------------------+-------------------------+-----------------+ ...
|
||||||
... ------------------+-----------------------+ ...
|
... ------------------+-----------------------+ ...
|
||||||
... 4 bytes sam rate | 2 bytes audiocod type | ...
|
... 4 bytes sam rate | 2 bytes audiocod type | ...
|
||||||
... ------------------+-----------------------+ ...
|
... ------------------+-----------------------+ ...
|
||||||
... -----------------+----------------------+
|
... -----------------+----------------------+
|
||||||
... 2 bytes version | 4 bytes audiocod arg |
|
... 2 bytes version | 4 bytes audiocod arg |
|
||||||
... -----------------+----------------------+
|
... -----------------+----------------------+
|
||||||
|
|
||||||
- "base netw size": length of the base network packet (frame) in bytes
|
- "base netw size": length of the base network packet (frame) in bytes
|
||||||
- "block size fact": block size factor
|
- "block size fact": block size factor
|
||||||
|
@ -130,12 +132,26 @@ MESSAGES
|
||||||
- "audiocod arg": argument for the audio coder, if not used this value shall be set to 0
|
- "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
|
- PROTMESSID_REQ_NETW_TRANSPORT_PROPS: Request properties for network transport
|
||||||
|
|
||||||
note: does not have any data -> n = 0
|
note: does not have any data -> n = 0
|
||||||
|
|
||||||
|
|
||||||
- Disconnect message: PROTMESSID_DISCONNECTION
|
- PROTMESSID_DISCONNECTION: Disconnect message
|
||||||
|
|
||||||
|
note: does not have any data -> n = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CONNECTION LESS MESSAGES
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
- PROTMESSID_CLM_PING_MS: Connection less ping message (for measuring the ping time)
|
||||||
|
|
||||||
|
note: same definition as PROTMESSID_PING_MS
|
||||||
|
|
||||||
|
|
||||||
|
- PROTMESSID_SERVER_FULL: Connection less server full message
|
||||||
|
|
||||||
note: does not have any data -> n = 0
|
note: does not have any data -> n = 0
|
||||||
|
|
||||||
|
@ -288,7 +304,8 @@ void CProtocol::CreateAndImmSendAcknMess ( const int& iID,
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProtocol::CreateAndImmSendConLessMessage ( const int iID,
|
void CProtocol::CreateAndImmSendConLessMessage ( const int iID,
|
||||||
const CVector<uint8_t>& vecData )
|
const CVector<uint8_t>& vecData,
|
||||||
|
const CHostAddress& InetAddr )
|
||||||
{
|
{
|
||||||
CVector<uint8_t> vecNewMessage;
|
CVector<uint8_t> vecNewMessage;
|
||||||
|
|
||||||
|
@ -297,7 +314,7 @@ void CProtocol::CreateAndImmSendConLessMessage ( const int iID,
|
||||||
GenMessageFrame ( vecNewMessage, 0, iID, vecData );
|
GenMessageFrame ( vecNewMessage, 0, iID, vecData );
|
||||||
|
|
||||||
// immediately send message
|
// immediately send message
|
||||||
emit MessReadyForSending ( vecNewMessage );
|
emit CLMessReadyForSending ( InetAddr, vecNewMessage );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CProtocol::IsProtocolMessage ( const CVector<uint8_t>& vecbyData,
|
bool CProtocol::IsProtocolMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
|
@ -468,7 +485,8 @@ if ( rand() < ( RAND_MAX / 2 ) ) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CProtocol::ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
bool CProtocol::ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
const int iNumBytes )
|
const int iNumBytes,
|
||||||
|
const CHostAddress& InetAddr )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
return code: false -> ok; true -> error
|
return code: false -> ok; true -> error
|
||||||
|
@ -485,11 +503,11 @@ bool CProtocol::ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
switch ( iRecID )
|
switch ( iRecID )
|
||||||
{
|
{
|
||||||
case PROTMESSID_CLM_PING_MS:
|
case PROTMESSID_CLM_PING_MS:
|
||||||
bRet = EvaluatePingMes ( vecData );
|
bRet = EvaluateCLPingMes ( InetAddr, vecData );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTMESSID_CLM_SERVER_FULL:
|
case PROTMESSID_CLM_SERVER_FULL:
|
||||||
bRet = EvaluateServerFullMes();
|
bRet = EvaluateCLServerFullMes();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTMESSID_CLM_SERVER_LIST:
|
case PROTMESSID_CLM_SERVER_LIST:
|
||||||
|
@ -583,11 +601,6 @@ bool CProtocol::EvaluateReqJitBufMes()
|
||||||
return false; // no error
|
return false; // no error
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProtocol::CreateServerFullMes()
|
|
||||||
{
|
|
||||||
CreateAndSendMessage ( PROTMESSID_SERVER_FULL, CVector<uint8_t> ( 0 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void CProtocol::CreateChanGainMes ( const int iChanID, const double dGain )
|
void CProtocol::CreateChanGainMes ( const int iChanID, const double dGain )
|
||||||
{
|
{
|
||||||
CVector<uint8_t> vecData ( 3 ); // 3 bytes of data
|
CVector<uint8_t> vecData ( 3 ); // 3 bytes of data
|
||||||
|
@ -871,8 +884,7 @@ bool CProtocol::EvaluateChatTextMes ( const CVector<uint8_t>& vecData )
|
||||||
return false; // no error
|
return false; // no error
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProtocol::CreatePingMes ( const int iMs,
|
void CProtocol::CreatePingMes ( const int iMs )
|
||||||
const bool bIsConnectionLess )
|
|
||||||
{
|
{
|
||||||
unsigned int iPos = 0; // init position pointer
|
unsigned int iPos = 0; // init position pointer
|
||||||
|
|
||||||
|
@ -882,15 +894,7 @@ void CProtocol::CreatePingMes ( const int iMs,
|
||||||
// byte-by-byte copying of the string data
|
// byte-by-byte copying of the string data
|
||||||
PutValOnStream ( vecData, iPos, static_cast<uint32_t> ( iMs ), 4 );
|
PutValOnStream ( vecData, iPos, static_cast<uint32_t> ( iMs ), 4 );
|
||||||
|
|
||||||
// distinguish between connection less and with connection transmission
|
CreateAndSendMessage ( PROTMESSID_PING_MS, vecData );
|
||||||
if ( bIsConnectionLess )
|
|
||||||
{
|
|
||||||
CreateAndImmSendConLessMessage ( PROTMESSID_CLM_PING_MS, vecData );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CreateAndSendMessage ( PROTMESSID_PING_MS, vecData );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CProtocol::EvaluatePingMes ( const CVector<uint8_t>& vecData )
|
bool CProtocol::EvaluatePingMes ( const CVector<uint8_t>& vecData )
|
||||||
|
@ -1076,13 +1080,46 @@ bool CProtocol::EvaluateDisconnectionMes()
|
||||||
|
|
||||||
|
|
||||||
// Connection less messages ----------------------------------------------------
|
// Connection less messages ----------------------------------------------------
|
||||||
void CProtocol::CreateAndImmSendServerFullMes()
|
void CProtocol::CreateCLPingMes ( const CHostAddress& InetAddr, const int iMs )
|
||||||
{
|
{
|
||||||
CreateAndImmSendConLessMessage ( PROTMESSID_CLM_SERVER_FULL,
|
unsigned int iPos = 0; // init position pointer
|
||||||
CVector<uint8_t> ( 0 ) );
|
|
||||||
|
// build data vector (4 bytes long)
|
||||||
|
CVector<uint8_t> vecData ( 4 );
|
||||||
|
|
||||||
|
// byte-by-byte copying of the string data
|
||||||
|
PutValOnStream ( vecData, iPos, static_cast<uint32_t> ( iMs ), 4 );
|
||||||
|
|
||||||
|
CreateAndImmSendConLessMessage ( PROTMESSID_CLM_PING_MS,
|
||||||
|
vecData,
|
||||||
|
InetAddr );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CProtocol::EvaluateServerFullMes()
|
bool CProtocol::EvaluateCLPingMes ( const CHostAddress& InetAddr,
|
||||||
|
const CVector<uint8_t>& vecData )
|
||||||
|
{
|
||||||
|
unsigned int iPos = 0; // init position pointer
|
||||||
|
|
||||||
|
// check size
|
||||||
|
if ( vecData.Size() != 4 )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit CLPingReceived ( InetAddr,
|
||||||
|
static_cast<int> ( GetValFromStream ( vecData, iPos, 4 ) ) );
|
||||||
|
|
||||||
|
return false; // no error
|
||||||
|
}
|
||||||
|
|
||||||
|
void CProtocol::CreateCLServerFullMes ( const CHostAddress& InetAddr )
|
||||||
|
{
|
||||||
|
CreateAndImmSendConLessMessage ( PROTMESSID_CLM_SERVER_FULL,
|
||||||
|
CVector<uint8_t> ( 0 ),
|
||||||
|
InetAddr );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CProtocol::EvaluateCLServerFullMes()
|
||||||
{
|
{
|
||||||
// invoke message action
|
// invoke message action
|
||||||
emit ServerFull();
|
emit ServerFull();
|
||||||
|
|
|
@ -87,24 +87,26 @@ public:
|
||||||
void CreateReqJitBufMes();
|
void CreateReqJitBufMes();
|
||||||
void CreateChanGainMes ( const int iChanID, const double dGain );
|
void CreateChanGainMes ( const int iChanID, const double dGain );
|
||||||
void CreateConClientListMes ( const CVector<CChannelShortInfo>& vecChanInfo );
|
void CreateConClientListMes ( const CVector<CChannelShortInfo>& vecChanInfo );
|
||||||
void CreateServerFullMes();
|
|
||||||
void CreateReqConnClientsList();
|
void CreateReqConnClientsList();
|
||||||
void CreateChanNameMes ( const QString strName );
|
void CreateChanNameMes ( const QString strName );
|
||||||
void CreateReqChanNameMes();
|
void CreateReqChanNameMes();
|
||||||
void CreateChatTextMes ( const QString strChatText );
|
void CreateChatTextMes ( const QString strChatText );
|
||||||
void CreatePingMes ( const int iMs, const bool bIsConnectionLess );
|
void CreatePingMes ( const int iMs );
|
||||||
void CreateNetwTranspPropsMes ( const CNetworkTransportProps& NetTrProps );
|
void CreateNetwTranspPropsMes ( const CNetworkTransportProps& NetTrProps );
|
||||||
void CreateReqNetwTranspPropsMes();
|
void CreateReqNetwTranspPropsMes();
|
||||||
|
|
||||||
|
void CreateCLPingMes ( const CHostAddress& InetAddr, const int iMs );
|
||||||
|
void CreateCLServerFullMes ( const CHostAddress& InetAddr );
|
||||||
|
|
||||||
void CreateAndImmSendDisconnectionMes();
|
void CreateAndImmSendDisconnectionMes();
|
||||||
void CreateAndImmSendServerFullMes();
|
|
||||||
void CreateAndImmSendAcknMess ( const int& iID, const int& iCnt );
|
void CreateAndImmSendAcknMess ( const int& iID, const int& iCnt );
|
||||||
|
|
||||||
bool ParseMessage ( const CVector<uint8_t>& vecbyData,
|
bool ParseMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
const int iNumBytes );
|
const int iNumBytes );
|
||||||
|
|
||||||
bool ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
bool ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
const int iNumBytes );
|
const int iNumBytes,
|
||||||
|
const CHostAddress& InetAddr );
|
||||||
|
|
||||||
bool IsProtocolMessage ( const CVector<uint8_t>& vecbyData,
|
bool IsProtocolMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
const int iNumBytes );
|
const int iNumBytes );
|
||||||
|
@ -165,7 +167,8 @@ protected:
|
||||||
void CreateAndSendMessage ( const int iID, const CVector<uint8_t>& vecData );
|
void CreateAndSendMessage ( const int iID, const CVector<uint8_t>& vecData );
|
||||||
|
|
||||||
void CreateAndImmSendConLessMessage ( const int iID,
|
void CreateAndImmSendConLessMessage ( const int iID,
|
||||||
const CVector<uint8_t>& vecData );
|
const CVector<uint8_t>& vecData,
|
||||||
|
const CHostAddress& InetAddr );
|
||||||
|
|
||||||
bool EvaluateJitBufMes ( const CVector<uint8_t>& vecData );
|
bool EvaluateJitBufMes ( const CVector<uint8_t>& vecData );
|
||||||
bool EvaluateReqJitBufMes();
|
bool EvaluateReqJitBufMes();
|
||||||
|
@ -181,6 +184,10 @@ protected:
|
||||||
bool EvaluateReqNetwTranspPropsMes();
|
bool EvaluateReqNetwTranspPropsMes();
|
||||||
bool EvaluateDisconnectionMes();
|
bool EvaluateDisconnectionMes();
|
||||||
|
|
||||||
|
bool EvaluateCLPingMes ( const CHostAddress& InetAddr,
|
||||||
|
const CVector<uint8_t>& vecData );
|
||||||
|
bool EvaluateCLServerFullMes();
|
||||||
|
|
||||||
int iOldRecID, iOldRecCnt;
|
int iOldRecID, iOldRecCnt;
|
||||||
|
|
||||||
// these two objects must be sequred by a mutex
|
// these two objects must be sequred by a mutex
|
||||||
|
@ -196,6 +203,8 @@ public slots:
|
||||||
signals:
|
signals:
|
||||||
// transmitting
|
// transmitting
|
||||||
void MessReadyForSending ( CVector<uint8_t> vecMessage );
|
void MessReadyForSending ( CVector<uint8_t> vecMessage );
|
||||||
|
void CLMessReadyForSending ( CHostAddress InetAddr,
|
||||||
|
CVector<uint8_t> vecMessage );
|
||||||
|
|
||||||
// receiving
|
// receiving
|
||||||
void ChangeJittBufSize ( int iNewJitBufSize );
|
void ChangeJittBufSize ( int iNewJitBufSize );
|
||||||
|
@ -212,6 +221,8 @@ signals:
|
||||||
void NetTranspPropsReceived ( CNetworkTransportProps NetworkTransportProps );
|
void NetTranspPropsReceived ( CNetworkTransportProps NetworkTransportProps );
|
||||||
void ReqNetTranspProps();
|
void ReqNetTranspProps();
|
||||||
void Disconnection();
|
void Disconnection();
|
||||||
|
|
||||||
|
void CLPingReceived ( CHostAddress InetAddr, int iMs );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* !defined ( PROTOCOL_H__3B123453_4344_BB2392354455IUHF1912__INCLUDED_ ) */
|
#endif /* !defined ( PROTOCOL_H__3B123453_4344_BB2392354455IUHF1912__INCLUDED_ ) */
|
||||||
|
|
|
@ -272,6 +272,10 @@ CServer::CServer ( const QString& strLoggingFileName,
|
||||||
QObject::connect ( &HighPrecisionTimer, SIGNAL ( timeout() ),
|
QObject::connect ( &HighPrecisionTimer, SIGNAL ( timeout() ),
|
||||||
this, SLOT ( OnTimer() ) );
|
this, SLOT ( OnTimer() ) );
|
||||||
|
|
||||||
|
QObject::connect ( &ConnLessChannel,
|
||||||
|
SIGNAL ( CLMessReadyForSending ( CHostAddress, CVector<uint8_t> ) ),
|
||||||
|
this, SLOT ( OnSendCLProtMessage ( CHostAddress, CVector<uint8_t> ) ) );
|
||||||
|
|
||||||
// CODE TAG: MAX_NUM_CHANNELS_TAG
|
// CODE TAG: MAX_NUM_CHANNELS_TAG
|
||||||
// make sure we have MAX_NUM_CHANNELS connections!!!
|
// make sure we have MAX_NUM_CHANNELS connections!!!
|
||||||
// send message
|
// send message
|
||||||
|
@ -354,6 +358,14 @@ void CServer::OnSendProtMessage ( int iChID, CVector<uint8_t> vecMessage )
|
||||||
Socket.SendPacket ( vecMessage, vecChannels[iChID].GetAddress() );
|
Socket.SendPacket ( vecMessage, vecChannels[iChID].GetAddress() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CServer::OnSendCLProtMessage ( CHostAddress InetAddr,
|
||||||
|
CVector<uint8_t> vecMessage )
|
||||||
|
{
|
||||||
|
// the protocol queries me to call the function to send the message
|
||||||
|
// send it through the network
|
||||||
|
Socket.SendPacket ( vecMessage, InetAddr );
|
||||||
|
}
|
||||||
|
|
||||||
void CServer::Start()
|
void CServer::Start()
|
||||||
{
|
{
|
||||||
// only start if not already running
|
// only start if not already running
|
||||||
|
@ -862,13 +874,10 @@ bool CServer::PutData ( const CVector<uint8_t>& vecbyRecBuf,
|
||||||
if ( iCurChanID == INVALID_CHANNEL_ID )
|
if ( iCurChanID == INVALID_CHANNEL_ID )
|
||||||
{
|
{
|
||||||
// this is a new client, we then first check if this is a connection
|
// this is a new client, we then first check if this is a connection
|
||||||
// less message before we create a new official channel (note that
|
// less message before we create a new official channel
|
||||||
// we have to set the internet address first, before we parse the
|
|
||||||
// connection less message!)
|
|
||||||
ConnLessChannel.SetAddress ( HostAdr );
|
|
||||||
|
|
||||||
if ( ConnLessChannel.ParseConnectionLessMessage ( vecbyRecBuf,
|
if ( ConnLessChannel.ParseConnectionLessMessage ( vecbyRecBuf,
|
||||||
iNumBytesRead ) )
|
iNumBytesRead,
|
||||||
|
HostAdr ) )
|
||||||
{
|
{
|
||||||
// a new client is calling, look for free channel
|
// a new client is calling, look for free channel
|
||||||
iCurChanID = GetFreeChan();
|
iCurChanID = GetFreeChan();
|
||||||
|
@ -902,7 +911,7 @@ bool CServer::PutData ( const CVector<uint8_t>& vecbyRecBuf,
|
||||||
bChanOK = false;
|
bChanOK = false;
|
||||||
|
|
||||||
// create and send "server full" message
|
// create and send "server full" message
|
||||||
ConnLessChannel.CreateAndImmSendServerFullMes();
|
ConnLessChannel.CreateCLServerFullMes ( HostAdr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,7 @@ protected:
|
||||||
public slots:
|
public slots:
|
||||||
void OnTimer();
|
void OnTimer();
|
||||||
void OnSendProtMessage ( int iChID, CVector<uint8_t> vecMessage );
|
void OnSendProtMessage ( int iChID, CVector<uint8_t> vecMessage );
|
||||||
|
void OnSendCLProtMessage ( CHostAddress InetAddr, CVector<uint8_t> vecMessage );
|
||||||
|
|
||||||
// CODE TAG: MAX_NUM_CHANNELS_TAG
|
// CODE TAG: MAX_NUM_CHANNELS_TAG
|
||||||
// make sure we have MAX_NUM_CHANNELS connections!!!
|
// make sure we have MAX_NUM_CHANNELS connections!!!
|
||||||
|
|
|
@ -75,7 +75,7 @@ public slots:
|
||||||
void OnTimer()
|
void OnTimer()
|
||||||
{
|
{
|
||||||
// generate random protocol message
|
// generate random protocol message
|
||||||
switch ( GenRandomIntInRange ( 0, 11 ) )
|
switch ( GenRandomIntInRange ( 0, 10 ) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
Protocol.CreateJitBufMes ( GenRandomIntInRange ( 0, 10 ) );
|
Protocol.CreateJitBufMes ( GenRandomIntInRange ( 0, 10 ) );
|
||||||
|
@ -91,41 +91,37 @@ public slots:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
Protocol.CreateServerFullMes();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
Protocol.CreateReqConnClientsList();
|
Protocol.CreateReqConnClientsList();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 4:
|
||||||
Protocol.CreateChanNameMes ( QString ( "test%1" ).arg (
|
Protocol.CreateChanNameMes ( QString ( "test%1" ).arg (
|
||||||
GenRandomIntInRange ( 0, 1000 ) ) );
|
GenRandomIntInRange ( 0, 1000 ) ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 5:
|
||||||
Protocol.CreateChatTextMes ( QString ( "test%1" ).arg (
|
Protocol.CreateChatTextMes ( QString ( "test%1" ).arg (
|
||||||
GenRandomIntInRange ( 0, 1000 ) ) );
|
GenRandomIntInRange ( 0, 1000 ) ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 6:
|
||||||
Protocol.CreatePingMes ( GenRandomIntInRange ( 0, 100000 ), false );
|
Protocol.CreatePingMes ( GenRandomIntInRange ( 0, 100000 ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 7:
|
||||||
Protocol.CreateReqNetwTranspPropsMes();
|
Protocol.CreateReqNetwTranspPropsMes();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 8:
|
||||||
Protocol.CreateAndImmSendAcknMess ( GenRandomIntInRange ( -10, 100 ),
|
Protocol.CreateAndImmSendAcknMess ( GenRandomIntInRange ( -10, 100 ),
|
||||||
GenRandomIntInRange ( -100, 100 ) );
|
GenRandomIntInRange ( -100, 100 ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 10:
|
case 9:
|
||||||
Protocol.CreateAndImmSendDisconnectionMes();
|
Protocol.CreateAndImmSendDisconnectionMes();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 11:
|
case 10:
|
||||||
// arbitrary "audio" packet (with random sizes)
|
// arbitrary "audio" packet (with random sizes)
|
||||||
CVector<uint8_t> vecMessage ( GenRandomIntInRange ( 1, 1000 ) );
|
CVector<uint8_t> vecMessage ( GenRandomIntInRange ( 1, 1000 ) );
|
||||||
OnSendProtMessage ( vecMessage );
|
OnSendProtMessage ( vecMessage );
|
||||||
|
|
Loading…
Reference in a new issue