57 |
|
|
58 |
*) |
*) |
59 |
|
|
60 |
|
(* prints a new logline with date, module and starts newline *) |
61 |
|
let lprintf_nl () = |
62 |
|
lprintf "%s[bTTrack] " |
63 |
|
(log_time ()); lprintf_nl2 |
64 |
|
|
65 |
open Http_server |
open Http_server |
66 |
|
|
67 |
type tracker_peer = { |
type tracker_peer = { |
100 |
try |
try |
101 |
Int64.of_string v |
Int64.of_string v |
102 |
with e -> |
with e -> |
103 |
lprintf "Exception %s in int64_of_string [%s]\n" |
lprintf_nl () "Exception %s in int64_of_string [%s]" |
104 |
(Printexc2.to_string e) v; |
(Printexc2.to_string e) v; |
105 |
raise e |
raise e |
106 |
|
|
108 |
try |
try |
109 |
int_of_string v |
int_of_string v |
110 |
with e -> |
with e -> |
111 |
lprintf "Exception %s in int_of_string [%s]\n" |
lprintf_nl () "Exception %s in int_of_string [%s]" |
112 |
(Printexc2.to_string e) v; |
(Printexc2.to_string e) v; |
113 |
raise e |
raise e |
114 |
|
|
121 |
|
|
122 |
let reply_has_tracker r info_hash peer_id peer_port peer_event = |
let reply_has_tracker r info_hash peer_id peer_port peer_event = |
123 |
|
|
124 |
lprintf_nl "[BT]: tracker contacted for %s" (Sha1.to_string info_hash); |
lprintf_nl () "tracker contacted for %s" (Sha1.to_string info_hash); |
125 |
let tracker = try |
let tracker = try |
126 |
Hashtbl.find tracked_files info_hash |
Hashtbl.find tracked_files info_hash |
127 |
with Not_found -> |
with Not_found -> |
128 |
lprintf_nl "[BT]: Need new tracker"; |
lprintf_nl () "Need new tracker"; |
129 |
if !ntracked_files < !!max_tracked_files then |
if !ntracked_files < !!max_tracked_files then |
130 |
let tracker = { |
let tracker = { |
131 |
tracker_id = info_hash; |
tracker_id = info_hash; |
138 |
Hashtbl.add tracked_files info_hash tracker; |
Hashtbl.add tracked_files info_hash tracker; |
139 |
tracker |
tracker |
140 |
else |
else |
141 |
failwith "BT]: Too many tracked files" |
failwith "[BT] Too many tracked files" |
142 |
in |
in |
143 |
|
|
144 |
let peer = |
let peer = |
158 |
peer_port = peer_port; |
peer_port = peer_port; |
159 |
peer_active = last_time (); |
peer_active = last_time (); |
160 |
} in |
} in |
161 |
lprintf_nl "BT]: adding new peer"; |
lprintf_nl () "adding new peer"; |
162 |
Hashtbl.add tracker.tracker_table peer_id peer; |
Hashtbl.add tracker.tracker_table peer_id peer; |
163 |
Fifo.put tracker.tracker_peers peer; |
Fifo.put tracker.tracker_peers peer; |
164 |
peer |
peer |
178 |
if tracker.tracker_message_time < last_time () then |
if tracker.tracker_message_time < last_time () then |
179 |
|
|
180 |
let list = ref [] in |
let list = ref [] in |
181 |
lprintf_nl "BT]: Tracker collecting peers:"; |
lprintf_nl () "Tracker collecting peers:"; |
182 |
(try |
(try |
183 |
for i = 1 to !!max_tracker_reply do |
for i = 1 to !!max_tracker_reply do |
184 |
let peer = Fifo.take tracker.tracker_peers in |
let peer = Fifo.take tracker.tracker_peers in |
185 |
lprintf_nl " %s:%d" (Ip.to_string peer.peer_ip)peer.peer_port; |
lprintf_nl () " %s:%d" (Ip.to_string peer.peer_ip)peer.peer_port; |
186 |
list := peer :: !list |
list := peer :: !list |
187 |
done |
done |
188 |
with _ -> ()); |
with _ -> ()); |
189 |
|
|
190 |
lprintf "Tracker sending %d peers\n" (List.length !list); |
lprintf_nl () "Tracker sending %d peers" (List.length !list); |
191 |
List.iter (fun p -> |
List.iter (fun p -> |
192 |
lprintf "Tracker send: %s:%d\n" |
lprintf_nl () "Tracker send: %s:%d" |
193 |
(Ip.to_string p.peer_ip) p.peer_port; |
(Ip.to_string p.peer_ip) p.peer_port; |
194 |
Fifo.put tracker.tracker_peers p |
Fifo.put tracker.tracker_peers p |
195 |
) !list; |
) !list; |
251 |
| "downloaded" -> downloaded := int64_of_string arg |
| "downloaded" -> downloaded := int64_of_string arg |
252 |
| "left" -> left := int64_of_string arg |
| "left" -> left := int64_of_string arg |
253 |
| "event" -> event := arg |
| "event" -> event := arg |
254 |
| _ -> lprintf_nl "BT]: BTTracker: Unexpected [%s=%s]" name arg |
| _ -> lprintf_nl () "Unexpected [%s=%s]" name arg |
255 |
) args; |
) args; |
256 |
|
|
257 |
lprintf_nl "[BT]: Connection received by tracker:"; |
lprintf_nl () "Connection received by tracker:"; |
258 |
lprintf_nl " info_hash: %s" (Sha1.to_string !info_hash); |
lprintf_nl () " info_hash: %s" (Sha1.to_string !info_hash); |
259 |
lprintf_nl " event: %s" !event; |
lprintf_nl () " event: %s" !event; |
260 |
lprintf_nl " downloaded: %d" (Int64.to_int !downloaded); |
lprintf_nl () " downloaded: %d" (Int64.to_int !downloaded); |
261 |
lprintf_nl " uploaded: %d" (Int64.to_int !uploaded); |
lprintf_nl () " uploaded: %d" (Int64.to_int !uploaded); |
262 |
|
|
263 |
reply_has_tracker r !info_hash !peer_id !port !event |
reply_has_tracker r !info_hash !peer_id !port !event |
264 |
|
|
265 |
| filename -> |
| filename -> |
266 |
|
|
267 |
lprintf_nl "BT]: Request for .torrent [%s]" filename; |
lprintf_nl () "Request for .torrent [%s]" filename; |
268 |
if (Filename2.last_extension filename <> ".torrent") then |
if (Filename2.last_extension filename <> ".torrent") then |
269 |
failwith "Incorrect filename 1"; |
failwith "Incorrect filename 1"; |
270 |
for i = 1 to String.length filename - 1 do |
for i = 1 to String.length filename - 1 do |
295 |
r.reply_content <- File.to_string filename |
r.reply_content <- File.to_string filename |
296 |
|
|
297 |
with e -> |
with e -> |
298 |
lprintf_nl "[BT]: Tracker: for request [%s] exception %s" |
lprintf_nl () "for request [%s] exception %s" |
299 |
(Url.to_string r.get_url) (Printexc2.to_string e); |
(Url.to_string r.get_url) (Printexc2.to_string e); |
300 |
|
|
301 |
r.reply_head <- "404 Not Found" |
r.reply_head <- "404 Not Found" |
358 |
let time_threshold = last_time () - 3600 in |
let time_threshold = last_time () - 3600 in |
359 |
let trackers = ref [] in |
let trackers = ref [] in |
360 |
|
|
361 |
if !verbose_msg_servers then lprintf_nl "[BT]: clean_tracker_timer"; |
if !verbose_msg_servers then lprintf_nl () "clean_tracker_timer"; |
362 |
Hashtbl.iter (fun _ tracker -> |
Hashtbl.iter (fun _ tracker -> |
363 |
let list = ref [] in |
let list = ref [] in |
364 |
let old_peers = ref [] in |
let old_peers = ref [] in |