311 |
open Proto |
open Proto |
312 |
|
|
313 |
let lprintf_nl () = |
let lprintf_nl () = |
314 |
lprintf "%s[%s]: " |
lprintf "%s[%s] " |
315 |
(log_time ()) |
(log_time ()) |
316 |
(if Proto.redirector_section = "DKKO" then "Overnet" else "Kademlia"); lprintf_nl2 |
(if Proto.redirector_section = "DKKO" then "Overnet" else "Kademlia"); lprintf_nl2 |
317 |
|
|
914 |
match t with |
match t with |
915 |
|
|
916 |
| OvernetConnect p -> |
| OvernetConnect p -> |
917 |
new_peer_message p; |
let rec send p = |
918 |
let p = new_peer p in |
new_peer_message p; |
919 |
udp_send p (OvernetConnectReply (get_any_peers 20)) |
let p = new_peer p in |
920 |
|
udp_send p (OvernetConnectReply (get_any_peers 20)) |
921 |
|
in |
922 |
|
if Ip.valid p.peer_ip && ip_reachable p.peer_ip && p.peer_port <> 0 then |
923 |
|
send p |
924 |
|
else |
925 |
|
if Ip.valid other_ip && ip_reachable other_ip && other_port <> 0 then |
926 |
|
begin |
927 |
|
if !verbose_overnet then |
928 |
|
lprintf_nl () "Connect: convert address %s:%d to %s:%d" |
929 |
|
(Ip.to_string p.peer_ip) p.peer_port (Ip.to_string other_ip) other_port; |
930 |
|
p.peer_ip <- other_ip; |
931 |
|
p.peer_port <- other_port; |
932 |
|
send p |
933 |
|
end |
934 |
|
else |
935 |
|
begin |
936 |
|
if !verbose_overnet then |
937 |
|
lprintf_nl () "Connect: invalid IP %s:%d received from %s:%d" |
938 |
|
(Ip.to_string p.peer_ip) p.peer_port (Ip.to_string other_ip) other_port; |
939 |
|
failwith "Message not understood" |
940 |
|
end |
941 |
|
|
942 |
| OvernetConnectReply ps -> |
| OvernetConnectReply ps -> |
943 |
UdpSocket.declare_pong other_ip; |
UdpSocket.declare_pong other_ip; |
958 |
iter ps; |
iter ps; |
959 |
|
|
960 |
| OvernetPublicize p -> |
| OvernetPublicize p -> |
961 |
new_peer_message p; |
let rec send p = |
962 |
let p = new_peer p in |
new_peer_message p; |
963 |
udp_send p (OvernetPublicized (Some (my_peer ()))) |
let p = new_peer p in |
964 |
|
udp_send p (OvernetPublicized (Some (my_peer ()))) |
965 |
|
in |
966 |
|
if Ip.valid p.peer_ip && ip_reachable p.peer_ip && p.peer_port <> 0 then |
967 |
|
send p |
968 |
|
else |
969 |
|
if Ip.valid other_ip && ip_reachable other_ip && other_port <> 0 then |
970 |
|
begin |
971 |
|
if !verbose_overnet then |
972 |
|
lprintf_nl () "Publicize: convert address %s:%d to %s:%d" |
973 |
|
(Ip.to_string p.peer_ip) p.peer_port (Ip.to_string other_ip) other_port; |
974 |
|
p.peer_ip <- other_ip; |
975 |
|
p.peer_port <- other_port; |
976 |
|
send p |
977 |
|
end |
978 |
|
else |
979 |
|
begin |
980 |
|
if !verbose_overnet then |
981 |
|
lprintf_nl () "Publicize: invalid IP %s:%d received from %s:%d" |
982 |
|
(Ip.to_string p.peer_ip) p.peer_port (Ip.to_string other_ip) other_port; |
983 |
|
failwith "Message not understood" |
984 |
|
end |
985 |
|
|
986 |
| OvernetPublicized None -> |
| OvernetPublicized None -> |
987 |
() |
() |