				Overnet Protocol
				v.0.1 Thomas Lunig

SUCHE: ed2k://|file|overnet.exe|585728|<DL_FILE_HASH>|
ed2k://|file|overnet.exe|585728|c475b90d6d9028fa11319a09326dd501|

<DL_FILE_HASH>	c4 75 b9 0d 6d 90 28 fa 11 31 9a 09 32 6d d5 01
<dl_file_size>	00 f0 08 00
<client_a_hash> 22 cb 74 3c 8c d4 c3 52 7e a4 a5 f5 fa 3f df 68
<client_a_ip>	192.168.50.20
<client_a_port>	9937
<client_b_hash>	67 c6 69 73 51 ff 4a ec 29 cd ba ab f2 fb e3 46
<client_b_ip>	192.168.50.167
<client_b_port>	8368
<client_b_tcp >
<zero_hash    > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<dl_hash      >	14 33 5a fa bc 86 6d c6 23 eb e1 0b 49 ae 48 b6
<meta_name>	01 00 	01
<meta_size>	01 00 	02
<min_count>	(  0)
<max_count>	(100)

CLIENT_B -> CLIENT_A		::=	e3 0a <client_b_hash> 00 00 00 00 <client_b_port> 00	(connect)
CLIENT_B -> CLIENT_A		::= 	e3 1b <client_b_tcp >					(query_ip)
CLIENT_A -> CLIENT_B		::= 	e3 0b <count2> 						(connect_reply)
					<client_a_hash> <client_a_ip> <client_a_port> 00 
					<client_b_hash> <client_b_ip> <client_b_port> 01 
					<zero_hash    > <client_a_ip> <client_a_port> 00 
					<client_a_hash> <client_a_ip> <client_a_port> 00 
CLIENT_A -> CLIENT_B		::= 	e3 1c <client_b_ip>					(query_ip_reply)
CLIENT_A -> CLIENT_B		::= 	e3 1d							(query_ip_ende)
CLIENT_B -> CLIENT_A		::= 	e3 0e 14 <client_b_hash>				(search_hash)
CLIENT_B -> CLIENT_A		::=	e3 0e 14 <client_b_hash>				(search_hash)
CLIENT_A -> CLIENT_B		::=	e3 0f <client_b_hash> <count1>				(search_hash_next)
					<client_b_hash> <client_b_ip> <client_b_port> 01 
					<zero_hash    > <client_a_ip> <client_a_port> 00 
					<client_a_hash> <client_a_ip> <client_a_port> 00
CLIENT_A -> CLIENT_B		::= 	e3 0f <client_b_hash> <count1>				(search_hash_next)
					<client_b_hash> <client_b_ip> <client_b_port> 01 
					<zero_hash    > <client_a_ip> <client_a_port> 00 
					<client_a_hash> <client_a_ip> <client_a_port> 00                           
CLIENT_B -> CLIENT_A		::=	e3 0c <client_b_hash> <client_b_ip> <client_b_port> 00	(publize)
CLIENT_B -> CLIENT_A 		::=	e3 0c <client_b_hash> <client_b_ip> <client_b_port> 00	(publize)
CLIENT_A -> CLIENT_B 		::=	e3 0d							(publize_ack)
CLIENT_A -> CLIENT_B 		::=	e3 0d							(publize_ack)
CLIENT_B -> CLIENT_A 		::=	e3 0e 02 <DL_FILE_HASH>					(search_hash)
CLIENT_A -> CLIENT_B		::= 	e3 0f <DL_FILE_HASH> <count1>				(search_hash_reply)
					<client_b_hash> <client_b_ip> <client_b_port> 01
					<zero_hash    > <client_a_ip> <client_a_port> 00                                                


CLIENT_B -> CLIENT_A		::= 	e3 10 <DL_FILE_HASH> <min_count2> <max_count2>		(get_info)
CLIENT_A -> CLIENT_B		::= 	e3 11 <DL_FILE_HASH> <client_b_hash> <meta_count4>	(get_info_reply)
						02 		{loc} 	{bcp://192.168.50.167:4662}
						03 	01 00 	15 	2e 00 00 00
CLIENT_A -> CLIENT_B		::=	e3 12 <DL_FILE_HASH> 02 00 02 00			(search_hash_end)
CLIENT_B -> CLIENT_A		::=	e3 0e 04 <DL_FILE_HASH>					(search_hash)
CLIENT_B -> CLIENT_A		::= 	e3 0e 04 <DL_FILE_HASH>					(search_hash)
CLIENT_A -> CLIENT_B		::= 	e3 0f <DL_FILE_HASH> <count1>				(search_hash_next)
					<client_b_hash> <client_b_ip> <client_b_port> 01 
					<zero_hash    > <client_a_ip> <client_a_port> 00 
					<client_a_hash> <client_a_ip> <client_a_port> 00
CLIENT_A -> CLIENT_B		::= 	e3 0f <DL_FILE_HASH> <count1>				(search_hash_next)
					<client_b_hash> <client_b_ip> <client_b_port> 01
					<zero_hash    > <client_a_ip> <client_a_port> 00
					<client_a_hash> <client_a_ip> <client_a_port> 00                        
CLIENT_B -> CLIENT_A		::= 	e3 13 <DL_FILE_HASH> <client_b_hash> <meta_count4>	(publish)
						02 		{loc} 	{bcp://192.168.50.167:4662}
CLIENT_B -> CLIENT_A		::= 	e3 13 <DL_FILE_HASH> <client_b_hash> <meta_count4>	(publish)
						02 		{loc} 	{bcp://192.168.50.167:4662}
CLIENT_A -> CLIENT_B		::=	e3 14 <DL_FILE_HASH>					(publish_ack)
CLIENT_A -> CLIENT_B		::=	e3 14 <DL_FILE_HASH>					(publish_ack)
CLIENT_B -> CLIENT_A		::= 	e3 0e 04 <dl_hash      >				(search_hash)
CLIENT_B -> CLIENT_A		::= 	e3 0e 04 <dl_hash      >				(search_hash)
CLIENT_A -> CLIENT_B 		::=	e3 0f    <dl_hash      > <count1>			(search_hash_next)
					<client_b_hash> <client_b_ip> <client_b_port> 01 
					<zero_hash    > <client_a_ip> <client_a_port> 00 
					<client_a_hash> <client_a_ip> <client_a_port> 00
CLIENT_A -> CLIENT_B		::=	e3 0f 	 <dl_hash      > <count1>			(search_hash_next)
					<client_b_hash> <client_b_ip> <client_b_port> 01
					<zero_hash    > <client_a_ip> <client_a_port> 00
					<client_a_hash> <client_a_ip> <client_a_port> 00
CLIENT_B -> CLIENT_A		::=	e3 13 <dl_hash      > <DL_FILE_HASH>			(publish)
					<meta_count4>
					02 	01 00 	01 	{overnet.exe}
					03 	01 00 	02 	<dl_file_size>
CLIENT_B -> CLIENT_A		::= 	e3 13 <dl_hash      > <DL_FILE_HASH>			(publish)
					<meta_count4>
					02      <meta_name>      {overnet.exe}
					03      <meta_size>      <dl_file_size>
CLIENT_A -> CLIENT_B		::= 	e3 14 <dl_hash      >					(publish_ack)
CLIENT_A -> CLIENT_B		::=	e3 14 <dl_hash      >					(publish_ack)

search_hash_next -> teilt mit bei welchem Client man als nchstes es versuchen knnte
publish		-> Teilt anderen mit welche File man hat oder verwaltet (an nahe Clients)
publize		-> Verbreitet der eigenen IP (an nahe Clients)

nahe bedeutet hier eine Entfernung log(2) (CLIENT_HASH xor HASH) dies ist eine Zahl zwischen 0 und 128.
HASH ist der hash den ich Suche oder Verffentlichen will. CLIENT_HASH ist der Hash der anderen Quelle.
Man versucht immer solange mglich bei nahen Quellen zu suchen. Weitere informationen erhlt man
in der beschreinbung des Kademlia protocol's. Dieses ist frei verfgbar und arbeitet mit 160 statt 128 Bit.

Was ich im Moment nichts weis ist wie man von <DL_FILE_HASH> auf den <dl_hash> Wert kommt.
Auch ist mir nicht bekannt wie man Informationen zur substring suche bei dieser Art der Verteilung erhlt.


