174 |
let counter = ref 1 |
let counter = ref 1 |
175 |
|
|
176 |
let connect_redirector () = |
let connect_redirector () = |
177 |
if !!propagate_servers then begin |
if !!propagate_servers && !!enable_mlnet_redirector then begin |
178 |
decr counter; |
decr counter; |
179 |
if !counter = 0 then begin |
if !counter = 0 then begin |
180 |
counter := 6; |
counter := 6; |
198 |
(* Try to connect the redirector to get interesting information, since we |
(* Try to connect the redirector to get interesting information, since we |
199 |
are not allowed to use savannah anymore. The redirector should be able to |
are not allowed to use savannah anymore. The redirector should be able to |
200 |
support the charge, at least, currently. *) |
support the charge, at least, currently. *) |
201 |
let (name, port) = !!mlnet_redirector in |
if !!enable_mlnet_redirector then begin |
202 |
let packet = gen_redirector_packet () in |
let (name, port) = !!mlnet_redirector in |
203 |
Ip.async_ip name (fun ip -> |
let packet = gen_redirector_packet () in |
204 |
try |
Ip.async_ip name (fun ip -> |
205 |
if !verbose_redirector then lprintf_nl "connecting to redirector"; |
try |
206 |
let token = create_token unlimited_connection_manager in |
if !verbose_redirector then lprintf_nl "connecting to redirector"; |
207 |
let sock = TcpBufferedSocket.connect token "connect redirector" |
let token = create_token unlimited_connection_manager in |
208 |
(Ip.to_inet_addr ip) port |
let sock = TcpBufferedSocket.connect token "connect redirector" |
209 |
(fun sock event -> |
(Ip.to_inet_addr ip) port |
210 |
match event with |
(fun sock event -> |
211 |
| BASIC_EVENT (LTIMEOUT | RTIMEOUT) -> |
match event with |
212 |
TcpBufferedSocket.close sock Closed_for_timeout |
| BASIC_EVENT (LTIMEOUT | RTIMEOUT) -> |
213 |
| _ -> ()) |
TcpBufferedSocket.close sock Closed_for_timeout |
214 |
in |
| _ -> ()) |
215 |
TcpBufferedSocket.set_rtimeout sock 30.; |
in |
216 |
let to_read = ref [] in |
TcpBufferedSocket.set_rtimeout sock 30.; |
217 |
set_reader sock (cut_messages (fun opcode s -> |
let to_read = ref [] in |
218 |
if !verbose_redirector then lprintf_nl "redirector info received"; |
set_reader sock (cut_messages (fun opcode s -> |
219 |
let module L = LittleEndian in |
if !verbose_redirector then lprintf_nl "redirector info received"; |
220 |
|
let module L = LittleEndian in |
221 |
let motd_html_s, pos = L.get_string16 s 2 in |
|
222 |
let pos = if motd_html_s <> "XX" then |
let motd_html_s, pos = L.get_string16 s 2 in |
223 |
let servers_met_s, pos = L.get_string16 s pos in |
let pos = if motd_html_s <> "XX" then |
224 |
let peers_ocl_s, pos = L.get_string16 s pos in |
let servers_met_s, pos = L.get_string16 s pos in |
225 |
let peers_dat_s, pos = L.get_string16 s pos in |
let peers_ocl_s, pos = L.get_string16 s pos in |
226 |
let motd_conf_s, pos = L.get_string16 s pos in |
let peers_dat_s, pos = L.get_string16 s pos in |
227 |
let peers_kad_s, pos = L.get_string16 s pos in |
let motd_conf_s, pos = L.get_string16 s pos in |
228 |
|
let peers_kad_s, pos = L.get_string16 s pos in |
229 |
motd_html =:= motd_html_s; |
|
230 |
|
motd_html =:= motd_html_s; |
231 |
let servers_met_file = Filename.temp_file "servers" ".met" in |
|
232 |
File.from_string servers_met_file servers_met_s; |
let servers_met_file = Filename.temp_file "servers" ".met" in |
233 |
if !!enable_donkey then |
File.from_string servers_met_file servers_met_s; |
234 |
load_file "servers.met" servers_met_file; |
if !!enable_donkey then |
235 |
|
load_file "servers.met" servers_met_file; |
236 |
let peers_ocl_file = Filename.temp_file "peers" ".ocl" in |
|
237 |
File.from_string peers_ocl_file peers_ocl_s; |
let peers_ocl_file = Filename.temp_file "peers" ".ocl" in |
238 |
if !!enable_overnet then |
File.from_string peers_ocl_file peers_ocl_s; |
239 |
load_file "ocl" peers_ocl_file; |
if !!enable_overnet then |
240 |
|
load_file "ocl" peers_ocl_file; |
241 |
let peers_dat_file = Filename.temp_file "contacts" ".dat" in |
|
242 |
File.from_string peers_dat_file peers_dat_s; |
let peers_dat_file = Filename.temp_file "contacts" ".dat" in |
243 |
if !!enable_overnet then |
File.from_string peers_dat_file peers_dat_s; |
244 |
load_file "contact.dat" peers_dat_file; |
if !!enable_overnet then |
245 |
|
load_file "contact.dat" peers_dat_file; |
246 |
let motd_conf_file = Filename.temp_file "motd" ".conf" in |
|
247 |
File.from_string motd_conf_file motd_conf_s; |
let motd_conf_file = Filename.temp_file "motd" ".conf" in |
248 |
load_file "motd.conf" motd_conf_file; |
File.from_string motd_conf_file motd_conf_s; |
249 |
|
load_file "motd.conf" motd_conf_file; |
250 |
let peers_kad_file = Filename.temp_file "peers" ".kad" in |
|
251 |
File.from_string peers_kad_file peers_kad_s; |
let peers_kad_file = Filename.temp_file "peers" ".kad" in |
252 |
if !!enable_kademlia then |
File.from_string peers_kad_file peers_kad_s; |
253 |
load_file "kad" peers_kad_file; |
if !!enable_kademlia then |
254 |
|
load_file "kad" peers_kad_file; |
255 |
pos |
|
256 |
else |
pos |
257 |
|
else |
258 |
let get_item s pos = |
|
259 |
let kind, pos = get_string32 s pos in |
let get_item s pos = |
260 |
let file, pos = get_string32 s pos in |
let kind, pos = get_string32 s pos in |
261 |
(kind, file), pos |
let file, pos = get_string32 s pos in |
262 |
in |
(kind, file), pos |
263 |
let files, pos = L.get_list16 get_item s pos in |
in |
264 |
List.iter (fun (kind, file) -> |
let files, pos = L.get_list16 get_item s pos in |
265 |
let temp_file = Filename.temp_file "temp" ".mld" in |
List.iter (fun (kind, file) -> |
266 |
File.from_string temp_file file; |
let temp_file = Filename.temp_file "temp" ".mld" in |
267 |
load_file kind temp_file |
File.from_string temp_file file; |
268 |
) files; |
load_file kind temp_file |
269 |
pos |
) files; |
270 |
in |
pos |
271 |
let ip = L.get_ip s pos in |
in |
272 |
last_high_id := ip; |
let ip = L.get_ip s pos in |
273 |
|
last_high_id := ip; |
274 |
lprintf "Redirector info loaded (IP set to %s)\n" |
|
275 |
(Ip.to_string ip); |
lprintf_nl "Redirector info loaded (IP set to %s)" |
276 |
TcpBufferedSocket.set_lifetime sock 30.; |
(Ip.to_string ip); |
277 |
|
TcpBufferedSocket.set_lifetime sock 30.; |
278 |
)); |
|
279 |
write_string sock packet |
)); |
280 |
|
write_string sock packet |
281 |
with e -> |
|
282 |
lprintf "Exception %s while connecting redirector\n" |
with e -> |
283 |
(Printexc2.to_string e) |
lprintf_nl "Exception %s while connecting redirector" |
284 |
); |
(Printexc2.to_string e) |
285 |
|
) |
286 |
|
end; |
287 |
|
|
288 |
if !!network_update_url <> "" then begin |
if !!network_update_url <> "" then begin |
289 |
load_url "motd.html" (Filename.concat !!network_update_url "motd.html"); |
load_url "motd.html" (Filename.concat !!network_update_url "motd.html"); |
290 |
load_url "motd.conf" (Filename.concat !!network_update_url "motd.conf"); |
load_url "motd.conf" (Filename.concat !!network_update_url "motd.conf"); |
291 |
end; |
end; |
292 |
List.iter (fun (kind, period, url) -> |
List.iter (fun (kind, period, url) -> |
293 |
if !days mod period = 0 then |
if !hours mod period = 0 then |
294 |
match kind with |
match kind with |
295 |
| "contact.dat" -> if !!enable_overnet then load_url kind url |
| "contact.dat" -> if !!enable_overnet then load_url kind url |
296 |
| "guarding.p2p" -> load_url kind url |
| "guarding.p2p" -> load_url kind url |