{"record":{"id":"6b4a9a96a524e358","repo":"mgth/LittleBigMouse","slug":"no-vidaa-descriptor-answered-at-ipaddress-on-ports-string","errorCode":null,"errorMessage":"No VIDAA descriptor answered at {ipAddress} on ports {string.Join('/', HisenseVidaaProtocol.DescriptorPorts)}.","messagePattern":"No VIDAA descriptor answered at (.+?) on ports (.+?)\\.","errorType":"exception","errorClass":"HttpRequestException","httpStatus":null,"severity":"error","filePath":"LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaDiscovery.cs","lineNumber":43,"sourceCode":"            {\n                using var attempt = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);\n                attempt.CancelAfter(TimeSpan.FromSeconds(2));\n                var xml = await httpClient.GetStringAsync(\n                    $\"http://{ipAddress}:{port}/MediaServer/rendererdevicedesc.xml\", attempt.Token)\n                    .ConfigureAwait(false);\n                return HisenseVidaaProtocol.ParseDescriptor(ipAddress, xml);\n            }\n            catch (OperationCanceledException e) when (!cancellationToken.IsCancellationRequested)\n            {\n                lastError = e;\n            }\n            catch (HttpRequestException e)\n            {\n                lastError = e;\n            }\n        }\n\n        throw new HttpRequestException(\n            $\"No VIDAA descriptor answered at {ipAddress} on ports {string.Join('/', HisenseVidaaProtocol.DescriptorPorts)}.\",\n            lastError);\n    }\n\n    public async Task<HisenseVidaaDevice> FindAsync(\n        string lastKnownAddress,\n        CancellationToken cancellationToken = default)\n    {\n        if (!Ipv4Address.TryParse(lastKnownAddress, out var seed))\n            throw new ArgumentException(\"Enter a valid projector IPv4 address.\", nameof(lastKnownAddress));\n\n        try\n        {\n            return await ProbeAsync(lastKnownAddress, cancellationToken).ConfigureAwait(false);\n        }\n        catch (HttpRequestException)\n        {\n            // SSDP multicast does not cross routers. Search only the /24 of the","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/mgth/LittleBigMouse/blob/7a42f01d47d99d223b8ee33ba4019af82adf1c48/LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaDiscovery.cs#L25-L61","documentation":"HisenseVidaaDiscovery.ProbeAsync fetches the device descriptor XML from the projector at a given IP across the known VIDAA descriptor ports. If every port attempt fails with an HttpRequestException, it rethrows an HttpRequestException describing the IP and ports tried, meaning no VIDAA-capable device responded at that address.","triggerScenarios":"Calling ProbeAsync (directly or via FindAsync or subnet scan) with an IP where nothing answers on HisenseVidaaProtocol.DescriptorPorts: connection refused, timeout, or HTTP errors on all descriptor ports.","commonSituations":"Typo in the projector IP; TV/projector asleep or powered off; device on a different VLAN/subnet; firewall or AP isolation blocking the ports; TV's network settings restricting remote control.","solutions":["Ping the projector IP and confirm it is powered on and connected to the same network","Check that the projector's network remote/VIDAA control setting is enabled","Verify no firewall or AP isolation blocks HTTP on the descriptor ports","Re-run discovery on the /24 subnet (FindAsync with a seed address) to locate the device"],"exampleFix":"// before\nvar device = await discovery.ProbeAsync(ip);\n// after\ntry\n{\n    var device = await discovery.ProbeAsync(ip);\n}\ncatch (HttpRequestException)\n{\n    // device unreachable: check power/network, then rescan subnet\n}","handlingStrategy":"try-catch","validationCode":"// ping first\nusing var ping = new Ping();\nvar reply = await ping.SendPingAsync(ip, 1500);\nif (reply.Status != IPStatus.Success) throw new InvalidOperationException(\"Projector unreachable\");","typeGuard":null,"tryCatchPattern":"try { return await discovery.ProbeAsync(ip, token); }\ncatch (HttpRequestException ex) { throw new DeviceUnreachableException($\"{ip}: {ex.Message}\", ex); }","preventionTips":["Ping the device before probing","Store the projector IP in settings only after a successful probe","Check AP isolation/firewall when discovery fails network-wide","Treat timeouts and refused connections as 'device asleep' and prompt user"],"tags":["network","discovery","http","hisense-vidaa"],"backgroundTag":"connection-refused","analyzedSha":"7a42f01d47d99d223b8ee33ba4019af82adf1c48","analyzedAt":"2026-09-16T00:35:00.514Z","contentChangedAt":"2026-09-16T00:35:00.514Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}