Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
BT: disable announcing to 127.0.0.1 (bug #36886)
  • Loading branch information
ygrek committed Sep 1, 2013
1 parent b1aa1f0 commit edd6826
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
10 changes: 7 additions & 3 deletions src/networks/bittorrent/bTClients.ml
Expand Up @@ -200,8 +200,11 @@ let talk_to_udp_tracker host port args file t need_sources =
if !verbose_msg_servers then
lprintf_nl "udpt start with %s:%d" host port;
Ip.async_ip host (fun ip ->
(* lprintf_nl "udpt resolved %s to ip %s" host (Ip.to_string ip); *)
try interact ip with exn -> lprintf_nl "udpt interact exn %s" (Printexc2.to_string exn))
(* lprintf_nl "udpt resolved %s to ip %s" host (Ip.to_string ip); *)
if not (Ip.equal Ip.localhost ip) then
try interact ip with exn -> lprintf_nl "udpt interact exn %s" (Printexc2.to_string exn)
else if !verbose_msg_servers then
lprintf_nl "udpt ignoring tracker %s (resolves to localhost)" host)
(fun () ->
if !verbose_msg_servers then
lprintf_nl "udpt failed to resolve %s" host)
Expand Down Expand Up @@ -339,11 +342,12 @@ let connect_trackers file event need_sources f =
let module H = Http_client in
let r = {
H.basic_request with
H.req_url = Url.of_string ~args: args url;
H.req_url = Url.of_string ~args url;
H.req_proxy = !CommonOptions.http_proxy;
H.req_user_agent = get_user_agent ();
(* #4541 [egs] supports redirect *)
H.req_max_retry = !!max_tracker_redirect;
H.req_filter_ip = (fun ip -> not (Ip.equal Ip.localhost ip));
} in

if !verbose_msg_servers then
Expand Down
10 changes: 8 additions & 2 deletions src/utils/net/http_client.ml
Expand Up @@ -38,12 +38,13 @@ type http_request =
| DELETE
| TRACE

type error = [ `HTTP of int | `RST of BasicSocket.close_reason | `DNS ]
type error = [ `HTTP of int | `RST of BasicSocket.close_reason | `DNS | `Block of Ip.t ]

let show_error = function
| `HTTP code -> Printf.sprintf "HTTP error code %d" code
| `RST reason -> Printf.sprintf "Connection closed : %s" (BasicSocket.string_of_reason reason)
| `DNS -> Printf.sprintf "DNS resolution failed"
| `Block ip -> Printf.sprintf "Blocked connection to %s" (Ip.to_string ip)

let verbose = ref false

Expand All @@ -61,6 +62,7 @@ type request = {
req_max_retry : int;
req_save : bool;
req_max_total_time : float;
req_filter_ip : (Ip.t -> bool);
}

type content_handler =
Expand All @@ -85,8 +87,9 @@ let basic_request = {
req_max_retry = 0;
req_save = false;
req_max_total_time = infinite_timeout;
req_filter_ip = (fun _ -> true);
}

let make_full_request r =
let url = r.req_url in
let args = url.args in
Expand Down Expand Up @@ -245,6 +248,9 @@ let rec get_page r content_handler f ferr =
in
(* lprintf "async_ip ...\n"; *)
Ip.async_ip server (fun ip ->
match r.req_filter_ip ip with
| false -> ferr (`Block ip)
| true ->
(* lprintf "IP done %s:%d\n" (Ip.to_string ip) port;*)
let token = create_token unlimited_connection_manager in
let sock = TcpBufferedSocket.connect token "http client connecting"
Expand Down
6 changes: 5 additions & 1 deletion src/utils/net/http_client.mli
Expand Up @@ -47,6 +47,10 @@ type request = {
req_save : bool;
(** maximum time whole request processing is allowed to take, in seconds *)
req_max_total_time : float;
(** this function is called after DNS resolution,
returning [false] will block connection to the given ip
and HTTP request will fail with `Block error *)
req_filter_ip : (Ip.t -> bool);
}

type content_handler =
Expand All @@ -55,7 +59,7 @@ type content_handler =
val basic_request : request

(** either HTTP error code or low-level network error or DNS *)
type error = [ `HTTP of int | `RST of BasicSocket.close_reason | `DNS ]
type error = [ `HTTP of int | `RST of BasicSocket.close_reason | `DNS | `Block of Ip.t ]
val show_error : error -> string

val get_page : request -> content_handler -> (unit -> unit) -> (error -> unit) -> unit
Expand Down

0 comments on commit edd6826

Please sign in to comment.