Wiimm decided to implement the code in PHP as a fast solution and to find out the protocol details. From the beginning it was clear that it must be rewritten in C or C++ for performance reasons. While developing, there were some other issues. And now 2 servers are already implemented in C.
Server NASWII is the https based login server. NAS is an old NDS implementation for http. Both can be interchanged. On Wiimmfi, the server is implemented using APACHE2 and PHP5.
At the moment, only logins are accepted with old and new profiles. Complete new savegames send a request to get their unique console nickname from the server. This is not implemented yet.
If entering the WFC, the Wii connects to the Server GPCM using TCP. The connection is closed, when leaving WFC. The server is used for general maintenance and for message exchange between the clients.
It is implemented as PHP script. The interprocess communication (transferring messages) is implemented with UNIX sockets.
Server GPSP is used to retrieve information about friends. The Wii connects and disconnects frequently using TCP. We use Nintendos GPSP server to retrieve the profile_id and nick pairs.
On Wiimmfi, Server GPSP is fully implemented as PHP script.
Server MASTER listens at UDP port 27900. The clients (games) send frequently status records to the master. The master server stores them into a game specific table, where other clients can retrieve the information using the Server MS (see next point).
Server MASTER is now fully implemented in C for performance reasons.
Server MS is connected by the clients to retrieve information about other online clients. The query looks like a SQL query with select, where and limit clauses. The reply is encrypted by a game specific secret.
Server MS is fully implemented as PHP script, but pipes the response through an encoder written in C.
Server NATNEG is used to establish a connection between two players both being behind NAT. The clients only communicate with this server when they try to connect to another player.
Server NATNEG is fully implemented in C. Because it was the first C tool, it has an open second port to send special UDP packets for Server MS with the faked sender address of Server MASTER.
Server SAKE is used for data exchange — files or records can be uploaded to the sake server. This is used for friend Mii exchange in Mario Kart Wii.
Server RACE is used for downloading the rankings in Mario Kart Wii, and for competition distribution and management.
Server RACE has been implemented by Leseratte.
Server GAMESTATS is for game statistics. Ciapa tries to implement rudimentary functions of the server.
Server DLS1 is a server for game updates. It is implemented as APACHE2/PHP script. At the moment, it just returns that no update is available. The base system allows different DLS1 server for different games.