1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
|
This document explains how to write an interface for DCPlus 3.0. DCPlus version
3 has a seperate communications interface for server to client and client to
client communications and should act as a object oriented environment.
Objects are represented by a single character representing the object class and
the object identifier. If the hub supports DCPlus 3.0, it represents itself
as M:local or M:me. For backward compatibility purposes, it is recommended
that most clients use M:me.
Hubs with DCPlus 3.0 support MUST send this command when a user connects or
sends $GetNickList:
$Hello $DCPlus|
If a hub previously did NOT have DCPlus support and wishes to enable it, the
hub should send all clients the above command also.
If a hub previously had DCPlus 3.0 support and wishes to disable it, it must
send to all clients:
$Quit $DCPlus|
A hub may choose to disable DCPlus support for users who are not using DCPlus
3.0 compatible clients. In no case should a hub initialize a conversation with
a client which does not support DCPlus 3.0.
Clients which support DCPlus 3.0 are represented by U: plus the username that
the client is logged onto the current hub as. To enable DCPlus 3.0, a client
must set Bit 4 (1-based) in the connection flag byte. This can easilly be
accomplished by applying an OR 0x10 operation to the normal connection flag
byte. For informational purposes, the connection flag byte referred to here is
located at the * in the following command:
$MyINFO $ALL bakanick nothin$ $Magic Wire*$$0$|
For a hub to send a command to a client, it should format it as seen below:
$To: ClientsUsername From: $DCPlus $<$DCPlus> Command-And-Parameters|
For a client to send a command to the hub, it should format it as seen below:
$To: $DCPlus From: ClientsUsername $<ClientsUsername> Command-And-Parameters|
For a client to send a command to another client, it should send to the hub:
$To: OtherClientUsername From: ClientsUsername $<ClientsUsername> *Cmd&Params|
In the above line, the client MUST replace * with ASCII character code number 4.
If a user on the client wishes to PM a message starting with a real character
number 4 in a message, the client should escape it with a \ (only if dest
user is DCPlus 3). Therefore when a message starting with \* (*=asc chr 4) is
received from a DCPlus 3 client, it should remove the \ from the start of the
message.
For a DCPlus supporting client to send a command to ALL DCPlus users, they
should use the following command:
$Search 0:0 F*?F*?0*?9*?DCPlus/Command-And-Parameters|
For certain commands which can be sent via "SR UDP", they must be sent in the
following command:
$DCPlus Command-And-Parameters|
Parameters are a single word long. To include spaces in a parameter, the entire
parameter must be enclosed in double quotes ("). Double quote and backslash
characters within an enclosed parameter must be escaped by a backslash. For
example: \" or \\
Below, <A> to <Z> are required arguments, [A] to [Z] are optional arguments,
and [@] refers to whatever extra data is there.
*in the case of a $Search usage, the $Search command may specific values for
'maxsize', 'minsize', and 'filetype'.
Hub to Client commands are:
SetOption ReserveSlots <A> [B]
<A> is the number of slots to reserve for users on this hub. Reply via
OptionSet required. [B] is response code.
SetOption DisCloseDownload <A> [B]
If <A> is non-zero then the client should close all downloads from users
in the current hub when the user leaves that hub. For example, if UserA
downloads from UserB in HubB and then leaves HubB, UserA's download is
cut. If <A> is a non-negative number, the client may wait <A> minutes
before cutting the downloads. Reply via OptionSet required. [B] is
response code.
Error <A> [@]
<A> is the command that caused the error. If present, [@] has more
details.
UserIP <A> <B> [C]
Informs the client that <B> is the IP of <A>. [C] is a flag set by the
request command.
Success <A> [@]
<A> is the command that succeeded and [@] might have more details.
GotProp <A> <B> <C>
Optional backward compatibility for DCPlus 2.0. See 2.0 docs for details.
CmdOk [@] [@] [...]
Arguments are a list of supported (or unsupported) commands. Supported
commands should be prefixed with a + and unsupported by a -.
PageCount <A>
<A> is the number of pages waiting for the client's username
PageMsg <A> <@>
<A> is the user who the page is from and <@> is the page message.
HelpStart <A> <B>
<A> is the page id code and <B> is the response code.
HelpData <A> <B>
<A> is the response code and <B> is the line of data.
HelpEnd <A>
<A> is the response code.
Ping [A]
[A] is the response code. A reply should be sent back via Pong ASAP.
Pong [A]
[A] is the response code. This should be sent when a Ping is received.
Cmd [@] [@] [...]
Arguments are specific commands to check for. If none are present, a full
list of supported commands is returned. Reply is via CmdOk reply.
RegisterOk <A>
<A> is the response code. This is a reply to RegisterNick.
RegisterDenied <A>
<A> is the response code. This is similar to a permission denied for
RegisterNick.
OptionSet <A> [B] <C>
<A> is the option that was set. [B] is the new value. <C> is replycode
ListOptions [A] [@] [@] [...]
[A] is a reply code. The arguments are what commands to look for. If no
arguments (besides [A]), all commands will be returned.
OptionList [A] [@] [@] [...]
[A] is a reply code. The arguments are the options supported. If an
option is listed but not supported, it should appear in brackets ('[]')
Client to Hub Commands are:
GetIP [@] [@] [...]
Arguments are the usernames to get the IPs of. Result is sent back via
UserIP responses.
GetIP+ [A] [@] [@] [...]
Arguments are the usernames to get the IPs of. Result is sent back via
UserIP responses. [A] is the response code.
Boot [@] [@] [...]
Arguments are the usernames to boot. There is no reply.
BanMAC <A>
<A> is the MAC address to ban. There is no reply.
UnBanMAC [A] [@] [@] [...]
[A] is the response code. The arguments after it are MACs to unban. There
should be a 'Success/Error UnBanMAC [A]' reply.
BanIP <A>
<A> is the IP address to ban. There is no reply.
UnBanIP [A] [@] [@] [...]
[A] is the response code. The arguments after it are IPs to unban. There
should be a 'Success/Error UnBanIP [A]' reply.
Kick <A>
<A> is the user to kick. There is no reply.
TempBanIP <A>
<A> is the IP address to temp ban. There is no reply.
UnTempBanIP [A] [@] [@] [...]
[A] is the response code. The arguments after it are IPs to un temp ban.
There should be a 'Success/Error UnTempBanIP [A]' reply.
BanName [@] [@] [...]
Arguments are usernames to ban usage of. There is no reply.
UnBanName [A] [@] [@] [...]
[A] is the response code. The arguments after it are names to unban. There
should be a 'Success/Error UnBanName [A]' reply.
Ban <A>
<A> is the username of the user to ban (in any method). There is no reply
GetProp <A> <B>
Optional backward compatibility for DCPlus 2.0. See 2.0 docs for details.
PutProp <A> <B> <C>
Optional backward compatibility for DCPlus 2.0. See 2.0 docs for details.
AppProp <A> <B> <C>
Optional backward compatibility for DCPlus 2.0. See 2.0 docs for details.
RitProp <A> <B> <C>
Optional backward compatibility for DCPlus 2.0. See 2.0 docs for details.
Cmd [@] [@] [...]
Arguments are specific commands to check for. If none are present, a full
list of supported commands is returned. Reply is via CmdOk reply.
MassMsg [@]
[@] is the message to mass-announce. No reply.
SendPage <A> [@]
<A> is the user to send a page to. [@] is the message.
GetPage [A]
[A] is the message number to retrieve. If present, message is sent to
client via PageMsg reply and the message is deleted from the hub. If
not, number of messages is sent to client via PageCount reply.
PeekPage <A>
<A> is the message number to retrieve. Message should be sent via PageMsg
reply and the message SHOULD NOT BE DELETED FROM HUB.
HelpOn <A> [B]
<A> is the help id code. If present, [B] is the response code.
Ping [A]
[A] is the response code. A reply should be sent back via Pong ASAP.
Pong [A]
[A] is the response code. This should be sent when a Ping is received.
OptionSet <A> [B] <C>
<A> is the option which was set correctly. <B> is the new value. This is
a reply to the SetOption command.
CmdOk [@] [@] [...]
Arguments are a list of supported (or unsupported) commands. Supported
commands should be prefixed with a + and unsupported by a -.
RegisterNick <A> <B>
<A> is the password to register the nickname with. <B> is a response code
SetOption Topic <A> [B]
<A> is the new hub topic/name. [B] is response code.
SetOption Chat.<A> <B> [C]
<A> is the username of the client to affect. If <B> is zero, chat
messages should no longer be sent to the client. [C] is the response
code. 'SetOption Chat <B> [C]' affects the client sending the command
SetOption Userlist.<A> <B> [C]
<A> is the username of the client to affect. If <B> is zero, userlist
updates should no longer be sent to the client. [C] is the response
code. 'SetOption Userlist <B> [C]' affects the client sending command
SetOption Search.<A> <B> [C]
<A> is the username of the client to affect. If <B> is zero, searches
should no longer be sent to the client. [C] is the response code.
'SetOption Search <B> [C]' affects the client sending the command
Note: It is recommended that hubs put bot restrictions on this.
SetOption Visible.<A> <B> [C]
<A> is the username of the client to affect. If <B> is non-zero, then
user should be kept off the userlist. [C] is the response code.
'SetOption Visible <B> [C]' affects the client sending the command
Note: It is recommended that hubs put bot restrictions on this.
SetOption BlockConnects.<A> <B> [C]
<A> is the username of the client to affect. If <B> is non-zero, then
hub should prevent [Rev]ConnectToMe commands from reaching the client.
[C] is the response code. 'SetOption BlockConnects <B> [C]' affects
the client sending the command
Note: It is recommended that hubs put bot restrictions on this.
ListOptions [A] [@] [@] [...]
[A] is a reply code. The arguments are what commands to look for. If no
arguments (besides [A]), all commands will be returned.
OptionList [A] [@] [@] [...]
[A] is a reply code. The arguments are the options supported. If an
option is listed but not supported, it should appear in braces ('{}')
Client to Client commands are:
Ping [A]
[A] is the response code. A reply should be sent back via Pong ASAP.
Pong [A]
[A] is the response code. This should be sent when a Ping is received.
IsPassive [A]
[A] is the response code. The client should reply with MyModeIs.
MyModeIs <A> [B]
If <A> is non-zero, the user is passive. [B] is the response code.
SendFile <A> [B]
<A> is the URI of where the file can be received. [B] = replycode
Example: DC1C://bakausername:apassword@my.hostname.com/folder/file.exe
RefuseURI [B]
[B] is the reply code.
ProtocolOk <A> [B]
<A> is the protocol. [B] is the reply code. Reply via ICProtocol cmd.
ICProtocol <A> <B> [C]
<A> is the protocol. <B> is non-zero if it is supported. [C] is replycode
ProtocolsAre [A]
[A] is the reply code. Response is via ICProtocol command.
ExternChat <A> [B]
<A> is the URI to chat with. [B] is the response code.
Example of <A>: telnet://my.hostname.net:2222
NetGame <A> [B]
<A> is the URI of where to meet for a game. [B] is the response code.
Example of <A>: armagetron://games.secret.com.au/
snes9x://my.hostname.org:1998/
NetApp <A> [B]
<A> is the URI. [B] is the response code.
FindFile <A> <B> [@]/[@]/[...]
<A> is either host:port or "Hub:"+username. <B> is the response code.
[1] is the minimum file size. [2] is the file type (see DC1 protocol
specs for more info). [3] is the maximum file size. The [@] arguments
are sets of option=value. If a client does not recognize an option it
should ignore the FindFile command and NOT continue. If the unrecognized
option is enclosed in braces then the client should ignore the option
and do a Find without it. For example:
'FindFile Hub:baka 0 md5=9291047/{id3v2_title}=sing$filename' would
cause a client to search for a file with 'filename' in the actual
filename and MD5 of '9291047'. If the client understands the
id3v2_title option, it will only return results that match it. If not,
it returns results regardless of the id3v2_title option. If the client
doesn't understand the md5 option it will not search at all and will not
return any search results. See post-command info for standard options.
Note: option and value pairings can be o=v o>v o<v o>=v o<=v or o!=v
Note: option and value names with non-alphanumeric characters must be
escaped with % followed by 2 hex characters.
Note: This command may be sent via SR UDP.
FileFound <A> [B] [@]
<A> is the response code. [B] is detailed information about the file in
option=value format with / as a delimiter. [@] is the data for the SR
standard command. See DC1 protocol specs for more info.
Note: option and value pairings can be o=v o>v o<v o>=v o<=v or o!=v
Note: option and value names with non-alphanumeric characters must be
escaped with % followed by 2 hex characters.
Note: This command may be sent via SR UDP.
PrivMsg [A] <B> [@]
[A] is the host:port of a common hub. This field may be skipped. <B> is
the username who the PrivMsg is sent by. [@] is the actual message.
Note: This command may be sent via SR UDP
ConnectToMe <A> [B] [C]
<A> is host:port of the user. If [B] is present and non-zero, the
sender is the one who will upload. Otherwise, the sender downloads.
If present, [C] is the protocol identifier to use. If not present, the
DC1C protocol will be used. Note: this command may be sent via SR UDP
RevConnectToMe <A> [B]
<A> is the username. Send a ConnectToMe back with a non-zero 2nd argument
If present, [B] is the protocol to use for the connection.
Cmd [@] [@] [...]
Arguments are specific commands to check for. If none are present, a full
list of supported commands is returned. Reply is via CmdOk reply.
Note: this command may be sent via SR UDP
CmdOk [@] [@] [...]
Arguments are a list of supported (or unsupported) commands. Supported
commands should be prefixed with a + and unsupported by a -.
Note: this command may be sent via SR UDP
OptionSet <A> [B] <C>
<A> is the option that was set. [B] is the new value. <C> is replycode
ListOptions [A] [@] [@] [...]
[A] is a reply code. The arguments are what commands to look for. If no
arguments (besides [A]), all commands will be returned.
OptionList [A] [@] [@] [...]
[A] is a reply code. The arguments are the options supported. If an
option is listed but not supported, it should appear in brackets ('[]')
Finger <A> [B] [C]
<A> is a reply code. If present, [B] is the return path for the response.
If present, [C] is a specific FingerInfo name to get: No other fields
should be returned.
Note: this command may be sent via SR UDP
FingerInfo <A> [@]
<A> is a reply code. [@] is the finger data in the format of:
name=value/name=value/n=v/etc (similar to FindFile options)
See below for common FingerInfo names. Note: this command may be sent
via SR UDP
Standard FindFile options:
md5
A MD5 hash of the file.
exactname
Specifies that the filename specified is exact (not within)
id3v2_title
The title of the ID3v2 file
id3v2_copyright
Non-Zero if the ID3v2 file is copyrighted
media_length
Length of WAV/MP3/Video
avi_fourcc
FOURCC code of the AVI video
video_width
Width of the video in pixels
video_height
Height of the video in pixels
video_pixels
Width*Height of the video in pixels
audio_bitrate
Bitrate of audio (kbit/s)
video_bitrate
Bitrate of video (kbit/s)
audio_channels
Number of audio channels (1=Mono; 2=Stereo)
audio_hz
Hz of audio
minsize
Minimum filesize (overrides everything else)
maxsize
Maximum filesize (overrides everything else)
filetype
'audio', 'video', etc (overrides all else)
Standard FingerInfo options:
EMail
IM-Jabber
IM-AIM
IM-ICQ
IM-.NET
Formerly known as MSN
IM-Yahoo
(USA)
IM-YahooJP
(Japan)
URI-Homepage
URI-Link
Birthdate
Comment
(usually the DC 'Content Info' field)
Code-Geek
GeekCode
Code-Moonie
MoonieCode
|