NITRO ONLINE
How it will work.
INTRODUCTION
Dan and Mike have just downloaded Nitro Online. They are excited to play their Nintendo DS online for the very first time. After they successfully compiled their code, the only thing holding them back from the shooting goodness of Metroid Prime: Hunters [First Hunt] was just a few commands to Nitro Online. This paper will describe how Nitro Online will communicate with the Nintendo DS consoles.
THINGS TO KNOW
Mike will be a server
Dan will be a client
WiFi is used to find the DS' MAC address
TCP is strictly used for Nitro Online, not game data.
MIKE'S SIDE
Mike turns on his Nintendo DS and goes to Metroid Prime: Hunters [First Hunt]. He starts his Nintendo DS as a server on Metroid Prime: Hunters [First Hunt]. Then, Mike fires up the Nitro Online excecutable on his laptop. Nitro Online then uses the crossWireless function collection, a wrapper for Nitro Online, to find his Nintendo DS, which is constently sending 3,000 beacon packets per second. Nitro Online finds three MAC addresses. crossWireless, the wireless wrapper, then passes the three MAC addresses to Nitro Online. Nitro Online then checks for a MAC address starting with 00:09:BF. Once found, Nitro Online stores the MAC address in an unsigned char of an array of six. Mike is then notified that his Nintendo DS' MAC address has been identified. He jumps for joy, repeaditly thanking god that his new Prism2 wireless adapter was worth it (How right he is). He is then prompted with the menu if he hasn't already supplied command-line arguments. This is done to keep the application user-friendly, people. He instantly hits the number 2, which starts a server. Nitro Online starts three sockets. One is a TCP server socket, and the other is a UDP socket for game data. The last one is for frame pushing and MAC packet retrieval (retrieval is currently under research. We're trying to avoid libpcap). He waits for his good buddy Dan to connect.
DAN'S SIDE
Dan flipped his Nintendo DS opened which booted into the Metroid Prime: Hunters [First Hunt] main menu. He then hits 'Join a game' after touching Multiplayer. His Nintendo DS finds no games avalaible, no surprise. He sets his DS down to the side of his USB Netgear wireless adapter. He then executes Nitro Online. Nitro Online finds his Nintendo DS, and notifies him. This is no surprise, as he developed Nitro Online in the first place, seeing that his DS was found over countless nights of testing with trial-and-error :-). He commands his computer by typing a 3 after being prompted for user input. He is then prompted for an IP address to connect to. He enters Mike's IP address, and hits return. Behind the scenes, Nitro Online instanciates three sockets; TCP, UDP, and RAW. Now this is where Dan gets stupid
THE FUN
Oh yes, the part we've all been waiting for. Mike sees that a client has connected to his server through TCP. "w00t!" Mike's Nitro Online and Dan's Nitro Online then exchange the MAC addresses of their Nintendo DS' through TCP. Mike's Nitro Online spoofs his wireless card's MAC address to Dan's DS' MAC address. Dan's Nitro Online does the same to his wireless card, but with Mike's DS MAC address. Because they just spoofed their wireless card's MAC address to the Nintendo's registered one (00:09:BF) the Nintendo DS' will communicate with their (Mike's and Dan's) wireless cards. The Nitro Onlines then intercept Nintendo DS MAC data sent by the DS', wrap them in a UDP packet, and send to the other party. TCP then confirms the arrival of the MAC packet. Once the packet's arrival has been confirmed, the other party then uses their wireless card to send a MAC packet to the Nintendo DS.
A special filter in Nitro Online will remove overhead and beacon packets to reduce bandwidth.
Future versions of Nitro Online will have a cleaner and faster way to send. It will be documentated once research has proof-of-concept.
Thank you for your interest in Nitro Online.