From: <ul...@us...> - 2009-08-04 20:57:37
|
Revision: 5 http://adc.svn.sourceforge.net/adc/?rev=5&view=rev Author: ullner Date: 2009-08-04 20:57:28 +0000 (Tue, 04 Aug 2009) Log Message: ----------- Added TS as MSG parameter. Modified Paths: -------------- trunk/ADC-EXT.txt Modified: trunk/ADC-EXT.txt =================================================================== --- trunk/ADC-EXT.txt 2008-05-02 12:33:52 UTC (rev 4) +++ trunk/ADC-EXT.txt 2009-08-04 20:57:28 UTC (rev 5) @@ -1,178 +1,186 @@ -= ADC Extensions -Jacek Sieka <arn...@gm...> -1.0, May 2008 - -== Abstract -These are the official extensions to ADC. This document is based on the -information contained in the ADC wiki - spefications from there are moved here -when they are mature and stable enough. - -== Version history -The latest draft of the next version of this document as well as intermediate -and older versions can be downloaded from -$URL$. - -This version correspods to $Revision$. - -=== Version 1.0 -* Initial release created from original ADC 1.0 text -* Added PING extension - -== Extensions - -=== TIGR - Tiger tree hash support - -==== General - -This extension adds Tiger tree hash support to the base protocol. It is -intended to be used both for identifying files and for purposes such as CID -generation and password negotiation - -==== TIGR for shared files -All files shared by TIGR supporting clients must have been hashed using Merkle -Hash trees, as defined by -http://www.open-content.net/specs/draft-jchapweske-thex-02.html. The Tiger -algorithm, as specified by http://www.cs.technion.ac.il/~biham/Reports/Tiger/, -functions as the hash algorithm. A base segment size of 1024 bytes must be -used when generating the tree, but clients may then discard parts of the tree -as long as at least 7 levels are kept or a block granularity of 64 KiB is -achieved. - -Generally, the root of the tree (TTH) serves to identify a file uniquely. -Searches use it and it must be present in the file list. Further, the root of -the file list must also be available and discoverable via GFI. A client may -also request the rest of the tree using the normal client-client transfer -procedure. The root must be encoded using base32 encoding when converted to -text. - -In the file list, each File element carries an additional attribute "TTH" -containing the base32-encoded value of the Tiger tree root. - -In the GET/GFI type, the full tree may be accessed using the "tthl" type. - -"tthl" transfers send the largest set of leaves available) as a binary stream -of leaf data, right-to-left, with no spacing in between them. <start_pos> -must be set to 0 and <bytes> to -1 when requesting the data. <bytes> must -contain the total binary size of the leaf stream in SND; by dividing this -length by the individual hash length, the number of leaves, and thus the leaf -level, can be deducted. The received leaves can then be used to reconstruct -the entire tree, and the resulting root must match the root of the file (this -verifies the integrity of the tree itself). Identifier must be a TTH root -value from the "TTH/" root. - -In the GET/GFI namespace, files are identified by -"TTH/<base32-encoded tree root>". - -In SCH and GFI, the following attributes are added: - -[separator="|"] -``_ -TR | Tiger tree Hash root, encoded with base32. -TD | Tree depth, index of the highest level of tree data available, root-only = 0, first level (2 leaves) = 1, second level = 2, etc... -___ - -=== BZIP – File list compressed with bzip2 -This extension adds a special file "files.xml.bz2" in the unnamed root of the -share which contains "files.xml" compressed with bzip2 1.0.3+ (www.bzip.org). - -=== ZLIB - Compressed communication -There are two variants of zlib support, FULL and GET, and only one should be -used on a each communications channel set up. - -==== ZLIB-FULL -If, during SUP negotiation, a peer sends "ZLIF" in its support string, it must -accept two additional commands, ZON and ZOF. Upon reception of ZON the peer -must start decompressing the incoming stream of data with zlib before -interpreting it, and stop doing so after ZOF is received (in the compressed -stream). The compressing end must partially flush the zlib buffer after each -chunk of data to allow for decompression by the peer. - -==== ZLIB-GET -The alternative is to send "ZLIG" to indicate that zlib is supported for -binary transfers using the GET command, but not otherwise. A flag "ZL1" is -added to the to the SND command to indicate that the data will come -compressed, and the client receiving requests it by adding the same flag to -GET (the sending client may ignore a request for a compressed transfer, but -may also use it even when not requested by the receiver). The <bytes> -parameter of the GET and SND commands is to be interpreted as the number of -uncompressed bytes to be transferred. - -=== PING - Pinger extension -Added 2008-03-14, based on ADC 1.0 - -This extension can be supported by both clients and hubs, and when present, if hub -supports it, it must send additional information to the client ( otherwise normal -base client). - -It's purpose is to send to hublist pingers additional information about the hub - that otherwise it would be impossible to get as a normal user (eg. minimum share, - maximum user count, etc). - -==== INF - -Contexts : F - -When the client supporting the PING extension connects, the hub must send its -normal INF along with the following added fields ( none mandatory, if not present, -it means hub has no restrictions in that matter, or non existent): - -[separator="|"] -```_ -Code | Type | Description -___ -HH | string | Hub Host address ( DNS or IP ) -WS | url | Hub Website -NE | string | Hub Network -OW | string | Hub Owner name -UC | integer | Current User count -SS | integer | Total share size -SF | integer | Total files shared -MS | integer | Minimum share required to enter hub ( bytes ) -XS | integer | Maximum share for entering hub ( bytes ) -ML | integer | Minimum slots required to enter hub -XL | integer | Maximum slots for entering hub -MU | integer | Minimum hubs connected where clients can be users -MR | integer | Minimum hubs connected where client can be registered -MO | integer | Minimum hubs connected where client can be operators -XU | integer | Maximum hubs connected where clients can be users -XR | integer | Maximum hubs connected where client can be registered -XO | integer | Maximum hubs connected where client can be operators -MC | integer | Maximum possible clients ( users ) who can connect -UP | integer | Hub uptime (seconds) -NI | string | Hub name (from BASE) -DE | string | Hub description (from BASE) -VE | string | Hub software version (from BASE) -___ - -The hub must continue to send the user list as for a normal user (move to -NORMAL state). The pinger may decide to go through or disconnect (eg. if it -doesn't require additional information about the users). - -===== Example ----- - -pinger- HSUP ADBASE ADPING AD.. - -hub- ISUP ADBASE ADPING AD.. - -hub- ISID .. - -hub- IINF NIhubname DEcurrent\stopic VE.. HHmyhub.no-ip.org:555 WShttp://myhub.no-ip.org/ OWmyname UC2231 SS.. SF.. MS0 ML0 MC5000 - - (pinger may disconnect) - -.. ----- - -==== Hub - Hublist communication - -The same extension goes for hub- hublist communication. This way, the hub -takes the role of the client and the hublist of the server. - -The hublist may send INF about itself with NI field which would become hublist -name and WS hublist web address. - -===== Example ----- - -hub- HSUP ADBASE ADPING AD.. - -hublist- ISUP ADBASE ADPING AD.. - -hublist- IINF NIhublist_name WShublist_address - -hub- HINF NIhubname DEcurrent\stopic VE.. HHmyhub.no-ip.org:555 WShttp://myhub.no-ip.org/ OWmyname UC2231 SS.. SF.. MS0 ML0 MC5000 - -( disconnect ) ----- - -// vim: set syntax=asciidoc: += ADC Extensions +Jacek Sieka <arn...@gm...> +1.0, May 2008 +Fredrik Ullner <ul...@gm...> +1.0.1 August 2009 + +== Abstract +These are the official extensions to ADC. This document is based on the +information contained in the ADC wiki - spefications from there are moved here +when they are mature and stable enough. + +== Version history +The latest draft of the next version of this document as well as intermediate +and older versions can be downloaded from +$URL$. + +This version correspods to $Revision$. + +=== Version 1.0 +* Initial release created from original ADC 1.0 text +* Added PING extension + +=== Version 1.0.1 +* Added TS as additional MSG parameter + +== Extensions + +=== TIGR - Tiger tree hash support + +==== General + +This extension adds Tiger tree hash support to the base protocol. It is +intended to be used both for identifying files and for purposes such as CID +generation and password negotiation + +==== TIGR for shared files +All files shared by TIGR supporting clients must have been hashed using Merkle +Hash trees, as defined by +http://www.open-content.net/specs/draft-jchapweske-thex-02.html. The Tiger +algorithm, as specified by http://www.cs.technion.ac.il/~biham/Reports/Tiger/, +functions as the hash algorithm. A base segment size of 1024 bytes must be +used when generating the tree, but clients may then discard parts of the tree +as long as at least 7 levels are kept or a block granularity of 64 KiB is +achieved. + +Generally, the root of the tree (TTH) serves to identify a file uniquely. +Searches use it and it must be present in the file list. Further, the root of +the file list must also be available and discoverable via GFI. A client may +also request the rest of the tree using the normal client-client transfer +procedure. The root must be encoded using base32 encoding when converted to +text. + +In the file list, each File element carries an additional attribute "TTH" +containing the base32-encoded value of the Tiger tree root. + +In the GET/GFI type, the full tree may be accessed using the "tthl" type. + +"tthl" transfers send the largest set of leaves available) as a binary stream +of leaf data, right-to-left, with no spacing in between them. <start_pos> +must be set to 0 and <bytes> to -1 when requesting the data. <bytes> must +contain the total binary size of the leaf stream in SND; by dividing this +length by the individual hash length, the number of leaves, and thus the leaf +level, can be deducted. The received leaves can then be used to reconstruct +the entire tree, and the resulting root must match the root of the file (this +verifies the integrity of the tree itself). Identifier must be a TTH root +value from the "TTH/" root. + +In the GET/GFI namespace, files are identified by +"TTH/<base32-encoded tree root>". + +In SCH and GFI, the following attributes are added: + +[separator="|"] +``_ +TR | Tiger tree Hash root, encoded with base32. +TD | Tree depth, index of the highest level of tree data available, root-only = 0, first level (2 leaves) = 1, second level = 2, etc... +___ + +=== BZIP – File list compressed with bzip2 +This extension adds a special file "files.xml.bz2" in the unnamed root of the +share which contains "files.xml" compressed with bzip2 1.0.3+ (www.bzip.org). + +=== ZLIB - Compressed communication +There are two variants of zlib support, FULL and GET, and only one should be +used on a each communications channel set up. + +==== ZLIB-FULL +If, during SUP negotiation, a peer sends "ZLIF" in its support string, it must +accept two additional commands, ZON and ZOF. Upon reception of ZON the peer +must start decompressing the incoming stream of data with zlib before +interpreting it, and stop doing so after ZOF is received (in the compressed +stream). The compressing end must partially flush the zlib buffer after each +chunk of data to allow for decompression by the peer. + +==== ZLIB-GET +The alternative is to send "ZLIG" to indicate that zlib is supported for +binary transfers using the GET command, but not otherwise. A flag "ZL1" is +added to the to the SND command to indicate that the data will come +compressed, and the client receiving requests it by adding the same flag to +GET (the sending client may ignore a request for a compressed transfer, but +may also use it even when not requested by the receiver). The <bytes> +parameter of the GET and SND commands is to be interpreted as the number of +uncompressed bytes to be transferred. + +=== PING - Pinger extension +Added 2008-03-14, based on ADC 1.0 + +This extension can be supported by both clients and hubs, and when present, if hub +supports it, it must send additional information to the client ( otherwise normal +base client). + +It's purpose is to send to hublist pingers additional information about the hub + that otherwise it would be impossible to get as a normal user (eg. minimum share, + maximum user count, etc). + +==== INF + +Contexts : F + +When the client supporting the PING extension connects, the hub must send its +normal INF along with the following added fields ( none mandatory, if not present, +it means hub has no restrictions in that matter, or non existent): + +[separator="|"] +```_ +Code | Type | Description +___ +HH | string | Hub Host address ( DNS or IP ) +WS | url | Hub Website +NE | string | Hub Network +OW | string | Hub Owner name +UC | integer | Current User count +SS | integer | Total share size +SF | integer | Total files shared +MS | integer | Minimum share required to enter hub ( bytes ) +XS | integer | Maximum share for entering hub ( bytes ) +ML | integer | Minimum slots required to enter hub +XL | integer | Maximum slots for entering hub +MU | integer | Minimum hubs connected where clients can be users +MR | integer | Minimum hubs connected where client can be registered +MO | integer | Minimum hubs connected where client can be operators +XU | integer | Maximum hubs connected where clients can be users +XR | integer | Maximum hubs connected where client can be registered +XO | integer | Maximum hubs connected where client can be operators +MC | integer | Maximum possible clients ( users ) who can connect +UP | integer | Hub uptime (seconds) +NI | string | Hub name (from BASE) +DE | string | Hub description (from BASE) +VE | string | Hub software version (from BASE) +___ + +The hub must continue to send the user list as for a normal user (move to +NORMAL state). The pinger may decide to go through or disconnect (eg. if it +doesn't require additional information about the users). + +===== Example +---- + -pinger- HSUP ADBASE ADPING AD.. + -hub- ISUP ADBASE ADPING AD.. + -hub- ISID .. + -hub- IINF NIhubname DEcurrent\stopic VE.. HHmyhub.no-ip.org:555 WShttp://myhub.no-ip.org/ OWmyname UC2231 SS.. SF.. MS0 ML0 MC5000 + - (pinger may disconnect) + -.. +---- + +==== Hub - Hublist communication + +The same extension goes for hub- hublist communication. This way, the hub +takes the role of the client and the hublist of the server. + +The hublist may send INF about itself with NI field which would become hublist +name and WS hublist web address. + +===== Example +---- + -hub- HSUP ADBASE ADPING AD.. + -hublist- ISUP ADBASE ADPING AD.. + -hublist- IINF NIhublist_name WShublist_address + -hub- HINF NIhubname DEcurrent\stopic VE.. HHmyhub.no-ip.org:555 WShttp://myhub.no-ip.org/ OWmyname UC2231 SS.. SF.. MS0 ML0 MC5000 + -( disconnect ) +---- + +=== TS - Timestamp in MSG +Timestamp of the moment when the message was sent, expressed in seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). + +// vim: set syntax=asciidoc: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |