Difference between revisions of "Web API"
m (Reorganized basic concepts) |
(Added desc about auth.) |
||
Line 24: | Line 24: | ||
</game> | </game> | ||
<author> | <author> | ||
− | + | [...] | |
− | |||
</author> | </author> | ||
<request> | <request> | ||
Line 47: | Line 46: | ||
*** '''distro''' Unknown. Set to MOLUX for TMNF or TAHOR for TMUF | *** '''distro''' Unknown. Set to MOLUX for TMNF or TAHOR for TMUF | ||
*** '''lang''' lang of the client, as ISO 639-1 | *** '''lang''' lang of the client, as ISO 639-1 | ||
− | ** '''author''' | + | ** '''author''' ''See [[#Author]]'' |
− | |||
− | |||
** '''request''' | ** '''request''' | ||
*** '''name''' Name of the requested function. | *** '''name''' Name of the requested function. | ||
Line 55: | Line 52: | ||
** '''auth''' ''Optional. Only seen on Connect and Disconnect'' | ** '''auth''' ''Optional. Only seen on Connect and Disconnect'' | ||
*** '''value''' Looks like an auth ticket. | *** '''value''' Looks like an auth ticket. | ||
+ | |||
+ | ==== Author ==== | ||
+ | The author tag is used to identify the user sending the request. In this documentation, three cases are possible for the author tag: | ||
+ | |||
+ | <ul> | ||
+ | <li>The method doesn't require authentication (denoted as "No (Empty)"), the author tag is filled with following content: | ||
+ | <pre> | ||
+ | <login/> | ||
+ | <session/> | ||
+ | </pre> | ||
+ | </li> | ||
+ | <li>The method requires user name (denoted as "No (Set to 1)"), the author tag is filled with following content: | ||
+ | <pre> | ||
+ | <login>the user's name</login> | ||
+ | <session>1</session> | ||
+ | </pre> | ||
+ | </li> | ||
+ | <li>The method requires authentication (denoted as "Yes"), the author tag is filled with following content: | ||
+ | <pre> | ||
+ | <login>the user's name</login> | ||
+ | <session>the sessions' id</session> | ||
+ | </pre> | ||
+ | </li> | ||
+ | </ul> | ||
=== Response === | === Response === |
Revision as of 16:39, 12 May 2019
Goal and how to help
One day, eventually, Trackmania will reach his EoL. This is about documenting as much as possible to eventually get the point of having a fully functional custom authentication server. If you want to give help, go ahead. Just grab fiddler and start tweaking around with the game. You can check what has already been done on the Progress page.
Basic concepts
TrackMania uses a XML-RPC-like API to authenticate players, load server lists, load rankings, etc... Here is some documentation about what has been reversed engineered. A lot is still left to be documented.
The game sends HTTP(s) POST requests to
- http://game.trackmaniaforever.com/online_game/request.php
- http://game2.trackmaniaforever.com/online_game/request.php
- http://nations.trackmaniaforever.com/online_game/request.php
to communicate with the API, using the headers: User-Agent: GameBox
and Accept: */*
Request
<?xml version="1.0" encoding="UTF-8"?> <root> <game> <name>TmForever</name> <version>2.11.16</version> <distro>MOLUX</distro> <lang>fr</lang> </game> <author> [...] </author> <request> <name>[...]</name> <params> [...] </params> </request> <auth> <value>[...]</value> </auth> </root>
Here is a description of the xml:
- root
- game
- name the client you are using. Known values: TmForever
- version Version of the client
- distro Unknown. Set to MOLUX for TMNF or TAHOR for TMUF
- lang lang of the client, as ISO 639-1
- author See #Author
- request
- name Name of the requested function.
- param Parameters for the call.
- auth Optional. Only seen on Connect and Disconnect
- value Looks like an auth ticket.
- game
Author
The author tag is used to identify the user sending the request. In this documentation, three cases are possible for the author tag:
- The method doesn't require authentication (denoted as "No (Empty)"), the author tag is filled with following content:
<login/> <session/>
- The method requires user name (denoted as "No (Set to 1)"), the author tag is filled with following content:
<login>the user's name</login> <session>1</session>
- The method requires authentication (denoted as "Yes"), the author tag is filled with following content:
<login>the user's name</login> <session>the sessions' id</session>
Response
<?xml version="1.0" encoding="UTF-8"?> <r> <r> <n>[...]</n> <c> [...] </c> </r> <e>execution time : 0.0010 s</e> </r>
Here is a description of the returned xml:
- r
- r
- n The name of the called function
- c The returned data
- e A string giving the execution time.
- r
Functions calls
GetConnectionAndGameParams
First request sent by client.
Session required? | Parameters | Response |
---|---|---|
No (Empty) |
|
|
CheckLogin
Used to check if login is already used for account creation.
Session required? | Parameters | Response |
---|---|---|
No (Set to 1) |
|
|
MailAccount
Used to make the server send a password recovery email.
Session required? | Parameters | Response |
---|---|---|
No (Empty) |
|
Empty response |
Disconnect
Used to disconnect (Duh).
Session required? | Parameters | Response |
---|---|---|
Yes |
Empty parameters |
Empty response |
GetLeagues
Used to get regions list
Session required? | Parameters | Response |
---|---|---|
No (Set to 1) |
Empty parameters |
|
OpenSession
Used to open a session
Session required? | Parameters | Response |
---|---|---|
No (Set to 1) |
|
|
Subscribe
Used to register an account. Warning: This is sent over HTTPS.
Session required? | Parameters | Response |
---|---|---|
No (Set to 1) |
|
|
RedirectOnMasterServer
This response happens sometimes. It tells the client to switch auth server. When recieved, the client sends same request it just send, but to the other server specified.
Here is a description of the response:
- a
- b Name of the game
- c New server address to use
- d Endpoint (generally online_game)
- e HTTPS port
- f HTTP port
- g Base region (World)
- h ?. Set to 1
- i ?. Set to 1
- j (Maybe) List of authorized/available remote methods (described below), or permissions
- k one remote call (multiple of them in the j tag)
- l Method/Permission name
- q Might be if authorized/available or not (Seems always 1).
- k one remote call (multiple of them in the j tag)
Here is a list of the methods that have been seen in k:
- AddCustomChallenge
- AddResults
- CheckServerPassword
- Connect
- ConvertAccount
- CreateGroup
- Disconnect
- GetChallenge
- GetChallengeFromUId
- GetManialinkResource
- GetReplay
- MoveFromLeague
- PayCoppersTransaction
- SLiveUpdate
- SendMessages
- ShareChallenge
- StartOfficialRecord
- StopOfficialRecord
- Subscribe
- SubscribeToGroup
- UnsubscribeFromGroup
- UpdateOnlineProfile
- UploadOfficialRecord
- ValidateSoloAccount