diff --git a/reflector/Callsign.cpp b/reflector/Callsign.cpp index f4c797d..a1b256b 100644 --- a/reflector/Callsign.cpp +++ b/reflector/Callsign.cpp @@ -93,6 +93,16 @@ CCallsign::CCallsign(const char *sz, uint32_t dmrid, uint16_t nxdnid) } } g_DmridDir.Unlock(); + + if ( m_uiNXDNid == 0 ) + { + g_NXDNidDir.Lock(); + { + m_uiNXDNid = g_NXDNidDir.FindNXDNid(*this); + } + g_NXDNidDir.Unlock(); + } + CSIn(); } else if ( m_uiNXDNid != 0 ) { @@ -105,6 +115,16 @@ CCallsign::CCallsign(const char *sz, uint32_t dmrid, uint16_t nxdnid) } } g_NXDNidDir.Unlock(); + + if ( m_uiDmrid == 0 ) + { + g_DmridDir.Lock(); + { + m_uiDmrid = g_DmridDir.FindDmrid(*this); + } + g_DmridDir.Unlock(); + } + CSIn(); } } diff --git a/reflector/NXDNProtocol.cpp b/reflector/NXDNProtocol.cpp index 1643646..b944ca8 100644 --- a/reflector/NXDNProtocol.cpp +++ b/reflector/NXDNProtocol.cpp @@ -103,7 +103,7 @@ void CNXDNProtocol::Task(void) else if ( IsValidDvHeaderPacket(Ip, Buffer, Header) ) { // node linked and callsign muted? - if ( g_GateKeeper.MayTransmit(Header->GetMyCallsign(), Ip, EProtocol::ysf, Header->GetRpt2Module()) ) + if ( g_GateKeeper.MayTransmit(Header->GetMyCallsign(), Ip, EProtocol::nxdn, Header->GetRpt2Module()) ) { // handle it OnDvHeaderPacketIn(Header, Ip); @@ -351,7 +351,7 @@ bool CNXDNProtocol::IsValidDisconnectPacket(const CBuffer &Buffer, CCallsign *ca { uint8_t tag[] = { 'N','X','D','N','U' }; - if ( (Buffer.size() == 14) && (Buffer.Compare(tag, sizeof(tag)) == 0) ) + if ( (Buffer.size() == 17) && (Buffer.Compare(tag, sizeof(tag)) == 0) ) { return true; } @@ -572,6 +572,7 @@ bool CNXDNProtocol::EncodeNXDNPacket(const CDvHeaderPacket &Header, uint32_t seq } get_sacch(&Buffer.data()[11U]); + memset(ambe, 0, 28); for(int i = 0; i < 4; ++i){ decode(DvFrames[i].GetCodecData(ECodecType::dmr), ambe+(i*7)); }