diff --git a/src/config.cpp b/src/config.cpp index 672d7cc..00d4d2d 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -209,7 +209,7 @@ void CConfig::Load (void) m_INetworkIPAddress = m_Properties.GetIPAddress("NetworkIPAddress") != 0; m_INetworkSubnetMask = m_Properties.GetIPAddress("NetworkSubnetMask") != 0; m_INetworkDefaultGateway = m_Properties.GetIPAddress("NetworkDefaultGateway") != 0; - m_bSyslogEnabled = m_Properties.GetNumber ("SyslogEnabled", 0) != 0; + m_bSyslogEnabled = m_Properties.GetNumber ("NetworkSyslogEnabled", 0) != 0; m_INetworkDNSServer = m_Properties.GetIPAddress("NetworkDNSServer") != 0; const u8 *pSyslogServerIP = m_Properties.GetIPAddress ("NetworkSyslogServerIPAddress"); diff --git a/src/mididevice.cpp b/src/mididevice.cpp index e13709f..c5e23ae 100644 --- a/src/mididevice.cpp +++ b/src/mididevice.cpp @@ -265,6 +265,7 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign else { // Ignore any other CC messages at this time + LOGNOTE("Ignoring CC %d (%d) on Performance Select Channel %d\n", pMessage[1], pMessage[2], nPerfCh); } } } diff --git a/src/minidexed.cpp b/src/minidexed.cpp index cbed9f9..7664e99 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -2307,6 +2307,7 @@ void CMiniDexed::UpdateNetwork() if (m_pConfig->GetSyslogEnabled()) { + LOGNOTE ("Syslog server is enabled in configuration"); CIPAddress ServerIP = m_pConfig->GetNetworkSyslogServerIPAddress(); if (ServerIP.IsSet () && !ServerIP.IsNull ()) { @@ -2318,6 +2319,14 @@ void CMiniDexed::UpdateNetwork() new CSysLogDaemon (m_pNet, ServerIP, usServerPort); } + else + { + LOGNOTE ("Syslog server IP not set"); + } + } + else + { + LOGNOTE ("Syslog server is not enabled in configuration"); } m_bNetworkReady = true; } diff --git a/src/minidexed.ini b/src/minidexed.ini index 2291f4f..d7de8ce 100644 --- a/src/minidexed.ini +++ b/src/minidexed.ini @@ -161,6 +161,7 @@ NetworkIPAddress=0 NetworkSubnetMask=0 NetworkDefaultGateway=0 NetworkDNSServer=0 +NetworkSyslogEnabled=1 NetworkSyslogServerIPAddress=0 # Performance diff --git a/src/net/mdnspublisher.cpp b/src/net/mdnspublisher.cpp index 23052db..fbeb549 100644 --- a/src/net/mdnspublisher.cpp +++ b/src/net/mdnspublisher.cpp @@ -117,10 +117,13 @@ boolean CmDNSPublisher::UnpublishService (const char *pServiceName) return FALSE; } LOGDBG ("Unpublish service %s", (const char *) pService->ServiceName); + SendResponse (pService, FALSE); + /* if (!SendResponse (pService, TRUE)) { LOGWARN ("Send failed"); } + */ for (unsigned i = 0; i < pService->nTextRecords; i++) { delete pService->ppText[i]; @@ -172,10 +175,13 @@ void CmDNSPublisher::Run (void) TService *pService = static_cast (CPtrList::GetPtr (pElement)); assert (pService); + SendResponse (pService, FALSE); + /* if (!SendResponse (pService, FALSE)) { LOGWARN ("Send failed"); } + */ pElement = m_ServiceList.GetNext (pElement); } m_Mutex.Release (); diff --git a/submod.sh b/submod.sh index 6685bef..f9d3251 100755 --- a/submod.sh +++ b/submod.sh @@ -2,13 +2,13 @@ set -ex # Update top-level modules as a baseline -git submodule update --init --recursive +git submodule update --init --recursive -f # Use fixed master branch of circle-stdlib then re-update cd circle-stdlib/ git reset --hard -git checkout 1111eee # Matches Circle Step49 -git submodule update --init --recursive +git checkout 1111eee -f # Matches Circle Step49 +git submodule update --init --recursive -f cd - # Optional update submodules explicitly @@ -23,5 +23,5 @@ cd - # Use fixed master branch of Synth_Dexed cd Synth_Dexed/ git reset --hard -git checkout c9f5274 +git checkout c9f5274 -f cd - diff --git a/syslogserver.py b/syslogserver.py new file mode 100644 index 0000000..c07c1ea --- /dev/null +++ b/syslogserver.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +Syslog server to receive and display syslog messages from MiniDexed. +""" + +import socket +import time +import threading + +class SyslogServer: + def __init__(self, host='0.0.0.0', port=8514): + self.host = host + self.port = port + self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.server.bind((self.host, self.port)) + self.start_time = None + self.running = True + + def start(self): + ip_address = socket.gethostbyname(socket.gethostname()) + print(f"Syslog server listening on {ip_address}:{self.port}") + input_thread = threading.Thread(target=self.wait_for_input) + input_thread.daemon = True + input_thread.start() + while self.running: + try: + data, address = self.server.recvfrom(1024) + self.handle_message(data) + except KeyboardInterrupt: + self.running = False + + def handle_message(self, data): + message = data[2:].decode('utf-8').strip() + + if self.start_time is None: + self.start_time = time.time() + relative_time = "0:00:00.000" + else: + elapsed_time = time.time() - self.start_time + hours = int(elapsed_time // 3600) + minutes = int((elapsed_time % 3600) // 60) + seconds = int(elapsed_time % 60) + milliseconds = int((elapsed_time % 1) * 1000) + relative_time = f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}" + + print(f"{relative_time} {message}") + + def wait_for_input(self): + input("Press any key to exit...") + self.running = False + +if __name__ == "__main__": + server = SyslogServer() + server.start() + print("Syslog server stopped.") \ No newline at end of file