Hello,
Attached is a patch to correctly report uploaded and downloaded counts to
tracker.
Additionally it ensures that unrecognized trackers (udp://) are not reenabled
when file is
resumed.
--
ygrek
http://ygrek.org.ua/
diff --git a/src/networks/bittorrent/bTClients.ml b/src/networks/bittorrent/bTClients.ml
index 92647de..ff27686 100644
--- a/src/networks/bittorrent/bTClients.ml
+++ b/src/networks/bittorrent/bTClients.ml
@@ -89,25 +89,32 @@ let current_uploaders = ref ([] : BTTypes.client list)
*)
let connect_trackers file event f =
- let args,must_check_delay, downloaded, left =
+ (* reset session statistics when sending 'started' event *)
+ if event = "started" then
+ begin
+ file.file_session_uploaded <- Int64.zero;
+ file.file_session_downloaded <- Int64.zero;
+ end;
+
+ let args,must_check_delay, left =
match file.file_swarmer with
None ->
begin
match event with
- | "started" -> [("event", "started")],true,zero,zero
- | "stopped" -> [("event", "stopped")],false,zero,zero
- | _ -> [],true, zero, zero
+ | "started" -> [("event", "started")],true,zero
+ | "stopped" -> [("event", "stopped")],false,zero
+ | _ -> [],true,zero
end
| Some swarmer ->
let local_downloaded = CommonSwarming.downloaded swarmer in
let left = file_size file -- local_downloaded in
match event with
- | "completed" -> [("event", "completed")],false,local_downloaded,zero
- | "started" -> [("event", "started")],true,zero, left
- | "stopped" -> [("event", "stopped")],false,zero, left
- | _ -> [],true,local_downloaded, left
+ | "completed" -> [("event", "completed")],false,zero
+ | "started" -> [("event", "started")],true,left
+ | "stopped" -> [("event", "stopped")],false,left
+ | _ -> [],true,left
in
let args = ("no_peer_id", "1") :: ("compact", "1") :: args in
@@ -124,12 +131,11 @@ let connect_trackers file event f =
("info_hash", Sha1.direct_to_string file.file_id) ::
("peer_id", Sha1.direct_to_string !!client_uid) ::
("port", string_of_int !!client_port) ::
- ("uploaded", Int64.to_string file.file_uploaded) ::
- ("downloaded", Int64.to_string downloaded) ::
+ ("uploaded", Int64.to_string file.file_session_uploaded) ::
+ ("downloaded", Int64.to_string file.file_session_downloaded) ::
("left", Int64.to_string left) ::
args
in
-
let enabled_trackers =
let enabled_trackers = List.filter (fun t -> tracker_is_enabled t) file.file_trackers in
@@ -860,6 +866,8 @@ and client_to_client c sock msg =
count_download c (new_downloaded -- old_downloaded);
(* use len here with max_dr quickfix *)
Rate.update c.client_downloaded_rate ~amount:len;
+ (* count bytes downloaded from network for this file *)
+ file.file_session_downloaded <- file.file_session_downloaded ++ (Int64.of_int len);
if !verbose_msg_clients then
(match c.client_ranges_sent with
[] -> lprintf_file_nl (as_file file) "EMPTY Ranges !!!"
@@ -1531,6 +1539,7 @@ let rec iter_upload sock c =
Rate.update c.client_upload_rate ~amount:len;
Rate.update c.client_downloaded_rate;
file.file_uploaded <- file.file_uploaded ++ (Int64.of_int len);
+ file.file_session_uploaded <- file.file_session_uploaded ++ (Int64.of_int len);
let _ =
(* update stats *)
count_filerequest c;
@@ -1581,8 +1590,8 @@ let client_can_upload c allowed =
let file_resume file =
List.iter (fun t ->
match t.tracker_status with
- Enabled -> ()
- | _ -> t.tracker_status <- Enabled
+ | Enabled | Disabled_mld _ -> ()
+ | Disabled_failure _ | Disabled _ -> t.tracker_status <- Enabled
) file.file_trackers;
(try get_sources_from_tracker file with _ -> ())
diff --git a/src/networks/bittorrent/bTGlobals.ml b/src/networks/bittorrent/bTGlobals.ml
index 9353fc8..1f23a51 100644
--- a/src/networks/bittorrent/bTGlobals.ml
+++ b/src/networks/bittorrent/bTGlobals.ml
@@ -287,6 +287,8 @@ let new_file file_id t torrent_diskname file_temp file_state user group =
file_torrent_diskname = torrent_diskname;
file_completed_hook = (fun _ -> ());
file_shared = None;
+ file_session_uploaded = Int64.zero;
+ file_session_downloaded = Int64.zero;
} and file_impl = {
dummy_file_impl with
impl_file_owner = user;
diff --git a/src/networks/bittorrent/bTInteractive.ml b/src/networks/bittorrent/bTInteractive.ml
index b218719..d7930e2 100644
--- a/src/networks/bittorrent/bTInteractive.ml
+++ b/src/networks/bittorrent/bTInteractive.ml
@@ -1124,13 +1124,14 @@ let commands =
if CommonUserDb.user2_is_admin o.conn_user.ui_user then begin
List.iter (fun file ->
if file_state file = FileShared then
- Printf.bprintf o.conn_buf "%s [%s]\n" file.file_name (Int64.to_string file.file_uploaded)
+ Printf.bprintf o.conn_buf "%s [U %Ld u/d %Ld/%Ld]\n"
+ file.file_name file.file_uploaded file.file_session_uploaded file.file_session_downloaded
) !current_files;
_s "done"
end else
begin print_command_result o "You are not allowed to use seeded_torrents";
"" end
- ), _s ":\t\t\tprint all seeded .torrent files on this server";
+ ), _s ":\t\t\tprint all seeded .torrent files on this server (output: name, total upload, session upload, session download)";
"reshare_torrents", "Network/Bittorrent", Arg_none (fun o ->
share_files ();
diff --git a/src/networks/bittorrent/bTTypes.ml b/src/networks/bittorrent/bTTypes.ml
index 35f4682..aa5af21 100644
--- a/src/networks/bittorrent/bTTypes.ml
+++ b/src/networks/bittorrent/bTTypes.ml
@@ -315,6 +315,9 @@ and file = {
mutable file_tracker_connected : bool;
mutable file_completed_hook : (file -> unit);
mutable file_shared : file CommonShared.shared_impl option;
+ (** session uploaded and downloaded bytes, for statistics reporting *)
+ mutable file_session_uploaded : int64;
+ mutable file_session_downloaded : int64;
}
and ft = {
_______________________________________________
Mldonkey-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/mldonkey-users