Priority imo would be to remove Http.sys to get it working, that’s what the proxy listener would do, a small simple listener and forwarder, http.sys is still there in .Net 6 for Windows HttpListener (at least from my initial glance at the source here runtime/HttpListener.Windows.cs at main · dotnet/runtime · GitHub) so if it runs in Wine, it’s still breaking. With a proxy listener, it can run in Wine and you can do the UI update anytime.
What I was thinking is something like the following,
User initiates SSO → Start proxy listener (that doesnt need Http.sys) and TCP socket → accept OAuth2 redirect → forward to EveMon via TCP socket → user SSO ended → shutdown proxy listener and close TCP socket
- (fixes blocking issue) Remove Http.sys dependency by using proxy listener (allows running in Wine on Linux/MacOS)
- (any time) Migrate to .Net 6 (updates runtime, no Http.sys issue now due to proxy used and can still run in Wine on Linux/MacOS)
- (any time) Update UI (now finally native runnable without Wine on Linux/MacOS with cross platform UI)
- (optional) remove proxy listener and use native .Net listener or continue with stable proxy listener to save code churn.
It’s your repository, it’s your app, I am just giving reasonable and constructive suggestions on solutions from what I have observed of the issue. It potentially solves this issue with the least effort and time then leaves any larger changes more managable to later.
Jumping straight into .Net 6 and hoping for it to run in Wine on Linux isn’t going to work from what I’ve seen (see source code for HttpListener in the dotnet repository), you will need to fix that blocking issue first.
A simple mininum working example to test a listener would confirm it. That is what the proxy would have done, replaced that listener, not the full app to remove Http.sys dependency.
The reason for using a proxy process is to save coding effort on reimplementing a new listener, just consume one already working from another language library and why I suggested Go as it’s small and working but you can use anything you are familiar with as long as it does not use Http.sys. All it has to do is listen for the redirect and forward it and let EveMon handle it.
You can find the source to the Go listener here https://cs.opensource.google/go/go/+/master:src/net/http/server.go the proxy is just the host for it, EveMon stays the same (except the SSO handling).