summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKostyantyn Ovechko <fastinetserver@gmail.com>2010-07-17 16:02:57 +0300
committerKostyantyn Ovechko <fastinetserver@gmail.com>2010-07-17 16:02:57 +0300
commit50f21da7e859d3dd66af60adc53c0f17a4cb86fe (patch)
tree9359a914dd90b9cead141b975f351c7a9911949a
parentAdd options from tuiclient.conf file (diff)
downloadidfetch-50f21da7e859d3dd66af60adc53c0f17a4cb86fe.tar.gz
idfetch-50f21da7e859d3dd66af60adc53c0f17a4cb86fe.tar.bz2
idfetch-50f21da7e859d3dd66af60adc53c0f17a4cb86fe.zip
Implement check if distfile is already in the proxy-fetcher's queue. If so don't add it.
-rw-r--r--segget/distfile.cpp6
-rw-r--r--segget/distfile.h14
-rw-r--r--segget/network1_mirrors.conf5
-rw-r--r--segget/pkg.cpp47
-rw-r--r--segget/pkg.h7
-rw-r--r--segget/proxyfetcher.cpp2
6 files changed, 67 insertions, 14 deletions
diff --git a/segget/distfile.cpp b/segget/distfile.cpp
index 43d3641..49829a5 100644
--- a/segget/distfile.cpp
+++ b/segget/distfile.cpp
@@ -401,15 +401,17 @@ int Tdistfile::provide_segment(CURLM* cm, uint connection_num, uint seg_num){
// request from proxy fethcer
status=request(best_proxy_fetcher_network_num, json_data);
debug("Trying to dowload distfile"+name+" via proxy_fetcher. status="+toString(status));
- if (status==DPROXY_DOWNLOADED){
+ if (status==R_DOWNLOADED){
// start download from the proxy_fetcher
debug(" So best proxy_fetcher_network is network#:"+toString(best_proxy_fetcher_network_num));
// BEWARE -- CORRECT FOLLOWING LINES !!!!!!!!!!!
// TO-DO: start download from proxy_fether mirrors
// return choose_best_mirror(cm, connection_num, best_remote_network_num, seg_num);
+// TO-DO: replace return 0 by result=start_downloading_segment_from_proxy_fetcher_mirror();
+ return 0;
}
//return - don't switch to low priority networks
- return R_ADDED_TO_PROXY_QUEUE;
+ return status;
}else{
// remote_mirrors_go_third
if (best_remote_network_num!=-1){
diff --git a/segget/distfile.h b/segget/distfile.h
index d97de3e..134ae74 100644
--- a/segget/distfile.h
+++ b/segget/distfile.h
@@ -72,10 +72,16 @@ using namespace std;
typedef unsigned int uint;
-#define R_DOWNLOAD_STARTED 0
-#define R_ADDED_TO_PROXY_QUEUE 100
-#define R_WAIT_FOR_LOCAL_MIRRORS 101
-#define R_NO_FREE_NETWORK_CONNECTION_FOUND 102
+#define R_ERROR_ADDING_TO_PROXY_QUEUE 1
+#define R_ADDED_TO_PROXY_QUEUE 100
+#define R_ALREADY_WAS_IN_QUEUE 101
+#define R_WAITING 102
+#define R_DOWNLOAD_STARTED 103
+#define R_DOWNLOADING 104
+#define R_FAILED 105
+#define R_DOWNLOADED 106
+#define R_WAIT_FOR_LOCAL_MIRRORS 107
+#define R_NO_FREE_NETWORK_CONNECTION_FOUND 108
enum Tdistfile_status{
DNEW,
diff --git a/segget/network1_mirrors.conf b/segget/network1_mirrors.conf
index 4164689..7628506 100644
--- a/segget/network1_mirrors.conf
+++ b/segget/network1_mirrors.conf
@@ -1,4 +1 @@
-ftp://192.168.56.11/
-ftp://192.168.56.12/
-ftp://192.168.56.13/
-ftp://192.168.56.14/ \ No newline at end of file
+http://192.168.0.1/ \ No newline at end of file
diff --git a/segget/pkg.cpp b/segget/pkg.cpp
index bf8daf8..f60f98e 100644
--- a/segget/pkg.cpp
+++ b/segget/pkg.cpp
@@ -28,15 +28,58 @@
Tpkg **Ppkg_array;
Tpkg proxy_fetcher_pkg;
-void Tpkg::push_back_distfile(json_object* json_distfile){
+
+//#define R_DOWNLOAD_STARTED 0
+//#define R_ADDED_TO_PROXY_QUEUE 100
+//#define R_ALREADY_WAS_IN_QUEUE 101
+//#define R_WAIT_FOR_LOCAL_MIRRORS 102
+//#define R_NO_FREE_NETWORK_CONNECTION_FOUND 103
+//#define R_ERROR_ADDING_TO_PROXY_QUEUE 200
+
+int Tpkg::push_back_distfile(json_object* json_obj_distfile){
try{
distfile_count++;
Tdistfile * Pcur_distfile=new Tdistfile();
Pdistfile_list.push_back(Pcur_distfile);
- Pcur_distfile->load_distfile_from_json(json_distfile);
+ Pcur_distfile->load_distfile_from_json(json_obj_distfile);
+
+ string distfile_name=json_object_get_string(json_object_object_get(json_obj_distfile,"name"));
+ debug("PROXY_FETCHER: Added Distfile: "+distfile_name+" to proxy-fetcher's queue");
+ return R_ADDED_TO_PROXY_QUEUE;
+ }catch(...){
+ error_log("Error in pkg.cpp: pushback_distfile()");
+ return R_ERROR_ADDING_TO_PROXY_QUEUE;
+ }
+}
+
+int Tpkg::try_adding_distfile_to_proxy_fetchers_queue(json_object* json_obj_distfile){
+ string distfile_name;
+ try{
+ distfile_name=json_object_get_string(json_object_object_get(json_obj_distfile,"name"));
+ for (ulong distfile_num=0; distfile_num<distfile_count; distfile_num++){
+ if (Pdistfile_list[distfile_num]->name==distfile_name){
+ switch (Pdistfile_list[distfile_num]->status){
+ case DDOWNLOADED: {
+ debug("PROXY_FETCHER: Distfile: "+distfile_name+" was downloaded");
+ return R_DOWNLOADED;
+ };
+ case DFAILED:{
+ debug("PROXY_FETCHER: Failed to download distfile: "+distfile_name);
+ return R_FAILED;
+ }
+ default:{
+ debug("PROXY_FETCHER: Distfile: "+distfile_name+" was already in queue");
+ return R_ALREADY_WAS_IN_QUEUE;
+ }
+ }
+ }
+ }
+ return push_back_distfile(json_obj_distfile);
}catch(...){
error_log("Error in pkg.cpp: pushback_distfile()");
}
+ debug("PROXY_FETCHER: Error adding Distfile: "+distfile_name+" to proxy-fetcher's queue");
+ return R_ERROR_ADDING_TO_PROXY_QUEUE;
}
diff --git a/segget/pkg.h b/segget/pkg.h
index a47033f..c858a72 100644
--- a/segget/pkg.h
+++ b/segget/pkg.h
@@ -37,6 +37,10 @@ using namespace std;
typedef unsigned int uint;
typedef Tdistfile* Pdistfile;
+#define Q_ADDED_TO_QUEUE 0
+#define Q_ALREADY_EXISTS 1
+#define Q_ERROR 100
+
class Tpkg{
public:
vector<Pdistfile> Pdistfile_list;
@@ -53,7 +57,8 @@ class Tpkg{
Tpkg(const Tpkg &L); // copy constructor
Tpkg & operator=(const Tpkg &L);
~Tpkg();
- void push_back_distfile(json_object* json_distfile);
+ int push_back_distfile(json_object* json_obj_distfile);
+ int try_adding_distfile_to_proxy_fetchers_queue(json_object* json_obj_distfile);
void load_pkg_from_json(json_object* json_obj_pkg);
};
diff --git a/segget/proxyfetcher.cpp b/segget/proxyfetcher.cpp
index 3a87730..aededc5 100644
--- a/segget/proxyfetcher.cpp
+++ b/segget/proxyfetcher.cpp
@@ -97,7 +97,7 @@ void *run_proxy_fetcher_server(void * ){
// debug("serving client on fd"+toString(fd));
string recv_msg=buffer;
error_log("Received a msg from the client:"+recv_msg);
- proxy_fetcher_pkg.push_back_distfile(json_tokener_parse(buffer));
+ proxy_fetcher_pkg.try_adding_distfile_to_proxy_fetchers_queue(json_tokener_parse(buffer));
}
}
}