Wiimmfi

From Custom Mario Kart
Revision as of 04:40, 4 April 2016 by Leseratte (talk | contribs)
Jump to navigation Jump to search
Wiimmfi-300.png

Nintendo has announced that the Nintendo Wi-Fi Connection service will be discontinued on May 20, 2014. This will impact all DS and Wii games with online features, including Mario Kart Wii. Wiimm had been analysing the Mario Kart Wii network traffic since November 2012 and had already written an helper tool named mkw-ana. And so he decided together with other people to create the Wiimmfi Project (formerly Wii-Server Project) to replace Nintendo's servers for Mario Kart Wii and perhaps for other games.



wiimmfi.de

wiimmfi.de is the new domain that replaces nintendowifi.net. All games must be patched to use this new domain and to disable https requests (see below).

The domain wiimmfi.de was registered by Wiimm for this project. If Wiimm discontinue this service at any time in the future, he will give away the domain, the software and the data base content.

State of the Project

At May 10 2014, 10 days before Nintendo shut down his servers, Wiimm released the Wiimmfi-Patchers. Since that day, the Wiimmfi-Server are available for the public. At the first day, the server supported only Mario Kart Wii including the different Custom Track Distributions. And now many more games are available.

List of all Wiimmfi games (supported, test and disabled)

Known Game Issues

Mario Kart

  1. After registering a new friend, you see a general ◇Wiimmfi◇ Mii instead of the player's. Connecting to the player (friend room, WW, etc..) will make the real mii appear.
  2. Competitions do not work yet.
  3. Ghost data Up/Download is in beta testing, so it may sometimes work.


Competitions

To be able to distribute competitions on Wiimmfi, we need to collect all the competition files. These are stored in the savegame, so we need as many savegames with competitions in it as possible! See here: Collecting competition data

SSBB

  1. The spectator mode does not work.

Pokemon Platinum/HeartGold/SoulSilver

  1. The WiFi Plaza does not work as of yet.

Sonic & SEGA All-Stars Racing

  1. Only global races work. Friend events do not work.

Game Patcher

To play Wii games using the custom server, the games must be patched using the wiimmfi-Patcher. There are 3 patchers for Wii images, one for Mario Kart Wii, one for Animal Crossing Wii, and one for other games.

Wiimmfi Tutorial - Homebrew Channel

Updates/Maintenance

The wiimmfi-server is running in test mode. There is a second server for the active development. And so major updates must be done frequently.

The maintenance time is set between 16:30 and 17:30 UTC (17:30–18:30h CET) at every day. In this time the server may be stopped for updates and other things without further announcement. Don't be surprised if you are kicked or if login is not possible during this period. This time will also used to insert new retrieved friend codes.

Implementation

Wiimm originally implements the server in PHP, so that server creation is fast and works. From the beginning, it was understood that the servers must be ported to C/C++ to improve performance. While developing, there were issues due to using PHP, and 2 servers have been ported to C.

NAS

NAS is the Nintendo Authentication Server. The Wii used naswii with HTTPS, and the DS used nas (which supported HTTP) with HTTPS. They are interchangeable. On Wiimmfi, the server is implemented using APACHE2 and PHP5. At the moment, only logins are accepted with old and new profiles. New savegames send a request to get their unique console nickname from the server. This is not implemented yet.

GPCM

If entering the WFC, the Wii connects to 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. To improve the performance and to allow a better a interprocess communication, a C server was written. It is still in development and support a supervisor and workers model. Since march 2016 the new server runs at Wiimmfi test server.

GPSP

GPSP is used to retrieve information about friends. The Wii connects frequently using TCP. We used Nintendo's GPSP server to retrieve the profile_id and nick pairs before shutdown.

On Wiimmfi, GPSP has been implemented as PHP script.

MASTER

MASTER listens on port 27900 via UDP. Games send status records to MASTER. MASTER stores them into a game specific table, where other clients can retrieve the information using MS (see next point).

At the beginning, MASTER was implemented as PHP script. In September 2014 it was repalces by a monolithic server written in C to improve performance. The new MASTER reduces was optimized and reduces database queries about 90%.

MS

MS is used by the clients to retrieve information about other online clients. The query is similar to an SQL query, with select, where and limit clauses. The reply is encrypted by a game specific secret.

At the beginning, MS has been implemented as PHP, but piped the response through an encoder written in C. Since January 2016 it was integrated into the MASTER server (written in C).

NATNEG

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.

NATNEG has been implemented in C. As it was the first C tool, it has an open second port to send special UDP packets for MS with the faked sender address of MASTER.

SAKE

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, along with ghosts.

SAKE has been implemented in PHP, and can send/receive ghosts and Miis, along with other games' data.

RACE

RACE is used for downloading competitions and rankings in Mario Kart Wii. RACE has been implemented in PHP, with competition support added by Leseratte (with help from PokeAcer), and is in private beta.

GAMESTATS

GAMESTATS is for game statistics. A basic GAMESTATS server exists for most games, with a special response for certain games to allow the game to work, and a working GTS for Pokemon generations 4 and 5, implemented by mm201 (the server is shared with AltWFC, as this is allowed by mm201).

DLS1

DLS1 is a server for game file downloading. 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. PokemonAcer runs both a Wii one (dls1.pokeacer.tk) and a NDS one (dls2.pokeacer.tk) - the NDS one returns Mystery Gifts for Pokemon, missions for Pokemon Ranger 2, songs for Jam With The Band, books for 100 Classic Book Collection, and other games, and the Wii returns PES updates, along with SSBB updates.

Using old profiles

For each profile, there exists a profile id and nick name pair. Only the Wii of the user and the server database knows both of them. At login the Wii sends the nick name and the server answers with the related profile id. If the profile id is wrong, the game aborts the login.

There are 3 ways to use your old profiles with Wiimmfi:

  • At the beginning of the project, when the old gamespy servers were available (shut down on July 25th, 2014), Wiimm retrieved 2.9 millions pairs. With a little bit of luck, your profile was also retrieved.
  • If you have an account at Wiimmfi with assigned consoles, try to connect your profile with Wiimmfi. At the status page you will see a list with profiles and the unknown profile is marked as inactive. Press the button [set FC] and follow the instructions.
  • You can download the app here. Simply start it and all profiles from supported games will get transmitted to our server. You can find a list of all supported games here.

Links

Project forum at Wii-Homebrew.com
Other forums
References