summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'segget/segment.cpp')
-rw-r--r--segget/segment.cpp39
1 files changed, 23 insertions, 16 deletions
diff --git a/segget/segment.cpp b/segget/segment.cpp
index 45116cf..cab6343 100644
--- a/segget/segment.cpp
+++ b/segget/segment.cpp
@@ -37,6 +37,25 @@ string statusToString(Tsegment_status the_status){
default :return "UNKNOWN STATUS";
}
}
+bool Tsegment::segment_verification_is_ok(){
+ try{
+ ulong downloaded_size;
+ ifstream file((settings.segments_dir+"/"+file_name).c_str(), ios::in|ios::binary);
+ ulong start = file.tellg();
+ file.seekg (0, ios::end);
+ ulong end = file.tellg();
+ downloaded_size = end - start;
+ debug("seg:"+toString(segment_num)+" Dsize="+toString(downloaded_size)+" seg_size="+toString(segment_size));
+ file.close();
+ if (downloaded_size==segment_size){
+ return true;
+ }
+ }catch(...){
+ error_log("Error in segment.cpp: segment_verification_is_ok()");
+ }
+ return false;
+}
+
void Tsegment::set_segment(Tdistfile *prnt_distfile, uint seg_num, string distfile_name, ulong default_seg_size, ulong range_end){
try{
parent_distfile=prnt_distfile;
@@ -44,17 +63,9 @@ void Tsegment::set_segment(Tdistfile *prnt_distfile, uint seg_num, string distfi
segment_size=range_end-seg_num*default_seg_size+1;
range=toString(seg_num*default_seg_size)+"-"+toString(range_end);
file_name="."+distfile_name+".seg"+toString(seg_num);
- ulong downloaded_size;
if (settings.get_resume()){
//check if downloaded
- ifstream file((settings.segments_dir+"/"+file_name).c_str(), ios::in|ios::binary);
- ulong start = file.tellg();
- file.seekg (0, ios::end);
- ulong end = file.tellg();
- downloaded_size = end - start;
- debug("seg:"+toString(seg_num)+" Dsize="+toString(downloaded_size)+" seg_size="+toString(segment_size));
- file.close();
- if (downloaded_size==segment_size){
+ if (segment_verification_is_ok()){
status=SDOWNLOADED;
debug("seg:"+toString(seg_num)+" Downloaded");
}
@@ -67,15 +78,11 @@ void Tsegment::set_segment(Tdistfile *prnt_distfile, uint seg_num, string distfi
error_log("Error in segment.cpp: prepare_for_connection()");
}
}
-void Tsegment::prepare_for_connection(CURLM *cm, uint con_num, uint network_num, uint distfile_num, uint mirror_num){
+void Tsegment::prepare_for_connection(CURLM *cm, uint con_num, uint network_num, uint distfile_num, string url_address){
try{
// debug("NETWORK:"+toString(network_num)+(network_array[network_num].use_own_mirror_list_only_on ? " - LOCAL": " - REMOTE"));
- if (network_array[network_num].network_mode==MODE_LOCAL){
- url=network_array[network_num].benchmarked_mirror_list[mirror_num].url+parent_distfile->name;
- debug(" URL:"+url);
- }else{
- url=parent_distfile->url_list[mirror_num];
- }
+ // if MODE_LOCAL or MODE_PROXY_FETCHER
+ url=url_address;
msg_connecting(con_num,distfile_num, segment_num,"Downloading from "+url);
segments_in_progress[con_num]=this;
status=SDOWNLOADING;