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