				Overnet Protocol
				v.0.1 Thomas Lußnig

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 nächstes es versuchen könnte
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 Veröffentlichen will. CLIENT_HASH ist der Hash der anderen Quelle.
Man versucht immer solange möglich bei nahen Quellen zu suchen. Weitere informationen erhält man
in der beschreinbung des Kademlia protocol's. Dieses ist frei verfügbar 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 erhält.


