Mercurial > pidgin
comparison doc/PROTOCOL @ 1:2846a03bda67
[gaim-migrate @ 10]
The other missing files :)
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Thu, 23 Mar 2000 03:13:54 +0000 |
parents | |
children | f90b022235fe |
comparison
equal
deleted
inserted
replaced
0:a5ace2e037bc | 1:2846a03bda67 |
---|---|
1 # Copyright (c) 1998-9 America Online, Inc. All Rights Reserved. | |
2 # | |
3 # This program is free software; you can redistribute it and/or | |
4 # modify it under the terms of the GNU General Public License | |
5 # as published by the Free Software Foundation; either version 2 | |
6 # of the License, or (at your option) any later version. | |
7 # | |
8 # This program is distributed in the hope that it will be useful, | |
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 # GNU General Public License for more details. | |
12 # | |
13 # You should have received a copy of the GNU General Public License | |
14 # along with this program; if not, write to the Free Software | |
15 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
16 | |
17 # Note from Jim Duchek, gaim maintainer -- this may not be the latest | |
18 # version of this document, I provide it as a service. Download a copy | |
19 # of TiK (http://www.aim.aol.com/tik/) for the latest version of this | |
20 # doc. | |
21 | |
22 Version: TOC1.0 | |
23 | |
24 This document describes the protocol between TOC and TOC clients. | |
25 The protocol is built on TCP. Framing is done by SFLAP, | |
26 described at the bottom of this document. Inside each | |
27 SFLAP frame is a TOC command. | |
28 | |
29 The TOC protocol is ASCII based, and special attention | |
30 must be placed argument separation. The separator and | |
31 the rules of separation are different for messages inbound | |
32 to TOC and outbound to the client. The rules of separation | |
33 are described in sections below. | |
34 | |
35 The TOC server is built mainly to service the TIC and TiK clients. Since | |
36 the TIC client is a Java applet, and downloadable, TOC will NOT support | |
37 multiple TOC protocol versions at the same time. Therefore, TiK | |
38 users will be forced to upgrade if the protocol version changes. | |
39 TOC sends down the protocol version it expects the client | |
40 to speak and understand. Note, the protocol version is a string. | |
41 | |
42 Important Notes | |
43 =============== | |
44 * TOC will drop the connection if a command exceeds the maximum | |
45 length, which is currently 2048 bytes. So the client needs to | |
46 spend special attention to im, chat, and config message lengths. | |
47 There is an 8k length maximum from TOC to the client. | |
48 | |
49 * No commands should be sent to TOC (besides toc_signon) before | |
50 a SIGN_ON is received. If you do send a command before SIGN_ON | |
51 the command will be ignored, and in some case the connection | |
52 will be dropped. | |
53 | |
54 * Initial permit/deny items should be sent after receiving SIGN_ON | |
55 but before sending toc_init_done, otherwise the user will flash | |
56 on peoples buddylist who the user has denied. You will probably | |
57 want to send the toc_add_buddies at this time also. | |
58 | |
59 * After TOC sends the PAUSE message to a client, all messages sent | |
60 to TOC will be ignored, and in some cases the connection will | |
61 be dropped. Another SIGN_ON message will be sent to the client | |
62 when it is online again. The buddy list and permit/deny items must | |
63 be sent again, followed by the toc_init_done. In most cases the | |
64 SIGN_ON message will be sent between 1-2 seconds after the | |
65 PAUSE message. Therefore a client could choose to ignore the | |
66 PAUSE message and hope nothing bad happens. | |
67 | |
68 | |
69 Client -> TOC | |
70 ============== | |
71 The commands and the arguments are usually separated by whitespaces. Arguments | |
72 with whitespace characters should be enclosed in quotes. Dollar signs, | |
73 curly brackets, square brackets, parentheses, quotes, and backslashes | |
74 must all be backslashed whether in quotes or not. It is usually | |
75 a good idea just to use quotes no matter what. All user names from clients | |
76 to TOC should be normalized (spaces removed and lowercased), and therefore | |
77 are the one exception to the always use quotes rule. | |
78 | |
79 When sending commands to the server you will not get a response | |
80 back confirming that the command format was correct or not! However | |
81 in some cases if the command format was incorrect the connection | |
82 will be dropped. | |
83 | |
84 | |
85 RoastingString="Tic/Toc" | |
86 | |
87 toc_signon <authorizer host> <authorizer port> <User Name> <Password> | |
88 <language> <version> | |
89 The password needs to be roasted with the Roasting String if | |
90 coming over a FLAP connection, CP connections don't use | |
91 roasted passwords. The language specified will be used | |
92 when generating web pages, such as the get info pages. | |
93 Currently the only supported language is "english". | |
94 If the language sent isn't found, the default "english" | |
95 language will be used. The version string will be used | |
96 for the client identity, and must be less then 50 | |
97 characters. | |
98 | |
99 Passwords are roasted when sent to the host. This is done so they | |
100 aren't sent in "clear text" over the wire, although they are still | |
101 trivial to decode. Roasting is performed by first xoring each byte | |
102 in the password with the equivalent modulo byte in the roasting | |
103 string. The result is then converted to ascii hex, and prepended | |
104 with "0x". So for example the password "password" roasts to | |
105 "0x2408105c23001130" | |
106 | |
107 toc_init_done | |
108 Tells TOC that we are ready to go online. TOC clients should first | |
109 send TOC the buddy list and any permit/deny lists. However toc_init_done | |
110 must be called within 30 seconds after toc_signon, or the connection | |
111 will be dropped. Remember, it can't be called until after the SIGN_ON | |
112 message is received. Calling this before or multiple times after a | |
113 SIGN_ON will cause the connection to be dropped. | |
114 | |
115 toc_send_im <Destination User> <Message> [auto] | |
116 Send a message to a remote user. Remember to quote and encode the | |
117 message. If the optional string "auto" is the last argument, then the | |
118 auto response flag will be turned on for the im. | |
119 | |
120 toc_add_buddy <Buddy User 1> [<Buddy User2> [<Buddy User 3> [...]]] | |
121 Add buddies to your buddy list. This does not change your | |
122 saved config. | |
123 | |
124 toc_remove_buddy <Buddy User 1> [<Buddy User2> [<Buddy User 3> [...]]] | |
125 Remove buddies from your buddy list. This does not change your | |
126 saved config. | |
127 | |
128 toc_set_config <Config Info> | |
129 Set the config information for this user. The config information | |
130 is line oriented with the first character being the item type, | |
131 followed by a space, with the rest of the line being the item | |
132 value. Only letters, numbers, and spaces should be used. Remember | |
133 you will have to enclose the entire config in quotes. | |
134 | |
135 Item Types: | |
136 g - Buddy Group (All Buddies until the next g or the end of config | |
137 are in this group.) | |
138 b - A Buddy | |
139 p - Person on permit list | |
140 d - Person on deny list | |
141 m - Permit/Deny Mode. Possible values are | |
142 1 - Permit All | |
143 2 - Deny All | |
144 3 - Permit Some | |
145 4 - Deny Some | |
146 | |
147 toc_evil <User> <norm|anon> | |
148 Evil/Warn someone else. The 2nd argument is either the string | |
149 "norm" for a normal warning, or "anon" for an anonymous | |
150 warning. You can only evil people who have recently sent you | |
151 ims. The higher someones evil level, the slower they can | |
152 send message. | |
153 | |
154 toc_add_permit [ <User 1> [<User 2> [...]]] | |
155 ADD the following people to your permit mode. If | |
156 you are in deny mode it will switch you to permit | |
157 mode first. With no arguments and in deny mode | |
158 this will switch you to permit none. If already | |
159 in permit mode, no arguments does nothing | |
160 and your permit list remains the same. | |
161 | |
162 toc_add_deny [ <User 1> [<User 2> [... ]]] | |
163 ADD the following people to your deny mode. If | |
164 you are in permit mode it will switch you to | |
165 deny mode first. With no arguments and in permit | |
166 mode, this will switch you to deny none. If | |
167 already in deny mode, no arguments does nothing | |
168 and your deny list remains unchanged. | |
169 | |
170 toc_chat_join <Exchange> <Chat Room Name> | |
171 Join a chat room in the given exchange. Exchange is | |
172 an integer that represents a group of chat rooms. | |
173 Different exchanges have different properties. For | |
174 example some exchanges might have room replication (ie | |
175 a room never fills up, there are just multiple | |
176 instances.) and some exchanges might have navigational | |
177 information, and some exchanges might have ... Currently | |
178 exchange should always be 4, however this may | |
179 change in the future. You will either | |
180 receive an ERROR if the room couldn't be joined | |
181 or a CHAT_JOIN message. The Chat Room Name | |
182 is case insensitive and consecutive spaces | |
183 are removed. | |
184 | |
185 toc_chat_send <Chat Room ID> <Message> | |
186 Send a message in a chat room using the chat room | |
187 id from CHAT_JOIN. Since reflection is always on in | |
188 TOC, you do not need to add the message to your chat UI, | |
189 since you will get a CHAT_IN with the message. | |
190 Remember to quote and encode the message. | |
191 | |
192 toc_chat_whisper <Chat Room ID> <dst_user> <Message> | |
193 Send a message in a chat room using the chat room | |
194 id from CHAT_JOIN. This message is directed at | |
195 only one person. (Currently you DO need to add this to | |
196 your UI.) Remember to quote and encode the message. | |
197 Chat whispering is different from IMs since it is linked | |
198 to a chat room, and should usually be displayed in the chat | |
199 room UI. | |
200 | |
201 toc_chat_evil <Chat Room ID> <User> <norm|anon> | |
202 Evil/Warn someone else inside a chat room. The 3rd argument is either | |
203 the string "norm" for a normal warning, or "anon" for an anonymous | |
204 warning. Currently chat evil is not turned on in the chat complex. | |
205 | |
206 toc_chat_invite <Chat Room ID> <Invite Msg> <buddy1> [<buddy2> [<buddy3> [...]]] | |
207 Once you are inside a chat room you can invite other people into | |
208 that room. Remember to quote and encode the invite message. | |
209 | |
210 toc_chat_leave <Chat Room ID> | |
211 Leave the chat room. | |
212 | |
213 toc_chat_accept <Chat Room ID> | |
214 Accept a CHAT_INVITE message from TOC. The server will send a | |
215 CHAT_JOIN in response. | |
216 | |
217 toc_get_info <username> | |
218 Gets a user's info a GOTO_URL or ERROR message will be sent back to the | |
219 client. | |
220 | |
221 toc_set_info <info information> | |
222 Set the LOCATE user information. This is basic HTML. | |
223 Remember to encode the info. | |
224 | |
225 toc_set_away [<away message>] | |
226 if the away message is present, then the unavailable | |
227 status flag is set for the user. If the away message | |
228 is not present, then the unavailable status flag is | |
229 unset. The away message is basic HTML, remember to | |
230 encode the information. | |
231 | |
232 toc_get_dir <username> | |
233 Gets a user's dir info a GOTO_URL or ERROR message will be sent back to the | |
234 client. | |
235 | |
236 toc_set_dir <info information> | |
237 Set the DIR user information. This is a colon separated fields as in: | |
238 "first name":"middle name":"last name":"maiden name":"city":"state":"country":"email":"allow web searches" | |
239 Should return a DIR_STATUS msg. Having anything in the "allow web searches" | |
240 field allows people to use web-searches to find your directory info. | |
241 Otherwise, they'd have to use the client. | |
242 | |
243 toc_dir_search <info information> | |
244 Perform a search of the Oscar Directory, using colon separated fields as in: | |
245 "first name":"middle name":"last name":"maiden name":"city":"state":"country":"email" | |
246 Returns either a GOTO_URL or ERROR msg. | |
247 | |
248 toc_set_idle <idle secs> | |
249 Set idle information. If <idle secs> is 0 then the user isn't idle at all. | |
250 If <idle secs> is greater then 0 then the user has already been idle | |
251 for <idle secs> number of seconds. The server will automatically | |
252 keep incrementing this number, so do not repeatedly call with new | |
253 idle times. | |
254 | |
255 | |
256 TOC -> Client | |
257 ============== | |
258 All user names from TOC to client are NOT normalized, and are | |
259 sent as they should be displayed. String are NOT encoded, instead | |
260 we use colons as separators. So that you can have colons inside | |
261 of messages, everything after the colon before :<Message> should | |
262 be considered part of the message (ie don't just "split" on colons, | |
263 instead split with a max number of results.) | |
264 | |
265 | |
266 SIGN_ON:<Client Version Supported> | |
267 This is sent after a successful toc_signon command is sent to TOC. | |
268 If the command was unsuccessful either the FLAP connection will | |
269 be dropped or you will receive a ERROR message. | |
270 | |
271 CONFIG:<config> | |
272 A user's config. Config can be empty in which case the host was not able to | |
273 retrieve it, or a config didn't exist for the user. See toc_set_config | |
274 above for the format. | |
275 | |
276 NICK:<Nickname> | |
277 Tells you your correct nickname (ie how it should be capitalized and | |
278 spacing) | |
279 | |
280 IM_IN:<Source User>:<Auto Response T/F?>:<Message> | |
281 Receive an IM from some one. Everything after the third colon is | |
282 the incoming message, including other colons. | |
283 | |
284 UPDATE_BUDDY:<Buddy User>:<Online? T/F>:<Evil Amount>:<Signon Time>:<IdleTime>:<UC> | |
285 This one command handles arrival/depart/updates. Evil Amount is | |
286 a percentage, Signon Time is UNIX epoc, idle time is in minutes, UC (User Class) | |
287 is a two/three character string. | |
288 uc[0]: | |
289 ' ' - Ignore | |
290 'A' - On AOL | |
291 uc[1] | |
292 ' ' - Ignore | |
293 'A' - Oscar Admin | |
294 'U' - Oscar Unconfirmed | |
295 'O' - Oscar Normal | |
296 uc[2] | |
297 '\0' - Ignore | |
298 ' ' - Ignore | |
299 'U' - The user has set their unavailable flag. | |
300 | |
301 | |
302 | |
303 ERROR:<Error Code>:Var args | |
304 * General Errors * | |
305 901 - $1 not currently available | |
306 902 - Warning of $1 not currently available | |
307 903 - A message has been dropped, you are exceeding | |
308 the server speed limit | |
309 * Chat Errors * | |
310 950 - Chat in $1 is unavailable. | |
311 | |
312 * IM & Info Errors * | |
313 960 - You are sending message too fast to $1 | |
314 961 - You missed an im from $1 because it was too big. | |
315 962 - You missed an im from $1 because it was sent too fast. | |
316 | |
317 * Dir Errors * | |
318 970 - Failure | |
319 971 - Too many matches | |
320 972 - Need more qualifiers | |
321 973 - Dir service temporarily unavailable | |
322 974 - Email lookup restricted | |
323 975 - Keyword Ignored | |
324 976 - No Keywords | |
325 977 - Language not supported | |
326 978 - Country not supported | |
327 979 - Failure unknown $1 | |
328 | |
329 * Auth errors * | |
330 980 - Incorrect nickname or password. | |
331 981 - The service is temporarily unavailable. | |
332 982 - Your warning level is currently too high to sign on. | |
333 983 - You have been connecting and | |
334 disconnecting too frequently. Wait 10 minutes and try again. | |
335 If you continue to try, you will need to wait even longer. | |
336 989 - An unknown signon error has occurred $1 | |
337 | |
338 | |
339 EVILED:<new evil>:<name of eviler, blank if anonymous> | |
340 The user was just eviled. | |
341 | |
342 CHAT_JOIN:<Chat Room Id>:<Chat Room Name> | |
343 We were able to join this chat room. The Chat Room Id is | |
344 internal to TOC. | |
345 | |
346 CHAT_IN:<Chat Room Id>:<Source User>:<Whisper? T/F>:<Message> | |
347 A chat message was sent in a chat room. | |
348 | |
349 CHAT_UPDATE_BUDDY:<Chat Room Id>:<Inside? T/F>:<User 1>:<User 2>... | |
350 This one command handles arrival/departs from a chat room. The | |
351 very first message of this type for each chat room contains the | |
352 users already in the room. | |
353 | |
354 CHAT_INVITE:<Chat Room Name>:<Chat Room Id>:<Invite Sender>:<Message> | |
355 We are being invited to a chat room. | |
356 | |
357 CHAT_LEFT:<Chat Room Id> | |
358 Tells tic connection to chat room has been dropped | |
359 | |
360 GOTO_URL:<Window Name>:<Url> | |
361 Goto a URL. Window Name is the suggested internal name of the window | |
362 to use. (Java supports this.) | |
363 | |
364 DIR_STATUS:<Return Code> | |
365 | |
366 | |
367 PAUSE | |
368 Tells TIC to pause so we can do migration | |
369 | |
370 Typical Signon Process | |
371 ====================== | |
372 Except for the section marked optional this is an sequential | |
373 process. Each line MUST occur before the following line. | |
374 | |
375 * Client connects to TOC | |
376 * Client sends "FLAPON\r\n\r\n" | |
377 * TOC sends Client FLAP SIGNON | |
378 * Client sends TOC FLAP SIGNON | |
379 * Client sends TOC "toc_signon" message | |
380 * if login fails TOC drops client's connection | |
381 else TOC sends client SIGN_ON reply | |
382 * if Client doesn't support version it drops the connection | |
383 | |
384 [BEGIN OPTIONAL] | |
385 * TOC sends Client CONFIG | |
386 * Client sends TOC permit/deny stuff | |
387 * Client sends TOC toc_add_buddy message | |
388 [END OPTIONAL] | |
389 | |
390 * Client sends TOC toc_init_done message | |
391 | |
392 | |
393 SFLAP Documentation | |
394 =================== | |
395 SFLAP is pretty much a FLAP connection except the DATA frame payload is a null | |
396 terminated string when traveling from client to host, it is NOT null | |
397 terminated when traveling from host to client. The FLAP Header is binary | |
398 data, and is in network byte order. The data portion is at offset 6, after the | |
399 header. The sequence number is sequential in each direction. So | |
400 packets from the server to client have one sequence number, while | |
401 the packets from the client to server have an independent | |
402 increasing number. | |
403 | |
404 FLAP Header (6 bytes) | |
405 ----------- | |
406 Offset Size Type | |
407 0 1 ASTERISK (literal ASCII '*') | |
408 1 1 Frame Type | |
409 2 2 Sequence Number | |
410 4 2 Data Length | |
411 | |
412 | |
413 Valid Frame Type Values | |
414 ----------------------- | |
415 1 SIGNON | |
416 2 DATA | |
417 3 ERROR (Not used by TOC) | |
418 4 SIGNOFF (Not used by TOC) | |
419 5 KEEP_ALIVE | |
420 | |
421 | |
422 TOC SIGNON FRAME TYPE | |
423 --------------------- | |
424 Sequence Number contains the initial sequence number used in each direction. | |
425 Data Length contains the payload length, with the payload described | |
426 below. The payload area is NOT null terminated. | |
427 | |
428 Host To Client: | |
429 4 byte FLAP version (1) | |
430 | |
431 Client To Host: | |
432 4 byte FLAP version (1) | |
433 2 byte TLV Tag (1) | |
434 2 byte Normalized User Name Length | |
435 N byte Normalized User Name (NOT null terminated) | |
436 | |
437 | |
438 TOC DATA FRAME TYPE | |
439 ------------------- | |
440 Sequence Number contains the next sequence number. | |
441 Data Length is the length of the payload, including the null termination | |
442 from client to host. | |
443 |