build: link nums only when BT is enabled (ref #27)
[mldonkey.git] / docs / dc1.txt
blobafc065fc1e29481d01648dc0768c3bcca3abb7db
2    direct connect messages
3    ========================
5    by suxxx@users.sourceforge.net
6    December 21, 2001
8    0. Foreward
11    This is a open spezification of the neo-modus.com direct connect protocol.
12    If you find here some errors, please write me a mail.
13    This direct connect protocol spezifcations describe the client<->server and the
14    server<->server commands. And a little bit the client<->client protocol.
16    1.  Client-Server protocol
18    direct connect uses TCP for client to server communication. The servers called "Hubs" runs
19    on port 411.
21    each message to/from the server is in the form of
24    <command>|
26    the | specifies the end of each command.
27    each command starts with a $.
29    if the packed starting without a $ then the packed is a public chat message.
30    each public chat message is in the form of
32    <<username>> <chattext>|
35    the | specifies the end of each public chat message.
37    2. Command Types (client to server)
39    The following section describes the format of the Commands
40    Each field is denoted with <>.  The fields in the command are separated
41    by a single space character (ASCII 32). And each Command ends with a | (pipe)
42    All Commands are casesensetiv
44    command    sended by description of the subcomands and the format
45    =============================================================================================
48    $Lock    SERVER    First message from server to client. thats a security check.
49             the client must send a $Key command as answer.
51             Format: $Lock <lockcode>
53    $Key     CLIENT    This is the Clients first message to the server.
54             the client sends a Key. this key will be calculated from the
55             <lockcode>.
57             Format: $Key <keycode>
60    $HubName   SERVER    The server sends his name to the client. Mostly with a welcome message.
62             Format: $HubName <hubname>
64    $ValidateNick  CLIENT   The Client sends his Username to the Server.
65             If the Username is already in use or wrong, the server sends a $ValidateDenide message.
67             Format: $ValidateNick <nickname>
69    $ValidateDenide    SERVER   If the Username already in use or wrong, the server sends this message.
71             the client must take another Username and send $ValidateNick again.
73             Format: $ValidateDenide <thebadnickname>
75    $GetPass   SERVER    Sends from server to the connected client, if the username is password protected.
77             Format: $GetPass
79    $MyPass    CLIENT    The client sends this message to the server to send the password.
81             Format: $MyPass <password>
84    $BadPass   SERVER    If the password is wrong, the server sends this message and closes the connection
86             Format: $BadPass
88    $Version   CLIENT    The client sends the version of the clientsoftware to the server
90             Format: $Version <versionnumber>
92    $Hello     SERVER    If a new client connected, the server sends to all clients this message.
95             Format: $Hello <nickname>
97    $LogedIn   SERVER    If a operator connected, the server sends this message to the connected
98             user. (to enable the admin menue eg.)
100             Format: $LogedIn <nickname>
102    $MyInfo    CLIENT    This message informs the server about the Userinfos.
103          SERVER   This message will send from server too as response to $GetINFO.
105             Format: $MyINFO $ALL <nickname> <description>$ $<speed>\x01$<email>$<sharedsizeinbyte$
107             "\x01" stands for (as ascii char):
108             1 = normal
109             2 = away
110             3 = away
111             4 = fileserver
112             5 = fileserver
113             6 = fileserver away
114             7 = fileserver away
115             8 = speeduser
116             9 = speeduser
117             10 = speeduser away
119             12 = speeduser away
121    $GetINFO   CLIENT    This message reqests the userinfos from a other user.
123             Format: $GetINFO <nickname> <ownnickname>
125    $GetNickList   CLIENT   This message sends the client to request the nicklist and the oplist.
127             Format: $GetNickList
129    $NickList  SERVER    This message sends the server to a client, when the client request the nicklist.
132             Format: $NickList <nickname1>$$<nickname2>$$
134    $OpList    SERVER    This message sends the server to a client, when the client request the nicklist.
135             This message will send too, when a new op connected. (to all connected users)
137             Format: $OpList <nickname1>$$<nickname2>$$
139    $To    CLIENT    This message sends the client to the server to send a private message to a spezific user
140          SERVER   The same message sends the server to the spezific user
143             Format: $To: <nickname> From: <ownnickname> $<ownnickname> <message>
145    $ConnectToMe   CLIENT   This message sends the client to the server to send a connection request to a spezific user
146          SERVER   The same message sends the server to the spezific user
148             Format: $ConnectToMe <nickname> <ownip>:<ownlistenport>
150    $MultiConnectToMe  CLIENT   The same message as $ConnectToMe. That message will send by client, when other user
151             is on a other Hub.
153    $RevConnectToMe    CLIENT   This message sends the client to the server to send a connection request to a spezific user
155          SERVER   The same message sends the server to the spezific user
156             The client sends this message, when he is behind a firewall.
157             When the other client received the message it must send a $ConnectToMe that the firewalld User.
158             could connect.
160             Format: $RevConnectToMe <ownnick> <nickname>
162    $Search    CLIENT    This message will send to search a file.
163          SERVER   The same message sends the server to the spezific user
165             Passive:
167             Format: $Search Hub:<ownnickname> <cmd1>?<cmd2>?cmd3>?<cmd4>?<cmd5>
168             Active:
169             Format: $Search <ownip>:<ownlistenport> <cmd1>?<cmd2>?cmd3>?<cmd4>?<cmd5>
171             <cmd1> sets search for sizelimit Yes or No (Yes = T and No = F)
172             <cmd2> search sizelimit "At Least" or "At Most" ("At Least" = F and "At Most" = T)
173             <cmd3> sizelimit. if <cmd1> is "F" then <cmd3> is 0 else the sizelimit in bytes
174             <cmd4> the filetype ("Any" is 1, "Audio" is 2 an so on)
175             <cmd5> is the search value. If you insert "mp3 techno" you must replace the " " with a "$"
177    $MultiSearch   CLIENT   The same message as $Search. That message will send by client, when the search on all hubs
179             checkbox is enabled.
181    $SR    CLIENT    This is the Searchrespond for passive searching. if a active user find some files that
182          SERVER   matches the searchrequest. it will send this message. the server will forward this message only
183             to the user that had start the searchrequest.
185             Format: $SR <ownname> <filenamewithpath)\x05<filesizeinbytes> <current openslots>/<allopenslots>\x05<hubname> (<hubip>:<hubport>)
186             "\x05" is ascii char 5
188    $Kick    CLIENT    This message could only sends an operator. This command will kick another user.
191             Format: $Kick <nickname>
193    $OpForceMove   CLIENT   This message could only sends an operator. This command will redirect another user.
195             Format: $OpForceMove $Who:<nickname>$Where:<iptoredirect><Msg:<a message>
197    $ForceMove   SERVER   This message will sends by the server to a client, that he must connect to another hub.
198             Server dont kick the user, the client must disconnect!
200             Format: $ForceMove <ipaddress>
203    $Quit    SERVER    This message will send to all clients, when a user disconnects
205             Format: $Quit <nickname>
209    3.  Server-Server protocol
211    direct connect uses UDP for server to server communication.
213    each message is in the form of
216    <command>|
218    the | specifies the end of each command.
219    each command starts with a $.
221    4. Command Types (server to server)
223    The following section describes the format of the Commands
224    Each field is denoted with <>.  The fields in the command are separated
225    by a single space character (ASCII 32). And each Command ends with a | (pipe)
227    All Commands are casesensetiv
229    command    description of the subcomands and the format
230    ============================================================================================
232    $Up    This message will send as heardbeat request to each linked server.
234          Format: $Up <linkedserverpassword> <ownip>
236    $UpToo     This message will send as heardbeat response to the requesting server
239          Format: $UpToo <linkedserverpassword> <ownip>
241    $Search    This message will send from a server to each linked server, when a user
242          searches with $MultiSearch
244          Format: $Search <ownip>:<ownlistenport> <cmd1>?<cmd2>?cmd3>?<cmd4>?<cmd5>
246          <cmd1> sets search for sizelimit Yes or No (Yes = T and No = F)
247          <cmd2> search sizelimit "At Least" or "At Most" ("At Least" = F and "At Most" = T)
248          <cmd3> sizelimit. if <cmd1> is "F" then <cmd3> is 0 else the sizelimit in bytes
249          <cmd4> the filetype ("Any" is 1, "Audio" is 2 an so on)
251          <cmd5> is the search value. If you insert "mp3 techno" you must replace the " " with a "$"
254    $ConnectToMe   This message sends the server to each linked server, when a user sends the $MultiConnectToMe
255          message.
257          Format: $ConnectToMe <nickname> <ownip>:<ownlistenport>
260    5.  client-client protocol
263    direct connect uses TCP for client to client communication.
264    normaly the client listen at port 412 for client connections.
265    but if the port already in use it uses 413,414 and so on..
267    After a $ConnectToMe over the Server a Client Connects the other one.
269    each message is in the form of
271    <command>|
273    the | specifies the end of each command.
275    each command starts with a $.
277    6. Command Types (client to client)
279    The following section describes the format of the Commands
280    Each field is denoted with <>.  The fields in the command are separated
281    by a single space character (ASCII 32). And each Command ends with a | (pipe)
282    All Commands are casesensetiv
284    Client number 1 is the user who connecting
285    Client number 2 is the use who listen
288    command  from client num    description of the subcomands and the format
289    ============================================================================================
291    $MyNick  CLIENT 2    The listen User sends his Name when a user connecting.
292        CLIENT 1   After the Lock/Key handshake the connected client sends MyNick too
294             Format: $MyNick <ownnickname>
296    $Lock  CLIENT 2    After the $MyNick command the listen user sends a $Lock command.
297        CLIENT 1   After the first handshake, the connecting client sends a $Lock code too.
299             Format: $Lock <lockcode>
301    $Key   CLIENT 1    This is the first message to the listen user.
302        CLIENT 2
303             the key will be calculated from the <lockcode>.
305             Format: $Key <keycode>
307    $Direction CLIENT 2   ???? for passive or active mode downloading???
309             Format: $Direction <direction> <anumber>
312     could be "Upload" or "Download"
313     ???
315    $GetListLenCLIENT 1   with this command the client requestes the filesize of the
316             sharelist.
318             Format: $GetListLen
320    $ListLen CLIENT 2    this is the answer to $GetListLen.
323             Format: $ListLen <sizeinbyte>
325    $MaxedOutCLIENT 2    this will send, when no freeslots available
327             Format: $MaxedOut
329    $Error   CLIENT 2    this will send when a error occures.. like file not found eg
331             Format: $Error <errormessage>
333    $Send  CLIENT 2    informs the other client, that the upload will start.
335        CLIENT 1   informa a client tha he could start with the upload
337             Format: $Send
339    $Get   CLIENT 1    requests a file from the other client.
341             Format: $Get <filenameandpath>$<resumecount>
343    $FileLengthCLIENT 2   after a $Get request, the other the other client sends
344             the filesize.
347             Format: $FileLength <sizeinbytes>
349    $CanceledCLIENT 1    Cancel a transfer
350        CLIENT 2
352             Format: $Canceled
354    Download Example:
356    Client 1 connects Client 2
359    //handshake
360    CL2: $MyNick <nickname>
361    CL2: $Lock <lockcode>
362    CL1: $Key <keycode>
363    CL1: $Lock <lockcode>
364    CL2: $Key <keycode>
365    CL1: $MyNick <nickname>
366    //handshake
368    //unknown
369    CL2: $Direction <direction> <anumber>
371    //unknown
373    //request shared listfilesize
374    CL1: $GetListLen
375    CL2: $ListLen <sizeinbyte>
376    //request shared listfilesize
378    //request the shared filelist
379    CL1: $Get MyList.DcLst$1
380    CL2: $FileLength <sizeinbytes>
381    //request the shared filelist
384    //starttransfer
385    CL1: $Send
386    //starttransfer
388    After the $Send command, the sharing client sending the file...
391    7. Copyright
393    direct connect is a trademark of neo-modus.com
396    this protocol specs writen and analyst by suxxx
397    without any help from neo-modus.com if you want
398    information about the protocol or if you have
399    information about some messages eg.write me a mail.
401 Telechargement dans DC:
403 --- envoie -->
404 $MyNick toto2002|
405 $Lock O5SGVKT;U)>]aoK\a>2jTtv_RQk9J8bl0y+0B;gWV(;sNvAdlgf'Gvm8g4=a.-&@6Cp'GwaufkSKIX68i%>\, Pk=(iNeJXH>+1blGZ2.|
407 <-- recoit --
408 $MyNick.[BBB]WizardOne|
409 $Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.1763kABCABC|
410 $Direction Upload 666|
411 $Key...fA......q6..Bq.........0.%7'....%.'.....1...sR.......U.5...0.fgW3u..aA1..........&.|
413 --- envoie -->
414 $Direction Download 9708|
415 $Key.........A......0.0..0..0..0..0..0.|
416 $Get.upload\-.=.Misc.=.-\WIN.XP.CODE.txt$1|
418 <-- recoit --
419 $FileLength.112|
421 --- envoie -->
422 $Send|
424 <- recoit
425 ................. Le fichier .....................
427 $Direction Upload/Download level|