From: <ul...@us...> - 2010-09-27 19:26:14
|
Revision: 33 http://adc.svn.sourceforge.net/adc/?rev=33&view=rev Author: ullner Date: 2010-09-27 19:26:08 +0000 (Mon, 27 Sep 2010) Log Message: ----------- Added "template file" for BASE... Added Paths: ----------- trunk/Templates/ trunk/Templates/ADCMessages.xml Added: trunk/Templates/ADCMessages.xml =================================================================== --- trunk/Templates/ADCMessages.xml (rev 0) +++ trunk/Templates/ADCMessages.xml 2010-09-27 19:26:08 UTC (rev 33) @@ -0,0 +1,214 @@ +<adc> + <commands> + <command name="StatusCodeCommand" id="STA" description="Status code."> + <positionalParameters> + <positionalParameter name="Severity" id="Code" type="enum" description=""> + <enum name="Success" value="0" description="Success" /> + <enum name="Recoverable" value="1" description="Recoverable (error but no disconnect) " /> + <enum name="Fatal" value="2" description="Fatal (disconnect)" /> + </positionalParameter> + <positionalParameter name="ErrorCode" id="Code" type="enum" description=""> + <enum name="Generic" value="0" description="Generic, show description" /> + <enum name="GenericHubError" value="10" description="Generic hub error" /> + <enum name="HubFull" value="11" description="" /> + <enum name="HubDisabled" value="12" description="" /> + <enum name="GenericLoginAccessError" value="20" description="" /> + <enum name="NickInvalid" value="21" description="" /> + <enum name="NickTaken" value="22" description="" /> + <enum name="InvalidPassword" value="23" description="" /> + <enum name="CIDTaken" value="24" description=" " /> + <enum name="AccessDenied" value="25" description="" /> + <enum name="RegisteredUsersOnly" value="26" description="" /> + <enum name="InvalidPID" value="27" description="" /> + <enum name="GenericDisconnect" value="30" description="" /> + <enum name="PermanentlyBanned" value="31" description="" /> + <enum name="TemporarilyBanned" value="32" description="" /> + <enum name="ProtocolError" value="40" description="" /> + <enum name="TransferProtocolUnsupported" value="41" description="" /> + <enum name="DirectConnectionFailed" value="42" description="" /> + <enum name="RequireFieldMessing" value="43" description="" /> + <enum name="InvalidState" value="44" description="" /> + <enum name="RequiredFeatureMissing" value="45" description="" /> + <enum name="InvalidIPSupplied" value="46" description="" /> + <enum name="NoHashSupportClientHub" value="47" description="" /> + <enum name="InvalidFeature" value="48" description="" extension="1" /> + <enum name="ClientClientError" value="50" description="" /> + <enum name="FileNotAvailable" value="51" description="" /> + <enum name="FilePartNotAvailable" value="52" description="" /> + <enum name="SlotsFull" value="53" description="" /> + <enum name="NoHashSupportClientClient" value="54" description="" /> + </positionalParameter> + <positionalParameter name="Description" id="Description" type="string" description="Description"/> + </positionalParameters> + <namedParameters> + <namedParameter name="FourCharacterCode" id="FC" type="stringlist" description="" /> + <namedParameter name="TimeLeft" id="TL" type="int" description="" /> + <namedParameter name="Token" id="TO" type="string" description="" /> + <namedParameter name="Protocol" id="PR" type="string" description="" /> + <namedParameter name="MissingField" id="FM" type="string" description="" /> + <namedParameter name="InvalidField" id="FB" type="string" description="" /> + <namedParameter name="IPv4Address" id="I4" type="IPAddress" description="" /> + <namedParameter name="IPv6Address" id="I6" type="IPAddress" description="" /> + <namedParameter name="ReferenceAddress" id="RF" type="string" description="" extension="1" /> + </namedParameters> + </command> + <command name="FeatureSupportCommand" id="SUP" description="Feature support"> + <positionalParameters /> + <namedParameters> + <namedParameter name="AddFeatureList" id="AD" type="stringitemlist" description="" /> + <namedParameter name="RemoveFeatureList" id="RM" type="stringitemlist" description="" /> + </namedParameters> + </command> + <command name="SIDCommand" id="SID" description="Session ID"> + <positionalParameters> + <positionalParameter name="SessionId" id="SID" type="string" description="SID of user"/> + </positionalParameters> + </command> + <command name="InformationCommand" id="INF" description="Information message"> + <positionalParameters /> + <namedParameters> + <namedParameter name="ClientID" id="ID" type="string" description="The CID of the client" /> + <namedParameter name="PrivateID" id="PD" type="string" description="The PID of the client" /> + <namedParameter name="IPv4Address" id="I4" type="IPAddress" description="IPv4 address without port." /> + <namedParameter name="IPv6Address" id="I6" type="IPAddress" description="IPv6 address without port." /> + <namedParameter name="UDPIPv4Port" id="U4" type="int" description="" /> + <namedParameter name="UDPIPv6Port" id="U6" type="int" description="" /> + <namedParameter name="ShareSize" id="SS" type="int" description="Share size in bytes." /> + <namedParameter name="SharedFiles" id="SF" type="int" description="" /> + <namedParameter name="ClientVersion" id="VE" type="string" description="" /> + <namedParameter name="MaxUploadSpeed" id="US" type="int" description="" /> + <namedParameter name="MaxDownloadSpeed" id="DS" type="int" description="" /> + <namedParameter name="MaxSlots" id="SL" type="int" description="" /> + <namedParameter name="AutoSlotAllocatorSpeed" id="AS" type="int" description="" /> + <namedParameter name="MinAutoSlotAllocator" id="AM" type="int" description="" /> + <namedParameter name="EmailAddress" id="EM" type="string" description="" /> + <namedParameter name="NickName" id="NI" type="string" description="" /> + <namedParameter name="Description" id="DE" type="string" description="" /> + <namedParameter name="HubsNormal" id="HN" type="int" description="" /> + <namedParameter name="HubsRegistered" id="HR" type="int" description="" /> + <namedParameter name="HubsOperator" id="HO" type="int" description="" /> + <namedParameter name="Token" id="TO" type="string" description="" /> + <namedParameter name="ClientType" id="CT" type="combined" description="Client (user) type"> + <combined name="Bot" value="1" description="BOT" /> + <combined name="RegisteredUser" value="2" description="Registered user" /> + <combined name="Operator" value="4" description="Operator" /> + <combined name="SuperUser" value="8" description="Super user" /> + <combined name="HubOwner" value="16" description="Hub owner" /> + <combined name="Hub" value="32" description="Hub" /> + <combined name="Hidden" value="64" description="Hidden" extension="1" /> + </namedParameter> + <namedParameter name="Away" id="AW" type="enum" description=""> + <enum name="Away" value="1" description="" /> + <enum name="ExtendedAway" value="2" description="" /> + </namedParameter> + </namedParameters> + </command> + <command name="MessageCommand" id="MSG" description="Normal message"> + <positionalParameters> + <positionalParameter id="Text" type="string" description="Message"/> + </positionalParameters> + <namedParameters> + <namedParameter name="PrivateMessage" id="PM" type="string" description="" /> + <namedParameter name="ThirdPerson" id="ME" type="enum" description=""> + <enum value="1" description="message should be displayed as /me in IRC ("*nick text")" /> + </namedParameter> + </namedParameters> + </command> + <command name="SearchCommand" id="SCH" description="Search"> + <positionalParameters /> + <namedParameters> + <namedParameter name="IncludedSearchTerms" id="AN" type="stringitemlist" description="Included search terms." /> + <namedParameter name="ExcludedSearchTerms" id="NO" type="stringitemlist" description="Excluded search terms." /> + <namedParameter name="Extensions" id="EX" type="stringitemlist" description="Extensions." /> + <namedParameter name="LessThanEqualBytes" id="LE" type="int" description="Smaller (less) than or equal size in bytes." /> + <namedParameter name="GreaterThanEqualBytes" id="GE" type="int" description="Larger (greater) than or equal size in bytes." /> + <namedParameter name="ExactSize" id="EQ" type="int" description="Exact size in bytes." /> + <namedParameter name="Token" id="TO" type="string" description="Token." /> + </namedParameters> + </command> + <command name="SearchResultCommand" id="RES" description="Search result"> + <positionalParameters /> + <namedParameters> + <namedParameter name="FileName" id="FN" type="string" description="Full filename including path in share." /> + <namedParameter name="Size" id="SI" type="int" description="Size, in bytes." /> + <namedParameter name="SlotsAvailable" id="SL" type="int" description="Slots currently available." /> + <namedParameter name="Token" id="TO" type="string" description="Token." /> + </namedParameters> + </command> + <command name="ConnectToMeCommand" id="CTM" description="Connect to me"> + <positionalParameters> + <positionalParameter name="Protocol" id="Protocol" type="string" description="Protocol version. E.g., "ADC/1.0""/> + <positionalParameter name="Port" id="Port" type="int" description="Port"/> + <positionalParameter name="Token" id="Token" type="string" description="Token." /> + </positionalParameters> + <namedParameters /> + </command> + <command name="ReverseConnectToMeCommand" id="RCM" description="Reverse CTM. Used by passive clients to request a connection token from an active client."> + <positionalParameters> + <positionalParameter name="Protocol" id="Protocol" type="string" description="Protocol version. E.g., "ADC/1.0""/> + <positionalParameter name="Token" id="Token" type="string" description="Token." /> + </positionalParameters> + <namedParameters /> + </command> + <command name="GetPasswordCommand" id="GPA" description="Get password."> + <positionalParameters> + <positionalParameter name="Data" id="Data" type="string" description="Parameter is at least 24 random bytes (base32 encoded)."/> + </positionalParameters> + <namedParameters /> + </command> + <command name="ProvidePasswordCommand" id="PAS" description="Provide password."> + <positionalParameters> + <positionalParameter name="Password" id="Password" type="string" description=" The password (utf-8 encoded bytes), followed by the random data (binary), passed through the session hash algorithm then converted to base32."/> + </positionalParameters> + <namedParameters /> + </command> + <command name="QuitCommand" id="QUI" description="Quit user."> + <positionalParameters> + <positionalParameter name="SessionId" id="SID" type="string" description="Session Id of user to disconnect"/> + </positionalParameters> + <namedParameters> + <namedParameter name="SessionIdInitiator" id="ID" type="string" description="SID of the initiator of the disconnect." /> + <namedParameter name="TimeLeft" id="TL" type="int" description="Time left until reconnect is allowed, in seconds. -1 = forever" /> + <namedParameter name="Message" id="MS" type="string" description="Message" /> + <namedParameter name="RedirectServerURI" id="RD" type="string" description="Redirect server URI." /> + <namedParameter name="DisconnectClient" id="DI" type="enum" description="Any client that has this flag in the QUI message should have its transfers terminated by other clients connected to it, as it is unwanted in the system"> + <enum name="DisconnectAll" value="1" description="" /> + </namedParameter> + </namedParameters> + </command> + <command name="GetFileCommand" id="GET" description="Get file."> + <positionalParameters> + <positionalParameter name="Type" id="Type" type="enumstring" description=""> + <enum name="File" value="file" description="" /> + <enum name="List" value="list" description="" /> + </positionalParameter> + <positionalParameter name="Identifier" id="Identifier" type="string" description="" /> + <positionalParameter name="StartPosition" id="StartPosition" type="int" description="" /> + <positionalParameter name="Bytes" id="Bytes" type="int" description="" /> + </positionalParameters> + <namedParameters /> + </command> + <command name="GetFileInformationCommand" id="GFI" description="Get file information."> + <positionalParameters> + <positionalParameter name="Type" id="Type" type="enumstring" description=""> + <enum name="File" value="file" description="" /> + <enum name="List" value="list" description="" /> + </positionalParameter> + <positionalParameter name="Identifier" id="Identifier" type="string" description="" /> + </positionalParameters> + <namedParameters /> + </command> + <command name="SendFileCommand" id="SND" description="Send file."> + <positionalParameters> + <positionalParameter name="Type" id="Type" type="enumstring" description=""> + <enum name="File" value="file" description="" /> + <enum name="List" value="list" description="" /> + </positionalParameter> + <positionalParameter name="Identifier" id="Identifier" type="string" description="" /> + <positionalParameter name="StartPosition" id="StartPosition" type="int" description="" /> + <positionalParameter name="Bytes" id="Bytes" type="int" description="" /> + </positionalParameters> + <namedParameters /> + </command> + </commands> +</adc> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2010-10-11 18:42:01
|
Revision: 39 http://adc.svn.sourceforge.net/adc/?rev=39&view=rev Author: ullner Date: 2010-10-11 18:41:53 +0000 (Mon, 11 Oct 2010) Log Message: ----------- Added Paths: ----------- trunk/Source/ trunk/Source/Helper.cs Added: trunk/Source/Helper.cs =================================================================== --- trunk/Source/Helper.cs (rev 0) +++ trunk/Source/Helper.cs 2010-10-11 18:41:53 UTC (rev 39) @@ -0,0 +1,60 @@ +/* +Copyright (c) 2010, Fredrik Ullner +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the <organization> nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace ADC +{ + public class Helper + { + /// <summary> + /// Escapes an ADC string. + /// </summary> + /// <param name="strInitial">The input string value.</param> + /// <returns>The escaped string value.</returns> + public static string Escape(string strInput) + { + string strOutput = strInput; + + // Escape backslash + strOutput = strOutput.Replace("\\", "\\\\"); + + // Escape tab + strOutput = strOutput.Replace("\t", "\\t"); + + // Escape space + Regex regex = new Regex(@"[ ]{1,}", RegexOptions.None); + strOutput = regex.Replace(strOutput, @"\s"); + + return strOutput; + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2011-03-25 19:37:47
|
Revision: 79 http://adc.svn.sourceforge.net/adc/?rev=79&view=rev Author: ullner Date: 2011-03-25 19:37:40 +0000 (Fri, 25 Mar 2011) Log Message: ----------- Adding schema of files.xml Added Paths: ----------- trunk/Schema/ trunk/Schema/files.xml.xsd Added: trunk/Schema/files.xml.xsd =================================================================== --- trunk/Schema/files.xml.xsd (rev 0) +++ trunk/Schema/files.xml.xsd 2011-03-25 19:37:40 UTC (rev 79) @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xs:simpleType name="base32Binary"> + <xs:restriction base="xs:string"> + <xs:pattern value="[A-Za-z2-7]+"></xs:pattern> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="zeroOne"> + <xs:restriction base="xs:int"> + <xs:enumeration value="0"></xs:enumeration> + <xs:enumeration value="1"></xs:enumeration> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="ContainerType"> + <xs:sequence minOccurs="0" maxOccurs="unbounded"> + <xs:choice> + <xs:element ref="Directory"></xs:element> + <xs:element ref="File"></xs:element> + <xs:any processContents="lax"></xs:any> + </xs:choice> + </xs:sequence> + </xs:complexType> + + <xs:attribute name="Base" type="xs:string"></xs:attribute> + <xs:attribute name="CID" type="base32Binary"></xs:attribute> + <xs:attribute name="Generator" type="xs:string"></xs:attribute> + <xs:attribute name="Incomplete" type="zeroOne" default="0"></xs:attribute> + <xs:attribute name="Name" type="xs:string"></xs:attribute> + <xs:attribute name="Size" type="xs:int"></xs:attribute> + <xs:attribute name="Version" type="xs:int"></xs:attribute> + + <xs:element name="FileListing"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="ContainerType"> + <xs:attribute ref="CID" use="required"></xs:attribute> + <xs:attribute ref="Version" use="required"></xs:attribute> + <xs:attribute ref="Generator" use="optional"></xs:attribute> + <xs:attribute ref="Base" use="required"></xs:attribute> + <xs:anyAttribute processContents="lax"></xs:anyAttribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + + <xs:element name="Directory"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="ContainerType"> + <xs:attribute ref="Name" use="required"></xs:attribute> + <xs:attribute ref="Incomplete" use="optional"></xs:attribute> + <xs:anyAttribute processContents="lax"></xs:anyAttribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + + <xs:element name="File"> + <xs:complexType> + <xs:sequence> + <xs:any minOccurs="0" maxOccurs="unbounded"></xs:any> + </xs:sequence> + <xs:attribute ref="Name" use="required"></xs:attribute> + <xs:attribute ref="Size" use="required"></xs:attribute> + <xs:anyAttribute processContents="lax"></xs:anyAttribute> + </xs:complexType> + </xs:element> + +</xs:schema> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2011-03-25 19:38:33
|
Revision: 80 http://adc.svn.sourceforge.net/adc/?rev=80&view=rev Author: ullner Date: 2011-03-25 19:38:27 +0000 (Fri, 25 Mar 2011) Log Message: ----------- Added Paths: ----------- trunk/Schemas/ Removed Paths: ------------- trunk/Schema/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <co...@us...> - 2011-05-01 16:48:29
|
Revision: 81 http://adc.svn.sourceforge.net/adc/?rev=81&view=rev Author: cologic Date: 2011-05-01 16:48:20 +0000 (Sun, 01 May 2011) Log Message: ----------- filelist compression data - times in seconds and sizes in bytes; benchmarked on Athlon XP 3000+ with 1GiB RAM with each recorded time being average of three passes/trials Added Paths: ----------- trunk/Data/ trunk/Data/filelist_compression_stats.csv Added: trunk/Data/filelist_compression_stats.csv =================================================================== --- trunk/Data/filelist_compression_stats.csv (rev 0) +++ trunk/Data/filelist_compression_stats.csv 2011-05-01 16:48:20 UTC (rev 81) @@ -0,0 +1,442 @@ +filelist_name,raw_size,raw_time,status_quo_size,status_quo_time,zlib_1_size,zlib_1_time,zlib_2_size,zlib_2_time,zlib_3_size,zlib_3_time,zlib_4_size,zlib_4_time,zlib_5_size,zlib_5_time,zlib_6_size,zlib_6_time,zlib_7_size,zlib_7_time,zlib_8_size,zlib_8_time,zlib_9_size,zlib_9_time,bzip2_1_size,bzip2_1_time,bzip2_2_size,bzip2_2_time,bzip2_3_size,bzip2_3_time,bzip2_4_size,bzip2_4_time,bzip2_5_size,bzip2_5_time,bzip2_6_size,bzip2_6_time,bzip2_7_size,bzip2_7_time,bzip2_8_size,bzip2_8_time,bzip2_9_size,bzip2_9_time,xmill_zlib_1_size,xmill_zlib_1_time,xmill_zlib_2_size,xmill_zlib_2_time,xmill_zlib_3_size,xmill_zlib_3_time,xmill_zlib_4_size,xmill_zlib_4_time,xmill_zlib_5_size,xmill_zlib_5_time,xmill_zlib_6_size,xmill_zlib_6_time,xmill_zlib_7_size,xmill_zlib_7_time,xmill_zlib_8_size,xmill_zlib_8_time,xmill_zlib_9_size,xmill_zlib_9_time,xmill_bzip2_size,xmill_bzip2_time,xz_1_size,xz_1_time,xz_2_size,xz_2_time,xz_3_size,xz_3_time,xz_4_size,xz_4_time,xz_5_size,xz_5_time,xz_6_size,xz_6_time,xz_7_size,xz_7_time,xz_8_size,xz_8_time,xz_e_1_size,xz_e_1_time,xz_e_2_size,xz_e_2_time,xz_e_3_size,xz_e_3_time,xz_e_4_size,xz_e_4_time,xz_e_5_size,xz_e_5_time,xz_e_6_size,xz_e_6_time,xz_e_7_size,xz_e_7_time,xz_e_8_size,xz_e_8_time,freearc_1x_size,freearc_1x_time,freearc_2x_size,freearc_2x_time,freearc_3x_size,freearc_3x_time,freearc_4x_size,freearc_4x_time,freearc_5x_size,freearc_5x_time,freearc_6x_size,freearc_6x_time,freearc_7x_size,freearc_7x_time,freearc_1_size,freearc_1_time,freearc_2_size,freearc_2_time,freearc_3_size,freearc_3_time,freearc_4_size,freearc_4_time,freearc_5_size,freearc_5_time,freearc_6_size,freearc_6_time,freearc_7_size,freearc_7_time,freearc_1p_size,freearc_1p_time,freearc_2p_size,freearc_2p_time,freearc_3p_size,freearc_3p_time,freearc_4p_size,freearc_4p_time,freearc_5p_size,freearc_5p_time,freearc_6p_size,freearc_6p_time,freearc_7p_size,freearc_7p_time +000_xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,774846,2.94049580892e-06,149298,0.320546627045,202379,0.0219677289327,198698,0.0233430067698,197034,0.0276079972585,183960,0.0381546020508,180485,0.0467802683512,179337,0.054438273112,175602,0.0723567008972,174373,0.209499359131,174365,0.216056982676,148077,0.197772264481,147175,0.216589689255,144131,0.239694356918,148085,0.250199000041,148613,0.252986987432,147395,0.275221347809,148919,0.297709306081,149298,0.319360335668,149298,0.319961309433,167484,0.0870903333028,165296,0.0853882630666,163304,0.0922070344289,156737,0.0994696617126,154247,0.109131018321,153828,0.11887105306,153728,0.125381946564,153563,0.155710935593,153531,0.181461016337,145330,0.315423647563,164128,0.137547969818,161092,0.186474005381,138100,0.75394765536,138008,0.760622262955,138008,0.769928057988,135304,0.931524038315,135304,0.960902690887,135304,1.01619664828,138476,0.908256371816,134412,1.03365365664,134428,1.05384532611,134428,1.0593966643,134428,1.06962831815,134428,1.08751765887,134428,1.12271602949,134428,1.17362236977,194611,0.243354320526,179980,0.161780277888,157239,0.220878998439,137670,0.60712369283,135565,0.947413682938,135565,0.948897043864,135565,0.947313308716,194611,0.111738681793,179984,0.160984992981,157158,0.222250302633,137618,0.610136985779,135573,0.92624036471,135573,0.925248702367,135573,0.927621603012,194546,0.109342654546,179984,0.160152673721,157158,0.220906734467,137618,0.605671326319,135573,0.925549666087,135573,0.925876696905,135573,0.924132664998 +001_[xxx]xxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,2047857,3.01996866862e-06,604077,0.900238355001,879790,0.0918837388357,867822,0.0958460172017,857787,0.103806336721,830815,0.13935303688,817121,0.153830687205,813236,0.176768700282,805409,0.212560653687,803619,0.29495493571,803619,0.296939611435,715628,0.531868298848,685037,0.582950671514,667826,0.637436628342,664226,0.687947670619,605104,0.766395012538,625149,0.787899335225,639230,0.833364009857,631975,0.848079999288,604077,0.892976681391,731469,0.233284314473,723930,0.238076368968,717999,0.248043378194,694471,0.286958058675,688452,0.314381996791,685834,0.335695664088,685337,0.35099196434,684192,0.429426987966,684067,0.435384988785,573945,2.71811334292,797036,0.5328810215,628376,0.688145001729,530460,1.87827761968,529824,1.89598099391,529824,1.91724832853,523476,2.21901901563,523476,2.26000666618,523476,2.33668804169,709088,2.09964068731,540980,2.88008300463,518680,3.0128780206,518224,3.06024694443,518224,3.09185703595,518224,3.12596599261,518224,3.17007931074,518224,3.25306598345,739003,0.167335351308,620690,0.349125941594,578105,0.653886000315,541301,1.37325994174,520928,2.68483130137,520928,2.68359239896,520928,2.68100237846,739003,0.162065664927,620481,0.361099322637,577631,0.662985642751,540881,1.38493998845,520625,2.65213004748,520625,2.65479969978,520625,2.65732733409,735950,0.17781329155,620481,0.361686309179,577631,0.662488698959,540881,1.383740743,520625,2.65893332163,520625,2.65234732628,520625,2.65064795812 +002_[xxx]xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,347724,3.33786010742e-06,106488,0.115678707759,136984,0.0136956373851,135729,0.0142270723979,134768,0.015645980835,129606,0.0209777355194,127442,0.0233213106791,127169,0.0274773438772,125490,0.0324529806773,124991,0.0464516480764,124989,0.0467813014984,109844,0.093868970871,107621,0.0991679827372,107665,0.10950533549,106488,0.115153710047,106488,0.115700006485,106488,0.115068991979,106488,0.115150690079,106488,0.115323066711,106488,0.1154414018,120235,0.0406490166982,119375,0.0390246709188,118791,0.0422790050507,114738,0.0466143290202,113515,0.0513016382853,113278,0.0544450283051,113127,0.059911330541,113019,0.0710559686025,113013,0.0723086198171,104889,0.136927684148,124876,0.0836836496989,125840,0.11304696401,111388,0.271945635478,111388,0.273438294729,111388,0.282167673111,109992,0.374687671661,109992,0.405155022939,109992,0.458964347839,110308,0.3664346536,109616,0.399827003479,109616,0.399704297384,109616,0.401116371155,109616,0.409697294235,109616,0.427466630936,109616,0.456047614415,109616,0.511140028636,132326,0.109560330709,129282,0.139511028926,118201,0.169546683629,112119,0.274736960729,110002,0.433820327123,110002,0.432137648265,110002,0.433096647263,132326,0.103939294815,129320,0.135115305583,118228,0.168946027756,112245,0.275566339493,109994,0.430828332901,109994,0.430592616399,109994,0.430630366007,132369,0.0969839890798,129320,0.133703390757,118228,0.167534987132,112245,0.27205602328,109994,0.427640040716,109994,0.428720315297,109994,0.429585695267 +003_[xxx]xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,886285,3.33786010742e-06,307847,0.383380651474,409143,0.0416696866353,403667,0.0437072912852,398560,0.0472643375397,388296,0.0623416105906,382700,0.0697037378947,380989,0.0800369580587,377215,0.0973776976267,376462,0.138714631399,376452,0.139281352361,324587,0.234310388565,318645,0.247308731079,315656,0.270627339681,313769,0.28594271342,311804,0.302057345708,311917,0.31228129069,311676,0.324297984441,309891,0.348875284195,307847,0.380960702896,351913,0.109196662903,349091,0.112350702286,346355,0.116587956746,337240,0.132984638214,334953,0.145147323608,333673,0.157411019007,333404,0.165707031886,332757,0.223032395045,332721,0.226876656214,305921,0.349225997925,376468,0.240969657898,376528,0.361275275548,333432,0.982444047928,333432,0.971440315247,333432,0.986211299896,332576,1.10052831968,332576,1.13488403956,332576,1.18996898333,336164,0.868222395579,332136,1.06845100721,331800,1.07887196541,331800,1.07191197077,331800,1.08682632446,331800,1.11570668221,331800,1.14910968145,331800,1.21239598592,393492,0.132972399394,381340,0.240462303162,356597,0.364770968755,337619,0.75831302007,332740,1.06605601311,332740,1.06608899434,332740,1.06475901604,393492,0.127639293671,381375,0.240695953369,356626,0.369426329931,337652,0.762682358424,332722,1.06810164452,332722,1.06898832321,332722,1.06751267115,393535,0.126784642537,381375,0.239347378413,356626,0.366720358531,337652,0.760879993439,332722,1.06818970044,332722,1.06859366099,332722,1.06672064463 +004_xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,27448975,3.33786010742e-06,7259374,12.969181935,9666389,1.02036698659,9569877,1.06359100342,9494511,1.12760535876,9118465,1.59287261963,9023609,1.76870330175,8948451,2.1577026844,8868196,2.48172736168,8750112,3.34641639392,8748644,3.69760592779,7654374,8.08982268969,7473498,8.98217900594,7399156,9.7434946696,7353328,10.4460016886,7325105,11.0924946467,7306355,11.640580972,7288964,12.1608156363,7277791,12.633632342,7259374,13.1473150253,8287608,2.41910894712,8209422,2.41610272725,8131331,2.55703735352,7867656,3.04146496455,7792286,3.36363704999,7757935,3.69474800428,7743526,3.93534938494,7726792,4.99430592855,7725870,5.17064595222,7124634,20.0839823882,8881300,5.88251797358,8923196,8.95481769244,7788320,24.4068090121,7736936,27.0415040652,7679032,30.7786603769,7466892,44.4496386846,7428724,47.3054950237,7419796,48.0098853111,7748872,32.7908906142,7617432,40.3764986992,7575204,43.2709236145,7524948,46.4258653323,7467336,51.2935773532,7420772,55.6988660494,7383688,58.8089403311,7374624,59.4580790202,9200350,0.993028402328,8715010,4.06295800209,8212585,10.0993786653,7763280,21.2991683483,7392699,52.3324143092,7383522,53.3713256518,7383522,53.2629713217,9200350,0.985333601634,8714910,4.4593363603,8211984,10.4658896923,7762588,21.6714093685,7390511,52.7044419448,7381729,53.4784607093,7381729,53.4925139745,9199922,1.45122901599,8714910,4.50204165777,8211984,10.4907693068,7762588,21.7624893188,7390511,52.6268976529,7381729,53.5248483022,7381729,53.5140020053 +005_[xxx]xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,376710,3.01996866862e-06,138971,0.117473602295,176322,0.017750342687,174504,0.0184163252513,172688,0.0197726885478,168657,0.0264753500621,166764,0.0290466149648,166268,0.0327256520589,165057,0.0396163463593,164842,0.0546553134918,164838,0.0545913378398,143546,0.0954943497976,141378,0.102643648783,138480,0.111299673716,138971,0.117510636648,138971,0.117237647374,138971,0.117826382319,138971,0.117254336675,138971,0.117465019226,138971,0.117435693741,153441,0.0472739537557,152318,0.0460419654846,151494,0.0496646563212,147370,0.0569983323415,146406,0.0638800462087,145957,0.0662442843119,145872,0.0685760180155,145680,0.0808622837067,145677,0.0822277069092,137524,0.149078687032,163264,0.105828682582,162616,0.144125938416,145560,0.362999041875,145560,0.362900972366,145560,0.370952367783,145300,0.411665360133,145300,0.442767063777,145300,0.496924638748,146948,0.357553958893,144896,0.401072661082,144896,0.400351285934,144896,0.400575399399,144896,0.409540335337,144896,0.426527659098,144896,0.45875064532,144896,0.512708346049,170263,0.1113606294,167207,0.150853633881,154636,0.187633037567,146994,0.335818052292,145548,0.44565431277,145548,0.445587317149,145548,0.44525829951,170263,0.106166680654,167233,0.147186279297,154655,0.187772989273,147016,0.334966023763,145506,0.443614721298,145506,0.443003336589,145506,0.443792025248,170339,0.0990273157756,167233,0.145653327306,154655,0.18642338117,147016,0.333408991496,145506,0.441204388936,145506,0.442349672318,145506,0.441355307897 +006_[xxx]xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,487553,3.65575154622e-06,171572,0.159917990367,223780,0.0225032965342,221014,0.0235550403595,218784,0.0252850055695,213067,0.0337456067403,210471,0.0372986793518,209723,0.042756319046,207752,0.051672299703,207477,0.0715800126394,207477,0.0721820195516,179659,0.126528978348,176828,0.131415685018,174503,0.140829404195,174017,0.151304960251,171572,0.161115725835,171572,0.160152673721,171572,0.160279671351,171572,0.160930395126,171572,0.160235643387,194559,0.0588526725769,193166,0.0573933124542,192109,0.0654916763306,186723,0.0750513076782,185586,0.0804759661357,185021,0.0851890246073,184883,0.088919321696,184576,0.109359025955,184554,0.110152403514,170500,0.189848661423,206800,0.134611288706,206628,0.188362360001,183908,0.484002987544,183908,0.484085003535,183908,0.494208971659,183324,0.561786731084,183324,0.591938654582,183324,0.646452665329,185224,0.471283356349,182848,0.544848680496,182848,0.541278998057,182848,0.541122674942,182848,0.552525997162,182848,0.571571667989,182848,0.608697334925,182848,0.657542705536,215938,0.116326729457,211051,0.167108297348,196152,0.216569026311,186223,0.406772931417,183551,0.580702622732,183551,0.582006613413,183551,0.581438064575,215938,0.110205332438,211082,0.163865645727,196179,0.218308289846,186290,0.407505671183,183578,0.582318623861,183578,0.582600990931,183578,0.582133372625,215988,0.10444132487,211082,0.162370681763,196179,0.217087984085,186290,0.405249993006,183578,0.580951372782,183578,0.580929040909,183578,0.580984671911 +007_[xxx]xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,850909,3.33786010742e-06,292976,0.346653938293,369572,0.0377046267192,366424,0.0393807093302,363865,0.0426406860352,348361,0.0568253199259,344075,0.0618429978689,343179,0.0701180299123,339951,0.0822083950043,338958,0.122797330221,338951,0.125939289729,298827,0.212536334991,296666,0.232803662618,295560,0.242864608765,296286,0.264008283615,293463,0.269920984904,294368,0.28643099467,293037,0.314327955246,294194,0.338847319285,292976,0.345039049784,321646,0.0991563796997,320345,0.105941295624,319306,0.109184026718,309684,0.126139720281,307968,0.132866621017,307581,0.138194322586,307235,0.144700050354,307044,0.17039736112,307029,0.176095962524,286293,0.34261059761,346436,0.224741299947,341420,0.319488366445,300412,0.845892270406,300412,0.835621356964,300412,0.848834673564,296748,0.993229707082,296748,1.02670995394,296748,1.08386802673,305568,0.847544987996,297532,1.02365899086,296224,1.03403266271,296224,1.02325638135,296224,1.03827532132,296224,1.06096633275,296224,1.10469802221,296224,1.15126601855,352766,0.129726012548,339092,0.227358341217,321078,0.342067321142,304514,0.690313021342,296952,0.998696327209,296952,1.00147167842,296952,1.00024731954,352766,0.124401330948,339125,0.227606693904,321106,0.345981677373,304557,0.694049278895,296780,1.00331966082,296780,1.00230964025,296780,1.00239133835,352821,0.123350381851,339125,0.226397275925,321106,0.345574935277,304557,0.6911500295,296780,1.00063538551,296780,0.999700307846,296780,1.00167528788 +008_[xxx]xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,343198,3.01996866862e-06,127751,0.105745315552,166786,0.0167960325877,165002,0.0176053841909,163775,0.0192179679871,159786,0.0254153410594,158865,0.0286792914073,158480,0.0327790578206,156855,0.0407230059306,156729,0.0540683269501,156729,0.0542386372884,134114,0.0875509579976,131198,0.0919543902079,129881,0.102419376373,127751,0.10527865092,127751,0.104686021805,127751,0.105848709742,127751,0.104862689972,127751,0.105268319448,127751,0.105155944824,146459,0.0433893203735,145035,0.0424120426178,143779,0.0463539759318,139692,0.0527860323588,138692,0.0598820050557,138276,0.0649030208588,138190,0.0676000118256,138095,0.0854489803314,138086,0.0859417120616,127165,0.135273297628,154768,0.101751963298,152288,0.136054039001,136480,0.336822668711,136480,0.338624954224,136480,0.347890297572,136412,0.388644695282,136412,0.417986710866,136412,0.47012702624,139708,0.320666313171,136088,0.374691963196,136088,0.373781363169,136088,0.374780019124,136088,0.384222348531,136088,0.40233763059,136088,0.432410001755,136088,0.487000624339,160988,0.110291004181,156532,0.147376378377,146233,0.182394981384,138977,0.315741697947,136632,0.411029338837,136632,0.412599643071,136632,0.412365357081,160988,0.104672352473,156566,0.143378655116,146262,0.181193351746,138991,0.315193335215,136653,0.411096652349,136653,0.412399371465,136653,0.411264340083,161037,0.0985143184662,156566,0.142110029856,146262,0.179251670837,138991,0.313049952189,136653,0.410062392553,136653,0.409775972366,136653,0.409747362137 +009_[xxx]xxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,557198,3.01996866862e-06,189149,0.210220336914,244811,0.0249186356862,241955,0.0261283715566,239702,0.0282329718272,232830,0.0380736986796,229120,0.0416719913483,228136,0.0480190118154,226477,0.0576053460439,226167,0.0795753002167,226167,0.0799225966136,200410,0.150122006734,196427,0.161966323853,193464,0.172226985296,193238,0.181164662043,191330,0.203890959422,189149,0.213178714116,189149,0.213455994924,189149,0.213206291199,189149,0.21307905515,210369,0.0649349689484,208871,0.0665090084076,207680,0.072003364563,201268,0.0830796559652,200100,0.0885820388794,199484,0.0939033031464,199349,0.0983013312022,199025,0.117196639379,198987,0.118388732274,188626,0.218050638835,224952,0.149176677068,219604,0.208290338516,195372,0.528985023499,195372,0.528147379557,195372,0.540912707647,194772,0.607064326604,194772,0.639112710953,194772,0.69566933314,201556,0.537322362264,194084,0.636022011439,194076,0.633273363113,194076,0.631827274958,194076,0.644240299861,194076,0.664596001307,194076,0.695385297139,194076,0.751597642899,232970,0.119257926941,224085,0.182927370071,207827,0.24937136968,196991,0.464324951172,194898,0.642029364904,194898,0.643920342127,194898,0.642560005188,232970,0.114154338837,223872,0.180164337158,207632,0.247074683507,196861,0.460823694865,194839,0.613568703334,194839,0.612713654836,194839,0.611704985301,232635,0.109146674474,223872,0.178818702698,207632,0.245684305827,196861,0.4580570062,194839,0.611045678457,194839,0.612032651901,194839,0.61225271225 +010_[xxx]xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,426103,3.33786010742e-06,141109,0.140085617701,192156,0.0199309984843,189129,0.0210976600647,186487,0.0231116612752,181772,0.0303183396657,178709,0.0348370075226,177768,0.0411766370138,176030,0.0501680374146,175570,0.0670464038849,175570,0.0669887065887,149596,0.110224962234,145448,0.121217012405,144116,0.124087333679,142526,0.137094020844,141109,0.138765652974,141109,0.139693339666,141109,0.13858071963,141109,0.138993342717,141109,0.139189958572,168967,0.0508232911428,166635,0.0497612953186,164780,0.0548553466797,159988,0.0627036889394,158239,0.0716703732808,157474,0.0794143676758,157127,0.0850876172384,156802,0.107687711716,156788,0.109622955322,140841,0.161686738332,176348,0.116072654724,174896,0.163638989131,154180,0.433755318324,154180,0.434438387553,154180,0.445425987244,153796,0.505693594615,153796,0.53528936704,153796,0.59269563357,156944,0.424697001775,153652,0.491518338521,153652,0.488816976547,153652,0.491258064906,153652,0.504861275355,153652,0.523103634516,153652,0.550659020742,153652,0.610303958257,185228,0.114173650742,179029,0.156396309535,167127,0.198611338933,157650,0.373680273692,154015,0.524566650391,154015,0.524936993917,154015,0.5241903464,185228,0.109036684036,179058,0.153029282888,167160,0.199064334234,157663,0.373500347137,154069,0.52596004804,154069,0.524818261464,154069,0.524915297826,185267,0.102713664373,179058,0.152018706004,167160,0.197426319122,157663,0.372691313426,154069,0.523350636164,154069,0.522581974665,154069,0.522647062937 +011_xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,464152,3.25838724772e-06,151918,0.157057285309,206072,0.0212206840515,202826,0.0220113595327,199679,0.0239336490631,194154,0.0317169825236,190696,0.0359466870626,189687,0.0413093566895,187337,0.0498116811117,187100,0.0707077185313,187100,0.0711353619893,160010,0.119136651357,157487,0.12774236997,154368,0.138047297796,154067,0.149930000305,151918,0.157948652903,151918,0.15739496549,151918,0.158179998398,151918,0.157238006592,151918,0.158164978027,177430,0.0549709796906,175507,0.0531193415324,174104,0.061646382014,169111,0.0694800217946,167995,0.0757676760356,167208,0.0835666656494,167034,0.0875817139943,166627,0.112145026525,166618,0.114480018616,151585,0.175099372864,188128,0.125005642573,187468,0.175293604533,165932,0.472104390462,165932,0.469990332921,165932,0.483726342519,165528,0.546470721563,165528,0.577178001404,165528,0.630495627721,168444,0.46871805191,165552,0.544052680333,165552,0.542781352997,165552,0.542957305908,165552,0.55561598142,165552,0.575296719869,165552,0.605521678925,165552,0.660842021306,197519,0.114515384038,191765,0.160530726115,178598,0.206696987152,168781,0.396953662237,165706,0.579008340836,165706,0.579175313314,165706,0.579344272614,197519,0.109106302261,191798,0.157284975052,178624,0.208052953084,168803,0.398005962372,165742,0.579890330633,165742,0.580519676208,165742,0.580943346024,197557,0.103033304214,191798,0.156039317449,178624,0.206596692403,168803,0.39610004425,165742,0.580171028773,165742,0.57838066419,165742,0.578601678212 +012_[xxx]xxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,361834,3.33786010742e-06,128202,0.112853686015,171268,0.0170609951019,169417,0.0178686777751,167502,0.0192506313324,163790,0.0255043506622,161927,0.0284573237101,161453,0.0322399934133,160260,0.0396526654561,160129,0.0534596443176,160127,0.0535340309143,136154,0.0911283493042,132000,0.0986493428548,130912,0.105876366297,128202,0.112233002981,128202,0.112128019333,128202,0.112199068069,128202,0.112258672714,128202,0.111984650294,128202,0.112569650014,149166,0.0447970231374,147644,0.0436920324961,146680,0.0476373831431,142508,0.0542519887288,141476,0.0614703496297,140954,0.0649263064067,140858,0.0679256916046,140591,0.0832873185476,140575,0.0839296181997,127893,0.138667345047,158180,0.102818330129,156956,0.140914042791,140056,0.358757654826,140056,0.359344959259,140056,0.368621349335,139784,0.408281326294,139784,0.437644322713,139784,0.494033654531,142280,0.341463645299,139544,0.38759636879,139544,0.387711286545,139544,0.389230012894,139544,0.398124376933,139544,0.416098038356,139544,0.44660671552,139544,0.499514977137,165225,0.111728986104,161341,0.149616638819,149837,0.185121377309,142385,0.335449298223,140030,0.431308666865,140030,0.432657639186,140030,0.431744734446,165225,0.106058597565,161372,0.145345687866,149863,0.184810320536,142404,0.335959355036,140049,0.431728680929,140049,0.432997067769,140049,0.431774695714,165261,0.0991646448771,161372,0.144528309504,149863,0.183138688405,142404,0.33323097229,140049,0.429291327794,140049,0.430337985357,140049,0.429886341095 +013_[xxx]xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,2367248,3.33786010742e-06,762739,0.970229705175,953971,0.0995330015818,946200,0.103853305181,940114,0.112287680308,891613,0.151594003042,878137,0.163382291794,874379,0.185925960541,861607,0.224725961685,858638,0.342834313711,858634,0.34716629982,790666,0.606861988703,783356,0.655264059703,769840,0.716651678085,774232,0.769816001256,773321,0.807423988978,764683,0.865319331487,759704,0.905572970708,753943,0.976304372152,762739,0.968438307444,816208,0.27517469724,811477,0.279240687688,807689,0.286258300145,779943,0.332745949427,774658,0.348938624064,773569,0.363030672073,773229,0.373709996541,772956,0.40128493309,772869,0.412823994954,739751,1.21033294996,880800,0.571295976639,828240,0.82680829366,704676,2.3394056956,702240,2.38181869189,702244,2.42264731725,697764,2.72992499669,697752,2.75528899829,697752,2.81925932566,776304,2.56107632319,715224,3.35021328926,697820,3.52515832583,695460,3.60043271383,695444,3.62870637576,695444,3.64439630508,695444,3.67955271403,695444,3.74074665705,882826,0.182733694712,805812,0.45224738121,756284,0.83020567894,706783,1.84985566139,695917,2.92210904757,695917,2.92689967155,695917,2.92773628235,882826,0.177338997523,805817,0.467533032099,756124,0.8459760348,706865,1.86116671562,696020,2.92873064677,696020,2.93790499369,696020,2.92502268155,880854,0.196885029475,805817,0.467125654221,756124,0.844516674678,706865,1.85720364253,696020,2.93305397034,696020,2.93247532845,696020,2.93913197517 +014_[xxx][xx]xxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,326781,3.33786010742e-06,111212,0.103417952855,150049,0.0148503780365,148252,0.0157969792684,146917,0.0167676607768,143130,0.0223159790039,141634,0.0249670346578,141176,0.028602997462,139798,0.035150607427,139627,0.0477820237478,139627,0.0478786627452,119973,0.0855523745219,117199,0.0889569918315,113569,0.100436687469,111212,0.103417396545,111212,0.103776375453,111212,0.103581984838,111212,0.10347533226,111212,0.103824059168,111212,0.103361686071,121131,0.0352636973063,119954,0.0381276607513,119127,0.0411059856415,115419,0.0451350212097,114605,0.0530200004578,114290,0.0556650161743,114211,0.0583553314209,114004,0.0727223555247,113996,0.0732429822286,111099,0.125090281169,134568,0.0890456835429,124392,0.114905675252,111576,0.286869366964,111576,0.289586941401,111576,0.30029630661,111296,0.344510714213,111296,0.37437693278,111296,0.428893009822,121196,0.3246336778,111060,0.375827948252,111060,0.377190589905,111060,0.378487269084,111060,0.387852668762,111060,0.404833396276,111060,0.435703357061,111060,0.490557670593,132083,0.110198974609,129007,0.140112002691,118512,0.168809652328,112672,0.281308015188,111556,0.397974332174,111556,0.397160371145,111556,0.39673670133,132083,0.104707956314,129007,0.135298013687,118514,0.167781035105,112730,0.279334624608,111609,0.392882267634,111609,0.393016020457,111609,0.392207622528,132145,0.0966910521189,129007,0.134274323781,118514,0.16642165184,112730,0.278923988342,111609,0.390572627385,111609,0.391095638275,111609,0.391029993693 +015_[xxx]xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,2085928,3.01996866862e-06,530661,0.891000986099,715483,0.0753326416016,704822,0.0777110258738,696296,0.0845116774241,667018,0.115254958471,654697,0.127727667491,650948,0.145977338155,647849,0.167882998784,642876,0.230111996333,642873,0.233955065409,551167,0.550000667572,542047,0.6059923172,538831,0.655155738195,536604,0.702752033869,535690,0.740576346715,534394,0.765094359716,531843,0.818444728851,531104,0.844652016958,530661,0.8940076828,611538,0.222952683767,605329,0.228107690811,599428,0.236353397369,580171,0.266080379486,573237,0.288308938344,570020,0.313507636388,569316,0.33452129364,568684,0.380050341288,568585,0.397667725881,525496,0.90252105395,656576,0.437943696976,660852,0.657508691152,568940,1.93822566668,567344,1.9727760156,567344,1.99772802989,555128,2.73934896787,555128,2.77848140399,555128,2.8476263682,576508,2.16716003418,565788,2.61933334668,555772,2.82379539808,553868,2.90256071091,553868,2.93331694603,553868,2.95986763636,553868,3.01298999786,553868,3.0684996446,678623,0.165254592896,646805,0.383563995361,605985,0.661924997965,575137,1.47200862567,554571,2.67778126399,554571,2.68839836121,554571,2.68239005407,678623,0.160084009171,646683,0.39607334137,605715,0.673888683319,575000,1.48583539327,554503,2.67855970065,554503,2.67176437378,554503,2.67573062579,676048,0.175586303075,646683,0.395020325979,605715,0.672259012858,575000,1.48505703608,554503,2.67425966263,554503,2.68117666245,554503,2.67160336177 +016_[xxx]xxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,1107694,3.01996866862e-06,383763,0.442148685455,486057,0.0495393276215,480466,0.0520072778066,476206,0.0558689435323,457740,0.0746640364329,450755,0.0815083185832,448836,0.0931946436564,444552,0.112357060115,443556,0.164737304052,443555,0.166548967361,400225,0.281499306361,393874,0.29874531428,391810,0.325926701228,382769,0.356666962306,385493,0.371673027674,391583,0.383790334066,385935,0.409466028214,384060,0.422945340474,383763,0.441782315572,403181,0.131817340851,400677,0.13424595197,398717,0.137248595556,386169,0.159005006154,384037,0.170012633006,383072,0.176849683126,382825,0.182829300563,382423,0.21068294843,382382,0.216826995214,374370,0.481815656026,429756,0.278385003408,432652,0.416351318359,374508,1.10964465141,374500,1.09666307767,374500,1.11151496569,373196,1.24190330505,373196,1.27653201421,373196,1.33746059736,382440,1.10010099411,380280,1.29793667793,372736,1.33462333679,372744,1.32097665469,372744,1.34938033422,372744,1.36836004257,372744,1.39842939377,372744,1.45887001355,445946,0.139962991079,426558,0.272591352463,399458,0.44246061643,377362,0.922033945719,373309,1.24782760938,373309,1.24883596102,373309,1.24776434898,445946,0.134182691574,426323,0.274286031723,399145,0.439799308777,377019,0.916620651881,373199,1.18321832021,373199,1.1842666467,373199,1.185044686,440174,0.134839693705,426323,0.273126999537,399145,0.43821032842,377019,0.917019287745,373199,1.18320902189,373199,1.18345197042,373199,1.18050201734 +017_[xxx]xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,467905,3.01996866862e-06,156750,0.158685366313,200402,0.0202130476634,198741,0.0209216276805,197357,0.0227519671122,190773,0.0305103460948,188619,0.0332299868266,188120,0.0377196470896,185583,0.0470079580943,185347,0.0669186909993,185347,0.0671130021413,161960,0.11648607254,159261,0.125551382701,159104,0.135114272436,158936,0.143579006195,156750,0.157090981801,156750,0.157603263855,156750,0.157639662425,156750,0.157249689102,156750,0.15706094106,175055,0.0551915963491,173908,0.0534853935242,173152,0.0575606822968,167332,0.0663863023122,166140,0.0730506579081,165905,0.0753707091014,165701,0.0783569812775,165599,0.0956869920095,165597,0.0960149765015,155986,0.181017319361,183584,0.120581626892,183288,0.168167273204,162484,0.429396708806,162484,0.429520368576,162484,0.439634005229,161668,0.526517629623,161668,0.55705165863,161668,0.613641341527,163720,0.491465330124,161356,0.55633131663,161356,0.552623669306,161356,0.555428266525,161356,0.565586964289,161356,0.582648038864,161356,0.611968676249,161356,0.66978597641,192082,0.115491310755,187049,0.160487651825,172764,0.207369963328,163645,0.386228005091,161891,0.558669010798,161891,0.55937798818,161891,0.559037049611,192082,0.109691381454,187086,0.157693624496,172794,0.207765340805,163695,0.385637998581,161940,0.559709628423,161940,0.561056375504,161940,0.560397624969,192126,0.103714068731,187086,0.15639034907,172794,0.206671317418,163695,0.384655952454,161940,0.558635950089,161940,0.559295336405,161940,0.559210062027 +018_xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,1036856,3.33786010742e-06,362807,0.389003356298,447586,0.0460770130157,443959,0.04816365242,441251,0.0525629... [truncated message content] |
From: <ul...@us...> - 2012-12-27 23:23:43
|
Revision: 91 http://adc.svn.sourceforge.net/adc/?rev=91&view=rev Author: ullner Date: 2012-12-27 23:23:36 +0000 (Thu, 27 Dec 2012) Log Message: ----------- Added a rudimentary test spec Modified Paths: -------------- trunk/ADC-EXT.conf trunk/ADC.conf Added Paths: ----------- trunk/ADC-Test.conf trunk/ADC-Test.txt Removed Paths: ------------- trunk/Source/cpp/Microsoft Visual Studio/AssemblyInfo.cpp Modified: trunk/ADC-EXT.conf =================================================================== --- trunk/ADC-EXT.conf 2012-11-22 21:01:03 UTC (rev 90) +++ trunk/ADC-EXT.conf 2012-12-27 23:23:36 UTC (rev 91) @@ -1,6 +1,7 @@ [attributes] numbered toc +toclevels=4 frame="all" grid="all" Added: trunk/ADC-Test.conf =================================================================== --- trunk/ADC-Test.conf (rev 0) +++ trunk/ADC-Test.conf 2012-12-27 23:23:36 UTC (rev 91) @@ -0,0 +1,9 @@ +[attributes] +numbered +toc +toclevels=4 +frame="all" +grid="all" + +[tabledef-default] +colspec= Added: trunk/ADC-Test.txt =================================================================== --- trunk/ADC-Test.txt (rev 0) +++ trunk/ADC-Test.txt 2012-12-27 23:23:36 UTC (rev 91) @@ -0,0 +1,1101 @@ +== ADC Test specification +Fredrik Ullner <ul...@gm...> +1.0.0, December 2012 + +== Abstract +These is the official test specification for ADC. + +This document describes the different circumstances that may arise and what implementations may be aware that others are sending and how they are processing the information. + +The 'server' in this document may describe the server party in a client-hub connection as well as in a client-client connection. + +== Version history +The latest draft of the next version of this document as well as intermediate +and older versions can be downloaded from +$URL: https://adc.svn.sourceforge.net/svnroot/adc/trunk/ADC-Test.txt $. + +This version corresponds to $Revision: 90 $. + +=== Version 1.0 +Fredrik Ullner <ul...@gm...>, 2012-12-27 + +* Initial release. + +== Tests + +=== GPA + +==== Too short random data +Purpose: Validate what a client does when it receives random data in the GPA that is too short (less than 24 bytes) + +Expected: Client sends a STA indicating that the GPA is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client B sends "INF BBBB ..." | +|5 |The server sends "GPA A" (1 byte) | +|===== +Result: +|===== +| +|===== + +==== Invalid characters in random data +Purpose: Validate what a client does when it receives random data in the GPA that contain invalid characters (1 for instance) + +Expected: Client sends a STA indicating that the GPA is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client B sends "INF BBBB ..." | +|5 |The server sends "GPA AAAAAAAAAAAAAAAAAAAAAAA1" (24 bytes) | +|===== +Result: +|===== +| +|===== + +==== Valid random data +Result: +|===== +| +|===== + +==== Empty GPA +Result: +|===== +| +|===== + +=== INF + +==== ID and PD fields present and matching +Result: +|===== +| +|===== + +==== ID and PD fields present and mismatching +Result: +|===== +| +|===== + +==== Only ID field present +Result: +|===== +| +|===== + +==== Only PD field present +Result: +|===== +| +|===== + +==== Neither ID or PD fields present +Result: +|===== +| +|===== + +==== Invalid characters in ID field +Result: +|===== +| +|===== + +==== Invalid characters in PD field +Result: +|===== +| +|===== + +==== Invalid characters in NI field +Result: +|===== +| +|===== + +==== Invalid characters in DE field +Result: +|===== +| +|===== + +==== Invalid characters in I4 field +Result: +|===== +| +|===== + +==== Invalid characters in I6 field +Result: +|===== +| +|===== + +==== Invalid IP in I4 field +Result: +|===== +| +|===== + +==== Invalid IP in I6 field +Result: +|===== +| +|===== + +==== Wrong IP in I4 field +Result: +|===== +| +|===== + +==== Wrong IP in I6 field +Result: +|===== +| +|===== + +==== DNS in I4 field +Result: +|===== +| +|===== + +==== DNS in I6 field +Result: +|===== +| +|===== + +==== Zero address in I4 field +Result: +|===== +| +|===== + +==== Zero address in I6 field +Result: +|===== +| +|===== + +==== Correct address in I4 field +Result: +|===== +| +|===== + +==== Correct address in I6 field +Result: +|===== +| +|===== + +==== Too long FOURCC in SU field +Result: +|===== +| +|===== + +==== Too short FOURCC in SU field +Result: +|===== +| +|===== + +==== Invalid FOURCC in SU field +Result: +|===== +| +|===== + +==== Invalid formatting of SU field +Result: +|===== +| +|===== + +==== Empty INF +Result: +|===== +| +|===== + +==== Underflow fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW +Result: +|===== +| +|===== + +==== Negative out-of-range value for fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW +Result: +|===== +| +|===== + +==== 0 value for fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW +Result: +|===== +| +|===== + +==== Overflow fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW +Result: +|===== +| +|===== + +==== Positive out-of-range value for fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW +Result: +|===== +| +|===== + +==== Invalid characters in fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW +Result: +|===== +| +|===== + +=== MSG + +==== A basic MSG with no named parameters +Result: +|===== +| +|===== + +==== A basic MSG with ME field +Result: +|===== +| +|===== + +==== A basic MSG with PM field +Result: +|===== +| +|===== + +==== A basic MSG with ME and PM fields +Result: +|===== +| +|===== + +==== Negative out-of-bounds value in ME field +Result: +|===== +| +|===== + +==== Underflow value in ME field +Result: +|===== +| +|===== + +==== 0 Value in ME field +Result: +|===== +| +|===== + +==== Empty ME field +Result: +|===== +| +|===== + +==== Overflow value in ME field +Result: +|===== +| +|===== + +==== Postive out-of-bounds value in ME field +Result: +|===== +| +|===== + +==== Invalid characters in ME field +Result: +|===== +| +|===== + +==== Empty PM +Result: +|===== +| +|===== + +==== Too short SID value in PM field +Result: +|===== +| +|===== + +==== Too long SID value in PM field +Result: +|===== +| +|===== + +==== Invalid characters SID value in PM field +Result: +|===== +| +|===== + +==== Non-existing SID value in PM field +Result: +|===== +| +|===== + +==== MSG in PROTOCOL state +Result: +|===== +| +|===== + +==== MSG in IDENTIFY state +Result: +|===== +| +|===== + +==== MSG in VERIFY state +Result: +|===== +| +|===== + +==== MSG in NORMAL state +Result: +|===== +| +|===== + +=== PAS + +==== Invalid response based on the GPA +Purpose: Validate what a server does when it receives a response that does not match the request. + +Expected: Server sends a STA indicating that the PAS is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client B sends "INF BBBB ..." | +|5 |The server sends "GPA AAAAAAAAAAAAAAAAAAAAAAAA" (24 bytes) | +|6 |The client sends "PAS BBBBBBBBBBBBBBBBBBBBBBBB" | +|===== +Result: +|===== +| +|===== + +==== Invalid characters in response +Purpose: Validate what a server does when it receives a response that contain invalid characters (1 for instance) + +Expected: Server sends a STA indicating that the PAS is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client B sends "INF BBBB ..." | +|5 |The server sends "GPA AAAAAAAAAAAAAAAAAAAAAAAA" (24 bytes) | +|6 |The client sends "PAS BBBBBBBBBBBBBBBBBBBBBBB1" (last byte is invalid) | +|===== +Result: +|===== +| +|===== + +==== Valid response +Result: +|===== +| +|===== + +==== Empty PAS +Result: +|===== +| +|===== + +=== QUI + +==== Too short SID +Result: +|===== +| +|===== + +==== Too long SID +Result: +|===== +| +|===== + +==== Invalid characters in SID +Result: +|===== +| +|===== + +==== No client with the specified SID +Result: +|===== +| +|===== + +==== Too short ID field +Result: +|===== +| +|===== + +==== Too long ID field +Result: +|===== +| +|===== + +==== Invalid characters in ID field +Result: +|===== +| +|===== + +==== No client with the specified SID in the ID field +Result: +|===== +| +|===== + +==== Negative out-of-bounds value in TL field +Result: +|===== +| +|===== + +==== Underflow TL field +Result: +|===== +| +|===== + +==== Overflow TL field +Result: +|===== +| +|===== + +==== -1 (forever) in TL field +Result: +|===== +| +|===== + +==== 120 second value in TL field +Result: +|===== +| +|===== + +==== Invalid characters in TL field +Result: +|===== +| +|===== + +==== Empty TL field +Result: +|===== +| +|===== + +==== "example" in MS field +Result: +|===== +| +|===== + +==== Empty MS field +Result: +|===== +| +|===== + +==== Negative out-of-bounds value in DI field +Result: +|===== +| +|===== + +==== Underflow DI field +Result: +|===== +| +|===== + +==== Overflow DI field +Result: +|===== +| +|===== + +==== 0 as value in DI field +Result: +|===== +| +|===== + +==== 1 as value in DI field +Result: +|===== +| +|===== + +==== Invalid characters in DI field +Result: +|===== +| +|===== + +==== Empty DI field +Result: +|===== +| +|===== + +==== Empty RD field +Result: +|===== +| +|===== + +==== QUI in PROTOCOL state +Result: +|===== +| +|===== + +==== QUI in IDENTIFY state +Result: +|===== +| +|===== + +==== QUI in VERIFY state +Result: +|===== +| +|===== + +==== QUI in NORMAL state +Result: +|===== +| +|===== + +=== SCH + +==== Underflow fields LE, GE, EQ, TY +Result: +|===== +| +|===== + +==== Negative out-of-range value for fields LE, GE, EQ, TY +Result: +|===== +| +|===== + +==== 0 value for fields LE, GE, EQ, TY +Result: +|===== +| +|===== + +==== Overflow fields LE, GE, EQ, TY +Result: +|===== +| +|===== + +==== Positive out-of-range value for TY +Result: +|===== +| +|===== + +==== Invalid characters in fields LE, GE, EQ, TY +Result: +|===== +| +|===== + +==== Combination of LE and EQ fields with conflicting values +Result: +|===== +| +|===== + +==== Combination of GE and EQ fields with conflicting values +Result: +|===== +| +|===== + +==== Combination of LE, GE and EQ fields with conflicting values +Result: +|===== +| +|===== + +==== Valid AN field +Result: +|===== +| +|===== + +==== Valid NO field +Result: +|===== +| +|===== + +==== Only NO field +Result: +|===== +| +|===== + +==== Combination of AN and NO fields with conflicting values +Result: +|===== +| +|===== + +==== Invalid characters in field EX +Result: +|===== +| +|===== + +==== Empty AN +Result: +|===== +| +|===== + +==== Empty NO +Result: +|===== +| +|===== + +==== Empty EX +Result: +|===== +| +|===== + +==== Empty LE +Result: +|===== +| +|===== + +==== Empty GE +Result: +|===== +| +|===== + +==== Empty EQ +Result: +|===== +| +|===== + +==== Empty TO +Result: +|===== +| +|===== + +==== Empty TY +Result: +|===== +| +|===== + +=== SID + +==== Too short SID from hub +Purpose: Validate what a client does when it receives an SID that is too short (less than 4 characters) + +Expected: Client sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBB" | +|===== +Result: +|===== +| +|===== + +==== Too long SID from hub +Purpose: Validate what a client does when it receives an SID that is too long (longer than 4 characters) + +Expected: Client sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBBB" | +|===== +Result: +|===== +| +|===== + +==== Invalid characters in SID from hub +Purpose: Validate what a client does when it receives an SID that contain invalid characters (1 for instance) + +Expected: Client sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBB1" | +|===== +Result: +|===== +| +|===== + +==== Too short SID from client in INF +Purpose: Validate what a server does when it receives an SID that is too short (less than 4 characters) + +Expected: Server sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client sends "INF BBB ..." | +|===== +Result: +|===== +| +|===== + +==== Too long SID from client in INF +Purpose: Validate what a server does when it receives an SID that is too long (longer than 4 characters) + +Expected: Server sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client sends "INF BBBBB ..." | +|===== +Result: +|===== +| +|===== + +==== Invalid characters in SID from client +Purpose: Validate what a server does when it receives an SID that contain invalid characters (1 for instance) + +Expected: Server sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client sends "INF BBB1 ..." | +|===== +Result: +|===== +| +|===== + +==== Non-assigned SID from client +Purpose: Validate what a server does when it receives an SID that it didn't assign a client. + +Expected: Server sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |The client sends "INF CCCC ..." | +|===== +Result: +|===== +| +|===== + +==== Assigned SID from another client +Purpose: Validate what a server does when it receives an SID that was already assigned to another a client. + +Expected: Server sends a STA indicating that the SID is invalid and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |The server sends "SID BBBB" | +|4 |Continue with normal communication until NORMAL is reached and stabalized | +|5 |Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|6 |The server sends "SID CCCC" | +|7 |Client B sends "INF BBBB ..." | +|===== +Result: +|===== +| +|===== + +==== Valid SID assignment +Result: +|===== +| +|===== + +==== Valid SID use +Result: +|===== +| +|===== + +==== No SID from server +Result: +|===== +| +|===== + +=== SUP + +==== Invalid BASE version from server +Purpose: Validate what a client does when it receives BAS2 instead of BASE. + +Expected: Client sends a STA indicating lack of support for BASE and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ..." | +|2 |The server responds with "SUP ADBAS2 ..." | +|===== +Result: +|===== +| +|===== + +==== Invalid BASE version from client +Purpose: Validate what a server does when it receives BAS2 instead of BASE + +Expected: Server sends a STA indicating lack of support for BASE and disconnects + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBAS2 ..." | +|===== +Result: +|===== +| +|===== + +==== Lack of overlapping hash support from server +Purpose: Validate what a client does when it does not receive overlapping hashes. + +Expected: Client sends a STA indicating no overlapping hash support and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE" | +|===== +Result: +|===== +| +|===== + +==== Lack of overlapping hash support from client +Purpose: Validate what a server does when it does not receive overlapping hashes. + +Expected: Server sends a STA indicating no overlapping hash support and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE" | +|===== +Result: +|===== +| +|===== + +==== Remove BASE support in NORMAL from server +Purpose: Validate what a client does when the BASE support is removed during NORMAL state. + +Expected: Client sends a STA indicating lack of support for BASE and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |Continue with normal communication until NORMAL is reached and stabalized | +|4 |The server sends "SUP RMBASE" | +|===== +Result: +|===== +| +|===== + +==== Remove BASE support in NORMAL from client +Purpose: Validate what a server does when the BASE support is removed during NORMAL state. + +Expected: Server sends a STA indicating lack of support for BASE and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |Continue with normal communication until NORMAL is reached and stabalized | +|4 |The client sends "SUP RMBASE" | +|===== +Result: +|===== +| +|===== + +==== Remove hash support in NORMAL from server +Purpose: Validate what a client does when the hash support is removed during NORMAL state. + +Expected: Client sends a STA indicating lack of support for TIGR and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |Continue with normal communication until NORMAL is reached and stabalized | +|4 |The server sends "SUP RMTIGR" | +|===== +Result: +|===== +| +|===== + +==== Remove hash support in NORMAL from client +Purpose: Validate what a server does when the hash support is removed during NORMAL state. + +Expected: Server sends a STA indicating lack of support for TIGR and disconnects. + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR" | +|2 |The server responds with "SUP ADBASE ADTIGR" | +|3 |Continue with normal communication until NORMAL is reached and stabalized | +|4 |The client sends "SUP RMTIGR" | +|===== +Result: +|===== +| +|===== + +==== No SUP content from client +Result: +|===== +| +|===== + +==== No SUP content from server +Result: +|===== +| +|===== + +==== Valid SUP sequence from server +Result: +|===== +| +|===== + +==== Valid SUP sequence from client +Result: +|===== +| +|===== + Modified: trunk/ADC.conf =================================================================== --- trunk/ADC.conf 2012-11-22 21:01:03 UTC (rev 90) +++ trunk/ADC.conf 2012-12-27 23:23:36 UTC (rev 91) @@ -1,6 +1,7 @@ [attributes] numbered toc +toclevels=4 frame="all" grid="all" Deleted: trunk/Source/cpp/Microsoft Visual Studio/AssemblyInfo.cpp =================================================================== --- trunk/Source/cpp/Microsoft Visual Studio/AssemblyInfo.cpp 2012-11-22 21:01:03 UTC (rev 90) +++ trunk/Source/cpp/Microsoft Visual Studio/AssemblyInfo.cpp 2012-12-27 23:23:36 UTC (rev 91) @@ -1,40 +0,0 @@ -#include "stdafx.h" - -using namespace System; -using namespace System::Reflection; -using namespace System::Runtime::CompilerServices; -using namespace System::Runtime::InteropServices; -using namespace System::Security::Permissions; - -// -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -// -[assembly:AssemblyTitleAttribute("ADCLibrary")]; -[assembly:AssemblyDescriptionAttribute("")]; -[assembly:AssemblyConfigurationAttribute("")]; -[assembly:AssemblyCompanyAttribute("Microsoft")]; -[assembly:AssemblyProductAttribute("ADCLibrary")]; -[assembly:AssemblyCopyrightAttribute("Copyright (c) Microsoft 2010")]; -[assembly:AssemblyTrademarkAttribute("")]; -[assembly:AssemblyCultureAttribute("")]; - -// -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the value or you can default the Revision and Build Numbers -// by using the '*' as shown below: - -[assembly:AssemblyVersionAttribute("1.0.*")]; - -[assembly:ComVisible(false)]; - -[assembly:CLSCompliantAttribute(true)]; - -[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-03-26 22:15:44
|
Revision: 101 http://adc.svn.sourceforge.net/adc/?rev=101&view=rev Author: ullner Date: 2013-03-26 22:15:37 +0000 (Tue, 26 Mar 2013) Log Message: ----------- Adding the document ADC-PRD.txt; this document describes the necessary changes to the ADC network and associated resources when a new version of ADC or ADC-Ext are released. Added Paths: ----------- trunk/ADC-PRD.conf trunk/ADC-PRD.txt Added: trunk/ADC-PRD.conf =================================================================== --- trunk/ADC-PRD.conf (rev 0) +++ trunk/ADC-PRD.conf 2013-03-26 22:15:37 UTC (rev 101) @@ -0,0 +1,9 @@ +[attributes] +numbered +toc +toclevels=4 +frame="all" +grid="all" + +[tabledef-default] +colspec= Added: trunk/ADC-PRD.txt =================================================================== --- trunk/ADC-PRD.txt (rev 0) +++ trunk/ADC-PRD.txt 2013-03-26 22:15:37 UTC (rev 101) @@ -0,0 +1,112 @@ += ADC - Protocol Release Description +1.0.0, UNRELEASED + +== Abstract +New versions of ADC are released on a continuous basis. This document intend to provide a resource for those who are active in the ADC developent process and particularly the release process. This document, Protocol Release Description (PRD), describes the necessary changes and updates to the ADC network and associated resources once a new version of ADC is about to be released and subsequently is released. + +This document apply to at least ADC.txt and ADC-EXT.txt but may be extended for any other document as well. + +== Version history +The latest draft of the next version of this document as well as intermediate +and older versions can be downloaded from +$URL: https://adc.svn.sourceforge.net/svnroot/adc/trunk//ADC-PRD.txt $. +This version corresponds to $Revision: 98 $. + +=== Version 1.0.0, UNRELEASED + +* Initial release + +== Changes prior to release +This chapter is about the necessary changes that should be applied to the referenced document before a new version is released. + +These items should be performed in order of appearance. + +=== Document version and contact information +The version information provided in the document's top should be in the form of; + +AUTHOR + +<MAIL> + +version XYZ, MONTH YEAR + +Example: +==== + John Doe + <do...@ex...> + version 0.0.1, January 1970 +==== + +The document version provided in the document's versin history information should be in the form of; + +Version XYZ, YYYY-MM-DD + +AUTHOR, <MAIL> + +* Change1 + +* Change2 + +Example: +==== + Version 0.0.1, 1970-01-20 + John Doe, <do...@ex...> + * Initial release + * Added history information +==== + +=== Version control +The document shall be checked in to the (software) version control system with the validated information. + +== Changes after release +This chapter is about the necessary changes that should performed once a new version is released. + +These items need not be performed in order, except when certain items directly have dependencies. + +=== Document generation +The document may be in the form of a ASCIIDoc file. If so, the file should have an accomponaying ".conf" file. With ASCIIDoc, run the following command; + + ASCIIDoc.py -a toc file.txt + +This will generate the file "file.html". + +Example +==== +ASCIIDoc.py -a toc ADC.txt +==== + +=== Manage web space +The file generated (if done) shall be uploaded the web space of the ADC project. This file should be put in the /versions subdirectory. + +The file versions/index.html should be updated to include the new version. + +If a file is located at another place at the web space and is (sym or hard) linked to the previous version, then the link should be updated to point to the new version. + +The "news" section should be updated to include the new version. The information about the version should be the content provided in the version history section in the document. + +Any other link to the previous version should be updated to point to the new version. + +=== Manage forum +The forum shall be updated to manage the new version. All threads related to the new version are typically at the subform Protocols/Advanced Direct Connection/Protocol ideas. + +Each thread that has a note in the form of [Future DOCUMENT X.Y.Z] shall be changed to [DOCUMENT X.Y.Z]. + +All threads marked [DOCUMENT X.Y.Z] shall be moved to the sub-forum Protocols/Advanced Direct Connection/Pushed ideas. This will clear the current discussions list from content that are already approved and released. + +=== Manage blog +A post shall be created at the blog announcing a new version is released. The post should contain a link to the specific file at the web space (not a link). The post should contain a list of each item of change, where each item should be explored for how it affects developers and users. + +=== Manage wiki +The wiki shall be updated to not list "proposals" that are approved and in the new version, similar to the forum. + +=== Manage other Direct Connect resources +The service "Timetoast" describe a view of the versions and when they were released. This service shall be updated to include the new version and its date of release. If the service is shown on the web space, it will automatically update itself. + +The topic of the DCDev hub shall be updated to link to the new version. + +The new version shall be announced (in a non-invasive manner) on Twitter and other resources where developers frequent. + +=== Manage external resources +The http://en.wikipedia.org/wiki/Advanced_Direct_Connect[Wikipedia article] on ADC shall be updated to specify the new version. + +// vim: set syntax=asciidoc: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-06-17 17:12:40
|
Revision: 103 http://sourceforge.net/p/adc/code/103 Author: ullner Date: 2013-06-17 17:12:38 +0000 (Mon, 17 Jun 2013) Log Message: ----------- Added ONID as extension to ADC-Ext 1.0.8 Added a document for all ONID services. Modified Paths: -------------- trunk/ADC-EXT.txt Added Paths: ----------- trunk/ADC-ONIDServices.txt Modified: trunk/ADC-EXT.txt =================================================================== --- trunk/ADC-EXT.txt 2013-06-03 20:33:22 UTC (rev 102) +++ trunk/ADC-EXT.txt 2013-06-17 17:12:38 UTC (rev 103) @@ -16,6 +16,7 @@ === Version 1.0.8, UNRELEASED * Improved 'NATT' documentation, as according to the original paper. +* Added 'ONID' extension to provide online service integration. === Version 1.0.7 Fredrik Ullner <ul...@gm...>, 2012-11-22 @@ -749,4 +750,50 @@ BINF BBBB APDCPLUSPLUS VE0.782 ==== +=== ONID - Online identification +The purpose of the OID and OIR commands is to allow users to exchange information about their accounts on various online services. The OID name has been intentionally chosen to be similar to OpenID, although its spread is broader. + +New commands are preferrable here over new INF fields to avoid clogging up its 2-letter identifiers. They also allow for more flexibility: multiple profiles of the same type (OIR only); multiple identification parameters. + +The OID command is similar to INF, guaranteeing up-to-date information, whereas OIR follows a request/response scheme. OIR parties are therefore not required to keep their OIR information up-to-date. + +Parties supporting OID commands MUST advertise the ONID (ONline IDentification) support in the SU field of their INF. + +Parameters of the OID and OIR commands: + +- Unnamed parameter in first position to designate the service this command is referring to. Known services are listed in the "Known ONID services" (ADC-NOIDServices.txt) document; they are matched case-insensitively. Implementers willing to use an unlisted service SHOULD let ADC managers know about it. + +- Optional named parameters whose meanings depend on the service in question. + +OID and OIR commands support all contexts (hub-client, client-client). They are allowed in client-client contexts were users to want to avoid their OID/OIR information travelling through hubs. Both clients and hubs MAY provide each other with OID/OIR information. + +==== OID + OID service + +Any party that has sent OID information about itself SHOULD keep it up-to-date. + +OID parties MAY provide no information, usually indicating a refusal or inability to communicate it. + +Hubs that advertise ONID support MUST dispatch OID information they have received from clients to new clients logging in, similary to INF information. + +Clients MAY send OID commands to other clients on hubs that do not advertise ONID support. + +==== OIR + OIR service + +The requesting party MUST send an OIR command with a service parameter only (no optional parameter). The responding party MAY answer with an OIR command containing that same service parameter, and relevant optional parameters. + +The responding party MAY send multiple OIR commands in response to one request. + +The responding party MAY provide no information, usually indicating a refusal or inability to communicate it. + +Any party MAY at any time send an OIR response without any prior request. + +==== Examples +[options="autowidth"] +|===== +|BOID BBBB google EMe...@gm... +|BOID BBBB lol SUtest SEkr +|===== + // vim: set syntax=asciidoc: Added: trunk/ADC-ONIDServices.txt =================================================================== --- trunk/ADC-ONIDServices.txt (rev 0) +++ trunk/ADC-ONIDServices.txt 2013-06-17 17:12:38 UTC (rev 103) @@ -0,0 +1,125 @@ += ADC Recommendations +Fredrik Ullner <ul...@gm...> +1.0.0, June 2013 + +== Abstract +These are the services for the ONID command. See ADC-Ext for the ONID specification. + +== Version history +The latest draft of the next version of this document as well as intermediate +and older versions can be downloaded from +$URL: https://adc.svn.sourceforge.net/svnroot/adc/trunk/ADC-ONIDServices.txt $. + +This version corresponds to $Revision: 1 $. + +=== Version 1.0.0 +* Initial release + +== Services +The service names are all case-insensitive. They are written here as lower-case. + +=== DCBase +Service name: dcbase + +Required parameters: +[options="autowidth"] +|===== +|ID |The DCBase forum member numeric identifier. +|===== + +=== Facebook +Service name: facebook + +Required parameters: +[options="autowidth"] +|===== +|ID |The public Facebook ID (that appears in a profile page's URL). +|===== + +Optional parameters: +[options="autowidth"] +|===== +|NI |The friendly name. +|===== + +=== Google +Service name: google + +Required parameters: +[options="autowidth"] +|===== +|EM |The Google e-mail. +|===== + +=== League of Legends +Service name: lol + +Required parameters: +[options="autowidth"] +|===== +|SU |The League of Legends summoner name. +|SE |The server identifier. +|===== + +The server identifier may be one of the following +[options="autowidth"] +|===== +|SU |The League of Legends summoner name. +|SE |The server identifier that SHOULD be in the server identifier list below. +|===== + +Server identifiers: +[options="header, autowidth"] +|===== +|Identifier |Description +|br |Brazil +|eune |EU West +|kr |Korea +|na |North America +|tr |Turkey +|ru |Russia +|===== + +=== Microsoft Live +Service name: mslive + +Required parameters: +[options="autowidth"] +|===== +|EM |The Microsoft Live e-mail. +|===== + +=== Playstation Network +Service name: psn + +Required parameters: +[options="autowidth"] +|===== +|ID |The Playstation Network ID +|===== + +=== Twitter +Service name: twitter + +Required parameters: +[options="autowidth"] +|===== +|ID |The Twitter profile ID (that appears in a profile page's URL). +|===== + +Optional parameters: +[options="autowidth"] +|===== +|NI |The nick name. +|===== + +=== Yahoo! +Service name: yahoo + +Required parameters: +[options="autowidth"] +|===== +|EM |The Yahoo! e-mail. +|===== + +// vim: set syntax=asciidoc: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-06-30 13:08:31
|
Revision: 107 http://sourceforge.net/p/adc/code/107 Author: ullner Date: 2013-06-30 13:08:29 +0000 (Sun, 30 Jun 2013) Log Message: ----------- Version 1.0.3 of ADC is now released. Modified Paths: -------------- trunk/ADC-PRD.txt trunk/ADC.txt Modified: trunk/ADC-PRD.txt =================================================================== --- trunk/ADC-PRD.txt 2013-06-17 19:55:59 UTC (rev 106) +++ trunk/ADC-PRD.txt 2013-06-30 13:08:29 UTC (rev 107) @@ -24,16 +24,12 @@ === Document version and contact information The version information provided in the document's top should be in the form of; -AUTHOR - -<MAIL> - +AUTHOR, <MAIL> version XYZ, MONTH YEAR Example: ==== - John Doe - <do...@ex...> + John Doe, <do...@ex...> version 0.0.1, January 1970 ==== @@ -41,7 +37,7 @@ Version XYZ, YYYY-MM-DD -AUTHOR, <MAIL> +AUTHOR <MAIL> * Change1 @@ -50,7 +46,7 @@ Example: ==== Version 0.0.1, 1970-01-20 - John Doe, <do...@ex...> + John Doe <do...@ex...> * Initial release * Added history information ==== Modified: trunk/ADC.txt =================================================================== --- trunk/ADC.txt 2013-06-17 19:55:59 UTC (rev 106) +++ trunk/ADC.txt 2013-06-30 13:08:29 UTC (rev 107) @@ -1,5 +1,6 @@ = ADC Protocol -1.0.3, UNRELEASED +Fredrik Ullner, <ul...@gm...> +version 1.0.3, June 2013 == Abstract ADC is a text protocol for a client-server network similar to Neo-Modus' @@ -24,7 +25,8 @@ $URL$. This version corresponds to $Revision$. -=== Version 1.0.3, UNRELEASED +=== Version 1.0.3, 2013-06-30 +Fredrik Ullner <ul...@gm...> * Added examples for each command. * Features are now described in its own section. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-06-30 13:47:12
|
Revision: 109 http://sourceforge.net/p/adc/code/109 Author: ullner Date: 2013-06-30 13:47:09 +0000 (Sun, 30 Jun 2013) Log Message: ----------- Added ZLIB recommendation Modified Paths: -------------- trunk/ADC-PRD.txt trunk/ADC-Recommendation.txt Modified: trunk/ADC-PRD.txt =================================================================== --- trunk/ADC-PRD.txt 2013-06-30 13:32:30 UTC (rev 108) +++ trunk/ADC-PRD.txt 2013-06-30 13:47:09 UTC (rev 109) @@ -1,5 +1,6 @@ = ADC - Protocol Release Description -1.0.0, UNRELEASED +Fredrik Ullner, <ul...@gm...> +1.0.0, June 2013 == Abstract New versions of ADC are released on a continuous basis. This document intend to provide a resource for those who are active in the ADC developent process and particularly the release process. This document, Protocol Release Description (PRD), describes the necessary changes and updates to the ADC network and associated resources once a new version of ADC is about to be released and subsequently is released. Modified: trunk/ADC-Recommendation.txt =================================================================== --- trunk/ADC-Recommendation.txt 2013-06-30 13:32:30 UTC (rev 108) +++ trunk/ADC-Recommendation.txt 2013-06-30 13:47:09 UTC (rev 109) @@ -49,4 +49,14 @@ 53 | Similar to error code 11. 54 | Must be 2 (fatal). +== ZLIB compression + +=== Generic + +* Try to keep constant and almost constant named parameters together, that way there is a higher likelyhood for a longer parameter match. + +* When possible try to keep similar commands no more than a window size (usually 32 bits if highest rate is used) away, that ensures you will benefit from the redundancy provided by these (this may be particularly important when sending large strings like MOTDs or help and configuration values intertwined with other commands). + +* Syncing is important to keep the clients updated but when you sync some bytes are sent (the sync ones and the ones for the Huffman tree of the new packet if it is a type 2 packet) as such it may make sense to keep in different queues commands depending on how much latency matters for them, for example you may want to keep low latency for MSG commands and send them frequently but may prefer to send searches or passive results together each half second or so. Also latencies matter depending on the type of network, on a LAN users expect most things to happen almost inmediately (especially things like MSGs) whilst clients connecting over a classic DSL line may not care that much for higher latencies. + // vim: set syntax=asciidoc: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-12-21 21:48:08
|
Revision: 117 http://sourceforge.net/p/adc/code/117 Author: ullner Date: 2013-12-21 21:48:05 +0000 (Sat, 21 Dec 2013) Log Message: ----------- Releasing recommendations document Modified Paths: -------------- trunk/ADC-Recommendation.txt Added Paths: ----------- trunk/ADC-Recommendation.conf Added: trunk/ADC-Recommendation.conf =================================================================== --- trunk/ADC-Recommendation.conf (rev 0) +++ trunk/ADC-Recommendation.conf 2013-12-21 21:48:05 UTC (rev 117) @@ -0,0 +1,9 @@ +[attributes] +numbered +toc +toclevels=4 +frame="all" +grid="all" + +[tabledef-default] +colspec= Modified: trunk/ADC-Recommendation.txt =================================================================== --- trunk/ADC-Recommendation.txt 2013-12-21 21:38:23 UTC (rev 116) +++ trunk/ADC-Recommendation.txt 2013-12-21 21:48:05 UTC (rev 117) @@ -1,5 +1,6 @@ = ADC Recommendations -1.1.0 +Fredrik Ullner <ul...@gm...> +1.1.0, December 2013 == Abstract These are the official recommendations to ADC. This document is based on the information contained in the ADC documents, ADC wiki and ADC blog. Information is this document should be taken as guide lines to implementations. @@ -11,7 +12,8 @@ This version corresponds to $Revision: 1 $. -=== Version 1.1.0, UNRELEASED +=== Version 1.1.0, 2013-12-21 +Fredrik Ullner, <ul...@gm...> * Added ZLIB recommendation * Added SID recommendations/considerations. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2015-02-21 16:56:31
|
Revision: 126 http://sourceforge.net/p/adc/code/126 Author: ullner Date: 2015-02-21 16:56:23 +0000 (Sat, 21 Feb 2015) Log Message: ----------- Clarified UTF-8 encoding note. Modified Paths: -------------- trunk/ADC-Recommendation.html trunk/ADC-Recommendation.txt trunk/ADC.txt Modified: trunk/ADC-Recommendation.html =================================================================== --- trunk/ADC-Recommendation.html 2015-02-19 20:21:48 UTC (rev 125) +++ trunk/ADC-Recommendation.html 2015-02-21 16:56:23 UTC (rev 126) @@ -1339,50 +1339,232 @@ </ol></div> </div> </div> +<div class="sect2"> +<h3 id="_chat">7.2. Chat</h3> +<div class="paragraph"><p>.</p></div> </div> +<div class="sect2"> +<h3 id="_downloading">7.3. Downloading</h3> +<div class="paragraph"><p>.</p></div> </div> +<div class="sect2"> +<h3 id="_sharing">7.4. Sharing</h3> +<div class="paragraph"><p>.</p></div> +</div> +<div class="sect2"> +<h3 id="_search">7.5. Search</h3> +<div class="paragraph"><p>.</p></div> +</div> +<div class="sect2"> +<h3 id="_other">7.6. Other</h3> +<div class="paragraph"><p>.</p></div> +</div> +</div> +</div> <div class="sect1"> <h2 id="_hub_implementation">8. Hub implementation</h2> <div class="sectionbody"> -<div class="paragraph"><p>1) Hub accepts network connection. -- [client state = new]</p></div> -<div class="paragraph"><p>2) Hub waits for handshake from client. -Client: HSUP ADBASE …</p></div> -<div class="paragraph"><p>3) Hub checks support line responds -Server: ISUP ADBASE …</p></div> -<div class="paragraph"><p>4) Hub allocates a SID, and sends it to the client. -Server: ISID …</p></div> -<div class="paragraph"><p>5) Hub sends the hub information to the client. -Server: IINF …</p></div> -<div class="paragraph"><p>6) Hub waits for client to send info: -- [client state = identify] -Client: BINF …</p></div> -<div class="paragraph"><p>7) Hub validates info from client - If password verification is needed, then go to 7.1, otherwise 8.</p></div> -<div class="paragraph"><p>7.1) If user needs to log in, request password -- [client state = verify] -Server: IGPA …</p></div> -<div class="paragraph"><p>7.2) Wait for and verify password from -Client: HPAS …</p></div> -<div class="paragraph"><p>8) Hub transmits the userlist of all existing users to the client. -Server: BINF … -Server: BINF … -… -Server: BINF …</p></div> -<div class="paragraph"><p>9) Hub broadcasts the client’s info (BINF) to all users, including the client. -- [client state = NORMAL] -Server: BINF …</p></div> -<div class="paragraph"><p>10) At this point the client is considered logged in, and will receive all +<div class="paragraph"><p>A client can be implemented by following this rough outline. The outline may not specify everything to full detail and will not cover the actual application that shall employ the mechanisms.</p></div> +<div class="sect2"> +<h3 id="_steps_2">8.1. Steps</h3> +<div class="olist arabic"><ol class="arabic"> +<li> +<p> +Hub accepts network connection. +</p> +<div class="ulist"><ul> +<li> +<p> +Set client state to NEW. +</p> +</li> +</ul></div> +</li> +<li> +<p> +Hub waits for handshake from client. +</p> +<div class="ulist"><ul> +<li> +<p> +Client will send: +</p> +<div class="ulist"><ul> +<li> +<p> +HSUP ADBASE … +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +Hub checks support line responds. +</p> +</li> +<li> +<p> +Server sends: +</p> +<div class="ulist"><ul> +<li> +<p> +ISUP ADBASE … +</p> +</li> +</ul></div> +</li> +<li> +<p> +Hub allocates a SID, and sends it to the client: +</p> +<div class="ulist"><ul> +<li> +<p> +ISID … +</p> +</li> +</ul></div> +</li> +<li> +<p> +Hub sends the hub information to the client: +</p> +<div class="ulist"><ul> +<li> +<p> +IINF … +</p> +</li> +</ul></div> +</li> +<li> +<p> +Hub waits for client to send info: +</p> +<div class="ulist"><ul> +<li> +<p> +Client will send: +</p> +<div class="ulist"><ul> +<li> +<p> +BINF … +</p> +</li> +</ul></div> +</li> +<li> +<p> +Set client state to IDENTIFY. +</p> +</li> +</ul></div> +</li> +<li> +<p> +Hub validates info from client +</p> +<div class="ulist"><ul> +<li> +<p> +If password verification is needed, then go to 9, otherwise 11. +</p> +</li> +</ul></div> +</li> +<li> +<p> +If user needs to log in, request password +</p> +<div class="ulist"><ul> +<li> +<p> +Set client state to VERIFY +</p> +</li> +<li> +<p> +Hub sends: +</p> +<div class="ulist"><ul> +<li> +<p> +IGPA … +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +Wait for and verify password from client: +</p> +<div class="ulist"><ul> +<li> +<p> +HPAS … +</p> +</li> +</ul></div> +</li> +<li> +<p> +Hub transmits the userlist of all existing users to the client. +</p> +<div class="literalblock"> +<div class="content"> +<pre><code>BINF ... +BINF ... +... +BINF ...</code></pre> +</div></div> +</li> +<li> +<p> +Hub broadcasts the client’s info (BINF) to all users, including the client. +</p> +<div class="ulist"><ul> +<li> +<p> +Set client state to NORMAL. +</p> +</li> +<li> +<p> +Server sends: +</p> +<div class="ulist"><ul> +<li> +<p> +BINF … +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +At this point the client is considered logged in, and will receive all broadcast messages and all direct messages from other clients. It will also forward messages originating from this client to others, if the -messages are correct (syntax, formatting, source SID, etc).</p></div> +messages are correct (syntax, formatting, source SID, etc). +</p> +</li> +</ol></div> </div> </div> </div> +</div> <div id="footnotes"><hr /></div> <div id="footer"> <div id="footer-text"> -Last updated 2014-08-05 14:38:44 W. Europe Daylight Time +Last updated 2014-08-05 15:14:11 W. Europe Daylight Time </div> </div> </body> Modified: trunk/ADC-Recommendation.txt =================================================================== --- trunk/ADC-Recommendation.txt 2015-02-19 20:21:48 UTC (rev 125) +++ trunk/ADC-Recommendation.txt 2015-02-21 16:56:23 UTC (rev 126) @@ -179,73 +179,106 @@ ==== Steps 1. Create a network connection to a hub on the appropriate port. + 2. The client shall send the following message: * HSUP ADBASE ADTIGR ** This indicates that the client is notifying the hub about supporting the base protocol (BASE) and the extension hash method Tiger (TIGR). If the protocol base version is changed, send that instead of BASE. Similarly, if another hash method is preferred, send that instead. + 3. The hub will send: * ISUP ADBASE ADTIGR ** The hub may include other things it "AD"s, but none of these are interesting. + 4. The hub will send: * ISID ABCD ** ABCD is the SID that shall be used in any further communication from the client (where applicable). Store this value. + 5. Optionally, a hub may send the following but is not required: * IINF CT32 NIhub_name ** None of these parameters are needed for continuing the connectivity, although may come in handy in the future. The value in the NI parameter can be used for e.g. the application or tab name. + 6. The client shall send the following message * BINF ABCD ID<CID> PD<PID> NImy_name ** ABCD here is the SID as previously mentioned. The CID and PID are complementary information and are specified in the "Client identification section". The client should generate an internal CID (and associated PID). The CID and PID that the client sends to the hub have been run through a Base32 conversion. + 7. If the hub did not send its "IINF" before, it may do so now. Again, the information shouldn't be deemed as required. + 8. The hub may send a password request, see section "Other". + 9. The hub will send all other users that are logged in: * BINF sid ID<CID> NI<nick> ** Where SID and CID is the client information. The SID is used to create a mapping between client -> user. Note that the PID is never broadcast. + 10. The last BINF to arrive will be the information you connected with: * BINF ABCD ID<your-CID> NImy_name + 11. The client will now be fully logged in. +=== Chat +. + +=== Downloading +. + +=== Sharing +. + +=== Search +. + +=== Other +. + == Hub implementation +A client can be implemented by following this rough outline. The outline may not specify everything to full detail and will not cover the actual application that shall employ the mechanisms. -1) Hub accepts network connection. -- [client state = new] +=== Steps +1. Hub accepts network connection. +* Set client state to NEW. -2) Hub waits for handshake from client. -Client: HSUP ADBASE ... +2. Hub waits for handshake from client. +* Client will send: +** HSUP ADBASE ... -3) Hub checks support line responds -Server: ISUP ADBASE ... +3. Hub checks support line responds. -4) Hub allocates a SID, and sends it to the client. -Server: ISID ... +4. Server sends: +* ISUP ADBASE ... -5) Hub sends the hub information to the client. -Server: IINF ... +5. Hub allocates a SID, and sends it to the client: +* ISID ... -6) Hub waits for client to send info: -- [client state = identify] -Client: BINF ... +6. Hub sends the hub information to the client: +* IINF ... -7) Hub validates info from client - If password verification is needed, then go to 7.1, otherwise 8. +7. Hub waits for client to send info: +* Client will send: +** BINF ... +* Set client state to IDENTIFY. -7.1) If user needs to log in, request password -- [client state = verify] -Server: IGPA ... +8. Hub validates info from client +* If password verification is needed, then go to 9, otherwise 11. -7.2) Wait for and verify password from -Client: HPAS ... +9. If user needs to log in, request password +* Set client state to VERIFY +* Hub sends: +** IGPA ... -8) Hub transmits the userlist of all existing users to the client. -Server: BINF ... -Server: BINF ... -... -Server: BINF ... +10. Wait for and verify password from client: +* HPAS ... +11. Hub transmits the userlist of all existing users to the client. -9) Hub broadcasts the client's info (BINF) to all users, including the client. -- [client state = NORMAL] -Server: BINF ... + BINF ... + BINF ... + ... + BINF ... -10) At this point the client is considered logged in, and will receive all +12. Hub broadcasts the client's info (BINF) to all users, including the client. +* Set client state to NORMAL. +* Server sends: +** BINF ... + +13. At this point the client is considered logged in, and will receive all broadcast messages and all direct messages from other clients. It will also forward messages originating from this client to others, if the messages are correct (syntax, formatting, source SID, etc). Modified: trunk/ADC.txt =================================================================== --- trunk/ADC.txt 2015-02-19 20:21:48 UTC (rev 125) +++ trunk/ADC.txt 2015-02-21 16:56:23 UTC (rev 126) @@ -27,6 +27,7 @@ === Version 1.0.4, UNRELEASED * Separators in the command description for GET, GFI and SND are now explicit. +* Clarified UTF-8 encoding note. === Version 1.0.3, 2013-06-30 Fredrik Ullner <ul...@gm...> @@ -64,7 +65,8 @@ message. The string "\s" escapes space, "\n" newline and "\\" backslash. This version of the protocol reserves all other escapes for future use; any message containing unknown escapes must be discarded. -* All text must be sent as UTF-8 encoded Unicode in normalization form C. +* All text must be sent as 1-to-4 byte, RFC 3629-compliant UTF-8 encoded Unicode + in normalization form C. * Clients must ignore unknown/badly formatted messages. Hubs must ignore invalid messages and should dispatch unknown messages according to their type. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-06-03 20:33:26
|
Revision: 102 http://sourceforge.net/p/adc/code/102 Author: ullner Date: 2013-06-03 20:33:22 +0000 (Mon, 03 Jun 2013) Log Message: ----------- Changed size in file list schema to an unsigned long to manage files larger than 2 GiB. Modified Paths: -------------- trunk/ADC-PRD.txt trunk/ADC-Test.txt trunk/ADC-Testcases.xml trunk/ADC.txt Modified: trunk/ADC-PRD.txt =================================================================== --- trunk/ADC-PRD.txt 2013-03-26 22:15:37 UTC (rev 101) +++ trunk/ADC-PRD.txt 2013-06-03 20:33:22 UTC (rev 102) @@ -9,7 +9,7 @@ == Version history The latest draft of the next version of this document as well as intermediate and older versions can be downloaded from -$URL: https://adc.svn.sourceforge.net/svnroot/adc/trunk//ADC-PRD.txt $. +$URL: https://adc.svn.sourceforge.net/svnroot/adc/trunk/ADC-PRD.txt $. This version corresponds to $Revision: 98 $. === Version 1.0.0, UNRELEASED Modified: trunk/ADC-Test.txt =================================================================== --- trunk/ADC-Test.txt 2013-03-26 22:15:37 UTC (rev 101) +++ trunk/ADC-Test.txt 2013-06-03 20:33:22 UTC (rev 102) @@ -274,30 +274,91 @@ === MSG ==== A basic MSG with no named parameters +Purpose: Validate that the server forwards the message unmodified + +Expected: The other client receives the message unmodified and display it appropriately + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|2 |Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|3 |Client A sends "MSG example" | +|===== Result: |===== | |===== ==== A basic MSG with ME field +Purpose: Validate that the server forwards the message unmodified + +Expected: The other client receives the message unmodified and display it appropriately + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|2 |Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|3 |Client A sends "MSG example ME1" | +|===== Result: |===== | |===== ==== A basic MSG with PM field +Purpose: Validate that the server forwards the message unmodified + +Expected: The other client receives the message unmodified and display it appropriately + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|2 |Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|3 |Client A sends "MSG example PMAAAA" (Client A's SID) | +|===== Result: |===== | |===== ==== A basic MSG with ME and PM fields +Purpose: Validate that the server forwards the message unmodified + +Expected: The other client receives the message unmodified and display it appropriately + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|2 |Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|3 |Client A sends "MSG example ME1 PMAAAA" (Client A's SID) | +|4 |Client A sends "MSG example PMAAAA ME1" (Client A's SID) | +|===== Result: |===== | |===== ==== Negative out-of-bounds value in ME field +Purpose: Validate that the server does not forward the message + +Expected: The other client does not receive the message + +Steps: +[options="autowidth, header"] +|===== +|Step item |Info |Comment +|1 |Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|2 |Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR". Continue with normal communication until NORMAL is reached and stabalized | +|3 |Client A sends "MSG example ME-1" | +|===== Result: |===== | @@ -1099,3 +1160,25 @@ | |===== +=== General + +==== Server forwards unknown fields +Purpose: Validate if the server forwards unknown fields to other clients + +Expected: Server forwards the unknown field + +Result: +|===== +| +|===== + +==== Server forwards unknown commands +Purpose: Validate that the server forwards the unknwon command + +Expected: The server forwards the unknown command + +Result: +|===== +| +|===== + Modified: trunk/ADC-Testcases.xml =================================================================== --- trunk/ADC-Testcases.xml 2013-03-26 22:15:37 UTC (rev 101) +++ trunk/ADC-Testcases.xml 2013-06-03 20:33:22 UTC (rev 102) @@ -1 +1 @@ -<?xml version="1.0" encoding="utf-8"?><adctestcases><tc Name="Too short random data" Expected="Client sends a STA indicating that the GPA is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it receives random data in the GPA that is too short (less than 24 bytes)" Command="GPA"><step Info="Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client B sends "INF BBBB ..."" /><step Info="The server sends "GPA A" (1 byte)" /></tc><tc Name="Invalid characters in random data" Expected="Client sends a STA indicating that the GPA is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it receives random data in the GPA that contain invalid characters (1 for instance)" Command="GPA"><step Info="Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client B sends "INF BBBB ..."" /><step Info="The server sends "GPA AAAAAAAAAAAAAAAAAAAAAAA1" (24 bytes)" /></tc><tc Name="Valid random data" Expected="" PostCondition="" PreCondition="" Purpose="" Command="GPA" /><tc Name="Empty GPA" Expected="" PostCondition="" PreCondition="" Purpose="" Command="GPA" /><tc Name="ID and PD fields present and matching" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="ID and PD fields present and mismatching" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Only ID field present" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Only PD field present" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Neither ID or PD fields present" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in ID field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in PD field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in NI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in DE field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in I4 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in I6 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid IP in I4 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid IP in I6 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Wrong IP in I4 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Wrong IP in I6 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="DNS in I4 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="DNS in I6 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Zero address in I4 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Zero address in I6 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Correct address in I4 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Correct address in I6 field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Too long FOURCC in SU field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Too short FOURCC in SU field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid FOURCC in SU field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid formatting of SU field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Empty INF" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Underflow fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Negative out-of-range value for fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="0 value for fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Overflow fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW " Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Positive out-of-range value for fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="Invalid characters in fields SS, SF, US, DS, SL, AS, AM, HN, HR, HO, CT, AW" Expected="" PostCondition="" PreCondition="" Purpose="" Command="INF" /><tc Name="A basic MSG with no named parameters" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="A basic MSG with ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="A basic MSG with PM field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="A basic MSG with ME and PM fields" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Negative out-of-bounds value in ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Underflow value in ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="0 Value in ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Empty ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Overflow value in ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Postive out-of-bounds value in ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Invalid characters in ME field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Empty PM" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Too short SID value in PM field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Too long SID value in PM field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Invalid characters SID value in PM field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Non-existing SID value in PM field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="MSG in PROTOCOL state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="MSG in IDENTIFY state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="MSG in VERIFY state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="MSG in NORMAL state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="MSG" /><tc Name="Invalid response based on the GPA" Expected="Server sends a STA indicating that the PAS is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives a response that does not match the request." Command="PAS"><step Info="Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client B sends "INF BBBB ..."" /><step Info="The server sends "GPA AAAAAAAAAAAAAAAAAAAAAAAA" (24 bytes)" /><step Info="The client sends "PAS BBBBBBBBBBBBBBBBBBBBBBBB"" /></tc><tc Name="Invalid characters in response" Expected="Server sends a STA indicating that the PAS is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives a response that contain invalid characters (1 for instance)" Command="PAS"><step Info="Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client B sends "INF BBBB ..."" /><step Info="The server sends "GPA AAAAAAAAAAAAAAAAAAAAAAAA" (24 bytes)" /><step Info="The client sends "PAS BBBBBBBBBBBBBBBBBBBBBBB1" (last byte is invalid)" /></tc><tc Name="Valid response" Expected="" PostCondition="" PreCondition="" Purpose="" Command="PAS" /><tc Name="Empty PAS" Expected="" PostCondition="" PreCondition="" Purpose="" Command="PAS" /><tc Name="Too short SID" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Too long SID" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Invalid characters in SID" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="No client with the specified SID" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Too short ID field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Too long ID field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Invalid characters in ID field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="No client with the specified SID in the ID field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Negative out-of-bounds value in TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Underflow TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Overflow TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="-1 (forever) in TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="120 second value in TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Invalid characters in TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Empty TL field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name=""example" in MS field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Empty MS field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Negative out-of-bounds value in DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Underflow DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Overflow DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="0 as value in DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="1 as value in DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Invalid characters in DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Empty DI field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Empty RD field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="QUI in PROTOCOL state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="QUI in IDENTIFY state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="QUI in VERIFY state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="QUI in NORMAL state" Expected="" PostCondition="" PreCondition="" Purpose="" Command="QUI" /><tc Name="Underflow fields LE, GE, EQ, TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Negative out-of-range value for fields LE, GE, EQ, TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="0 value for fields LE, GE, EQ, TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Overflow fields LE, GE, EQ, TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Positive out-of-range value for TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Invalid characters in fields LE, GE, EQ, TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Combination of LE and EQ fields with conflicting values" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Combination of GE and EQ fields with conflicting values" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Combination of LE, GE and EQ fields with conflicting values" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Valid AN field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Valid NO field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Only NO field" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Combination of AN and NO fields with conflicting values" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Invalid characters in field EX" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty AN" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty NO" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty EX" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty LE" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty GE" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty EQ" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty TO" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Empty TY" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SCH" /><tc Name="Too short SID from hub" Expected="Client sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it receives an SID that is too short (less than 4 characters)" Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBB"" /></tc><tc Name="Too long SID from hub" Expected="Client sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it receives an SID that is too long (longer than 4 characters)" Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBBB"" /></tc><tc Name="Invalid characters in SID from hub" Expected="Client sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it receives an SID that contain invalid characters (1 for instance)" Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBB1"" /></tc><tc Name="Too short SID from client in INF" Expected="Server sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives an SID that is too short (less than 4 characters)" Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client sends "INF BBB ..."" /></tc><tc Name="Too long SID from client in INF" Expected="Server sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives an SID that is too long (longer than 4 characters)" Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client sends "INF BBBBB ..."" /></tc><tc Name="Invalid characters in SID from client" Expected="Server sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives an SID that contain invalid characters (1 for instance)" Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client sends "INF BBB1 ..."" /></tc><tc Name="Non-assigned SID from client" Expected="Server sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives an SID that it didn't assign a client." Command="SID"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="The client sends "INF CCCC ..."" /></tc><tc Name="Assigned SID from another client" Expected="Server sends a STA indicating that the SID is invalid and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives an SID that was already assigned to another a client." Command="SID"><step Info="Connect with a client A to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID BBBB"" /><step Info="Continue with normal communication until NORMAL is reached and stabalized" /><step Info="Connect with a client B to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server sends "SID CCCC"" /><step Info="Client B sends "INF BBBB ..."" /></tc><tc Name="Valid SID assignment" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SID" /><tc Name="Valid SID use" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SID" /><tc Name="No SID from server" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SID" /><tc Name="Invalid BASE version from server" Expected="Client sends a STA indicating lack of support for BASE and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it receives BAS2 instead of BASE." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ..."" /><step Info="The server responds with "SUP ADBAS2 ..."" /></tc><tc Name="Invalid BASE version from client" Expected="Server sends a STA indicating lack of support for BASE and disconnects" PostCondition="" PreCondition="" Purpose="Validate what a server does when it receives BAS2 instead of BASE" Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBAS2 ..."" /></tc><tc Name="Lack of overlapping hash support from server" Expected="Client sends a STA indicating no overlapping hash support and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when it does not receive overlapping hashes." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE"" /></tc><tc Name="Lack of overlapping hash support from client" Expected="Server sends a STA indicating no overlapping hash support and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when it does not receive overlapping hashes." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE"" /></tc><tc Name="Remove BASE support in NORMAL from server" Expected="Client sends a STA indicating lack of support for BASE and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when the BASE support is removed during NORMAL state." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="Continue with normal communication until NORMAL is reached and stabalized" /><step Info="The server sends "SUP RMBASE"" /></tc><tc Name="Remove BASE support in NORMAL from client" Expected="Server sends a STA indicating lack of support for BASE and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when the BASE support is removed during NORMAL state." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="Continue with normal communication until NORMAL is reached and stabalized" /><step Info="The client sends "SUP RMBASE"" /></tc><tc Name="Remove hash support in NORMAL from server" Expected="Client sends a STA indicating lack of support for TIGR and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a client does when the hash support is removed during NORMAL state." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="Continue with normal communication until NORMAL is reached and stabalized" /><step Info="The server sends "SUP RMTIGR"" /></tc><tc Name="Remove hash support in NORMAL from client" Expected="Server sends a STA indicating lack of support for TIGR and disconnects." PostCondition="" PreCondition="" Purpose="Validate what a server does when the hash support is removed during NORMAL state." Command="SUP"><step Info="Connect with a client to the server. Client initiates the connection by sending a "SUP ADBASE ADTIGR"" /><step Info="The server responds with "SUP ADBASE ADTIGR"" /><step Info="Continue with normal communication until NORMAL is reached and stabalized" /><step Info="The client sends "SUP RMTIGR"" /></tc><tc Name="No SUP content from client" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SUP" /><tc Name="No SUP content from server" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SUP" /><tc Name="Valid SUP sequence from server" Expected="" PostCondition="" PreCondition="" Purpose="" Command="SUP" /><tc Name="Valid SUP sequence from client" Expected="" PostCondit... [truncated message content] |
From: <ul...@us...> - 2013-06-17 19:25:37
|
Revision: 104 http://sourceforge.net/p/adc/code/104 Author: ullner Date: 2013-06-17 19:25:35 +0000 (Mon, 17 Jun 2013) Log Message: ----------- Fixed some typos etc for ONID. Modified Paths: -------------- trunk/ADC-EXT.txt trunk/ADC-ONIDServices.txt Modified: trunk/ADC-EXT.txt =================================================================== --- trunk/ADC-EXT.txt 2013-06-17 17:12:38 UTC (rev 103) +++ trunk/ADC-EXT.txt 2013-06-17 19:25:35 UTC (rev 104) @@ -761,7 +761,7 @@ Parameters of the OID and OIR commands: -- Unnamed parameter in first position to designate the service this command is referring to. Known services are listed in the "Known ONID services" (ADC-NOIDServices.txt) document; they are matched case-insensitively. Implementers willing to use an unlisted service SHOULD let ADC managers know about it. +- Unnamed parameter in first position to designate the service this command is referring to. Known services are listed in the "Known ONID services" (ADC-ONIDServices.txt) document; they are matched case-insensitively. Implementers willing to use an unlisted service SHOULD let ADC managers know about it. - Optional named parameters whose meanings depend on the service in question. Modified: trunk/ADC-ONIDServices.txt =================================================================== --- trunk/ADC-ONIDServices.txt 2013-06-17 17:12:38 UTC (rev 103) +++ trunk/ADC-ONIDServices.txt 2013-06-17 19:25:35 UTC (rev 104) @@ -61,19 +61,13 @@ |SE |The server identifier. |===== -The server identifier may be one of the following -[options="autowidth"] -|===== -|SU |The League of Legends summoner name. -|SE |The server identifier that SHOULD be in the server identifier list below. -|===== - -Server identifiers: +The server identifier may be one of the following: [options="header, autowidth"] |===== |Identifier |Description |br |Brazil -|eune |EU West +|eune |EU Nordic and East +|euw |EU West |kr |Korea |na |North America |tr |Turkey This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2013-06-30 14:41:47
|
Revision: 112 http://sourceforge.net/p/adc/code/112 Author: ullner Date: 2013-06-30 14:41:43 +0000 (Sun, 30 Jun 2013) Log Message: ----------- Changed URL to repository. Modified Paths: -------------- trunk/ADC-EXT.txt trunk/ADC-Recommendation.txt trunk/ADC.txt Modified: trunk/ADC-EXT.txt =================================================================== --- trunk/ADC-EXT.txt 2013-06-30 14:34:06 UTC (rev 111) +++ trunk/ADC-EXT.txt 2013-06-30 14:41:43 UTC (rev 112) @@ -13,7 +13,7 @@ This version corresponds to $Revision$. -=== Version 1.0.8, UNRELEASED +=== Version 1.0.8, UNRELEASED * Improved 'NATT' documentation, as according to the original paper. * Added 'ONID' extension to provide online service integration. Modified: trunk/ADC-Recommendation.txt =================================================================== --- trunk/ADC-Recommendation.txt 2013-06-30 14:34:06 UTC (rev 111) +++ trunk/ADC-Recommendation.txt 2013-06-30 14:41:43 UTC (rev 112) @@ -7,7 +7,7 @@ == Version history The latest draft of the next version of this document as well as intermediate and older versions can be downloaded from -$URL: https://adc.svn.sourceforge.net/svnroot/adc/trunk/ADC-Recommendation.txt $. +$URL: https://svn.code.sf.net/p/adc/code/trunk/ADC-Recommendation.txt $. This version corresponds to $Revision: 1 $. Modified: trunk/ADC.txt =================================================================== --- trunk/ADC.txt 2013-06-30 14:34:06 UTC (rev 111) +++ trunk/ADC.txt 2013-06-30 14:41:43 UTC (rev 112) @@ -1,6 +1,5 @@ = ADC Protocol -Fredrik Ullner, <ul...@gm...> -version 1.0.3, June 2013 +version 1.0.4, UNRELEASED == Abstract ADC is a text protocol for a client-server network similar to Neo-Modus' @@ -25,6 +24,10 @@ $URL$. This version corresponds to $Revision$. +=== Version 1.0.4, UNRELEASED + +- + === Version 1.0.3, 2013-06-30 Fredrik Ullner <ul...@gm...> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ul...@us...> - 2014-01-19 16:29:22
|
Revision: 119 http://sourceforge.net/p/adc/code/119 Author: ullner Date: 2014-01-19 16:29:18 +0000 (Sun, 19 Jan 2014) Log Message: ----------- Add Tiger and Merkle tree papers Modified Paths: -------------- trunk/ADC.txt Added Paths: ----------- trunk/Hashes/ trunk/Hashes/Tiger/ trunk/Hashes/Tiger/draft-jchapweske-thex-02.html trunk/Hashes/Tiger/node1.html trunk/Hashes/Tiger/node2.html trunk/Hashes/Tiger/node3.html trunk/Hashes/Tiger/node4.html trunk/Hashes/Tiger/node5.html trunk/Hashes/Tiger/node6.html trunk/Hashes/Tiger/node7.html trunk/Hashes/Tiger/node8.html trunk/Hashes/Tiger/tiger.html Modified: trunk/ADC.txt =================================================================== --- trunk/ADC.txt 2014-01-19 16:27:04 UTC (rev 118) +++ trunk/ADC.txt 2014-01-19 16:29:18 UTC (rev 119) @@ -921,7 +921,7 @@ |===== |Example |Description |IQUI BBBB |A QUI that is sent from the hub indicating that the client BBBB has disconnected. -|IQUI BBBB IDCCCC MSCats\sare\horrible DI1 TL-1 |A QUI that is sent from the hub indicating that the client BBBB has disconnected. The originator of the action is the client with the SID CCCC. The message "Cats are horrible" is included. All clients should terminate their connections with the client BBBB (DI1). The client should never attempt to reconnect (TL-1). +|IQUI BBBB IDCCCC MSCats\sare\shorrible DI1 TL-1 |A QUI that is sent from the hub indicating that the client BBBB has disconnected. The originator of the action is the client with the SID CCCC. The message "Cats are horrible" is included. All clients should terminate their connections with the client BBBB (DI1). The client should never attempt to reconnect (TL-1). |===== ==== GET Added: trunk/Hashes/Tiger/draft-jchapweske-thex-02.html =================================================================== --- trunk/Hashes/Tiger/draft-jchapweske-thex-02.html (rev 0) +++ trunk/Hashes/Tiger/draft-jchapweske-thex-02.html 2014-01-19 16:29:18 UTC (rev 119) @@ -0,0 +1,878 @@ +<html><head> + +<script type="text/javascript" src="/static/js/analytics.js" ></script> +<link type="text/css" rel="stylesheet" href="/static/css/banner-styles.css"/> + + + +<title>Tree Hash EXchange format (THEX)</title> +<meta http-equiv="Expires" content="Tue, 04 Mar 2003 22:41:32 +0000"> +<STYLE type='text/css'> + .title { color: #990000; font-size: 22px; line-height: 22px; font-weight: bold; text-align: right; + font-family: helvetica, arial, sans-serif } + .filename { color: #666666; font-size: 18px; line-height: 28px; font-weight: bold; text-align: right; + font-family: helvetica, arial, sans-serif } + p.copyright { color: #000000; font-size: 10px; + font-family: verdana, charcoal, helvetica, arial, sans-serif } + p { margin-left: 2em; margin-right: 2em; } + li { margin-left: 3em; } + ol { margin-left: 2em; margin-right: 2em; } + ul.text { margin-left: 2em; margin-right: 2em; } + pre { margin-left: 3em; color: #333333 } + ul.toc { color: #000000; line-height: 16px; + font-family: verdana, charcoal, helvetica, arial, sans-serif } + H3 { color: #333333; font-size: 16px; line-height: 16px; font-family: helvetica, arial, sans-serif } + H4 { color: #000000; font-size: 14px; font-family: helvetica, arial, sans-serif } + TD.header { color: #ffffff; font-size: 10px; font-family: arial, helvetica, san-serif; valign: top } + TD.author-text { color: #000000; font-size: 10px; + font-family: verdana, charcoal, helvetica, arial, sans-serif } + TD.author { color: #000000; font-weight: bold; margin-left: 4em; font-size: 10px; font-family: verdana, charcoal, helvetica, arial, sans-serif } + A:link { color: #990000; font-weight: bold; + font-family: MS Sans Serif, verdana, charcoal, helvetica, arial, sans-serif } + A:visited { color: #333333; font-weight: bold; + font-family: MS Sans Serif, verdana, charcoal, helvetica, arial, sans-serif } + A:name { color: #333333; font-weight: bold; + font-family: MS Sans Serif, verdana, charcoal, helvetica, arial, sans-serif } + .link2 { color:#ffffff; font-weight: bold; text-decoration: none; + font-family: monaco, charcoal, geneva, MS Sans Serif, helvetica, monotype, verdana, sans-serif; + font-size: 9px } + .RFC { color:#666666; font-weight: bold; text-decoration: none; + font-family: monaco, charcoal, geneva, MS Sans Serif, helvetica, monotype, verdana, sans-serif; + font-size: 9px } + .hotText { color:#ffffff; font-weight: normal; text-decoration: none; + font-family: charcoal, monaco, geneva, MS Sans Serif, helvetica, monotype, verdana, sans-serif; + font-size: 9px } +</style> +</head> +<body bgcolor="#ffffff" text="#000000" alink="#000000" vlink="#666666" link="#990000"> +<!-- BEGIN WAYBACK TOOLBAR INSERT --> +<script> if (window.archive_analytics) { window.archive_analytics.values['server_name']="wwwb-app19.us.archive.org";}; </script> + +<script type="text/javascript" src="/static/js/disclaim-element.js" ></script> +<script type="text/javascript" src="/static/js/graph-calc.js" ></script> +<script type="text/javascript" src="/static/jflot/jquery.min.js" ></script> +<script type="text/javascript"> +//<![CDATA[ +var firstDate = 820454400000; +var lastDate = 1420070399999; +var wbPrefix = "/web/"; +var wbCurrentUrl = "http:\/\/www.open-content.net\/specs\/draft-jchapweske-thex-02.html"; + +var curYear = -1; +var curMonth = -1; +var yearCount = 18; +var firstYear = 1996; +var imgWidth = 475; +var yearImgWidth = 25; +var monthImgWidth = 2; +var trackerVal = "none"; +var displayDay = "16"; +var displayMonth = "mar"; +var displayYear = "2008"; +var prettyMonths = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; + +function showTrackers(val) { + if(val == trackerVal) { + return; + } + if(val == "inline") { + document.getElementById("displayYearEl").style.color = "#ec008c"; + document.getElementById("displayMonthEl").style.color = "#ec008c"; + document.getElementById("displayDayEl").style.color = "#ec008c"; + } else { + document.getElementById("displayYearEl").innerHTML = displayYear; + document.getElementById("displayYearEl").style.color = "#ff0"; + document.getElementById("displayMonthEl").innerHTML = displayMonth; + document.getElementById("displayMonthEl").style.color = "#ff0"; + document.getElementById("displayDayEl").innerHTML = displayDay; + document.getElementById("displayDayEl").style.color = "#ff0"; + } + document.getElementById("wbMouseTrackYearImg").style.display = val; + document.getElementById("wbMouseTrackMonthImg").style.display = val; + trackerVal = val; +} +function getElementX2(obj) { + var thing = jQuery(obj); + if((thing == undefined) + || (typeof thing == "undefined") + || (typeof thing.offset == "undefined")) { + return getElementX(obj); + } + return Math.round(thing.offset().left); +} +function trackMouseMove(event,element) { + + var eventX = getEventX(event); + var elementX = getElementX2(element); + var xOff = eventX - elementX; + if(xOff < 0) { + xOff = 0; + } else if(xOff > imgWidth) { + xOff = imgWidth; + } + var monthOff = xOff % yearImgWidth; + + var year = Math.floor(xOff / yearImgWidth); + var yearStart = year * yearImgWidth; + var monthOfYear = Math.floor(monthOff / monthImgWidth); + if(monthOfYear > 11) { + monthOfYear = 11; + } + // 1 extra border pixel at the left edge of the year: + var month = (year * 12) + monthOfYear; + var day = 1; + if(monthOff % 2 == 1) { + day = 15; + } + var dateString = + zeroPad(year + firstYear) + + zeroPad(monthOfYear+1,2) + + zeroPad(day,2) + "000000"; + + var monthString = prettyMonths[monthOfYear]; + document.getElementById("displayYearEl").innerHTML = year + 1996; + document.getElementById("displayMonthEl").innerHTML = monthString; + // looks too jarring when it changes.. + //document.getElementById("displayDayEl").innerHTML = zeroPad(day,2); + + var url = wbPrefix + dateString + '/' + wbCurrentUrl; + document.getElementById('wm-graph-anchor').href = url; + + //document.getElementById("wmtbURL").value="evX("+eventX+") elX("+elementX+") xO("+xOff+") y("+year+") m("+month+") monthOff("+monthOff+") DS("+dateString+") Moy("+monthOfYear+") ms("+monthString+")"; + if(curYear != year) { + var yrOff = year * yearImgWidth; + document.getElementById("wbMouseTrackYearImg").style.left = yrOff + "px"; + curYear = year; + } + if(curMonth != month) { + var mtOff = year + (month * monthImgWidth) + 1; + document.getElementById("wbMouseTrackMonthImg").style.left = mtOff + "px"; + curMonth = month; + } +} +//]]> +</script> + +<style type="text/css">body{margin-top:0!important;padding-top:0!important;min-width:800px!important;}#wm-ipp a:hover{text-decoration:underline!important;}</style> +<div id="wm-ipp" lang="en" class="__wb_banner_div" style="display:none; position:relative;padding:0 5px;min-height:70px;min-width:800px"> + + +<div id="wm-ipp-inside" class="__wb_banner_div" style="position:fixed;padding:0!important;margin:0!important;width:97%;min-width:780px;border:5px solid #000;border-top:none;background-image:url(/static/images/toolbar/wm_tb_bk_trns.png);text-align:center;-moz-box-shadow:1px 1px 3px #333;-webkit-box-shadow:1px 1px 3px #333;box-shadow:1px 1px 3px #333;font-size:11px!important;font-family:'Lucida Grande','Arial',sans-serif!important;"> + <table style="border-collapse:collapse;margin:0;padding:0;width:100%;"><tbody><tr> + <td style="padding:10px;vertical-align:top;min-width:110px;"> + <a href="/web/" title="Wayback Machine home page" style="background-color:transparent;border:none;"><img src="/static/images/toolbar/wayback-toolbar-logo.png" alt="Wayback Machine" width="110" height="39" border="0"/></a> + </td> + <td style="padding:0!important;text-align:center;vertical-align:top;width:100%;"> + + <table style="border-collapse:collapse;margin:0 auto;padding:0;width:570px;"><tbody><tr> + <td style="padding:3px 0;" colspan="2"> + <form target="_top" method="get" action="/web/form-submit.jsp" name="wmtb" id="wmtb" style="margin:0!important;padding:0!important;"><input type="text" name="url" id="wmtbURL" value="http://www.open-content.net/specs/draft-jchapweske-thex-02.html" style="width:400px;font-size:11px;font-family:'Lucida Grande','Arial',sans-serif;" onfocus="javascript:this.focus();this.select();" /><input type="hidden" name="type" value="replay" /><input type="hidden" name="date" value="20080316033726" /><input type="submit" value="Go" style="font-size:11px;font-family:'Lucida Grande','Arial',sans-serif;margin-left:5px;width: inherit !important" /><span id="wm_tb_options" style="display:block;"></span></form> + </td> + <td style="vertical-align:bottom;padding:5px 0 0 0!important;" rowspan="2"> + <table style="border-collapse:collapse;width:110px;color:#99a;font-family:'Helvetica','Lucida Grande','Arial',sans-serif;"><tbody> + + <!-- NEXT/PREV MONTH NAV AND MONTH INDICATOR --> + <tr style="width:110px;height:16px;font-size:10px!important;"> + <td style="padding-right:9px;font-size:11px!important;font-weight:bold;text-transform:uppercase;text-align:right;white-space:nowrap;overflow:visible;" nowrap="nowrap"> + + <a href="/web/20080214024543/http://open-content.net/specs/draft-jchapweske-thex-02.html" style="text-decoration:none;color:#33f;font-weight:bold;background-color:transparent;border:none;" title="14 feb 2008"><strong>FEB</strong></a> + + </td> + <td id="displayMonthEl" style="background:#000;color:#ff0;font-size:11px!important;font-weight:bold;text-transform:uppercase;width:34px;height:15px;padding-top:1px;text-align:center;" title="You are here: 3:37:26 mar 16, 2008">MAR</td> + <td style="padding-left:9px;font-size:11px!important;font-weight:bold;text-transform:uppercase;white-space:nowrap;overflow:visible;" nowrap="nowrap"> + + <a href="/web/20080517043137/http://open-content.net/specs/draft-jchapweske-thex-02.html" style="text-decoration:none;color:#33f;font-weight:bold;background-color:transparent;border:none;" title="17 maj 2008"><strong>MAJ</strong></a> + + </td> + </tr> + + <!-- NEXT/PREV CAPTURE NAV AND DAY OF MONTH INDICATOR --> + <tr> + <td style="padding-right:9px;white-space:nowrap;overflow:visible;text-align:right!important;vertical-align:middle!important;" nowrap="nowrap"> + + <a href="/web/20080302051813/http://open-content.net/specs/draft-jchapweske-thex-02.html" title="5:18:13 mar 2, 2008" style="background-color:transparent;border:none;"><img src="/static/images/toolbar/wm_tb_prv_on.png" alt="Previous capture" width="14" height="16" border="0" /></a> + + </td> + <td id="displayDayEl" style="background:#000;color:#ff0;width:34px;height:24px;padding:2px 0 0 0;text-align:center;font-size:24px;font-weight: bold;" title="You are here: 3:37:26 mar 16, 2008">16</td> + <td style="padding-left:9px;white-space:nowrap;overflow:visible;text-align:left!important;vertical-align:middle!important;" nowrap="nowrap"> + + <a href="/web/20080517043137/http://open-content.net/specs/draft-jchapweske-thex-02.html" title="4:31:37 maj 17, 2008" style="background-color:transparent;border:none;"><img src="/static/images/toolbar/wm_tb_nxt_on.png" alt="Next capture" width="14" height="16" border="0"/></a> + + </td> + </tr> + + <!-- NEXT/PREV YEAR NAV AND YEAR INDICATOR --> + <tr style="width:110px;height:13px;font-size:9px!important;"> + <td style="padding-right:9px;font-size:11px!important;font-weight: bold;text-align:right;white-space:nowrap;overflow:visible;" nowrap="nowrap"> + + <a href="/web/20070310031709/http://www.open-content.net/specs/draft-jchapweske-thex-02.html" style="text-decoration:none;color:#33f;font-weight:bold;background-color:transparent;border:none;" title="10 mar 2007"><strong>2007</strong></a> + + </td> + <td id="displayYearEl" style="background:#000;color:#ff0;font-size:11px!important;font-weight: bold;padding-top:1px;width:34px;height:13px;text-align:center;" title="You are here: 3:37:26 mar 16, 2008">2008</td> + <td style="padding-left:9px;font-size:11px!important;font-weight: bold;white-space:nowrap;overflow:visible;" nowrap="nowrap"> + + <a href="/web/20090415152844/http://www.open-content.net/specs/draft-jchapweske-thex-02.html" style="text-decoration:none;color:#33f;font-weight:bold;background-color:transparent;border:none;" title="15 apr 2009"><strong>2009</strong></a> + + </td> + </tr> + </tbody></table> + </td> + + </tr> + <tr> + <td style="vertical-align:middle;padding:0!important;"> + <a href="/web/20080316033726*/http://www.open-content.net/specs/draft-jchapweske-thex-02.html" style="color:#33f;font-size:11px;font-weight:bold;background-color:transparent;border:none;" title="See a list of every capture for this URL"><strong>99 captures</strong></a> + <div class="__wb_banner_div" style="margin:0!important;padding:0!important;color:#666;font-size:9px;padding-top:2px!important;white-space:nowrap;" title="Timespan for captures of this URL">13 apr 03 - 28 jun 13</div> + </td> + <td style="padding:0!important;"> + <a style="position:relative; white-space:nowrap; width:475px;height:27px;" href="" id="wm-graph-anchor"> + <div class="__wb_banner_div" id="wm-ipp-sparkline" style="position:relative; white-space:nowrap; width:475px;height:27px;background-color:#fff;cursor:pointer;border-right:1px solid #ccc;" title="Explore captures for this URL"> + <img id="sparklineImgId" style="position:absolute; z-index:9012; top:0px; left:0px;" + onmouseover="showTrackers('inline');" + onmouseout="showTrackers('none');" + onmousemove="trackMouseMove(event,this)" + alt="sparklines" + width="475" + height="27" + border="0" + src="/web/jsp/graph.jsp?graphdata=475_27_1996:-1:000000000000_1997:-1:000000000000_1998:-1:000000000000_1999:-1:000000000000_2000:-1:000000000000_2001:-1:000000000000_2002:-1:000000000000_2003:-1:000101000101_2004:-1:010100011201_2005:-1:222102141122_2006:-1:310301140001_2007:-1:023021303311_2008:2:112010001102_2009:-1:111110010001_2010:-1:000000000000_2011:-1:000000202020_2012:-1:110100100010_2013:-1:003302000000_2014:-1:000000000000"></img> + <img id="wbMouseTrackYearImg" + style="display:none; position:absolute; z-index:9010;" + width="25" + height="27" + border="0" + src="/static/images/toolbar/transp-yellow-pixel.png"></img> + <img id="wbMouseTrackMonthImg" + style="display:none; position:absolute; z-index:9011; " + width="2" + height="27" + border="0" + src="/static/images/toolbar/transp-red-pixel.png"></img> + </div> + </a> + + </td> + </tr></tbody></table> + </td> + <td style="text-align:right;padding:5px;width:65px;font-size:11px!important;"> + <a href="javascript:;" onclick="document.getElementById('wm-ipp').style.display='none';" style="display:block;padding-right:18px;background:url(/static/images/toolbar/wm_tb_close.png) no-repeat 100% 0;color:#33f;font-family:'Lucida Grande','Arial',sans-serif;margin-bottom:23px;background-color:transparent;border:none;" title="Close the toolbar">Close</a> + <a href="http://faq.web.archive.org/" style="display:block;padding-right:18px;background:url(/static/images/toolbar/wm_tb_help.png) no-repeat 100% 0;color:#33f;font-family:'Lucida Grande','Arial',sans-serif;background-color:transparent;border:none;" title="Get some help using the Wayback Machine">Help</a> + </td> + </tr></tbody></table> + +</div> +</div> +<script type="text/javascript"> + var wmDisclaimBanner = document.getElementById("wm-ipp"); + if(wmDisclaimBanner != null) { + disclaimElement(wmDisclaimBanner); + } +</script> +<!-- END WAYBACK TOOLBAR INSERT --> + +<table border="0" cellpadding="0" cellspacing="2" width="30" height="15" align="right"><tr><td bgcolor="#990000" align="center" width="30" height="15"><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#toc" CLASS="link2"><font face="monaco, MS Sans Serif" color="#ffffff" size="1"><b> TOC </b></font></a><br></td></tr></table> +<table width="66%" border="0" cellpadding="0" cellspacing="0"><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="1"> +<tr valign="top"><td width="33%" bgcolor="#666666" class="header"> </td><td width="33%" bgcolor="#666666" class="header">J. Chapweske</td></tr> +<tr valign="top"><td width="33%" bgcolor="#666666" class="header"> </td><td width="33%" bgcolor="#666666" class="header">Onion Networks, Inc.</td></tr> +<tr valign="top"><td width="33%" bgcolor="#666666" class="header"> </td><td width="33%" bgcolor="#666666" class="header">G. Mohr</td></tr> +<tr valign="top"><td width="33%" bgcolor="#666666" class="header"> </td><td width="33%" bgcolor="#666666" class="header">Bitzi, Inc.</td></tr> +<tr valign="top"><td width="33%" bgcolor="#666666" class="header"> </td><td width="33%" bgcolor="#666666" class="header">March 4, 2003</td></tr> +</table></td></tr></table> +<div align="right"><font face="monaco, MS Sans Serif" color="#990000" size="+3"><b><br><span class="title">Tree Hash EXchange format (THEX)</span></b></font></div> +<font face="verdana, helvetica, arial, sans-serif" size="2"> + +<h3>Abstract</h3> + +<p> +This memo presents the Tree Hash Exchange (THEX) format, for +exchanging Merkle Hash Trees built up from the subrange hashes of discrete +digital files. Such tree hash data structures assist in file integrity +verification, allowing arbitrary subranges of bytes to be verified before the +entire file has been received. +</p> +<a name="toc"><br><hr size="1" shade="0"></a> +<table border="0" cellpadding="0" cellspacing="2" width="30" height="15" align="right"><tr><td bgcolor="#990000" align="center" width="30" height="15"><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#toc" CLASS="link2"><font face="monaco, MS Sans Serif" color="#ffffff" size="1"><b> TOC </b></font></a><br></td></tr></table> +<h3>Table of Contents</h3> +<ul compact class="toc"> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor1">1.</a> +Introduction<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor2">2.</a> +Merkle Hash Trees<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor3">2.1</a> +Hash Functions<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor4">2.2</a> +Unbalanced Trees<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#choice_of_segment_size">2.3</a> +Choice Of Segment Size<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor5">3.</a> +Serialization Format<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor6">3.1</a> +DIME Encapsulation<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor7">3.2</a> +XML Tree Description<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor8">3.2.1</a> +File Size<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor9">3.2.2</a> +File Segment Size<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor10">3.2.3</a> +Digest Algorithm<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor11">3.2.4</a> +Digest Output Size<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor12">3.2.5</a> +Serialized Tree Depth<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor13">3.2.6</a> +Serialized Tree Type<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor14">3.2.7</a> +Serialized Tree URI<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor15">3.3</a> +Breadth-First Serialization<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor16">3.3.1</a> +Serialization Type URI<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#rfc.authors">§</a> +Authors' Addresses<br></b> +<b><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#anchor17">A.</a> +Test Vectors<br></b> +</ul> +<br clear="all"> + +<a name="anchor1"><br><hr size="1" shade="0"></a> +<table border="0" cellpadding="0" cellspacing="2" width="30" height="15" align="right"><tr><td bgcolor="#990000" align="center" width="30" height="15"><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#toc" CLASS="link2"><font face="monaco, MS Sans Serif" color="#ffffff" size="1"><b> TOC </b></font></a><br></td></tr></table> +<a name="rfc.section.1"></a><h3>1. Introduction</h3> + +<p> +The Merkle Hash Tree, invented by Ralph Merkle, is a hash construct that +exhibits desirable properties for verifying the integrity of files and file subranges +in an incremental or out-of-order fashion. This document describes a binary +serialization format for hash trees that is compact and optimized for both +sequential and random access. +This memo has two goals: + +<ol class="text"> + +<li> +To describe Merkle Hash Trees and how they are used for file integrity +verification. +</li> + +<li> +To describe a serialization format for storage and transmission of hash +trees. +</li> + +</ol> +<p> + +</p> + +<a name="anchor2"><br><hr size="1" shade="0"></a> +<table border="0" cellpadding="0" cellspacing="2" width="30" height="15" align="right"><tr><td bgcolor="#990000" align="center" width="30" height="15"><a href="/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html#toc" CLASS="link2"><font face="monaco, MS Sans Serif" color="#ffffff" size="1"><b> TOC </b></font></a><br></td></tr></table> +<a name="rfc.section.2"></a><h3>2. Merkle Hash Trees</h3> + +<p> + +It is common practice in distributed systems to use secure hash algorithms to +verify the integrity of content. The employment of secure hash algorithms +enables systems to retreive content from completely untrusted hosts with only +a small amount of trusted metadata. + +</p> + +<p> + +Typically, algorithms such as SHA-1 and MD5 have been used to check the content +integrity after retrieving the entire file. These full file hash techniques +work fine in an environment where the content is received from a single host +and there are no streaming requirements. However, there are an increasing +number of systems that retrieve a single piece of content from multiple +untrusted hosts, and require content verification well in advance of retrieving +the entire file. + +</p> + +<p> + +Many modern peer-to-peer content delivery systems employ fixed size "block +hashes" to provide a finer level of granularity in their integrity checking. +This approach is still limited in the verification resolution it can attain. +Additionally, all of the hash information must be retrieved from a trusted host, +which can limit the scalability and reliability of the system. + +</p> + +<p> + +Another way to verify content is to use the hash tree approach. This approach +has the desired characteristics missing from the full file hash approach and +works well for very large files. The idea is to break the file up into a number +of small pieces, hash those pieces, and then iteratively combine and rehash the +resulting hashes in a tree-like fashion until a single "root hash" is created. + +</p> + +<p> + +The root hash by itself behaves exactly the same way that full file hashes do. +If the root hash is retrieved from a trusted source, it can be used to verify +the integrity of the entire content. More importantly, the root hash can be +combined with a small number of other hashes to verify the integrity of any of +the file segments. + +<p> + +For example, consider a file made up of four segments, +S1, S2, S3, and S4. Let H() be the hash function, and '+' +indicate concatenation. You could take the traditional +hash value: + +</p> +</font><pre> + VALUE=H(S1+S2+S3+S4) +</pre><font face="verdana, helvetica, arial, sans-serif" size="2"> + +<p> + +Or, you could employ a tree approach. The tree hash utilizes two hash algorithms - one for leaf hashes and one for internal hashes. Let LH() be the leaf hash function and IH() be the internal hash function: + +</p> +</font><pre> + + ROOT=IH(E+F) + / \ + / \ + E=IH(A+B) F=IH(C+D) + / \ / \ + / \ / \ + A=LH(S1) B=LH(S2) C=LH(S3) D=LH(S4) + +</pre><font face="verdana, helvetica, arial, sans-serif" size="2"> + +<p> + +Now, assuming that the ROOT is retrieved from a trusted source, the integrity +of a file segment coming from an untrusted source can be checked with a small +amount of hash data. For instance, if S1 is received from an untrusted host, +the integrity of S1 can be verified with just B and F. + +With these, it can be verified that, yes: S1 can be combined up to +equal the ROOT hash, even without seeing the other +segments. (It is just as impractical to create falsified values +of B and F as it is to manipulate any good hash function to +give desired results -- so B and F can come from untrusted sources +as well.) + +Similarly, if some other untrusted source provides segments +S3 and S4, their integrity can be easily checked when combined with hash E. +From segments S3 and S4, the values of C and D and then F can be calculated. + +With these, you can verify that S3 and S4 can combine up +to create the ROOT -- even if other sources are providing bogus S1 and S2 +segments. Bad info can be immediately recognized and discarded, and +good info retained, even in situations where you could not even begin +to calculate a traditional full-file hash. + +</p> + +</p> + +<p> + +Another interesting property of the tree approach is that it can be used to +verify (tree-aligned) subranges whose size is any multiple of the base segment +size. + +</p> + +<p> +Consider for example an initial segment size of 1,024 bytes, and +a file of 32GB. You could verify a single 1,024-byte block, with +about 25 proof-assist values, or a block of size 16GB, with a single +proof-assist value -- or anything in between. + +</p> + +<a name="rfc.section.2.1"></a><h4><a name="anchor3">2.1</a> Hash Functions</h4> + +<p> + +The strength of the hash tree construct is only as strong as the underlying hash algorithm. Thus, it is RECOMMENDED that a secure hash algorithm such as SHA-1 be used as the basis of the hash tree. + +</p> + +<p> + +In order to protect against collisions between leaf hashes and internal hashes, different hash constructs are used to hash the leaf nodes and the internal nodes. The same hash algorithm is used as the basis of e... [truncated message content] |
From: <ul...@us...> - 2014-02-11 22:21:55
|
Revision: 122 http://sourceforge.net/p/adc/code/122 Author: ullner Date: 2014-02-11 22:21:52 +0000 (Tue, 11 Feb 2014) Log Message: ----------- Generated HTML documents for respective TXT document Added Paths: ----------- trunk/ADC-EXT.html trunk/ADC-PRD.html trunk/ADC-Recommendation.html trunk/ADC-Test.html trunk/ADC.html Added: trunk/ADC-EXT.html =================================================================== --- trunk/ADC-EXT.html (rev 0) +++ trunk/ADC-EXT.html 2014-02-11 22:21:52 UTC (rev 122) @@ -0,0 +1,2686 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> +<meta name="generator" content="AsciiDoc 8.6.9" /> +<title>ADC Extensions</title> +<style type="text/css"> +/* Shared CSS for AsciiDoc xhtml11 and html5 backends */ + +/* Default font. */ +body { + font-family: Georgia,serif; +} + +/* Title font. */ +h1, h2, h3, h4, h5, h6, +div.title, caption.title, +thead, p.table.header, +#toctitle, +#author, #revnumber, #revdate, #revremark, +#footer { + font-family: Arial,Helvetica,sans-serif; +} + +body { + margin: 1em 5% 1em 5%; +} + +a { + color: blue; + text-decoration: underline; +} +a:visited { + color: fuchsia; +} + +em { + font-style: italic; + color: navy; +} + +strong { + font-weight: bold; + color: #083194; +} + +h1, h2, h3, h4, h5, h6 { + color: #527bbd; + margin-top: 1.2em; + margin-bottom: 0.5em; + line-height: 1.3; +} + +h1, h2, h3 { + border-bottom: 2px solid silver; +} +h2 { + padding-top: 0.5em; +} +h3 { + float: left; +} +h3 + * { + clear: left; +} +h5 { + font-size: 1.0em; +} + +div.sectionbody { + margin-left: 0; +} + +hr { + border: 1px solid silver; +} + +p { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +ul, ol, li > p { + margin-top: 0; +} +ul > li { color: #aaa; } +ul > li > * { color: black; } + +.monospaced, code, pre { + font-family: "Courier New", Courier, monospace; + font-size: inherit; + color: navy; + padding: 0; + margin: 0; +} +pre { + white-space: pre-wrap; +} + +#author { + color: #527bbd; + font-weight: bold; + font-size: 1.1em; +} +#email { +} +#revnumber, #revdate, #revremark { +} + +#footer { + font-size: small; + border-top: 2px solid silver; + padding-top: 0.5em; + margin-top: 4.0em; +} +#footer-text { + float: left; + padding-bottom: 0.5em; +} +#footer-badges { + float: right; + padding-bottom: 0.5em; +} + +#preamble { + margin-top: 1.5em; + margin-bottom: 1.5em; +} +div.imageblock, div.exampleblock, div.verseblock, +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, +div.admonitionblock { + margin-top: 1.0em; + margin-bottom: 1.5em; +} +div.admonitionblock { + margin-top: 2.0em; + margin-bottom: 2.0em; + margin-right: 10%; + color: #606060; +} + +div.content { /* Block element content. */ + padding: 0; +} + +/* Block element titles. */ +div.title, caption.title { + color: #527bbd; + font-weight: bold; + text-align: left; + margin-top: 1.0em; + margin-bottom: 0.5em; +} +div.title + * { + margin-top: 0; +} + +td div.title:first-child { + margin-top: 0.0em; +} +div.content div.title:first-child { + margin-top: 0.0em; +} +div.content + div.title { + margin-top: 0.0em; +} + +div.sidebarblock > div.content { + background: #ffffee; + border: 1px solid #dddddd; + border-left: 4px solid #f0f0f0; + padding: 0.5em; +} + +div.listingblock > div.content { + border: 1px solid #dddddd; + border-left: 5px solid #f0f0f0; + background: #f8f8f8; + padding: 0.5em; +} + +div.quoteblock, div.verseblock { + padding-left: 1.0em; + margin-left: 1.0em; + margin-right: 10%; + border-left: 5px solid #f0f0f0; + color: #888; +} + +div.quoteblock > div.attribution { + padding-top: 0.5em; + text-align: right; +} + +div.verseblock > pre.content { + font-family: inherit; + font-size: inherit; +} +div.verseblock > div.attribution { + padding-top: 0.75em; + text-align: left; +} +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ +div.verseblock + div.attribution { + text-align: left; +} + +div.admonitionblock .icon { + vertical-align: top; + font-size: 1.1em; + font-weight: bold; + text-decoration: underline; + color: #527bbd; + padding-right: 0.5em; +} +div.admonitionblock td.content { + padding-left: 0.5em; + border-left: 3px solid #dddddd; +} + +div.exampleblock > div.content { + border-left: 3px solid #dddddd; + padding-left: 0.5em; +} + +div.imageblock div.content { padding-left: 0; } +span.image img { border-style: none; vertical-align: text-bottom; } +a.image:visited { color: white; } + +dl { + margin-top: 0.8em; + margin-bottom: 0.8em; +} +dt { + margin-top: 0.5em; + margin-bottom: 0; + font-style: normal; + color: navy; +} +dd > *:first-child { + margin-top: 0.1em; +} + +ul, ol { + list-style-position: outside; +} +ol.arabic { + list-style-type: decimal; +} +ol.loweralpha { + list-style-type: lower-alpha; +} +ol.upperalpha { + list-style-type: upper-alpha; +} +ol.lowerroman { + list-style-type: lower-roman; +} +ol.upperroman { + list-style-type: upper-roman; +} + +div.compact ul, div.compact ol, +div.compact p, div.compact p, +div.compact div, div.compact div { + margin-top: 0.1em; + margin-bottom: 0.1em; +} + +tfoot { + font-weight: bold; +} +td > div.verse { + white-space: pre; +} + +div.hdlist { + margin-top: 0.8em; + margin-bottom: 0.8em; +} +div.hdlist tr { + padding-bottom: 15px; +} +dt.hdlist1.strong, td.hdlist1.strong { + font-weight: bold; +} +td.hdlist1 { + vertical-align: top; + font-style: normal; + padding-right: 0.8em; + color: navy; +} +td.hdlist2 { + vertical-align: top; +} +div.hdlist.compact tr { + margin: 0; + padding-bottom: 0; +} + +.comment { + background: yellow; +} + +.footnote, .footnoteref { + font-size: 0.8em; +} + +span.footnote, span.footnoteref { + vertical-align: super; +} + +#footnotes { + margin: 20px 0 20px 0; + padding: 7px 0 0 0; +} + +#footnotes div.footnote { + margin: 0 0 5px 0; +} + +#footnotes hr { + border: none; + border-top: 1px solid silver; + height: 1px; + text-align: left; + margin-left: 0; + width: 20%; + min-width: 100px; +} + +div.colist td { + padding-right: 0.5em; + padding-bottom: 0.3em; + vertical-align: top; +} +div.colist td img { + margin-top: 0.3em; +} + +@media print { + #footer-badges { display: none; } +} + +#toc { + margin-bottom: 2.5em; +} + +#toctitle { + color: #527bbd; + font-size: 1.1em; + font-weight: bold; + margin-top: 1.0em; + margin-bottom: 0.1em; +} + +div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { + margin-top: 0; + margin-bottom: 0; +} +div.toclevel2 { + margin-left: 2em; + font-size: 0.9em; +} +div.toclevel3 { + margin-left: 4em; + font-size: 0.9em; +} +div.toclevel4 { + margin-left: 6em; + font-size: 0.9em; +} + +span.aqua { color: aqua; } +span.black { color: black; } +span.blue { color: blue; } +span.fuchsia { color: fuchsia; } +span.gray { color: gray; } +span.green { color: green; } +span.lime { color: lime; } +span.maroon { color: maroon; } +span.navy { color: navy; } +span.olive { color: olive; } +span.purple { color: purple; } +span.red { color: red; } +span.silver { color: silver; } +span.teal { color: teal; } +span.white { color: white; } +span.yellow { color: yellow; } + +span.aqua-background { background: aqua; } +span.black-background { background: black; } +span.blue-background { background: blue; } +span.fuchsia-background { background: fuchsia; } +span.gray-background { background: gray; } +span.green-background { background: green; } +span.lime-background { background: lime; } +span.maroon-background { background: maroon; } +span.navy-background { background: navy; } +span.olive-background { background: olive; } +span.purple-background { background: purple; } +span.red-background { background: red; } +span.silver-background { background: silver; } +span.teal-background { background: teal; } +span.white-background { background: white; } +span.yellow-background { background: yellow; } + +span.big { font-size: 2em; } +span.small { font-size: 0.6em; } + +span.underline { text-decoration: underline; } +span.overline { text-decoration: overline; } +span.line-through { text-decoration: line-through; } + +div.unbreakable { page-break-inside: avoid; } + + +/* + * xhtml11 specific + * + * */ + +div.tableblock { + margin-top: 1.0em; + margin-bottom: 1.5em; +} +div.tableblock > table { + border: 3px solid #527bbd; +} +thead, p.table.header { + font-weight: bold; + color: #527bbd; +} +p.table { + margin-top: 0; +} +/* Because the table frame attribute is overriden by CSS in most browsers. */ +div.tableblock > table[frame="void"] { + border-style: none; +} +div.tableblock > table[frame="hsides"] { + border-left-style: none; + border-right-style: none; +} +div.tableblock > table[frame="vsides"] { + border-top-style: none; + border-bottom-style: none; +} + + +/* + * html5 specific + * + * */ + +table.tableblock { + margin-top: 1.0em; + margin-bottom: 1.5em; +} +thead, p.tableblock.header { + font-weight: bold; + color: #527bbd; +} +p.tableblock { + margin-top: 0; +} +table.tableblock { + border-width: 3px; + border-spacing: 0px; + border-style: solid; + border-color: #527bbd; + border-collapse: collapse; +} +th.tableblock, td.tableblock { + border-width: 1px; + padding: 4px; + border-style: solid; + border-color: #527bbd; +} + +table.tableblock.frame-topbot { + border-left-style: hidden; + border-right-style: hidden; +} +table.tableblock.frame-sides { + border-top-style: hidden; + border-bottom-style: hidden; +} +table.tableblock.frame-none { + border-style: hidden; +} + +th.tableblock.halign-left, td.tableblock.halign-left { + text-align: left; +} +th.tableblock.halign-center, td.tableblock.halign-center { + text-align: center; +} +th.tableblock.halign-right, td.tableblock.halign-right { + text-align: right; +} + +th.tableblock.valign-top, td.tableblock.valign-top { + vertical-align: top; +} +th.tableblock.valign-middle, td.tableblock.valign-middle { + vertical-align: middle; +} +th.tableblock.valign-bottom, td.tableblock.valign-bottom { + vertical-align: bottom; +} + + +/* + * manpage specific + * + * */ + +body.manpage h1 { + padding-top: 0.5em; + padding-bottom: 0.5em; + border-top: 2px solid silver; + border-bottom: 2px solid silver; +} +body.manpage h2 { + border-style: none; +} +body.manpage div.sectionbody { + margin-left: 3em; +} + +@media print { + body.manpage div#toc { display: none; } +} + + +</style> +<script type="text/javascript"> +/*<+'])'); + // Function that scans the DOM tree for header elements (the DOM2 + // nodeIterator API would be a better technique but not supported by all + // browsers). + var iterate = function (el) { + for (var i = el.firstChild; i != null; i = i.nextSibling) { + if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { + var mo = re.exec(i.tagName); + if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") { + result[result.length] = new TocEntry(i, getText(i), mo[1]-1); + } + iterate(i); + } + } + } + iterate(el); + return result; + } + + var toc = document.getElementById("toc"); + if (!toc) { + return; + } + + // Delete existing TOC entries in case we're reloading the TOC. + var tocEntriesToRemove = []; + var i; + for (i = 0; i < toc.childNodes.length; i++) { + var entry = toc.childNodes[i]; + if (entry.nodeName.toLowerCase() == 'div' + && entry.getAttribute("class") + && entry.getAttribute("class").match(/^toclevel/)) + tocEntriesToRemove.push(entry); + } + for (i = 0; i < tocEntriesToRemove.length; i++) { + toc.removeChild(tocEntriesToRemove[i]); + } + + // Rebuild TOC entries. + var entries = tocEntries(document.getElementById("content"), toclevels); + for (var i = 0; i < entries.length; ++i) { + var entry = entries[i]; + if (entry.element.id == "") + entry.element.id = "_toc_" + i; + var a = document.createElement("a"); + a.href = "#" + entry.element.id; + a.appendChild(document.createTextNode(entry.text)); + var div = document.createElement("div"); + div.appendChild(a); + div.className = "toclevel" + entry.toclevel; + toc.appendChild(div); + } + if (entries.length == 0) + toc.parentNode.removeChild(toc); +}, + + +///////////////////////////////////////////////////////////////////// +// Footnotes generator +///////////////////////////////////////////////////////////////////// + +/* Based on footnote generation code from: + * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html + */ + +footnotes: function () { + // Delete existing footnote entries in case we're reloading the footnodes. + var i; + var noteholder = document.getElementById("footnotes"); + if (!noteholder) { + return; + } + var entriesToRemove = []; + for (i = 0; i < noteholder.childNodes.length; i++) { + var entry = noteholder.childNodes[i]; + if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote") + entriesToRemove.push(entry); + } + for (i = 0; i < entriesToRemove.length; i++) { + noteholder.removeChild(entriesToRemove[i]); + } + + // Rebuild footnote entries. + var cont = document.getElementById("content"); + var spans = cont.getElementsByTagName("span"); + var refs = {}; + var n = 0; + for (i=0; i<spans.length; i++) { + if (spans[i].className == "footnote") { + n++; + var note = spans[i].getAttribute("data-note"); + if (!note) { + // Use [\s\S] in place of . so multi-line matches work. + // Because JavaScript has no s (dotall) regex flag. + note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1]; + spans[i].innerHTML = + "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n + + "' title='View footnote' class='footnote'>" + n + "</a>]"; + spans[i].setAttribute("data-note", note); + } + noteholder.innerHTML += + "<div class='footnote' id='_footnote_" + n + "'>" + + "<a href='#_footnoteref_" + n + "' title='Return to text'>" + + n + "</a>. " + note + "</div>"; + var id =spans[i].getAttribute("id"); + if (id != null) refs["#"+id] = n; + } + } + if (n == 0) + noteholder.parentNode.removeChild(noteholder); + else { + // Process footnoterefs. + for (i=0; i<spans.length; i++) { + if (spans[i].className == "footnoteref") { + var href = spans[i].getElementsByTagName("a")[0].getAttribute("href"); + href = href.match(/#.*/)[0]; // Because IE return full URL. + n = refs[href]; + spans[i].innerHTML = + "[<a href='#_footnote_" + n + + "' title='View footnote' class='footnote'>" + n + "</a>]"; + } + } + } +}, + +install: function(toclevels) { + var timerId; + + function reinstall() { + asciidoc.footnotes(); + if (toclevels) { + asciidoc.toc(toclevels); + } + } + + function reinstallAndRemoveTimer() { + clearInterval(timerId); + reinstall(); + } + + timerId = setInterval(reinstall, 500); + if (document.addEventListener) + document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false); + else + window.onload = reinstallAndRemoveTimer; +} + +} +asciidoc.install(4); +/*]]>*/ +</script> +</head> +<body class="article"> +<div id="header"> +<h1>ADC Extensions</h1> +<span id="author">Fredrik Ullner, ul...@gm...</span><br /> +<span id="revnumber">version 1.0.8,</span> +<span id="revdate">February 2014</span> +<div id="toc"> + <div id="toctitle">Table of Contents</div> + <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript> +</div> +</div> +<div id="content"> +<div class="sect1"> +<h2 id="_abstract">1. Abstract</h2> +<div class="sectionbody"> +<div class="paragraph"><p>These are the official extensions to ADC. This document is based on the +information contained in the ADC wiki and ADC forum - spefications from there are moved here +when they are mature and stable enough.</p></div> +</div> +</div> +<div class="sect1"> +<h2 id="_version_history">2. Version history</h2> +<div class="sectionbody"> +<div class="paragraph"><p>The latest draft of the next version of this document as well as intermediate +and older versions can be downloaded from +$URL: <a href="https://svn.code.sf.net/p/adc/code/trunk/ADC-EXT.txt">https://svn.code.sf.net/p/adc/code/trunk/ADC-EXT.txt</a> $.</p></div> +<div class="paragraph"><p>This version corresponds to $Revision: 121 $.</p></div> +<div class="sect2"> +<h3 id="_version_1_0_8">2.1. Version 1.0.8</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2014-02-11</p></div> +<div class="ulist"><ul> +<li> +<p> +Improved <em>NATT</em> documentation, as according to the original paper. +</p> +</li> +<li> +<p> +Added <em>ONID</em> extension to provide online service integration. +</p> +</li> +<li> +<p> +TIGR now specifies the changes done to the file list. +</p> +</li> +<li> +<p> +Added error code <em>ADCS transfers are required</em> in STA. +</p> +</li> +<li> +<p> +Added <em>ASCH</em> extension for extended searching capability. +</p> +</li> +<li> +<p> +Added <em>Date</em> attribute in file list for files and directories. +</p> +</li> +<li> +<p> +Added <em>Size</em> attribute in file list for directories. +</p> +</li> +<li> +<p> +Added <em>Children</em> attribute in file list for directories. +</p> +</li> +<li> +<p> +Added downloaded progress report for uploaders in GET. +</p> +</li> +<li> +<p> +Added <em>RDEX</em> for extended redirecting capabilities. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_7">2.2. Version 1.0.7</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2012-11-22</p></div> +<div class="ulist"><ul> +<li> +<p> +Added application and version separation in INF +</p> +</li> +<li> +<p> +TIGR should now correctly reference SCH and RES +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_6">2.3. Version 1.0.6</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-09-29</p></div> +<div class="ulist"><ul> +<li> +<p> +Added <em>KEYP</em> extension for providing certificate substitution protection in ADCS. +</p> +</li> +<li> +<p> +Added note to signal DFAV. +</p> +</li> +<li> +<p> +Added <em>SUDP</em> extension for encryption of UDP traffic. +</p> +</li> +<li> +<p> +Added <em>TYPE</em> extension for chat state notifications. +</p> +</li> +<li> +<p> +Added <em>FEED</em> extension for RSS feeds. +</p> +</li> +<li> +<p> +Added <em>SEGA</em> extension for grouping of file extensions in SCH. +</p> +</li> +<li> +<p> +Added failover hub addresses to the hub’s INF. +</p> +</li> +<li> +<p> +Added free slots to the client’s INF. +</p> +</li> +<li> +<p> +Added <em>ADCS</em> extension for encryption in ADC. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_5">2.4. Version 1.0.5</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-09-16</p></div> +<div class="ulist"><ul> +<li> +<p> +Added locale field to INF. +</p> +</li> +<li> +<p> +Modified user parameter <em>line</em> in UCMD to handle multiple inputs. +</p> +</li> +<li> +<p> +Added hidden in enumeration of CT field in INF. +</p> +</li> +<li> +<p> +Added error code Invalid feature in STA. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_4">2.5. Version 1.0.4</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-06-29</p></div> +<div class="ulist"><ul> +<li> +<p> +Added magnet link extension to UCMD. +</p> +</li> +<li> +<p> +Added NAT traversal extension <em>NATT</em>. +</p> +</li> +<li> +<p> +Added referral field to STA. +</p> +</li> +<li> +<p> +Added upload queue field to STA. +</p> +</li> +<li> +<p> +Added partial file sharing extension <em>PFSR</em>. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_3">2.6. Version 1.0.3</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-05-26</p></div> +<div class="ulist"><ul> +<li> +<p> +Removed optional keywords from UCMD. +</p> +</li> +<li> +<p> +Added <em>BLOM</em> extension for bloom filters. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_2">2.7. Version 1.0.2</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-04-04</p></div> +<div class="ulist"><ul> +<li> +<p> +Added <em>UCMD</em> extension for user commands. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0_1">2.8. Version 1.0.1</h3> +<div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2009-08-04</p></div> +<div class="ulist"><ul> +<li> +<p> +Added timestamp field to MSG. +</p> +</li> +<li> +<p> +Added <em>DFAV</em> extension for distributing hub addresses. +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_0">2.9. Version 1.0</h3> +<div class="paragraph"><p>Jacek Sieka <<a href="mailto:arn...@gm...">arn...@gm...</a>>, 2008-05-02</p></div> +<div class="ulist"><ul> +<li> +<p> +Initial release created from original ADC 1.0 text. +</p> +</li> +<li> +<p> +Added <em>PING</em> extension for hub pingers. +</p> +</li> +</ul></div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_extensions">3. Extensions</h2> +<div class="sectionbody"> +<div class="sect2"> +<h3 id="_tigr_tiger_tree_hash_support">3.1. TIGR - Tiger tree hash support</h3> +<div class="sect3"> +<h4 id="_general">3.1.1. General</h4> +<div class="paragraph"><p>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</p></div> +</div> +<div class="sect3"> +<h4 id="_tigr_for_shared_files">3.1.2. TIGR for shared files</h4> +<div class="paragraph"><p>All files shared by TIGR supporting clients must have been hashed using Merkle +Hash trees, as defined by +<a href="http://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html">http://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html</a>. +The Tiger +algorithm, as specified by <a href="http://www.cs.technion.ac.il/~biham/Reports/Tiger/">http://www.cs.technion.ac.il/~biham/Reports/Tiger/</a>, +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.</p></div> +<div class="paragraph"><p>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.</p></div> +<div class="paragraph"><p>In the file list, each File element carries an additional attribute "TTH" +containing the base32-encoded value of the Tiger tree root.</p></div> +<div class="paragraph"><p>In the GET/GFI type, the full tree may be accessed using the "tthl" type.</p></div> +<div class="paragraph"><p>"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.</p></div> +<div class="paragraph"><p>In the GET/GFI namespace, files are identified by +"TTH/<base32-encoded tree root>".</p></div> +<div class="paragraph"><p>In SCH and RES, the following attributes are added:</p></div> +<div class="tableblock"> +<table rules="all" +frame="border" +cellspacing="0" cellpadding="4"> +<col /> +<col /> +<tbody> +<tr> +<td align="left" valign="top"><p class="table">TR</p></td> +<td align="left" valign="top"><p class="table">Tiger tree Hash root, encoded with base32.</p></td> +</tr> +<tr> +<td align="left" valign="top"><p class="table">TD</p></td> +<td align="left" valign="top"><p class="table">Tree depth, index of the highest level of tree data available, root-only = 0, first level (2 leaves) = 1, second level = 2, etc…</p></td> +</tr> +</tbody> +</table> +</div> +<div class="paragraph"><p>The following changes are done to the file list XML schema:</p></div> +<div class="paragraph"><p>A new type is defined with an appropriate attribute:</p></div> +<div class="listingblock"> +<div class="content"> +<pre><code><xs:simpleType name="tthType"> + <xs:restriction base="xs:string"> + <xs:pattern value="[A-Za-z2-7]{39}" /> + </xs:restriction> +</xs:simpleType> +<xs:attribute name="TTH" type="tthType" /></code></pre> +</div></div> +<div class="paragraph"><p>The attribute is then referenced in the File element:</p></div> +<div class="listingblock"> +<div class="content"> +<pre><code><xs:attribute ref="TTH" use="required" /></code></pre> +</div></div> +</div> +</div> +<div class="sect2"> +<h3 id="_bzip_file_list_compressed_with_bzip2">3.2. BZIP - File list compressed with bzip2</h3> +<div class="paragraph"><p>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).</p></div> +</div> +<div class="sect2"> +<h3 id="_zlib_compressed_communication">3.3. ZLIB - Compressed communication</h3> +<div class="paragraph"><p>There are two variants of zlib support, FULL and GET, and only one should be +used on a each communications channel set up.</p></div> +<div class="sect3"> +<h4 id="_zlib_full">3.3.1. ZLIB-FULL</h4> +<div class="paragraph"><p>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.</p></div> +</div> +<div class="sect3"> +<h4 id="_zlib_get">3.3.2. ZLIB-GET</h4> +<div class="paragraph"><p>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.</p></div> +</div> +</div> +<div class="sect2"> +<h3 id="_ping_pinger_extension">3.4. PING - Pinger extension</h3> +<div class="paragraph"><p>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).</p></div> +<div class="paragraph"><p>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).</p></div> +<div class="sect3"> +<h4 id="_inf">3.4.1. INF</h4> +<div class="paragraph"><p>Contexts : F</p></div> +<div class="paragraph"><p>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):</p></div> +<div class="tableblock"> +<table rules="all" +frame="border" +cellspacing="0" cellpadding="4"> +<col /> +<col /> +<col /> +<thead> +<tr> +<th align="left" valign="top... [truncated message content] |
From: <ul...@us...> - 2014-08-05 12:42:47
|
Revision: 124 http://sourceforge.net/p/adc/code/124 Author: ullner Date: 2014-08-05 12:42:42 +0000 (Tue, 05 Aug 2014) Log Message: ----------- Updated recommendations to include a partial client/hub implementation Modified Paths: -------------- trunk/ADC-Recommendation.html trunk/ADC-Recommendation.txt Modified: trunk/ADC-Recommendation.html =================================================================== --- trunk/ADC-Recommendation.html 2014-07-03 19:29:18 UTC (rev 123) +++ trunk/ADC-Recommendation.html 2014-08-05 12:42:42 UTC (rev 124) @@ -734,10 +734,7 @@ <body class="article"> <div id="header"> <h1>ADC Recommendations</h1> -<span id="author">Fredrik Ullner</span><br /> -<span id="email"><code><<a href="mailto:ul...@gm...">ul...@gm...</a>></code></span><br /> -<span id="revnumber">version 1.1.0,</span> -<span id="revdate">December 2013</span> +<span id="author">version 1.2.0, UNRELEASED</span><br /> <div id="toc"> <div id="toctitle">Table of Contents</div> <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript> @@ -758,7 +755,17 @@ $URL: <a href="https://svn.code.sf.net/p/adc/code/trunk/ADC-Recommendation.txt">https://svn.code.sf.net/p/adc/code/trunk/ADC-Recommendation.txt</a> $.</p></div> <div class="paragraph"><p>This version corresponds to $Revision: 1 $.</p></div> <div class="sect2"> -<h3 id="_version_1_1_0_2013_12_21">2.1. Version 1.1.0, 2013-12-21</h3> +<h3 id="_version_1_2_0_unreleased">2.1. Version 1.2.0, UNRELEASED</h3> +<div class="ulist"><ul> +<li> +<p> +Added client and hub implementation outlines +</p> +</li> +</ul></div> +</div> +<div class="sect2"> +<h3 id="_version_1_1_0_2013_12_21">2.2. Version 1.1.0, 2013-12-21</h3> <div class="paragraph"><p>Fredrik Ullner, <<a href="mailto:ul...@gm...">ul...@gm...</a>></p></div> <div class="ulist"><ul> <li> @@ -774,7 +781,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_0_2010_07_01">2.2. Version 1.0.0, 2010-07-01</h3> +<h3 id="_version_1_0_0_2010_07_01">2.3. Version 1.0.0, 2010-07-01</h3> <div class="paragraph"><p>Fredrik Ullner, <<a href="mailto:ul...@gm...">ul...@gm...</a>></p></div> <div class="ulist"><ul> <li> @@ -1169,12 +1176,213 @@ </div> </div> </div> +<div class="sect1"> +<h2 id="_client_implementation">7. Client implementation</h2> +<div class="sectionbody"> +<div class="paragraph"><p>A client can be implemented by following this rough outline. The outline may not specify everything to full detail and will not cover the actual application that shall employ the mechanisms.</p></div> +<div class="paragraph"><p>There are six sections that need to be implemented to support the major parts of the protocol. They are, in order: connectivity, chatting, downloading, sharing/uploading, search/response. The left out section ("other") is strict protocol compatibility, for additional items that are not necessary to support at first: these things should be implemented alongside basic support for each section.</p></div> +<div class="paragraph"><p>This outline assumes that there is a hub available and (for the relevant sections) that another client is present.</p></div> +<div class="paragraph"><p>No part of this outline requires a particular programming language.</p></div> +<div class="paragraph"><p>Note that all messages end with a newline, which are excluded from this description.</p></div> +<div class="sect2"> +<h3 id="_connectivity">7.1. Connectivity</h3> +<div class="paragraph"><p>This section describes the necessary parts to implement basic connectivity to a hub. The client will, after this stage, be able to continue on with chatting or file sharing. Without basic connectivity, obviously nothing can done in the client.</p></div> +<div class="sect3"> +<h4 id="_steps">7.1.1. Steps</h4> +<div class="olist arabic"><ol class="arabic"> +<li> +<p> +Create a network connection to a hub on the appropriate port. +</p> +</li> +<li> +<p> +The client shall send the following message: +</p> +<div class="ulist"><ul> +<li> +<p> +HSUP ADBASE ADTIGR +</p> +<div class="ulist"><ul> +<li> +<p> +This indicates that the client is notifying the hub about supporting the base protocol (BASE) and the extension hash method Tiger (TIGR). If the protocol base version is changed, send that instead of BASE. Similarly, if another hash method is preferred, send that instead. +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +The hub will send: +</p> +<div class="ulist"><ul> +<li> +<p> +ISUP ADBASE ADTIGR +</p> +<div class="ulist"><ul> +<li> +<p> +The hub may include other things it "AD"s, but none of these are interesting. +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +The hub will send: +</p> +<div class="ulist"><ul> +<li> +<p> +ISID ABCD +</p> +<div class="ulist"><ul> +<li> +<p> +ABCD is the SID that shall be used in any further communication from the client (where applicable). Store this value. +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +Optionally, a hub may send the following but is not required: +</p> +<div class="ulist"><ul> +<li> +<p> +IINF CT32 NIhub_name +</p> +<div class="ulist"><ul> +<li> +<p> +None of these parameters are needed for continuing the connectivity, although may come in handy in the future. The value in the NI parameter can be used for e.g. the application or tab name. +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +The client shall send the following message +</p> +<div class="ulist"><ul> +<li> +<p> +BINF ABCD ID<CID> PD<PID> NImy_name +</p> +<div class="ulist"><ul> +<li> +<p> +ABCD here is the SID as previously mentioned. The CID and PID are complementary information and are specified in the "Client identification section". The client should generate an internal CID (and associated PID). The CID and PID that the client sends to the hub have been run through a Base32 conversion. +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +If the hub did not send its "IINF" before, it may do so now. Again, the information shouldn’t be deemed as required. +</p> +</li> +<li> +<p> +The hub may send a password request, see section "Other". +</p> +</li> +<li> +<p> +The hub will send all other users that are logged in: +</p> +<div class="ulist"><ul> +<li> +<p> +BINF sid ID<CID> NI<nick> +</p> +<div class="ulist"><ul> +<li> +<p> +Where SID and CID is the client information. The SID is used to create a mapping between client → user. Note that the PID is never broadcast. +</p> +</li> +</ul></div> +</li> +</ul></div> +</li> +<li> +<p> +The last BINF to arrive will be the information you connected with: +</p> +<div class="ulist"><ul> +<li> +<p> +BINF ABCD ID<your-CID> NImy_name +</p> +</li> +</ul></div> +</li> +<li> +<p> +The client will now be fully logged in. +</p> +</li> +</ol></div> </div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_hub_implementation">8. Hub implementation</h2> +<div class="sectionbody"> +<div class="paragraph"><p>1) Hub accepts network connection. +- [client state = new]</p></div> +<div class="paragraph"><p>2) Hub waits for handshake from client. +Client: HSUP ADBASE …</p></div> +<div class="paragraph"><p>3) Hub checks support line responds +Server: ISUP ADBASE …</p></div> +<div class="paragraph"><p>4) Hub allocates a SID, and sends it to the client. +Server: ISID …</p></div> +<div class="paragraph"><p>5) Hub sends the hub information to the client. +Server: IINF …</p></div> +<div class="paragraph"><p>6) Hub waits for client to send info: +- [client state = identify] +Client: BINF …</p></div> +<div class="paragraph"><p>7) Hub validates info from client + If password verification is needed, then go to 7.1, otherwise 8.</p></div> +<div class="paragraph"><p>7.1) If user needs to log in, request password +- [client state = verify] +Server: IGPA …</p></div> +<div class="paragraph"><p>7.2) Wait for and verify password from +Client: HPAS …</p></div> +<div class="paragraph"><p>8) Hub transmits the userlist of all existing users to the client. +Server: BINF … +Server: BINF … +… +Server: BINF …</p></div> +<div class="paragraph"><p>9) Hub broadcasts the client’s info (BINF) to all users, including the client. +- [client state = NORMAL] +Server: BINF …</p></div> +<div class="paragraph"><p>10) At this point the client is considered logged in, and will receive all +broadcast messages and all direct messages from other clients. +It will also forward messages originating from this client to others, if the +messages are correct (syntax, formatting, source SID, etc).</p></div> +</div> +</div> +</div> <div id="footnotes"><hr /></div> <div id="footer"> <div id="footer-text"> -Version 1.1.0<br /> -Last updated 2014-01-19 17:26:27 W. Europe Standard Time +Last updated 2014-08-05 14:38:44 W. Europe Daylight Time </div> </div> </body> Modified: trunk/ADC-Recommendation.txt =================================================================== --- trunk/ADC-Recommendation.txt 2014-07-03 19:29:18 UTC (rev 123) +++ trunk/ADC-Recommendation.txt 2014-08-05 12:42:42 UTC (rev 124) @@ -1,6 +1,5 @@ = ADC Recommendations -Fredrik Ullner <ul...@gm...> -1.1.0, December 2013 +version 1.2.0, UNRELEASED == Abstract These are the official recommendations to ADC. This document is based on the information contained in the ADC documents, ADC wiki and ADC blog. Information is this document should be taken as guide lines to implementations. @@ -12,6 +11,10 @@ This version corresponds to $Revision: 1 $. +=== Version 1.2.0, UNRELEASED + +* Added client and hub implementation outlines + === Version 1.1.0, 2013-12-21 Fredrik Ullner, <ul...@gm...> @@ -160,4 +163,92 @@ * Information leak: you can find out the max user peak of the hub in a session. * The SID array grows when more clients logout then login; in worst case, the hub is empty and the array contains all created SIDs of the session. +== Client implementation +A client can be implemented by following this rough outline. The outline may not specify everything to full detail and will not cover the actual application that shall employ the mechanisms. + +There are six sections that need to be implemented to support the major parts of the protocol. They are, in order: connectivity, chatting, downloading, sharing/uploading, search/response. The left out section ("other") is strict protocol compatibility, for additional items that are not necessary to support at first: these things should be implemented alongside basic support for each section. + +This outline assumes that there is a hub available and (for the relevant sections) that another client is present. + +No part of this outline requires a particular programming language. + +Note that all messages end with a newline, which are excluded from this description. + +=== Connectivity +This section describes the necessary parts to implement basic connectivity to a hub. The client will, after this stage, be able to continue on with chatting or file sharing. Without basic connectivity, obviously nothing can done in the client. + +==== Steps +1. Create a network connection to a hub on the appropriate port. +2. The client shall send the following message: +* HSUP ADBASE ADTIGR +** This indicates that the client is notifying the hub about supporting the base protocol (BASE) and the extension hash method Tiger (TIGR). If the protocol base version is changed, send that instead of BASE. Similarly, if another hash method is preferred, send that instead. +3. The hub will send: +* ISUP ADBASE ADTIGR +** The hub may include other things it "AD"s, but none of these are interesting. +4. The hub will send: +* ISID ABCD +** ABCD is the SID that shall be used in any further communication from the client (where applicable). Store this value. +5. Optionally, a hub may send the following but is not required: +* IINF CT32 NIhub_name +** None of these parameters are needed for continuing the connectivity, although may come in handy in the future. The value in the NI parameter can be used for e.g. the application or tab name. +6. The client shall send the following message +* BINF ABCD ID<CID> PD<PID> NImy_name +** ABCD here is the SID as previously mentioned. The CID and PID are complementary information and are specified in the "Client identification section". The client should generate an internal CID (and associated PID). The CID and PID that the client sends to the hub have been run through a Base32 conversion. +7. If the hub did not send its "IINF" before, it may do so now. Again, the information shouldn't be deemed as required. +8. The hub may send a password request, see section "Other". +9. The hub will send all other users that are logged in: +* BINF sid ID<CID> NI<nick> +** Where SID and CID is the client information. The SID is used to create a mapping between client -> user. Note that the PID is never broadcast. +10. The last BINF to arrive will be the information you connected with: +* BINF ABCD ID<your-CID> NImy_name +11. The client will now be fully logged in. + +== Hub implementation + +1) Hub accepts network connection. +- [client state = new] + +2) Hub waits for handshake from client. +Client: HSUP ADBASE ... + +3) Hub checks support line responds +Server: ISUP ADBASE ... + +4) Hub allocates a SID, and sends it to the client. +Server: ISID ... + +5) Hub sends the hub information to the client. +Server: IINF ... + +6) Hub waits for client to send info: +- [client state = identify] +Client: BINF ... + +7) Hub validates info from client + If password verification is needed, then go to 7.1, otherwise 8. + +7.1) If user needs to log in, request password +- [client state = verify] +Server: IGPA ... + +7.2) Wait for and verify password from +Client: HPAS ... + +8) Hub transmits the userlist of all existing users to the client. +Server: BINF ... +Server: BINF ... +... +Server: BINF ... + + +9) Hub broadcasts the client's info (BINF) to all users, including the client. +- [client state = NORMAL] +Server: BINF ... + +10) At this point the client is considered logged in, and will receive all +broadcast messages and all direct messages from other clients. +It will also forward messages originating from this client to others, if the +messages are correct (syntax, formatting, source SID, etc). + + // vim: set syntax=asciidoc: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <em...@us...> - 2025-05-07 13:45:42
|
Revision: 132 http://sourceforge.net/p/adc/code/132 Author: emtee Date: 2025-05-07 13:45:18 +0000 (Wed, 07 May 2025) Log Message: ----------- Generated HTML documents for respective TXT document Modified Paths: -------------- trunk/ADC-EXT.html trunk/ADC.html trunk/readme.txt Modified: trunk/ADC-EXT.html =================================================================== --- trunk/ADC-EXT.html 2025-05-07 13:39:24 UTC (rev 131) +++ trunk/ADC-EXT.html 2025-05-07 13:45:18 UTC (rev 132) @@ -734,9 +734,10 @@ <body class="article"> <div id="header"> <h1>ADC Extensions</h1> -<span id="author">Fredrik Ullner, ul...@gm...</span><br /> -<span id="revnumber">version 1.0.8,</span> -<span id="revdate">February 2014</span> +<span id="author">DC++ Team</span><br /> +<span id="email"><code><<a href="mailto:dcp...@li...">dcp...@li...</a>></code></span><br /> +<span id="revnumber">version 1.0.9,</span> +<span id="revdate">May 2025</span> <div id="toc"> <div id="toctitle">Table of Contents</div> <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript> @@ -757,9 +758,37 @@ <div class="paragraph"><p>The latest draft of the next version of this document as well as intermediate and older versions can be downloaded from $URL: <a href="https://svn.code.sf.net/p/adc/code/trunk/ADC-EXT.txt">https://svn.code.sf.net/p/adc/code/trunk/ADC-EXT.txt</a> $.</p></div> -<div class="paragraph"><p>This version corresponds to $Revision: 121 $.</p></div> +<div class="paragraph"><p>This version corresponds to $Revision: 131 $.</p></div> +</div> +</div> +<div class="sect1"> +<h2 id="_version_1_0_9_2025_05_07">3. Version 1.0.9, 2025-05-07</h2> +<div class="sectionbody"> +<div class="paragraph"><p>DC++ Team <<a href="mailto:dcp...@li...">dcp...@li...</a>></p></div> +<div class="ulist"><ul> +<li> +<p> +Added implementation notes to BLOM +</p> +</li> +<li> +<p> +Added <em>CCPM</em> extension for client to client private messages +</p> +</li> +<li> +<p> +Editorial updates +</p> +</li> +<li> +<p> +Clarified HH field in PING to be an ADC URL +</p> +</li> +</ul></div> <div class="sect2"> -<h3 id="_version_1_0_8">2.1. Version 1.0.8</h3> +<h3 id="_version_1_0_8">3.1. Version 1.0.8</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2014-02-11</p></div> <div class="ulist"><ul> <li> @@ -815,7 +844,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_7">2.2. Version 1.0.7</h3> +<h3 id="_version_1_0_7">3.2. Version 1.0.7</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2012-11-22</p></div> <div class="ulist"><ul> <li> @@ -831,7 +860,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_6">2.3. Version 1.0.6</h3> +<h3 id="_version_1_0_6">3.3. Version 1.0.6</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-09-29</p></div> <div class="ulist"><ul> <li> @@ -882,7 +911,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_5">2.4. Version 1.0.5</h3> +<h3 id="_version_1_0_5">3.4. Version 1.0.5</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-09-16</p></div> <div class="ulist"><ul> <li> @@ -908,7 +937,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_4">2.5. Version 1.0.4</h3> +<h3 id="_version_1_0_4">3.5. Version 1.0.4</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-06-29</p></div> <div class="ulist"><ul> <li> @@ -939,7 +968,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_3">2.6. Version 1.0.3</h3> +<h3 id="_version_1_0_3">3.6. Version 1.0.3</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-05-26</p></div> <div class="ulist"><ul> <li> @@ -955,7 +984,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_2">2.7. Version 1.0.2</h3> +<h3 id="_version_1_0_2">3.7. Version 1.0.2</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2010-04-04</p></div> <div class="ulist"><ul> <li> @@ -966,7 +995,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0_1">2.8. Version 1.0.1</h3> +<h3 id="_version_1_0_1">3.8. Version 1.0.1</h3> <div class="paragraph"><p>Fredrik Ullner <<a href="mailto:ul...@gm...">ul...@gm...</a>>, 2009-08-04</p></div> <div class="ulist"><ul> <li> @@ -982,7 +1011,7 @@ </ul></div> </div> <div class="sect2"> -<h3 id="_version_1_0">2.9. Version 1.0</h3> +<h3 id="_version_1_0">3.9. Version 1.0</h3> <div class="paragraph"><p>Jacek Sieka <<a href="mailto:arn...@gm...">arn...@gm...</a>>, 2008-05-02</p></div> <div class="ulist"><ul> <li> @@ -1000,23 +1029,23 @@ </div> </div> <div class="sect1"> -<h2 id="_extensions">3. Extensions</h2> +<h2 id="_extensions">4. Extensions</h2> <div class="sectionbody"> <div class="sect2"> -<h3 id="_tigr_tiger_tree_hash_support">3.1. TIGR - Tiger tree hash support</h3> +<h3 id="_tigr_tiger_tree_hash_support">4.1. TIGR - Tiger tree hash support</h3> <div class="sect3"> -<h4 id="_general">3.1.1. General</h4> +<h4 id="_general">4.1.1. General</h4> <div class="paragraph"><p>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</p></div> +generation and password negotiation.</p></div> </div> <div class="sect3"> -<h4 id="_tigr_for_shared_files">3.1.2. TIGR for shared files</h4> +<h4 id="_tigr_for_shared_files">4.1.2. TIGR for shared files</h4> <div class="paragraph"><p>All files shared by TIGR supporting clients must have been hashed using Merkle Hash trees, as defined by -<a href="http://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html">http://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html</a>. +<a href="https://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html">https://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html</a>. The Tiger -algorithm, as specified by <a href="http://www.cs.technion.ac.il/~biham/Reports/Tiger/">http://www.cs.technion.ac.il/~biham/Reports/Tiger/</a>, +algorithm, as specified by <a href="https://biham.cs.technion.ac.il/Reports/Tiger/">https://biham.cs.technion.ac.il/Reports/Tiger/</a>, 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 @@ -1030,7 +1059,7 @@ <div class="paragraph"><p>In the file list, each File element carries an additional attribute "TTH" containing the base32-encoded value of the Tiger tree root.</p></div> <div class="paragraph"><p>In the GET/GFI type, the full tree may be accessed using the "tthl" type.</p></div> -<div class="paragraph"><p>"tthl" transfers send the largest set of leaves available) as a binary stream +<div class="paragraph"><p>"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 @@ -1079,16 +1108,16 @@ </div> </div> <div class="sect2"> -<h3 id="_bzip_file_list_compressed_with_bzip2">3.2. BZIP - File list compressed with bzip2</h3> +<h3 id="_bzip_file_list_compressed_with_bzip2">4.2. BZIP - File list compressed with bzip2</h3> <div class="paragraph"><p>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).</p></div> </div> <div class="sect2"> -<h3 id="_zlib_compressed_communication">3.3. ZLIB - Compressed communication</h3> +<h3 id="_zlib_compressed_communication">4.3. ZLIB - Compressed communication</h3> <div class="paragraph"><p>There are two variants of zlib support, FULL and GET, and only one should be -used on a each communications channel set up.</p></div> +used on each communications channel set up.</p></div> <div class="sect3"> -<h4 id="_zlib_full">3.3.1. ZLIB-FULL</h4> +<h4 id="_zlib_full">4.3.1. ZLIB-FULL</h4> <div class="paragraph"><p>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 @@ -1097,7 +1126,7 @@ chunk of data to allow for decompression by the peer.</p></div> </div> <div class="sect3"> -<h4 id="_zlib_get">3.3.2. ZLIB-GET</h4> +<h4 id="_zlib_get">4.3.2. ZLIB-GET</h4> <div class="paragraph"><p>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 @@ -1109,7 +1138,7 @@ </div> </div> <div class="sect2"> -<h3 id="_ping_pinger_extension">3.4. PING - Pinger extension</h3> +<h3 id="_ping_pinger_extension">4.4. PING - Pinger extension</h3> <div class="paragraph"><p>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).</p></div> @@ -1117,7 +1146,7 @@ that otherwise it would be impossible to get as a normal user (eg. minimum share, maximum user count, etc).</p></div> <div class="sect3"> -<h4 id="_inf">3.4.1. INF</h4> +<h4 id="_inf">4.4.1. INF</h4> <div class="paragraph"><p>Contexts : F</p></div> <div class="paragraph"><p>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, @@ -1139,8 +1168,8 @@ <tbody> <tr> <td align="left" valign="top"><p class="table">HH</p></td> -<td align="left" valign="top"><p class="table">string</p></td> -<td align="left" valign="top"><p class="table">Hub Host address ( DNS or IP )</p></td> +<td align="left" valign="top"><p class="table">url</p></td> +<td align="left" valign="top"><p class="table">Hub Host address (ADC/ADCS URL address form)</p></td> </tr> <tr> <td align="left" valign="top"><p class="table">WS</p></td> @@ -1262,7 +1291,7 @@ <pre><code>-pinger- HSUP ADBASE ADPING AD.. -hub- ISUP ADBASE ADPING AD.. -hub- ISID .. --hub- IINF NIhubname DEcurrent\stopic VE.. HHexample.org:555 WShttp://example.org/ OWmyname UC2231 SS.. SF.. MS0 ML0 MC5000 +-hub- IINF NIhubname DEcurrent\stopic VE.. HHadc://example.org:555 WShttp://example.org/ OWmyname UC2231 SS.. SF.. MS0 ML0 MC5000 - (pinger may disconnect)</code></pre> </div></div> </div></div> @@ -1269,7 +1298,7 @@ </div> </div> <div class="sect3"> -<h4 id="_hub_hublist_communication">3.4.2. Hub - Hublist communication</h4> +<h4 id="_hub_hublist_communication">4.4.2. Hub - Hublist communication</h4> <div class="paragraph"><p>The same extension goes for hub- hublist communication. This way, the hub takes the role of the client and the hublist of the server.</p></div> <div class="paragraph"><p>The hublist may send INF about itself with NI field which would become hublist @@ -1291,15 +1320,15 @@ </div> </div> <div class="sect2"> -<h3 id="_ts_timestamp_in_msg">3.5. TS - Timestamp in MSG</h3> +<h3 id="_ts_timestamp_in_msg">4.5. TS - Timestamp in MSG</h3> <div class="paragraph"><p>Timestamp of the moment when the message was sent, expressed in seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).</p></div> </div> <div class="sect2"> -<h3 id="_dfav_distributed_favorites">3.6. DFAV - Distributed Favorites</h3> +<h3 id="_dfav_distributed_favorites">4.6. DFAV - Distributed Favorites</h3> <div class="paragraph"><p>The idea behind this extension is to generate a public hublist from the users favorite hublist. Implementations should separate between public and private hubs in the favorite hublist of an user, in order not to distribute private hubs where one can not connect to anyway.</p></div> <div class="paragraph"><p>Signal DFAV in SUP and the INF’s SU field.</p></div> <div class="sect3"> -<h4 id="_gfa">3.6.1. GFA</h4> +<h4 id="_gfa">4.6.1. GFA</h4> <div class="literalblock"> <div class="content"> <pre><code>GFA</code></pre> @@ -1308,7 +1337,7 @@ <div class="paragraph"><p>Asks all users within the same hub with the correct feature to send all publicly available hubs, in their favorite hub list to the requesting client.</p></div> </div> <div class="sect3"> -<h4 id="_rfa">3.6.2. RFA</h4> +<h4 id="_rfa">4.6.2. RFA</h4> <div class="literalblock"> <div class="content"> <pre><code>RFA</code></pre> @@ -1337,7 +1366,7 @@ </div> </div> <div class="sect2"> -<h3 id="_ucmd_user_commands">3.7. UCMD - User commands</h3> +<h3 id="_ucmd_user_commands">4.7. UCMD - User commands</h3> <div class="literalblock"> <div class="content"> <pre><code>CMD name</code></pre> @@ -1377,7 +1406,7 @@ </table> </div> <div class="sect3"> -<h4 id="_keywords">3.7.1. Keywords</h4> +<h4 id="_keywords">4.7.1. Keywords</h4> <div class="paragraph"><p>Keywords are specified using "%[keyword]". Unknown keywords must be replaced by the empty string. Additionally, all %-substitutions of the C function "strftime" must be supported.</p></div> <div class="paragraph"><p>The following tables specify the keywords that must be supported.</p></div> <div class="paragraph"><p>Client parameters</p></div> @@ -1444,7 +1473,7 @@ </tr> <tr> <td align="left" valign="top"><p class="table">fileMN</p></td> -<td align="left" valign="top"><p class="table">Specify magnet link. <a href="http://en.wikipedia.org/wiki/Magnet_link">Magnet links</a> are used to reference files across networks and applications. Clients may ignore parameters it does not understand, but are free to pass on the parameters to other programs.</p></td> +<td align="left" valign="top"><p class="table">Specify magnet link. <a href="https://en.wikipedia.org/wiki/Magnet_link">Magnet links</a> are used to reference files across networks and applications. Clients may ignore parameters it does not understand, but are free to pass on the parameters to other programs.</p></td> </tr> </tbody> </table> @@ -1466,7 +1495,7 @@ </div> </div> <div class="sect3"> -<h4 id="_example_3">3.7.2. Example</h4> +<h4 id="_example_3">4.7.2. Example</h4> <div class="exampleblock"> <div class="content"> <div class="paragraph"><p>ICMD ADCH++/Hub\smanagement/Register\snick TTHMSG\s+regnick\s%[userNI]\s%[line:Password\s(leave\sempty\sto\sun-reg)]\s%[line:Level\s(facultative;\sdefaults\sto\syour\sown\slevel\sminus\sone)]\n CT2</p></div> @@ -1478,10 +1507,10 @@ </div> </div> <div class="sect2"> -<h3 id="_blom_bloom_filter">3.8. BLOM- Bloom filter</h3> +<h3 id="_blom_bloom_filter">4.8. BLOM - Bloom filter</h3> <div class="paragraph"><p>Bloom filters allow the hub to filter certain searches using bitmap that represents the hashes of the files in the users share. BLOM is an extension that allows hub software to create a map (bloom filter) of the shared files on the hub, but with minimal effort, e.g. the hub doesn’t keep a list of files, but a filter that never produces false negatives but only possible false positives. This can potentially save bandwidth and effort on the client side. When the user updates the share, the client must send an INF containing the flag SF. The hub may at any time request that the client sends an updated version of its bloom filter by sending a GET command to the client. The client will then respond using SND and send the bloom filter binary data.</p></div> <div class="sect3"> -<h4 id="_legend">3.8.1. Legend</h4> +<h4 id="_legend">4.8.1. Legend</h4> <div class="tableblock"> <table rules="all" frame="border" @@ -1511,7 +1540,7 @@ </tr> <tr> <td align="left" valign="top"><p class="table">p</p></td> -<td align="left" valign="top"><p class="table">Propability of a false positive</p></td> +<td align="left" valign="top"><p class="table">Probability of a false positive</p></td> </tr> </tbody> </table> @@ -1519,7 +1548,7 @@ <div class="paragraph"><p>The hub chooses k, h and m.</p></div> </div> <div class="sect3"> -<h4 id="_restrictions">3.8.2. Restrictions</h4> +<h4 id="_restrictions">4.8.2. Restrictions</h4> <div class="tableblock"> <table rules="all" frame="border" @@ -1543,7 +1572,7 @@ </div> </div> <div class="sect3"> -<h4 id="_probability">3.8.3. Probability</h4> +<h4 id="_probability">4.8.3. Probability</h4> <div class="tableblock"> <table rules="all" frame="border" @@ -1564,7 +1593,7 @@ </div> </div> <div class="sect3"> -<h4 id="_protocol_changes">3.8.4. Protocol changes</h4> +<h4 id="_protocol_changes">4.8.4. Protocol changes</h4> <div class="paragraph"><p>Signal BLOM in SUP.</p></div> <div class="paragraph"><p>For the SND type, adds H as message type.</p></div> <div class="paragraph"><p>For the GET type, adds I as message type.</p></div> @@ -1593,35 +1622,40 @@ </div> </div> <div class="sect3"> -<h4 id="_algorithm">3.8.5. Algorithm</h4> +<h4 id="_algorithm">4.8.5. Algorithm</h4> <div class="paragraph"><p>The client constructs the bloom filter by creating a bit array of m bits set to 0 (zero). For each file it then sets to "1" k positions constructed from the file hash. Seeing the file hash as a stream of bits (starting from the lowest bit of the first byte, ending at the highest bit of the last byte), the client should use h bits starting at the first bit of the first byte to create an integer and apply modulo m to get the position in the bit array, then redo the process k times advancing the starting position by h each time.</p></div> <div class="paragraph"><p>Once the hub has received the bloom filter bit array, for each search command it processes, if it contains a hash search term, it can skip broadcasting the search to a particular client if at least one of the k bits in that clients bit array is "0", calculating positions as the client does when setting bits to "1". The hub has to evaluate the filter for each client that it has a bloom filter for, for each search.</p></div> </div> <div class="sect3"> -<h4 id="_probability_calculations">3.8.6. Probability calculations</h4> +<h4 id="_probability_calculations">4.8.6. Probability calculations</h4> <div class="paragraph"><p>p = (1 - (1 - 1 / m)<sup>(k * n)</sup>)<sup>k</sup>, thus p becomes smaller as m grows and larger as n grows. Larger m means more bits to transfer but also fewer false positives. The optimum value for k given m and n is (m / n) * ln 2. The largest k supported by a hash of a certain size is b / h, so if the hub wants the smallest p possible, it should choose the smallest possible h which gives the largest k, and then calculate m = k * n/ln 2, checking that the resulting m < 2<sup>h</sup>. 2<sup>h</sup> should much be larger than m (at least 3-4 times), because of how the modulo operator works. Also, with m grows the required bandwidth to transfer the bloom filter, so the hub may wish to cap m. In that case, it should still choose k according to m / n * ln 2, but send an h as big as possible to alleviate biasing problems.</p></div> </div> <div class="sect3"> -<h4 id="_sample_implementations">3.8.7. Sample implementations</h4> +<h4 id="_sample_implementations">4.8.7. Sample implementations</h4> <div class="sect4"> <h5 id="_tiger">Tiger</h5> <div class="paragraph"><p>For TTH roots, b is 192 and a reasonable value for h is 24, giving a maximum k = 8 which means that m = 8 * n / ln 2 ≈ 11.5 * n. The required bandwidth then becomes 11.5 * n / 8 bytes, so approximately 1.44 bytes per file in the users share. For 20000 files, m should then be 230016 (taking into account the modulo 64 requirement), giving a p = 0.004, in other words ~99.6% of all searches that don’t match a users share would not be sent, saving valuable upload bandwidth for the hub. The client calculates i valid positions, if x is an array of bytes containing the hash of the file, on a little-endian machine, by doing pos = x[0+i*h/8] | (x[1+i*h/8] << 8) | (x[2+i*h/8] << 16) for i = [0;k). This is of course a special case where h % 8 = 0, the actual algorithm has to take into consideration values for h where the integer crosses byte boundaries.</p></div> -<div class="paragraph"><p>For test vectors, see the <a href="http://www.adcportal.com/wiki/index.php/Talk:BLOM">ADC wiki talk page</a>.</p></div> +<div class="paragraph"><p>For test vectors, see the <a href="https://adc.sourceforge.io/wiki/index.php/Talk:BLOM">ADC wiki talk page</a>.</p></div> </div> </div> +<div class="sect3"> +<h4 id="_implementation_notes">4.8.8. Implementation notes</h4> +<div class="paragraph"><p>Clients do not signal each atomic user update of the share using the SF flag. Instead, they tend to send a cumulative result of multiple updates in a timely fashion. However, an unambiguous summary of the number of hash additions and removals may result in a lack of an update signal. Therefore, hubs are recommended to look for and process INFs containing the SS flag as well, since an incoming SS flag (especially when not accompanied by an SF) may also indicate an update in the hashes, one that occurs without a change in the total number of files shared.</p></div> +<div class="paragraph"><p>Clients shall strive to signal multiple share updates in an unambiguous manner, thus enabling hubs to request the most accurate and up-to-date version of the client’s bloom filter.</p></div> </div> +</div> <div class="sect2"> -<h3 id="_natt_nat_traversal">3.9. NATT - NAT traversal</h3> -<div class="paragraph"><p>NAT traversal allow two passive clients to connect to each other. This specification is based on the TCP hole punching algorithm described in <span class="footnote" id="_footnote_Peer-to-Peer Communication Across Network Address Translators"><br />[B. Ford and P. Srisuresh and and D. Kegel. "Peer-to-Peer Communication Across Network Address Translators". In USENIX Technical Conference 2005 - pages 179–192. Online version: <a href="http://www.brynosaurus.com/pub/net/p2pnat/">http://www.brynosaurus.com/pub/net/p2pnat/</a>]<br /></span>.</p></div> +<h3 id="_natt_nat_traversal">4.9. NATT - NAT traversal</h3> +<div class="paragraph"><p>NAT traversal allow two passive clients to connect to each other. This specification is based on the TCP hole punching algorithm described in <span class="footnote" id="_footnote_Peer-to-Peer Communication Across Network Address Translators"><br />[B. Ford and P. Srisuresh and and D. Kegel. "Peer-to-Peer Communication Across Network Address Translators". In USENIX Technical Conference 2005 - pages 179–192. Online version: <a href="https://bford.info/pub/net/p2pnat/">https://bford.info/pub/net/p2pnat/</a>]<br /></span>.</p></div> <div class="paragraph"><p>If a client does not support TCP4 or TCP6, it will send an RCM to the client it is trying to connect to. If the other client also doesn’t support TCP4 (or TCP6 correspondingly), NAT traversal may instead be used. Signal NATT in the INF’s SU field.</p></div> <div class="paragraph"><p>Do note that the hub must forward I4 or I6 for respective clients' INF.</p></div> <div class="paragraph"><p>An endpoint is the tuple of IP and port. The "private endpoint port" refers to the outbound port to the connected hub, as seen by the client. Each client must listen for incoming connections on this port. Note that this protocol extension uses only this port for the TCP hole punching, the use of the "public endpoint port" as specified in <span class="footnoteref"><br /><a href="#_footnote_Peer-to-Peer Communication Across Network Address Translators">[Peer-to-Peer Communication Across Network Address Translators]</a><br /></span> is not supported.</p></div> <div class="sect3"> -<h4 id="_base_rcm_updates">3.9.1. BASE RCM updates</h4> +<h4 id="_base_rcm_updates">4.9.1. BASE RCM updates</h4> <div class="paragraph"><p>When receiving an RCM and the client does not support TCP4 or TCP6, and if NAT-T is supported in the remote client, a NAT command should be sent repeating the protocol and token. The port shall be the private endpoint port to the connected hub.</p></div> </div> <div class="sect3"> -<h4 id="_nat">3.9.2. NAT</h4> +<h4 id="_nat">4.9.2. NAT</h4> <div class="literalblock"> <div class="content"> <pre><code>NAT protocol separator port separator token</code></pre> @@ -1631,7 +1665,7 @@ <div class="paragraph"><p>Upon receiving this, try and connect to the specified port. An RNT command should be sent repeating the protocol and token. The port shall be the private endpoint. Upon receiving this, try and connect to the specified port.</p></div> </div> <div class="sect3"> -<h4 id="_rnt">3.9.3. RNT</h4> +<h4 id="_rnt">4.9.3. RNT</h4> <div class="literalblock"> <div class="content"> <pre><code>RNT protocol separator port separator token</code></pre> @@ -1641,7 +1675,7 @@ <div class="paragraph"><p>Upon receiving this, try and connect to the specified port.</p></div> </div> <div class="sect3"> -<h4 id="_example_4">3.9.4. Example</h4> +<h4 id="_example_4">4.9.4. Example</h4> <div class="paragraph"><p>Client A is connected to hub A with the private endpoint 1000 and client B is connected to hub A with the private endpoint 2000. Client A has the SID AAAA and client B has the SID BBBB.</p></div> <div class="exampleblock"> <div class="content"> @@ -1654,7 +1688,7 @@ </div> </div> <div class="sect2"> -<h3 id="_rf_referrer_notification">3.10. RF - Referrer notification</h3> +<h3 id="_rf_referrer_notification">4.10. RF - Referrer notification</h3> <div class="paragraph"><p>Extends the RF field of the INF to STA, allowing a client to notify clients and hubs upon SUP-negotiation from where the C-C or C-H originated from.</p></div> <div class="tableblock"> <table rules="all" @@ -1671,7 +1705,7 @@ </table> </div> <div class="sect3"> -<h4 id="_example_5">3.10.1. Example</h4> +<h4 id="_example_5">4.10.1. Example</h4> <div class="exampleblock"> <div class="content"> <div class="paragraph"><p>CSUP ADBASE (…)</p></div> @@ -1680,7 +1714,7 @@ </div> </div> <div class="sect2"> -<h3 id="_qp_upload_queue_notification">3.11. QP - Upload queue notification</h3> +<h3 id="_qp_upload_queue_notification">4.11. QP - Upload queue notification</h3> <div class="paragraph"><p>This extension’s purpose is creating a queue on a client, when multiple other clients want to download from it, but they have no slots. Currently, when a slot is being freed, the first connecting client gets it. Other clients that don’t have the luck of getting in time to attempt to download, have to wait again. The client who creates a queue must have a ticket number for each connecting client, which must be kept internally , and a difference between current connecting client’s queue number and the currently uploading client’s be provided to the connecting client, so that the clients are being deserved in the order they originally connected. The client could have a ticket incrementing starting from 1 for each session. Connecting clients must use the same token as they used when originally connected.</p></div> <div class="tableblock"> <table rules="all" @@ -1697,7 +1731,7 @@ </table> </div> <div class="sect3"> -<h4 id="_example_6">3.11.1. Example</h4> +<h4 id="_example_6">4.11.1. Example</h4> <div class="paragraph"><p>The following example will notify that the client’s slots are full and that there are three uploads in the queue.</p></div> <div class="exampleblock"> <div class="content"> @@ -1706,12 +1740,12 @@ </div> </div> <div class="sect2"> -<h3 id="_pfsr_partial_file_sharing">3.12. PFSR - Partial file sharing</h3> +<h3 id="_pfsr_partial_file_sharing">4.12. PFSR - Partial file sharing</h3> <div class="paragraph"><p>Partial File Sharing allows sharing of files which are available in user’s download queue or in finished downloads list. As a result of this, new files will be spread much faster over whole network.</p></div> <div class="paragraph"><p>When client receives search request (SCH), it looks into shared list to see whether requested hash is available between shared files. If it’s found, everything is processed as normally. In other case, it looks into download queue (then, into finished downloads list) and receives a list of available chunks for requested hash. It mustn’t take every chunk, but only that ones which are fully downloaded and has already been verified (e.g. against TTH leaves).</p></div> <div class="paragraph"><p>The feature should be signalled in SUP as PFSR.</p></div> <div class="sect3"> -<h4 id="_psr">3.12.1. PSR</h4> +<h4 id="_psr">4.12.1. PSR</h4> <div class="literalblock"> <div class="content"> <pre><code>PSR</code></pre> @@ -1752,9 +1786,9 @@ </div> </div> <div class="sect2"> -<h3 id="_lc_locale_specification">3.13. LC - Locale specification</h3> +<h3 id="_lc_locale_specification">4.13. LC - Locale specification</h3> <div class="paragraph"><p>This extension’s purpose is to notify the hub which user locale the client is using as well as the default locale for the hub. This allows hubs to customize text sent to clients, depending on language, left-to-right or right-to-left and more. If the hub does not directly support the client’s locale, it should attempt to fall back to the same language group (e.g. hub supports en-US but not en-AU, so falls back to en-US), and if this is not available, then fall back to the hub’s own locale.</p></div> -<div class="paragraph"><p><a href="http://tools.ietf.org/html/bcp47">BCP47</a> should be used as reference for locale structure.</p></div> +<div class="paragr... [truncated message content] |