From 1657adc4707a5d331264022cc8b1ace7abfb9ded Mon Sep 17 00:00:00 2001 From: Kostyantyn Ovechko Date: Tue, 22 Jun 2010 04:09:58 +0300 Subject: Add option [connections].bind_interface BIND INTERFACE / IP Pass a string as parameter. This sets the interface name to use as outgoing network interface. The name can be an interface name, an IP address, or a host name. No binding is set by default. default: bind_interface=none --- segget/segget.conf | 24 ++++++++++++++++++++++-- segget/segment.cpp | 5 +++++ segget/settings.cpp | 5 ++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/segget/segget.conf b/segget/segget.conf index 240630c..fb08e33 100644 --- a/segget/segget.conf +++ b/segget/segget.conf @@ -82,6 +82,28 @@ max_connection_speed=0 #max_total_speed=50000 +# BIND INTERFACE / IP +# Pass a string as parameter. This sets the interface name to use as outgoing +# network interface. The name can be an interface name, an IP address, or a host +# name. No binding is set by default. +# default: +# bind_interface=none +bind_interface=none + +# BIND LOCALPORT +# Pass a long. This sets the local port number of the socket used for connection. +# This can be used in combination with BIND_INTERFACE and you are recommended to +# use BIND_LOCALPORTRANGE as well when this is set. +# Valid port numbers are 1 - 65535. + +# BIND_LOCALPORTRANGE +# Pass a long. This is the number of attempts segget should make to find a +# working local port number. It starts with the given BIND_LOCALPORT and adds +# one to the number for each retry. Setting this to 1 or below will make segget +# do only one try for the exact port number. Port numbers by nature are scarce +# resources that will be busy at times so setting this value to something too +# low might cause unnecessary connection setup failures. + [mirrors] max_connections_num_per_mirror=2 benchmarking_on=1 @@ -95,8 +117,6 @@ allow_ftp=1 [schedule] -[interfaces] -# bind_if=192.168.56.2 [user-data] user_agent=segget diff --git a/segget/segment.cpp b/segget/segment.cpp index 34ee3c2..bc4d960 100644 --- a/segget/segment.cpp +++ b/segget/segment.cpp @@ -126,6 +126,11 @@ int Tsegment::add_easy_handle_to_multi(CURLM *cm){ curl_easy_setopt(easyhandle, CURLOPT_LOW_SPEED_LIMIT, settings.low_connection_speed_limit); curl_easy_setopt(easyhandle, CURLOPT_LOW_SPEED_TIME, settings.low_connection_speed_time); curl_easy_setopt(easyhandle, CURLOPT_MAX_RECV_SPEED_LARGE, settings.max_connection_speed); + if ((settings.bind_interface!="none") + and (settings.bind_interface!="") + and (settings.bind_interface!="NONE")) + curl_easy_setopt(easyhandle, CURLOPT_INTERFACE, settings.bind_interface.c_str()); + //set connection timeout curl_easy_setopt(easyhandle, CURLOPT_CONNECTTIMEOUT, settings.connection_timeout); curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data); diff --git a/segget/settings.cpp b/segget/settings.cpp index 451168d..cbb62e6 100644 --- a/segget/settings.cpp +++ b/segget/settings.cpp @@ -27,6 +27,7 @@ class Tsettings{ uint low_connection_speed_limit; uint low_connection_speed_time; uint max_connection_speed; + string bind_interface; Tsettings(): //folders distfiles_dir("./distfiles"), @@ -44,7 +45,8 @@ class Tsettings{ time_out(6000), low_connection_speed_limit(1000), low_connection_speed_time(10), - max_connection_speed(0) + max_connection_speed(0), + bind_interface("none") {}; void set_resume(bool resume_setting){resume_on=resume_setting;}; bool get_resume(){return resume_on;}; @@ -70,6 +72,7 @@ void Tsettings::load_from_conf_file(){ conf.set(low_connection_speed_limit, "connections", "low_connection_speed_limit"); conf.set(low_connection_speed_time, "connections", "low_connection_speed_time"); conf.set(max_connection_speed, "connections", "max_connection_speed"); + conf.set(bind_interface, "connections", "bind_interface"); } Tsettings settings; -- cgit v1.2.3-65-gdbad