mirror of
https://github.com/ShaYmez/xlxd.git
synced 2025-08-31 20:27:47 -04:00
xlxd 1.3.5
corrected problem when dxrfd connecting with cross-modules
This commit is contained in:
parent
e2c4bab430
commit
d687361d77
@ -107,13 +107,13 @@ void CDextraProtocol::Task(void)
|
|||||||
}
|
}
|
||||||
else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule, &ProtRev) )
|
else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule, &ProtRev) )
|
||||||
{
|
{
|
||||||
std::cout << "DExtra connect packet for module " << ToLinkModule << " from " << Callsign << " at " << Ip << std::endl;
|
std::cout << "DExtra connect packet for module " << ToLinkModule << " from " << Callsign << " at " << Ip << " rev " << ProtRev << std::endl;
|
||||||
|
|
||||||
// callsign authorized?
|
// callsign authorized?
|
||||||
if ( g_GateKeeper.MayLink(Callsign, Ip, PROTOCOL_DEXTRA) )
|
if ( g_GateKeeper.MayLink(Callsign, Ip, PROTOCOL_DEXTRA) )
|
||||||
{
|
{
|
||||||
// acknowledge the request
|
// acknowledge the request
|
||||||
EncodeConnectAckPacket(&Buffer);
|
EncodeConnectAckPacket(&Buffer, ProtRev);
|
||||||
m_Socket.Send(Buffer, Ip);
|
m_Socket.Send(Buffer, Ip);
|
||||||
|
|
||||||
// create the client
|
// create the client
|
||||||
@ -293,6 +293,13 @@ bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
|
|||||||
{
|
{
|
||||||
// get client callsign
|
// get client callsign
|
||||||
via = client->GetCallsign();
|
via = client->GetCallsign();
|
||||||
|
// apply protocol revision details
|
||||||
|
if ( client->GetProtocolRevision() == 2 )
|
||||||
|
{
|
||||||
|
// update Header RPT2 module letter with
|
||||||
|
// the module the client is linked to
|
||||||
|
Header->SetRpt2Module(client->GetReflectorModule());
|
||||||
|
}
|
||||||
// and try to open the stream
|
// and try to open the stream
|
||||||
if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL )
|
if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL )
|
||||||
{
|
{
|
||||||
@ -334,6 +341,19 @@ bool CDextraProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *cal
|
|||||||
*reflectormodule = Buffer.data()[9];
|
*reflectormodule = Buffer.data()[9];
|
||||||
*revision = (Buffer.data()[10] == 11) ? 1 : 0;
|
*revision = (Buffer.data()[10] == 11) ? 1 : 0;
|
||||||
valid = (callsign->IsValid() && IsLetter(*reflectormodule));
|
valid = (callsign->IsValid() && IsLetter(*reflectormodule));
|
||||||
|
// detect revision
|
||||||
|
if ( (Buffer.data()[10] == 11) )
|
||||||
|
{
|
||||||
|
*revision = 1;
|
||||||
|
}
|
||||||
|
else if ( callsign->HasSameCallsignWithWidlcard(CCallsign("XRF*")) )
|
||||||
|
{
|
||||||
|
*revision = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*revision = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
@ -431,12 +451,10 @@ void CDextraProtocol::EncodeKeepAlivePacket(CBuffer *Buffer)
|
|||||||
Buffer->Set(GetReflectorCallsign());
|
Buffer->Set(GetReflectorCallsign());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDextraProtocol::EncodeConnectAckPacket(CBuffer *Buffer)
|
void CDextraProtocol::EncodeConnectAckPacket(CBuffer *Buffer, int ProtRev)
|
||||||
{
|
{
|
||||||
uint8 xrf[] = { 'X','R','F' };
|
|
||||||
|
|
||||||
// is it for a XRF or repeater
|
// is it for a XRF or repeater
|
||||||
if ( Buffer->Compare(xrf, sizeof(xrf)) == 0 )
|
if ( ProtRev == 2 )
|
||||||
{
|
{
|
||||||
// XRFxxx
|
// XRFxxx
|
||||||
uint8 rm = (Buffer->data())[8];
|
uint8 rm = (Buffer->data())[8];
|
||||||
|
@ -33,6 +33,24 @@
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// note on protocol revisions:
|
||||||
|
//
|
||||||
|
// rev 0:
|
||||||
|
// this is standard protocol implementation
|
||||||
|
//
|
||||||
|
// rev 1:
|
||||||
|
// this is specific UP4DAR umplementation
|
||||||
|
// the protocol is detected using byte(10) of connect packet (value is 11)
|
||||||
|
// the protocol require a specific non-standard disconnect acqknowleding packet
|
||||||
|
//
|
||||||
|
// rev 2:
|
||||||
|
// this is specific to KI4KLF dxrfd reflector
|
||||||
|
// the protocol is detected by looking at "XRF" in connect packet callsign
|
||||||
|
// the protocol require a specific connect ack packet
|
||||||
|
// the protocol also implement a workaround for detecting stream's module
|
||||||
|
// as dxrfd soes not set DV header RPT2 properly.
|
||||||
|
// the protocol assumes that a dxrfd can only be linked to one module at a time
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// class
|
// class
|
||||||
@ -72,7 +90,7 @@ protected:
|
|||||||
|
|
||||||
// packet encoding helpers
|
// packet encoding helpers
|
||||||
void EncodeKeepAlivePacket(CBuffer *);
|
void EncodeKeepAlivePacket(CBuffer *);
|
||||||
void EncodeConnectAckPacket(CBuffer *);
|
void EncodeConnectAckPacket(CBuffer *, int);
|
||||||
void EncodeConnectNackPacket(CBuffer *);
|
void EncodeConnectNackPacket(CBuffer *);
|
||||||
void EncodeDisconnectPacket(CBuffer *);
|
void EncodeDisconnectPacket(CBuffer *);
|
||||||
void EncodeDisconnectedPacket(CBuffer *);
|
void EncodeDisconnectedPacket(CBuffer *);
|
||||||
|
@ -93,6 +93,7 @@ public:
|
|||||||
|
|
||||||
// set callsigns
|
// set callsigns
|
||||||
void SetRpt2Callsign(const CCallsign &cs) { m_csRPT2 = cs; }
|
void SetRpt2Callsign(const CCallsign &cs) { m_csRPT2 = cs; }
|
||||||
|
void SetRpt2Module(char c) { m_csRPT2.SetModule(c); }
|
||||||
|
|
||||||
// operators
|
// operators
|
||||||
bool operator ==(const CDvHeaderPacket &) const;
|
bool operator ==(const CDvHeaderPacket &) const;
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 4
|
#define VERSION_REVISION 5
|
||||||
|
|
||||||
// global ------------------------------------------------------
|
// global ------------------------------------------------------
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user