Make it so the listserver attempts to connect to a server, if it can’t connect it sends a special packet to the server letting it know that it is unreachable and hides it from the server list.
The GServer then notifies any RC that logs in that the server is unreachable from the internet so has been hidden from the client list.
It might be difficult. I would have to program code to determine the broadcast address for the user’s router, which involves their IP address and their gateway address. So, step 1 is determining their local IP address and gateway. Step 2 is writing the code to send out the UPnP discovery request. Step 3 is reading the reply and sending out the port forward packet. Step 4 is designing a system to stick this all under its own thread so that we can stick the “Hide Unreachable Servers” code under it too.
uPnP is load of crap, better to just have an external exe that fowards the port and just have the server run it with the server port as the command line