From dbd9ad5f251eff7b80d74c886a26682b2f163f35 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Tue, 18 Aug 2026 12:07:44 -0600 Subject: [PATCH 1/3] fix(touchpanel): update SetAppUrl method to directly assign the provided URL --- .../Touchpanel/MobileControlTouchpanelController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs b/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs index 262cb34e..f588d284 100644 --- a/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs +++ b/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs @@ -611,7 +611,7 @@ namespace PepperDash.Essentials.Touchpanel /// public void SetAppUrl(string url) { - _appUrl = GetUrlWithCorrectIp(url); + _appUrl = url; AppUrlFeedback.FireUpdate(); } From ab7453d39d09858512f1aa4fc388faf70367a329 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Tue, 18 Aug 2026 12:21:14 -0600 Subject: [PATCH 2/3] fix(touchpanel): update log messages to use resolved app URL instead of feedback string --- .../Touchpanel/MobileControlTouchpanelController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs b/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs index f588d284..5fe4cd45 100644 --- a/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs +++ b/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs @@ -498,11 +498,11 @@ namespace PepperDash.Essentials.Touchpanel { var appUrl = GetUrlWithCorrectIp(_appUrl); - this.LogInformation("Sending {appUrl} on join 1", AppUrlFeedback.StringValue); + this.LogInformation("Sending {appUrl} on join 1", appUrl); if (Panel.StringInput[1].StringValue == appUrl) { - this.LogInformation("App URL already set to {appUrl}, no update needed", AppUrlFeedback.StringValue); + this.LogInformation("App URL already set to {appUrl}, no update needed", appUrl); return; } From a8a494bb2259ddd2c703d4d8f1983b0021dff08f Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Tue, 18 Aug 2026 12:54:38 -0600 Subject: [PATCH 3/3] fix(DebugWebsocketSink): enhance certificate generation with CS LAN IP support --- .../Logging/DebugWebsocketSink.cs | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/PepperDash.Core/Logging/DebugWebsocketSink.cs b/src/PepperDash.Core/Logging/DebugWebsocketSink.cs index cfbf5785..011abd3f 100644 --- a/src/PepperDash.Core/Logging/DebugWebsocketSink.cs +++ b/src/PepperDash.Core/Logging/DebugWebsocketSink.cs @@ -155,21 +155,39 @@ namespace PepperDash.Core certGenerator.AddExtension(X509Extensions.ExtendedKeyUsage, false, new ExtendedKeyUsage(new[] { KeyPurposeID.id_kp_serverAuth, KeyPurposeID.id_kp_clientAuth })); - // Subject Alternative Names: DNS + IP + + + + // Subject Alternative Names: DNS + IP(s), including the CS LAN IP if the processor has one + var generalNames = new System.Collections.Generic.List { new GeneralName(GeneralName.DnsName, fqdn) }; + System.Net.IPAddress parsedIp; if (System.Net.IPAddress.TryParse(ipAddress, out parsedIp)) { - certGenerator.AddExtension(X509Extensions.SubjectAlternativeName, false, - new GeneralNames(new GeneralName[] { - new GeneralName(GeneralName.DnsName, fqdn), - new GeneralName(GeneralName.IPAddress, ipAddress) - })); + generalNames.Add(new GeneralName(GeneralName.IPAddress, ipAddress)); } - else + + try { - certGenerator.AddExtension(X509Extensions.SubjectAlternativeName, false, - new GeneralNames(new GeneralName(GeneralName.DnsName, fqdn))); + var csAdapterId = CrestronEthernetHelper.GetAdapterdIdForSpecifiedAdapterType(EthernetAdapterType.EthernetCSAdapter); + if (!csAdapterId.Equals(EthernetAdapterType.EthernetUnknownAdapter)) + { + var csIpAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, csAdapterId); + + System.Net.IPAddress parsedCsIp; + if (csIpAddress != ipAddress && System.Net.IPAddress.TryParse(csIpAddress, out parsedCsIp)) + { + generalNames.Add(new GeneralName(GeneralName.IPAddress, csIpAddress)); + } + } } + catch (Exception ex) + { + CrestronConsole.PrintLine(string.Format("CreateCert: No CS LAN adapter available: {0}", ex.Message)); + } + + certGenerator.AddExtension(X509Extensions.SubjectAlternativeName, false, + new GeneralNames(generalNames.ToArray())); // Sign with SHA256withRSA var signatureFactory = new Asn1SignatureFactory("SHA256WITHRSA", keyPair.Private, random);