12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- {$mode objfpc}
- {$h+}
- unit pkgsynapse;
- interface
- uses Classes,pkgdownload;
- Type
- TSynapseDownloader = Class(TBaseDownloader)
- Protected
- Procedure FTPDownload(Const URL : String; Dest : TStream); override;
- Procedure HTTPDownload(Const URL : String; Dest : TStream); override;
- end;
- implementation
- uses sysutils,uriparser,httpsend,ftpsend,pkgmessages;
- Procedure TSynapseDownloader.FTPDownload(Const URL : String; Dest : TStream);
- Var
- URI : TURI;
- FN : String;
- F : TFileStream;
- begin
- // Download in temporary file.
- FN:=GetTempFileName();
- try
- URI:=ParseURI(URL);
- with TFTPSend.Create do
- try
- if URI.UserName <> '' then
- begin
- Username := URI.UserName;
- Password := URI.Password;
- end;
- TargetHost := URI.Host;
- if (URI.Port<>0) then
- TargetPort := IntToStr(URI.Port);
- if not Login then
- Error(SErrLoginFailed);
- DirectFileName := FN;
- DirectFile:=True;
- If (URI.Path<>'') then
- if not ChangeWorkingDir(URI.Path) then
- Error(SErrCWDFailed,[URI.PATH]);
- BinaryMode:=True;
- If Not RetrieveFile(URI.Document, False) then
- Error(SErrGETFailed,[URI.Document]);
- Logout;
- finally
- Free;
- end;
- F:=TFileStream.Create(FN,fmOpenRead);
- Try
- Dest.CopyFrom(F,0);
- Finally
- F.Free;
- end;
- finally
- // Delete temporary file.
- If FileExists(FN) then
- DeleteFile(FN);
- end;
- end;
- Procedure TSynapseDownloader.HTTPDownload(Const URL : String; Dest : TStream);
- begin
- If Not HttpGetBinary(URL,Dest) then
- Error(SErrHTTPGetFailed);
- end;
- end.
|