Difference between revisions of "Wiimmfi"
m |
|||
(45 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
[[File:Wiimmfi-300.png|right]] | [[File:Wiimmfi-300.png|right]] | ||
− | [[Nintendo]] | + | [[Nintendo]] announced that [[Nintendo Wi-Fi Connection]] will be [http://www.nintendo.com/consumer/info/services-update.jsp discontinued on May 20, 2014.] This impacted all DS and Wii games with online features that were directly using Nintendo WFC, which included Mario Kart Wii. [[Wiimm]] had been analysing the [[Mario Kart Wii]] network traffic since November 2012, and had already written a 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 for other games, if possible. |
Line 8: | Line 8: | ||
== wiimmfi.de == | == wiimmfi.de == | ||
− | '''wiimmfi.de''' | + | '''wiimmfi.de''' replaces '''nintendowifi.net''' in games. All games must use this new domain and change https to http (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 '''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 == | == State of the Project == | ||
− | + | On May 10 2014, 10 days before Nintendo shut down their NAS and disconnected themselves from [[GameSpy]], [[Wiimm]] released [[Wiimmfi-Patcher]]s. Since that date, Wiimmfi was publically usuable. At first, the server only supported [[Mario Kart Wii]], including the different [[Custom Track Distribution]]s. However, more games have been enabled, tested, and are now fully supported. | |
− | = | + | → [http://wiimmfi.de/stat?showall=1 List of all Wiimmfi games (supported, test and disabled)] |
− | The | + | The game lists contain also information about issues. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Game Patcher == | == Game Patcher == | ||
− | To play Wii games using the custom server, the games must be patched using the [[wiimmfi-Patcher]]. There are | + | 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. |
− | |||
− | |||
{{youtube-box|tutorial|RqFtklrXY9M|Wiimmfi Tutorial - Homebrew Channel}} | {{youtube-box|tutorial|RqFtklrXY9M|Wiimmfi Tutorial - Homebrew Channel}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Implementation == | == Implementation == | ||
− | [[Wiimm]] | + | [[Wiimm]] originally implemented the server in PHP, so that the servers were created quickly. From the beginning of development, it was known 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 thus been ported to C. |
− | |||
− | |||
− | + | === NAS === | |
− | At the moment, | + | [[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, logins are accepted with old and new profiles. New savegames send a request to get their unique console nickname from the server. |
− | === | + | === GPCM === |
− | + | When entering the WFC, the Wii connects to [[GPCM]] using TCP. The connection is closed upon 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. | + | It is currently 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 supports a model with supervisors and workers. Since March 2016, the new server is in use at Wiimmfi's test server. |
− | === | + | === GPSP === |
− | [[ | + | [[GPSP]] is used to retrieve information about friends. The Wii connects frequently using TCP. Nintendo's GPSP server was used to retrieve the profile_id and nick pairs before shutdown. |
− | On Wiimmfi, [[ | + | 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 replaced by a giant server written in C to improve performance. The new MASTER reduces was optimized and reduces queries to the database by ~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]] was implemented as PHP, but piped the response through an encoder written in C. In January 2016 it was integrated into the MASTER server (written in C). |
− | === | + | === NATNEG === |
− | [[ | + | [[NATNEG]] is used to establish a connection between two players whom are both 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 Billy), which is now fully working. |
− | + | === GAMESTATS === | |
− | + | GAMESTATS is for game rankings/leaderboards. There are two versions of it; HTTP and TCP. Sepalani has implemented both in Python, the former is a near-complete implementation. Games like Mario Strikers Charged and Dr. Mario Online Rx use GAMESTATS. | |
− | + | === DLS1 === | |
− | + | [[DLS1]] is a server for game file downloading. For Wiimmfi's own use, it is implemented in PHP. However, [[User:PokeAcer|Billy]] runs a Python version, with data for most NDS games and some Wii games; this version is used for NDS games, and some Wii games, such as Super Smash Bros. Brawl. | |
− | |||
− | |||
== Using old profiles == | == Using old profiles == | ||
− | For each profile, there exists a '''[[friend code|profile id]] and [[nick|nick name]] pair'''. Only the Wii | + | For each profile, there exists a '''[[friend code|profile id]] and [[nick|nick name]] pair'''. Only the Wii and the server they were created on knows both of them. At login the Wii sends the [[nick|nick name]] and the server answers with the related [[friend code|profile id]]. If the profile ID is wrong, the game will abort the login with error code 60000. |
− | + | There is only 1 way to use your old profiles with Wiimmfi: At the beginning of the project, when the old [[GameSpy]] servers were available (which shut down on July 25th, 2014), Wiimm retrieved 2.9 million pairs. If your profile was retrieved, it is possible to use your old license on Wiimmfi; otherwise, you will need to create a new friend code (Mario Kart Wii now automatically does this with the latest patch) | |
− | |||
− | + | ⇒ [[Wiimmfi/Error 60000|Details and solutions]] | |
− | + | == Links == | |
− | + | ;More about Wiimmfi at this Wiki | |
+ | * [[MKWii Network Protocol/Server/gpcm.gs.nintendowifi.net/Wiimmfi|Wiimmfi extension of the GPCM server protocol]] | ||
+ | * [[Wiimmfi/Connection Status|Connection Status]] (status summary) | ||
+ | * [[Wiimmfi/Nice ID|Nice ID]] (concept) | ||
+ | * [[Wiimmfi/Online Status|Online Status]] (status summary) | ||
+ | * [[Wiimmfi/Error 60000|Error 60000]] | ||
;Project forum at Wii-Homebrew.com | ;Project forum at Wii-Homebrew.com | ||
− | * [http://forum.wii-homebrew.com/index.php?page=Thread&postID=580703 | + | * [http://forum.wii-homebrew.com/index.php?page=Thread&postID=580703 Wiimmfi Project: Introduction] |
* [http://forum.wii-homebrew.com/index.php?page=Thread&postID=592245 Wiipid extractor to dump your old friend code from the savegames] | * [http://forum.wii-homebrew.com/index.php?page=Thread&postID=592245 Wiipid extractor to dump your old friend code from the savegames] | ||
+ | * [http://wiiki.wii-homebrew.com/Wiimmfi_(en) Wiimmfi-Page at WHB-Wiki] (english) | ||
+ | * [http://wiiki.wii-homebrew.com/Wiimmfi Wiimmfi-Seite im WHB-Wiki] (deutsch) | ||
− | + | ;Forums at GBATEMP.net | |
− | + | * [http://gbatemp.net/threads/save-nintendo-wifi-a-project-to-save-online-servers-for-wii-and-ds-games.362716/ Save Nintendo WiFi] | |
− | ; | + | * [http://gbatemp.net/forums/wii-nintendo-wi-fi-connection.109/ Nintendo WiFi & Wiimmfi] |
− | |||
− | * [http://gbatemp.net/threads/save-nintendo-wifi-a-project-to-save-online-servers-for-wii-and-ds-games.362716/ | ||
− | |||
− | |||
− | |||
− | [[category: | + | [[category:Wiimmfi]] |
[[category:Software]] | [[category:Software]] | ||
[[category:Network Protocol]] | [[category:Network Protocol]] |
Revision as of 20:26, 21 June 2019
Nintendo announced that Nintendo Wi-Fi Connection will be discontinued on May 20, 2014. This impacted all DS and Wii games with online features that were directly using Nintendo WFC, which included Mario Kart Wii. Wiimm had been analysing the Mario Kart Wii network traffic since November 2012, and had already written a 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 for other games, if possible.
wiimmfi.de
wiimmfi.de replaces nintendowifi.net in games. All games must use this new domain and change https to http (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
On May 10 2014, 10 days before Nintendo shut down their NAS and disconnected themselves from GameSpy, Wiimm released Wiimmfi-Patchers. Since that date, Wiimmfi was publically usuable. At first, the server only supported Mario Kart Wii, including the different Custom Track Distributions. However, more games have been enabled, tested, and are now fully supported.
→ List of all Wiimmfi games (supported, test and disabled)
The game lists contain also information about issues.
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.
Implementation
Wiimm originally implemented the server in PHP, so that the servers were created quickly. From the beginning of development, it was known 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 thus 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, logins are accepted with old and new profiles. New savegames send a request to get their unique console nickname from the server.
GPCM
When entering the WFC, the Wii connects to GPCM using TCP. The connection is closed upon leaving WFC. The server is used for general maintenance and for message exchange between the clients.
It is currently 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 supports a model with supervisors and workers. Since March 2016, the new server is in use at Wiimmfi's test server.
GPSP
GPSP is used to retrieve information about friends. The Wii connects frequently using TCP. Nintendo's GPSP server was used 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 replaced by a giant server written in C to improve performance. The new MASTER reduces was optimized and reduces queries to the database by ~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 was implemented as PHP, but piped the response through an encoder written in C. In January 2016 it was integrated into the MASTER server (written in C).
NATNEG
NATNEG is used to establish a connection between two players whom are both 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 Billy), which is now fully working.
GAMESTATS
GAMESTATS is for game rankings/leaderboards. There are two versions of it; HTTP and TCP. Sepalani has implemented both in Python, the former is a near-complete implementation. Games like Mario Strikers Charged and Dr. Mario Online Rx use GAMESTATS.
DLS1
DLS1 is a server for game file downloading. For Wiimmfi's own use, it is implemented in PHP. However, Billy runs a Python version, with data for most NDS games and some Wii games; this version is used for NDS games, and some Wii games, such as Super Smash Bros. Brawl.
Using old profiles
For each profile, there exists a profile id and nick name pair. Only the Wii and the server they were created on 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 will abort the login with error code 60000.
There is only 1 way to use your old profiles with Wiimmfi: At the beginning of the project, when the old GameSpy servers were available (which shut down on July 25th, 2014), Wiimm retrieved 2.9 million pairs. If your profile was retrieved, it is possible to use your old license on Wiimmfi; otherwise, you will need to create a new friend code (Mario Kart Wii now automatically does this with the latest patch)
Links
- More about Wiimmfi at this Wiki
- Wiimmfi extension of the GPCM server protocol
- Connection Status (status summary)
- Nice ID (concept)
- Online Status (status summary)
- Error 60000
- Project forum at Wii-Homebrew.com
- Wiimmfi Project: Introduction
- Wiipid extractor to dump your old friend code from the savegames
- Wiimmfi-Page at WHB-Wiki (english)
- Wiimmfi-Seite im WHB-Wiki (deutsch)
- Forums at GBATEMP.net