From b637ceb7b2d2148115e693896eca77149061eb59 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 18 Jun 2025 14:24:34 +0300 Subject: [PATCH] Optimizing query filtering on mdns --- src/mvrxchange/CMVRxchangeService.cpp | 18 +++++++++++++++++- src/mvrxchange/CMVRxchangeService.h | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/mvrxchange/CMVRxchangeService.cpp b/src/mvrxchange/CMVRxchangeService.cpp index 1eb906fe..cecd1b3c 100644 --- a/src/mvrxchange/CMVRxchangeService.cpp +++ b/src/mvrxchange/CMVRxchangeService.cpp @@ -553,7 +553,9 @@ void CMVRxchangeServiceImpl::mDNS_Client_Task() result.emplace_back(); ConnectToLocalServiceArgs& localServ = result.back(); - localServ.Service = r.canonical_hostname.c_str(); + TXString cannonicalName = this->FilterCannonicalName( r.canonical_hostname ); + + localServ.Service = cannonicalName.GetStdString().c_str(); for(auto& ip : r.ipV4_address) { @@ -617,3 +619,17 @@ void CMVRxchangeServiceImpl::mDNS_Client_Task() } } + +TXString CMVRxchangeServiceImpl::FilterCannonicalName( const TXString& name ) const +{ + TXString serviceAsString = MVRXChange_Service; // e.g. "_mvrxchange._tcp" + ptrdiff_t servicePos = name.Find(serviceAsString); + if (servicePos == std::string::npos) + return ""; + + ptrdiff_t dotBeforeGroup = name.ReverseFind('.', servicePos - 2); + if (dotBeforeGroup == std::string::npos) + dotBeforeGroup = -1; + + return name.Mid(dotBeforeGroup + 1); +} diff --git a/src/mvrxchange/CMVRxchangeService.h b/src/mvrxchange/CMVRxchangeService.h index 982280ee..1ea84b43 100644 --- a/src/mvrxchange/CMVRxchangeService.h +++ b/src/mvrxchange/CMVRxchangeService.h @@ -52,6 +52,8 @@ namespace VectorworksMVR void mDNS_Client_Stop(); void mDNS_Client_Start(); + TXString FilterCannonicalName( const TXString& name ) const; + std::vector> fmdns;