Commit c39fc21d authored by Pavel Vainerman's avatar Pavel Vainerman

(UNetUDP): добавил "волшебное число" в заголовок пакетов, чтобы

отделять свои пакеты от каких-то других..
parent 03357959
...@@ -167,6 +167,13 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p ) ...@@ -167,6 +167,13 @@ size_t UDPMessage::getMessage( UDPMessage& m, UDPPacket& p )
memcpy(&m,&(p.data[i]),sizeof(UDPHeader)); memcpy(&m,&(p.data[i]),sizeof(UDPHeader));
i += sizeof(UDPHeader); i += sizeof(UDPHeader);
// проверяем наш ли пакет..
if( m.magic != UniSetUDP::UNETUDP_MAGICNUM )
{
m.magic = 0;
return 0;
}
// копируем аналоговые данные // копируем аналоговые данные
size_t sz = m.acount*sizeof(UDPAData); size_t sz = m.acount*sizeof(UDPAData);
if( sz > sizeof(m.a_dat) ) if( sz > sizeof(m.a_dat) )
......
...@@ -15,9 +15,13 @@ namespace UniSetUDP ...@@ -15,9 +15,13 @@ namespace UniSetUDP
(по количеству битов такого же размера). (по количеству битов такого же размера).
*/ */
const unsigned int UNETUDP_MAGICNUM = 0xfb07ee55; // идентификатор протокола
struct UDPHeader struct UDPHeader
{ {
UDPHeader():num(0),nodeID(0),procID(0),dcount(0),acount(0){} UDPHeader():magic(UNETUDP_MAGICNUM),num(0),nodeID(0),procID(0),dcount(0),acount(0){}
unsigned int magic;
unsigned long num; unsigned long num;
long nodeID; long nodeID;
long procID; long procID;
...@@ -63,7 +67,7 @@ namespace UniSetUDP ...@@ -63,7 +67,7 @@ namespace UniSetUDP
UDPMessage(); UDPMessage();
UDPMessage( UDPPacket& p ); UDPMessage( UDPPacket& p );
size_t transport_msg( UDPPacket& p ); size_t transport_msg( UDPPacket& p );
static size_t getMessage( UDPMessage& m, UDPPacket& p ); static size_t getMessage( UDPMessage& m, UDPPacket& p );
size_t addDData( long id, bool val ); size_t addDData( long id, bool val );
...@@ -78,7 +82,6 @@ namespace UniSetUDP ...@@ -78,7 +82,6 @@ namespace UniSetUDP
inline bool isFull(){ return ((dcount<MaxDCount) && (acount<MaxACount)); } inline bool isFull(){ return ((dcount<MaxDCount) && (acount<MaxACount)); }
inline int dsize(){ return dcount; } inline int dsize(){ return dcount; }
inline int asize(){ return acount; } inline int asize(){ return acount; }
// inline int byte_size(){ return (dcount*sizeof(long)*UDPDData) + acount*sizeof(UDPAData)); }
// количество байт в пакете с булевыми переменными... // количество байт в пакете с булевыми переменными...
int d_byte(){ return dcount*sizeof(long) + dcount; } int d_byte(){ return dcount*sizeof(long) + dcount; }
......
...@@ -420,6 +420,12 @@ bool UNetReceiver::recv() ...@@ -420,6 +420,12 @@ bool UNetReceiver::recv()
return false; return false;
} }
if( pack.magic != UniSetUDP::UNETUDP_MAGICNUM )
{
// пакет не нашей "системы"
return false;
}
if( rnum>0 && labs(pack.num - rnum) > maxDifferens ) if( rnum>0 && labs(pack.num - rnum) > maxDifferens )
{ {
/* А что делать если мы уже ждём и ещё не "разгребли предыдущее".. а тут уже повторный "разрыв" /* А что делать если мы уже ждём и ещё не "разгребли предыдущее".. а тут уже повторный "разрыв"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment