procedure TLoadThread.DownLoadSeg(beg,the:String);
var
fSize,s4prog:int64; //<-размер файла
//<-количество реально прочитанных байт
RestartPos,rdi,fsi,Bfer,p,m,nac: int64 ;// //<-|позиция с которой начинается
// |докачка
fBuf0: array[1..512] of byte; //<-буфер куда качаем
fBuf: array[1..1024] of byte; //<-буфер куда качаем
fBuf1: array[1..2048] of byte; //<-буфер куда качаем
Header,ExtraHeader: string; //<-|дополнительная переменная в HTTP
tex:String;
ReadLen,ik:Cardinal;
ElapsedTime,ElapsedDTime:Cardinal;
za5sec:int64;
rer:int64;
rfil,rzfil,prfil,Url:String;
code: String;
sizex,indexx:Cardinal;
h:HFILE;
lencurl: cardinal;
aURL,cUrl,pUrl: string;
per:integer;
Errsize:Int64;
sg5,sg4,sg3,nsil,se1:integer;
sl14,sl13,sl10,msl:String;
ltime:TDateTime;
begin
if Form2.sComboBox8.ItemIndex=0 then Bfer:=512 else
if Form2.sComboBox8.ItemIndex=1 then Bfer:=1024 else
if Form2.sComboBox8.ItemIndex=2 then Bfer:=2048;
if Form1.sCheckBox2.Checked=true then begin
ExtraHeader:=#13+Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[13];
end else begin
ExtraHeader:='';
end;
if Form1.sCheckBox1.Checked=true then begin
Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[3]:=AutoStr;
ExtraHeader:=Autorization('http://'+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+'/login.php','login='+Form1.sEdit5.Text+'&password='+Form1.sEdit6.Text,'POST');
Form1.sMemo1.Lines.Add(ExtraHeader);
Form1.sMemo1.Lines.Add('http://'+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+'/login.php?login='+Form1.sEdit5.Text+'&password='+Form1.sEdit6.Text);
end;
rer:=0;
s4prog:=0;
za5sec:=0;
ok:=1;
se1:=0;
RestartPos :=StrToInt64(beg);
stopnew[DownNumber]:=false;
size:=RestartPos;
ty:=StrToInt64(the);
fSize:=ty - RestartPos;
tex:=Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[10];
if FileExists(tex) then
begin
// AssignFile(f,tex);
// Reset(f,1);
m:=1;
nac:=RestartPos-$FFFFFFFF-1;
h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
p:= SetFilePointer(h,nac,@m, FILE_BEGIN);
// Seek(f, RestartPos);
end
else begin
//иначе с начала
// AssignFile(f,tex);
h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if late=0 then begin
// Rewrite(f,1);
h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
end else begin
nac:=late-$FFFFFFFF-1;
h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
p:= SetFilePointer(h,nac,@m, FILE_BEGIN);
// reset(f,1);
// Seek(f, late);
end;
end;
if Copy(tex,lastDelimiter('.',tex),Length(tex))='.sdn' then begin
Form1.sMemo1.Lines.Add(DownSdnStr);
end else begin
Form1.sMemo1.Lines.Add(DownFileStr);
end;
rfil:='';
//Пишем дополнительную строку для заголовка
cUrl:=Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11];
if Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[12]<>'' then begin
Header :='Accept: */*'+#13+
'Connection: Keep-Alive '+#13+
'Referer: '+Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[12]+#13+
'Range: bytes='+IntToStr(RestartPos)+'-'+IntToStr(ty-1)+#13+
'Cache-Control: no-cache'+#13+
'Host: '+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+
ExtraHeader;
end else begin
Header :='Accept: */*'+#13+
'Connection: Keep-Alive '+#13+
'Range: bytes='+IntToStr(RestartPos)+'-'+IntToStr(ty-1)+#13+
'Cache-Control: no-cache'+#13+
'Host: '+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+
ExtraHeader;
end;
//открываем URL
sizex:=256;
indexx:=256;
lencurl:=INTERNET_MAX_URL_LENGTH;
SetLength(aURL, lencurl);
InternetCanonicalizeUrl(PChar(cURL),PChar(aURL),lencurl,ICU_BROWSER_MODE);
Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[3]:=KachStr;
hURLa := InternetOpenUrl(hIneta,
PChar(aURL),
pchar(Header),
StrLen(pchar(Header)),
INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD , // INTERNET_FLAG_EXISTING_CONNECT
0);
pUrl:=Copy(aURL,Length(GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11]))-1,Length(aUrl));
Form1.sMemo1.Lines.Add(KachStr+': '+cUrl);
latetime:=now();
ltime:=now();
Form1.sMemo1.Lines.Add(BegStr+' '+IntToStr(RestartPos));
Form1.sMemo1.Lines.Add(DownStr+' '+IntToStr(nseg)+' '+SStr);
Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[3]:=DownStr;
while stopnew[DownNumber]<>true do
begin
//читаем в буфер
if pausenew[DownNumber]<>true then
begin
if Form2.sTrackBar2.Position>0 then Sleep(Form2.sTrackBar2.Position);
if Bfer=2048 then InternetReadFile(hURLa, @fBuf1, SizeOf(fBuf1), ReadLen) else //<-пишем в файл
if Bfer=512 then InternetReadFile(hURLa, @fBuf0, SizeOf(fBuf0), ReadLen) else
begin InternetReadFile(hURLa, @fBuf, SizeOf(fBuf), ReadLen);
end;
rdi:=ReadLen;
fsi:=fSize;
if (rdi<>Bfer) and (fsi mod Bfer<>rdi) and (fsi<>rdi) and (rdi<>0) then begin //or ((fsi<>237) and (s4prog=237)) or (((fsi mod 1024)<>237) and (rdi=237)) then begin
if Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[16]='' then begin
if (Errsize=rdi) and (Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[17]='') then begin
Form1.sMemo1.Lines.Add(IntToStr(rdi));
Form1.sMemo1.Lines.Add(ErrStr);
termnew[DownNumber]:=true;
stopnew[DownNumber]:=true;
Errsize:=0;
Terminate;
end else begin
Errsize:=rdi;
end;
end else begin
try
zerkala.LoadFromFile(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[16]);
msl:=Copy(zerkala.Strings[0],3,5);
if msl='' then msl:='0';
nsil:=StrToInt(msl);
finally
if nsil>ns+1 then begin
ns:=ns+1;
Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11]:=zerkala.Strings[ns+1];
Form1.sMemo1.Lines.Add('Старый урл сдох открываем новый с файла зеркал: '+zerkala.Strings[ns+1]);
InternetCloseHandle(hUrla);
hURLa := InternetOpenUrl(hIneta,
PChar(zerkala.Strings[ns+1]),
pchar(Header),
StrLen(pchar(Header)),
INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD , // INTERNET_FLAG_EXISTING_CONNECT
0);
end else begin
Form1.sMemo1.Lines.Add('Зеркала кончились ищем новые ');
Form1.sComboBox3.Text:=Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[17];
LinkThried[DownNumber]:=TFireThread.Create(false);
LinkThried[DownNumber].nm:=DownName;
LinkThried[DownNumber].FreeOnTerminate:=true;
ns:=0;
end;
end;
end;
end else begin
try
{ if Bfer=2048 then BlockWrite(f, fBuf1, ReadLen) else //<-пишем в файл
if Bfer=512 then BlockWrite(f, fBuf0, ReadLen) else begin
BlockWrite(f, fBuf, ReadLen);
end; }
if Bfer=2048 then WriteFile(h, fBuf1,SizeOf(fBuf1), ReadLen,nil) else //<-пишем в файл
if Bfer=512 then WriteFile(h, fBuf0, SizeOf(fBuf0), ReadLen,nil) else begin
WriteFile(h, fBuf, SizeOf(fBuf), ReadLen,nil);
end;
Form1.sMemo1.Lines.Add( BoolToStr(WriteFile(h, fBuf, SizeOf(fBuf), ReadLen,nil)));
Form1.sMemo1.Lines.Add( IntToStr(ReadLen));
Form1.sMemo1.Lines.Add('Код ошибки: '+IntToStr(GetLastError));
...
end;