mirror of
https://github.com/rejetto/hfs2.git
synced 2025-12-19 18:13:46 +01:00
Compare commits
91 Commits
v2.4-beta0
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ff458fb73 | ||
|
|
0d71b9946a | ||
|
|
140528bac8 | ||
|
|
29f6bac31c | ||
|
|
e233f6d29a | ||
|
|
6e4dcf5b56 | ||
|
|
61f1a14be6 | ||
|
|
2d1187b6a3 | ||
|
|
ca7caab85d | ||
|
|
9e662960e1 | ||
|
|
21349e5c04 | ||
|
|
db2ad83c77 | ||
|
|
a47541286a | ||
|
|
62c30c8de1 | ||
|
|
ad439fa65f | ||
|
|
2d131f2c5f | ||
|
|
ba2df13122 | ||
|
|
da294807ca | ||
|
|
6625f08419 | ||
|
|
d43983e986 | ||
|
|
4b5bffbd83 | ||
|
|
cf3761b7ed | ||
|
|
b5dc45f214 | ||
|
|
b1a95cd319 | ||
|
|
6c5139d552 | ||
|
|
863c667f1b | ||
|
|
44f37f92cf | ||
|
|
308561090f | ||
|
|
26ddc2b126 | ||
|
|
65d4a142e4 | ||
|
|
07f5f2ca6b | ||
|
|
cba235c7b0 | ||
|
|
9220d33aa4 | ||
|
|
efa99e7cbc | ||
|
|
6729be221a | ||
|
|
8ab5b318a8 | ||
|
|
db092e5eab | ||
|
|
d6d5b8f493 | ||
|
|
151cddad5b | ||
|
|
18f0da77d4 | ||
|
|
70947f179c | ||
|
|
7cc712a245 | ||
|
|
1e7bf6cfc4 | ||
|
|
18f7e5177f | ||
|
|
6b933acdef | ||
|
|
f69251a482 | ||
|
|
1f713f706e | ||
|
|
4b5e0205a5 | ||
|
|
7634b96744 | ||
|
|
7facca0306 | ||
|
|
1fab68e4fa | ||
|
|
1d9d6fd100 | ||
|
|
7e66a94e37 | ||
|
|
5e5122edba | ||
|
|
6d91b0da6e | ||
|
|
e29e86c0bd | ||
|
|
de7f157390 | ||
|
|
1e21013b96 | ||
|
|
b028c47f10 | ||
|
|
782702c192 | ||
|
|
1fc5894204 | ||
|
|
33d4d16b0b | ||
|
|
801ceead5b | ||
|
|
a3056ccfd4 | ||
|
|
16744d7c6c | ||
|
|
7c3f5929fa | ||
|
|
bdc5991fa1 | ||
|
|
74a5710f99 | ||
|
|
71b76e3240 | ||
|
|
30740e372b | ||
|
|
23ea63a19e | ||
|
|
474e95315a | ||
|
|
b4ca9f113a | ||
|
|
60c7674dc5 | ||
|
|
e8a2e281ec | ||
|
|
8be3ff6331 | ||
|
|
df5fa09ba9 | ||
|
|
469acc3fb7 | ||
|
|
0f365a3f65 | ||
|
|
82e971bc47 | ||
|
|
ebf997951f | ||
|
|
983b184a0f | ||
|
|
71b8ca4ee6 | ||
|
|
4a44d5daa4 | ||
|
|
5fa867e194 | ||
|
|
1546a41fb9 | ||
|
|
75d3d8e5e1 | ||
|
|
0a5710ec55 | ||
|
|
64b3f5b906 | ||
|
|
ad33cbf263 | ||
|
|
c4ca0d2188 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,11 +3,13 @@ __history/
|
||||
__recovery/
|
||||
win32/
|
||||
.vscode/
|
||||
.idea/
|
||||
*.vfs
|
||||
*.dcu
|
||||
*.exe
|
||||
*.map
|
||||
*.tmp
|
||||
*.dll
|
||||
*.bak
|
||||
*.*-
|
||||
*.corrupted
|
||||
|
||||
21
README.md
21
README.md
@ -1,5 +1,26 @@
|
||||
# Obsolete
|
||||
This is the repository of the old HFS.
|
||||
|
||||
I'm working on HFS 3 on another repository. Check it out!
|
||||
https://github.com/rejetto/hfs
|
||||
|
||||
## Introduction
|
||||
You can use HFS (HTTP File Server) to send and receive files.
|
||||
It's different from classic file sharing because it uses web technology.
|
||||
It also differs from classic web servers because it's very easy to use and runs "right out-of-the box".
|
||||
|
||||
The virtual file system will allow you to easily share even one single file.
|
||||
|
||||
## Dev notes
|
||||
Initially developed in 2002 with Delphi 6, now with Delphi 10.3.3 (Community Edition).
|
||||
Icons are generated at http://fontello.com/ . Use fontello.json for further modifications.
|
||||
|
||||
For the default template we are targeting compatibility with Chrome 49 as it's the latest version running on Windows XP.
|
||||
|
||||
Warning: Delphi Community Edition 10.4 removed support for command-line compilation, and is thus unable to compile JEDI Code Library, and is thus unable to compile HFS2, ref [Community Edition no longer includes the command-line compilers](https://blogs.embarcadero.com/delphi-cbuilder-community-editions-now-available-in-version-10-4-2/#comment-1339) - meaning the last version of Community Edition cabale of compiling HFS2 is Delphi 10.3.x
|
||||
|
||||
## Libs used
|
||||
- [ICS v8.64](http://www.overbyte.be) by François PIETTE
|
||||
- [TRegExpr v0.952b](https://github.com/andgineer/TRegExpr/releases) by Andrey V. Sorokin
|
||||
- [JEDI Code Library v2.7](https://github.com/project-jedi/jcl)
|
||||
- [Kryvich's Delphi Localizer v4.1](http://sites.google.com/site/kryvich)
|
||||
|
||||
245
classesLib.pas
245
classesLib.pas
@ -1,5 +1,5 @@
|
||||
{
|
||||
Copyright (C) 2002-2012 Massimo Melina (www.rejetto.com)
|
||||
Copyright (C) 2002-2020 Massimo Melina (www.rejetto.com)
|
||||
|
||||
This file is part of HFS ~ HTTP File Server.
|
||||
|
||||
@ -23,9 +23,20 @@ unit classesLib;
|
||||
interface
|
||||
|
||||
uses
|
||||
iniFiles, types, hslib, strUtils, sysUtils, classes, math, system.Generics.Collections;
|
||||
iniFiles, types, hslib, strUtils, sysUtils, classes, math, system.Generics.Collections,
|
||||
OverbyteIcsWSocket, OverbyteIcshttpProt;
|
||||
|
||||
type
|
||||
TantiDos = class
|
||||
protected
|
||||
accepted: boolean;
|
||||
Paddress: string;
|
||||
public
|
||||
constructor create;
|
||||
destructor Destroy; override;
|
||||
function accept(conn:ThttpConn; address:string=''):boolean;
|
||||
end;
|
||||
|
||||
TfastStringAppend = class
|
||||
protected
|
||||
buff: string;
|
||||
@ -88,6 +99,7 @@ type
|
||||
constructor create;
|
||||
destructor Destroy; override;
|
||||
function addFile(src:string; dst:string=''; data:Tobject=NIL):boolean; virtual;
|
||||
function contains(src:string):boolean;
|
||||
function count():integer;
|
||||
procedure reset(); virtual;
|
||||
property totalSize:int64 read getTotal;
|
||||
@ -138,7 +150,7 @@ type
|
||||
PtplSection = ^TtplSection;
|
||||
TtplSection = record
|
||||
name, txt: string;
|
||||
nolog, nourl, cache: boolean;
|
||||
nolog, public, noList, cache: boolean;
|
||||
ts: Tdatetime;
|
||||
end;
|
||||
|
||||
@ -189,6 +201,12 @@ type
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
ThttpClient = class(TSslHttpCli)
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
class function createURL(url:string):ThttpClient;
|
||||
end;
|
||||
|
||||
Ttlv = class
|
||||
protected
|
||||
cur, bound: integer;
|
||||
@ -214,6 +232,94 @@ implementation
|
||||
uses
|
||||
utilLib, main, windows, dateUtils, forms;
|
||||
|
||||
const folderConcurrents: integer = 0;
|
||||
const MAX_CONCURRENTS = 3;
|
||||
const ip2availability: Tdictionary<string,Tdatetime> = NIL;
|
||||
|
||||
constructor TantiDos.create();
|
||||
begin
|
||||
accepted:=FALSE;
|
||||
end;
|
||||
|
||||
function TantiDos.accept(conn:ThttpConn; address:string=''):boolean;
|
||||
|
||||
procedure reject();
|
||||
resourcestring
|
||||
MSG_ANTIDOS_REPLY = 'Please wait, server busy';
|
||||
begin
|
||||
conn.reply.mode:=HRM_OVERLOAD;
|
||||
conn.addHeader(ansistring('Refresh: '+intToStr(1+random(2)))); // random for less collisions
|
||||
conn.reply.body:=UTF8Encode(MSG_ANTIDOS_REPLY);
|
||||
end;
|
||||
|
||||
begin
|
||||
if address= '' then
|
||||
address:=conn.address;
|
||||
if ip2availability = NIL then
|
||||
ip2availability:=Tdictionary<string,Tdatetime>.create();
|
||||
try
|
||||
if ip2availability[address] > now() then // this specific address has to wait?
|
||||
begin
|
||||
reject();
|
||||
exit(FALSE);
|
||||
end;
|
||||
except
|
||||
end;
|
||||
if folderConcurrents >= MAX_CONCURRENTS then // max number of concurrent folder loading, others are postponed
|
||||
begin
|
||||
reject();
|
||||
exit(FALSE);
|
||||
end;
|
||||
inc(folderConcurrents);
|
||||
Paddress:=address;
|
||||
ip2availability.AddOrSetValue(address, now()+1/HOURS);
|
||||
accepted:=TRUE;
|
||||
Result:=TRUE;
|
||||
end;
|
||||
|
||||
destructor TantiDos.Destroy;
|
||||
var
|
||||
pair: Tpair<string,Tdatetime>;
|
||||
t: Tdatetime;
|
||||
begin
|
||||
if not accepted then
|
||||
exit;
|
||||
t:=now();
|
||||
if folderConcurrents = MAX_CONCURRENTS then // serving multiple addresses at max capacity, let's give a grace period for others
|
||||
ip2availability[Paddress]:=t + 1/SECONDS
|
||||
else
|
||||
ip2availability.Remove(Paddress);
|
||||
dec(folderConcurrents);
|
||||
// purge leftovers
|
||||
for pair in ip2availability do
|
||||
if pair.Value < t then
|
||||
ip2availability.Remove(pair.Key);
|
||||
end;
|
||||
|
||||
class function ThttpClient.createURL(url:string):ThttpClient;
|
||||
begin
|
||||
if startsText('https://', url)
|
||||
and not httpsCanWork() then
|
||||
exit(NIL);
|
||||
result:=ThttpClient.Create(NIL);
|
||||
result.URL:=url;
|
||||
end;
|
||||
|
||||
constructor ThttpClient.create(AOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
followRelocation:=TRUE;
|
||||
agent:=HFS_HTTP_AGENT;
|
||||
SslContext := TSslContext.Create(NIL);
|
||||
end; // create
|
||||
|
||||
destructor ThttpClient.Destroy;
|
||||
begin
|
||||
SslContext.free;
|
||||
SslContext:=NIl;
|
||||
inherited destroy;
|
||||
end;
|
||||
|
||||
constructor TperIp.create();
|
||||
begin
|
||||
limiter:=TspeedLimiter.create();
|
||||
@ -419,6 +525,16 @@ if cachedTotal < 0 then calculate();
|
||||
result:=cachedTotal;
|
||||
end; // getTotal
|
||||
|
||||
function TarchiveStream.contains(src:string):boolean;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i:=0 to Length(flist)-1 do
|
||||
if flist[i].src = src then
|
||||
exit(TRUE);
|
||||
result:=FALSE;
|
||||
end;
|
||||
|
||||
function TarchiveStream.addFile(src:string; dst:string=''; data:Tobject=NIL):boolean;
|
||||
|
||||
function getMtime(fh:Thandle):int64;
|
||||
@ -504,10 +620,7 @@ end; // reset
|
||||
function TtarStream.fsInit():boolean;
|
||||
begin
|
||||
if assigned(fs) and (fs.FileName = flist[cur].src) then
|
||||
begin
|
||||
result:=TRUE;
|
||||
exit;
|
||||
end;
|
||||
exit(TRUE);
|
||||
result:=FALSE;
|
||||
try
|
||||
freeAndNIL(fs);
|
||||
@ -746,10 +859,12 @@ var
|
||||
|
||||
var
|
||||
i, posBak: int64;
|
||||
n: integer;
|
||||
begin
|
||||
posBak:=pos;
|
||||
p:=@buffer;
|
||||
while (count > 0) and (cur < length(flist)) do
|
||||
n:=length(flist);
|
||||
while (count > 0) and (cur < n) do
|
||||
case where of
|
||||
TW_HEADER:
|
||||
begin
|
||||
@ -913,7 +1028,7 @@ if sections.containsKey(section) then
|
||||
result:=sections[section]
|
||||
else
|
||||
result:=NIL;
|
||||
if inherit and assigned(over) and ((result = NIL) or (trim(result.txt) = '')) then
|
||||
if inherit and assigned(over) and (result = NIL) then
|
||||
result:=over.getSection(section);
|
||||
end; // getSection
|
||||
|
||||
@ -928,7 +1043,7 @@ else
|
||||
end; // getTxt
|
||||
|
||||
function Ttpl.getTxtByExt(fileExt:string):string;
|
||||
begin result:=getTxt('file.'+fileExt) end;
|
||||
begin result:=getTxt('file'+fileExt) end;
|
||||
|
||||
procedure Ttpl.fromString(txt:string);
|
||||
var
|
||||
@ -978,12 +1093,52 @@ var
|
||||
|
||||
procedure saveInSection();
|
||||
var
|
||||
ss: TStringDynArray;
|
||||
s: string;
|
||||
i: integer;
|
||||
base: TtplSection;
|
||||
|
||||
function parseFlagsAndAcceptSection(flags:TStringDynArray):boolean;
|
||||
var
|
||||
f, k, v, s: string;
|
||||
i: integer;
|
||||
begin
|
||||
for f in flags do
|
||||
begin
|
||||
i:=pos('=',f);
|
||||
if i = 0 then
|
||||
begin
|
||||
if f='no log' then
|
||||
base.nolog:=TRUE
|
||||
else if f='public' then
|
||||
base.public:=TRUE
|
||||
else if f='no list' then
|
||||
base.noList:=TRUE
|
||||
else if f='cache' then
|
||||
base.cache:=TRUE;
|
||||
Continue;
|
||||
end;
|
||||
k:=copy(f,1,i-1);
|
||||
v:=copy(f,i+1,MAXINT);
|
||||
if k = 'build' then
|
||||
begin
|
||||
s:=chop('-',v);
|
||||
if (v > '') and (VERSION_BUILD > v) // max
|
||||
or (s > '') and (VERSION_BUILD < s) then // min
|
||||
exit(FALSE);
|
||||
end
|
||||
else if k = 'ver' then
|
||||
if fileMatch(v, VERSION) then continue
|
||||
else exit(FALSE)
|
||||
else if k = 'template' then
|
||||
if fileMatch(v, getTill(#13,getTxt('template id'))) then continue
|
||||
else exit(FALSE)
|
||||
end;
|
||||
result:=TRUE;
|
||||
end;
|
||||
|
||||
var
|
||||
ss: TStringDynArray;
|
||||
s, si: string;
|
||||
till: pchar;
|
||||
append: boolean;
|
||||
append, prepend, add: boolean;
|
||||
sect, from: PtplSection;
|
||||
begin
|
||||
till:=pred(bos);
|
||||
@ -991,44 +1146,49 @@ var
|
||||
if till^ = #10 then dec(till);
|
||||
if till^ = #13 then dec(till);
|
||||
|
||||
base:=default(TtplSection);
|
||||
base.txt:=getStr(ptxt, till);
|
||||
// there may be flags after |
|
||||
s:=cur_section;
|
||||
cur_section:=chop('|', s);
|
||||
base.nolog:=ansiPos('no log', s) > 0;
|
||||
base.nourl:=ansiPos('private', s) > 0;
|
||||
base.cache:=ansiPos('cache', s) > 0;
|
||||
base.ts:=now();
|
||||
ss:=split('|',cur_section);
|
||||
cur_section:=popString(ss);
|
||||
if not parseFlagsAndAcceptSection(ss) then
|
||||
exit;
|
||||
|
||||
s:=cur_section;
|
||||
append:=ansiStartsStr('+', s);
|
||||
if append then
|
||||
delete(s,1,1);
|
||||
prepend:=startsStr('^', cur_section);
|
||||
append:=startsStr('+', cur_section);
|
||||
add:=prepend or append;
|
||||
if add then
|
||||
delete(cur_section,1,1);
|
||||
|
||||
// there may be several section names separated by =
|
||||
ss:=split('=', s);
|
||||
ss:=split('=', cur_section);
|
||||
// handle the main section specific case
|
||||
if ss = NIL then addString('', ss);
|
||||
if ss = NIL then
|
||||
addString('', ss);
|
||||
// assign to every name the same txt
|
||||
for i:=0 to length(ss)-1 do
|
||||
for si in ss do
|
||||
begin
|
||||
s:=trim(ss[i]);
|
||||
s:=trim(si);
|
||||
sect:=getSection(s, FALSE);
|
||||
from:=NIL;
|
||||
if sect = NIL then // not found
|
||||
begin
|
||||
if append then
|
||||
if add then
|
||||
from:=getSection(s);
|
||||
sect:=newSection(s);
|
||||
end
|
||||
else
|
||||
if append then
|
||||
if add then
|
||||
from:=sect;
|
||||
if from<>NIL then
|
||||
begin // inherit from it
|
||||
sect.txt:=from.txt+base.txt;
|
||||
if append then
|
||||
sect.txt:=from.txt+base.txt
|
||||
else
|
||||
sect.txt:=base.txt+CRLF+from.txt;
|
||||
sect.nolog:=from.nolog or base.nolog;
|
||||
sect.nourl:=from.nourl or base.nourl;
|
||||
sect.public:=from.public or base.public;
|
||||
sect.noList:=from.noList or base.noList;
|
||||
continue;
|
||||
end;
|
||||
sect^:=base;
|
||||
@ -1037,13 +1197,12 @@ var
|
||||
end; // saveInSection
|
||||
|
||||
const
|
||||
BOM = #$EF#$BB#$BF;
|
||||
UTF8_BOM = #$EF#$BB#$BF;
|
||||
var
|
||||
first: boolean;
|
||||
begin
|
||||
// this is used by some unicode files. at the moment we just ignore it.
|
||||
if ansiStartsStr(BOM, txt) then
|
||||
delete(txt, 1, length(BOM));
|
||||
if ansiStartsStr(UTF8_BOM, txt) then
|
||||
delete(txt, 1, length(UTF8_BOM));
|
||||
|
||||
if txt = '' then exit;
|
||||
src:=src+txt;
|
||||
@ -1089,8 +1248,8 @@ function Ttlv.pop(var value:string; var raw:ansistring):integer;
|
||||
var
|
||||
n: integer;
|
||||
begin
|
||||
result:=-1;
|
||||
if isOver() then exit; // finished
|
||||
if isOver() then
|
||||
exit(-1); // finished
|
||||
result:=integer((@whole[cur])^);
|
||||
n:=Pinteger(@whole[cur+4])^;
|
||||
raw:=copy(whole, cur+8, n);
|
||||
@ -1109,10 +1268,7 @@ function Ttlv.down():boolean;
|
||||
begin
|
||||
// do we have anything to recur on?
|
||||
if (cur = 1) then
|
||||
begin
|
||||
result:=false;
|
||||
exit;
|
||||
end;
|
||||
exit(FALSE);
|
||||
// push into the stack
|
||||
if (stackTop = length(stack)) then // space over
|
||||
setLength(stack, stackTop+10); // make space
|
||||
@ -1129,10 +1285,7 @@ end; // down
|
||||
function Ttlv.up():boolean;
|
||||
begin
|
||||
if stackTop = 0 then
|
||||
begin
|
||||
result:=false;
|
||||
exit;
|
||||
end;
|
||||
exit(FALSE);
|
||||
dec(stackTop);
|
||||
bound:=stack[stackTop];
|
||||
dec(stackTop);
|
||||
|
||||
2
data.rc
2
data.rc
@ -1,9 +1,7 @@
|
||||
1 24 "WindowsXP.manifest"
|
||||
defaultTpl TEXT default.tpl
|
||||
dmBrowserTpl TEXT dmBrowser.tpl
|
||||
invertban TEXT invertban.txt
|
||||
filelistTpl TEXT filelist.tpl
|
||||
uploadHowTo TEXT upload_how.txt
|
||||
alias TEXT alias.txt
|
||||
IPservices TEXT ipservices.txt
|
||||
jquery TEXT jquery.min.js
|
||||
|
||||
909
default.tpl
909
default.tpl
File diff suppressed because one or more lines are too long
2
defs.inc
2
defs.inc
@ -1,3 +1,5 @@
|
||||
{$A+,B-,C+,E-,F-,G+,H+,I-,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,X+,Y+,Z1}
|
||||
|
||||
{$DEFINE NOT STABLE }
|
||||
{$IFDEF STABLE }
|
||||
{$ASSERTIONS OFF}
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
Initially developed with Delphi 6, now with Delphi 10.3.3
|
||||
|
||||
Icons are generated at http://fontello.com/ . Use fontello.json for further modifications.
|
||||
|
||||
=== LIBS USED
|
||||
ICS v8.63 by François PIETTE http://www.overbyte.be
|
||||
TRegExpr v0.952 by Andrey V. Sorokin http://www.regexpstudio.com/TRegExpr/TRegExpr.html
|
||||
JEDI Code Library v2.7 https://github.com/project-jedi/jcl
|
||||
Kryvich's Delphi Localizer v4.1 http://sites.google.com/site/kryvich
|
||||
26
hfs.dproj
26
hfs.dproj
@ -206,31 +206,31 @@
|
||||
</Platforms>
|
||||
<ModelSupport>False</ModelSupport>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="hfs.dpr" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Enabled>false</Enabled>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="hfs.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>hfs.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="hfs.exe" Configuration="Release" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>hfs.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="hfs.dpr" Configuration="Debug" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="hfs.dpr" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Enabled>false</Enabled>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="hfs.exe" Configuration="Release" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>hfs.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
|
||||
754
hfs.drc
754
hfs.drc
@ -8,132 +8,273 @@
|
||||
resources were bound to the produced executable.
|
||||
*/
|
||||
|
||||
#define main_MSG 64800
|
||||
#define main_REMOVE_SHELL 64801
|
||||
#define main_S_OFF 64802
|
||||
#define main_S_ON 64803
|
||||
#define main_LOG 64804
|
||||
#define main_MSG 64805
|
||||
#define main_MSG 64806
|
||||
#define main_MSG2 64807
|
||||
#define main_MSG 64808
|
||||
#define main_MSG2 64809
|
||||
#define main_MSG 64810
|
||||
#define main_MSG 64811
|
||||
#define main_MSG 64812
|
||||
#define main_MSG 64813
|
||||
#define main_MSG 64816
|
||||
#define main_MSG 64817
|
||||
#define main_MSG 64818
|
||||
#define main_MSG 64819
|
||||
#define main_MSG 64820
|
||||
#define main_MSG 64821
|
||||
#define main_MSG_BEFORE 64822
|
||||
#define main_MSG_OK 64823
|
||||
#define main_MSG_OK_PORT 64824
|
||||
#define main_MSG_3 64825
|
||||
#define main_MSG_6 64826
|
||||
#define main_MSG_7 64827
|
||||
#define main_MSG 64828
|
||||
#define main_MSG 64829
|
||||
#define main_HELP 64830
|
||||
#define main_CAPTION 64831
|
||||
#define main_MSG_CORRUPTED 64832
|
||||
#define main_MSG_MACROS_FOUND 64833
|
||||
#define main_MSG_INFO 64834
|
||||
#define main_MSG_NEWER 64835
|
||||
#define main_ARE_EXPERT 64836
|
||||
#define main_ARE_EASY 64837
|
||||
#define main_SW2EXPERT 64838
|
||||
#define main_SW2EASY 64839
|
||||
#define main_MSG 64840
|
||||
#define main_MSG 64841
|
||||
#define main_MSG 64842
|
||||
#define main_MSG 64843
|
||||
#define main_MSG 64844
|
||||
#define main_MSG 64845
|
||||
#define main_MSG 64846
|
||||
#define main_MSG 64847
|
||||
#define main_LIMIT 64848
|
||||
#define main_MSG_MAX_BW_1 64849
|
||||
#define main_LIMIT1 64850
|
||||
#define main_NODL 64851
|
||||
#define main_MSG 64852
|
||||
#define main_MSG 64853
|
||||
#define main_MSG2 64854
|
||||
#define main_MSG 64855
|
||||
#define main_MSG2 64856
|
||||
#define main_MSG 64857
|
||||
#define main_MSG 64858
|
||||
#define main_MSG_TITLE 64859
|
||||
#define main_MSG_OLD 64860
|
||||
#define main_MSG_UNK_FK 64861
|
||||
#define main_MSG_VIS_ONLY_ANON 64862
|
||||
#define main_MSG_AUTO_DISABLED 64863
|
||||
#define main_IN_SPEED 64864
|
||||
#define main_BANS 64865
|
||||
#define main_MEMORY 64866
|
||||
#define main_CUSTOMIZED 64867
|
||||
#define main_ITEMS 64868
|
||||
#define main_MSG1 64869
|
||||
#define main_MSG 64870
|
||||
#define main_MSG_BETTERSTOP 64871
|
||||
#define main_MSG_BADCRC 64872
|
||||
#define main_MSG_NEWER 64873
|
||||
#define main_MSG_ZLIB 64874
|
||||
#define main_MSG_BAKAVAILABLE 64875
|
||||
#define main_LIMIT 64876
|
||||
#define main_TOP_SPEED 64877
|
||||
#define main_MSG_MAX_BW 64878
|
||||
#define main_ZEROMSG 64879
|
||||
#define main_AUTOSAVE 64880
|
||||
#define main_MSG 64881
|
||||
#define main_MSG_MIN 64882
|
||||
#define main_MSG_BAN 64883
|
||||
#define main_MSG 64884
|
||||
#define main_MSG_SAVE_ERROR 64885
|
||||
#define main_MSG_LIMITED 64886
|
||||
#define main_MSG_UPDATE 64887
|
||||
#define main_MSG_FROMDISK 64888
|
||||
#define main_COPY 64889
|
||||
#define main_ALREADY 64890
|
||||
#define main_NOSPACE 64891
|
||||
#define main_CONN 64892
|
||||
#define main_TOT_IN 64893
|
||||
#define main_TOT_OUT 64894
|
||||
#define main_OUT_SPEED 64895
|
||||
#define main_MSG_DDNS_notdonator 64896
|
||||
#define main_MSG_DDNS_badagent 64897
|
||||
#define main_MSG 64898
|
||||
#define main_MSG2 64899
|
||||
#define main_MSG 64900
|
||||
#define main_MSG2 64901
|
||||
#define main_FAILED 64902
|
||||
#define main_LIMIT 64903
|
||||
#define main_LIMIT 64904
|
||||
#define main_LIMIT 64905
|
||||
#define main_LIMIT 64906
|
||||
#define main_LIMIT 64907
|
||||
#define main_LIMIT 64908
|
||||
#define main_FINGERPRINT 64909
|
||||
#define main_NO_FINGERPRINT 64910
|
||||
#define main_MSG 64911
|
||||
#define main_MSG_EMPTY_NO_LIMIT 64912
|
||||
#define main_MSG_ADDRESSES_EXCEED 64913
|
||||
#define main_MSG_NO_TEMP 64914
|
||||
#define main_MSG_ERROR_REGISTRY 64915
|
||||
#define main_MSG_MANY_ITEMS 64916
|
||||
#define main_MSG_ADD_TO_HFS 64917
|
||||
#define main_MSG_SINGLE_INSTANCE 64918
|
||||
#define main_MSG_COMM_ERROR 64919
|
||||
#define main_MSG_DDNS_badauth 64920
|
||||
#define main_MSG_DDNS_notfqdn 64921
|
||||
#define main_MSG_DDNS_nohost 64922
|
||||
#define main_MSG_DDNS_notyours 64923
|
||||
#define main_MSG_DDNS_numhost 64924
|
||||
#define main_MSG_DDNS_abuse 64925
|
||||
#define main_MSG_DDNS_dnserr 64926
|
||||
#define main_MSG_DDNS_911 64927
|
||||
#define main_MSG_NUM_ADDR 64656
|
||||
#define main_MSG_NUM_ADDR_DL 64657
|
||||
#define main_MSG_MAX_LINES 64658
|
||||
#define main_MSG_APACHE_LOG_FMT 64659
|
||||
#define main_MSG_APACHE_LOG_FMT_LONG 64660
|
||||
#define main_MSG_ICONS_ADDED 64661
|
||||
#define main_MSG_DDNS_DISABLED 64662
|
||||
#define main_MSG_MD5_WARN 64663
|
||||
#define main_MSG_AUTO_MD5 64664
|
||||
#define main_MSG_AUTO_MD5_LONG 64665
|
||||
#define main_MSG_UPL_HOWTO 64666
|
||||
#define main_MSG_EVENTS_HLP 64672
|
||||
#define main_MSG_EDIT_RES 64673
|
||||
#define main_MSG_TPL_USE_MACROS 64674
|
||||
#define main_REMOVE_SHELL 64675
|
||||
#define main_S_OFF 64676
|
||||
#define main_S_ON 64677
|
||||
#define main_LOG 64678
|
||||
#define main_MSG_RE_NOIP 64679
|
||||
#define main_MSG_TRAY_DEF 64680
|
||||
#define main_MSG_CLEAN_START 64681
|
||||
#define main_MSG_RESTORE_BAK 64682
|
||||
#define main_MSG_EXT_ADDR_FAIL 64683
|
||||
#define main_MSG_TO_EXPERT 64684
|
||||
#define main_MSG_DONT_LOG_HINT 64685
|
||||
#define main_MSG_DL_PERC 64686
|
||||
#define main_MSG_UNINSTALL_WARN 64687
|
||||
#define main_MSG_SELF_3 64688
|
||||
#define main_MSG_SELF_6 64689
|
||||
#define main_MSG_SELF_7 64690
|
||||
#define main_MSG_RET_EXT 64691
|
||||
#define main_MSG_SELF_CANT_ON 64692
|
||||
#define main_MSG_SELF_CANT_LIST 64693
|
||||
#define main_MSG_SELF_CANT_S 64694
|
||||
#define main_MSG_SELF_ING 64695
|
||||
#define main_MSG_TEST_CANC 64696
|
||||
#define main_MSG_TEST_INET 64697
|
||||
#define main_MSG_SELF_UNAV 64698
|
||||
#define main_MSG_SELF_NO_INET 64699
|
||||
#define main_MSG_SELF_NO_ANSWER 64700
|
||||
#define main_MSG_OPEN_BROW 64701
|
||||
#define main_MSG_OPEN_BROW_LONG 64702
|
||||
#define main_MSG_HIDE_PORT 64703
|
||||
#define main_MSG_RESET_TOT 64704
|
||||
#define main_MSG_DISAB_FIND_EXT 64705
|
||||
#define main_MSG_ENT_URL 64706
|
||||
#define main_MSG_ENT_URL_LONG 64707
|
||||
#define main_MSG_ENT_USR 64708
|
||||
#define main_MSG_ENT_PWD 64709
|
||||
#define main_MSG_ENT_HOST 64710
|
||||
#define main_MSG_ENT_HOST_LONG 64711
|
||||
#define main_MSG_HOST_FORM 64712
|
||||
#define main_MSG_MIN_SPACE 64713
|
||||
#define main_MSG_MIN_SPACE_LONG 64714
|
||||
#define main_MSG_REN_PART 64715
|
||||
#define main_MSG_REN_PART_LONG 64716
|
||||
#define main_MSG_SELF_BEFORE 64717
|
||||
#define main_MSG_SELF_OK 64718
|
||||
#define main_MSG_SELF_OK_PORT 64719
|
||||
#define main_MSG_LOG_FILE 64720
|
||||
#define main_MSG_LOG_FILE_LONG 64721
|
||||
#define main_MSG_SET_URL 64722
|
||||
#define main_MSG_SET_URL_LONG 64723
|
||||
#define main_MSG_REALM 64724
|
||||
#define main_MSG_REALM_LONG 64725
|
||||
#define main_MSG_INACT_TIMEOUT 64726
|
||||
#define main_MSG_INACT_TIMEOUT_LONG 64727
|
||||
#define main_MSG_CHANGES_LOST 64728
|
||||
#define main_MSG_FLAG_NEW 64729
|
||||
#define main_MSG_FLAG_NEW_LONG 64730
|
||||
#define main_MSG_DONT_LOG_MASK 64731
|
||||
#define main_MSG_DONT_LOG_MASK_LONG 64732
|
||||
#define main_MSG_CUST_IP 64733
|
||||
#define main_MSG_CUST_IP_LONG 64734
|
||||
#define main_MSG_NO_EXT_IP 64735
|
||||
#define main_MSG_TENTH_SEC 64736
|
||||
#define main_MSG_LOADING_VFS 64737
|
||||
#define main_MSG_VFS_OLD 64738
|
||||
#define main_MSG_UNK_FK 64739
|
||||
#define main_MSG_VIS_ONLY_ANON 64740
|
||||
#define main_MSG_AUTO_DISABLED 64741
|
||||
#define main_MSG_CORRUPTED 64742
|
||||
#define main_MSG_MACROS_FOUND 64743
|
||||
#define main_MSG_UPD_INFO 64744
|
||||
#define main_MSG_NEWER 64745
|
||||
#define main_MSG_SRC_UPD 64746
|
||||
#define main_ARE_EXPERT 64747
|
||||
#define main_ARE_EASY 64748
|
||||
#define main_SW2EXPERT 64749
|
||||
#define main_SW2EASY 64750
|
||||
#define main_MSG_DL_TIMEOUT_LONG 64751
|
||||
#define main_MSG_NEWER_INCOMP 64752
|
||||
#define main_MSG_ZLIB 64753
|
||||
#define main_MSG_BAKAVAILABLE 64754
|
||||
#define main_MSG_CANT_LOAD_SAVE 64755
|
||||
#define main_MSG_OPEN_VFS 64756
|
||||
#define main_LIMIT 64757
|
||||
#define main_TOP_SPEED 64758
|
||||
#define main_MSG_MAX_BW 64759
|
||||
#define main_MSG_LIM0 64760
|
||||
#define main_MSG_MAX_BW_1 64761
|
||||
#define main_MSG_GRAPH_RATE_MENU 64762
|
||||
#define main_MSG_MAX_CON_LONG 64763
|
||||
#define main_MSG_WARN_CONN 64764
|
||||
#define main_MSG_WARN_ACT_DL 64765
|
||||
#define main_MSG_MAX_CON_SING_LONG 64766
|
||||
#define main_MSG_GRAPH_RATE 64767
|
||||
#define main_MSG_VFS_DONT_CONS_DL_MASK 64768
|
||||
#define main_MSG_VFS_INHERITED 64769
|
||||
#define main_MSG_VFS_EXTERNAL 64770
|
||||
#define main_MSG_CON_HINT 64771
|
||||
#define main_MSG_CON_STATE_IDLE 64772
|
||||
#define main_MSG_CON_STATE_REQ 64773
|
||||
#define main_MSG_CON_STATE_RCV 64774
|
||||
#define main_MSG_CON_STATE_THINK 64775
|
||||
#define main_MSG_CON_STATE_REP 64776
|
||||
#define main_MSG_CON_STATE_SEND 64777
|
||||
#define main_MSG_CON_STATE_DISC 64778
|
||||
#define main_MSG_TPL_RESET 64779
|
||||
#define main_MSG_ALLO_REF 64780
|
||||
#define main_MSG_ALLO_REF_LONG 64781
|
||||
#define main_MSG_BETTERSTOP 64782
|
||||
#define main_MSG_BADCRC 64783
|
||||
#define main_MSG_VFS_HIDE_EMPTY 64784
|
||||
#define main_MSG_VFS_NOT_BROW 64785
|
||||
#define main_MSG_VFS_HIDE_EMPTY_FLD 64786
|
||||
#define main_MSG_VFS_HIDE_EXT 64787
|
||||
#define main_MSG_VFS_ARCABLE 64788
|
||||
#define main_MSG_VFS_DEF_MASK 64789
|
||||
#define main_MSG_VFS_ACCESS 64790
|
||||
#define main_MSG_VFS_UPLOAD 64791
|
||||
#define main_MSG_VFS_DELETE 64792
|
||||
#define main_MSG_VFS_COMMENT 64793
|
||||
#define main_MSG_VFS_REALM 64794
|
||||
#define main_MSG_VFS_DIFF_TPL 64795
|
||||
#define main_MSG_VFS_FILES_FLT 64796
|
||||
#define main_MSG_VFS_FLD_FLT 64797
|
||||
#define main_MSG_VFS_UPL_FLT 64798
|
||||
#define main_MSG_VFS_DONT_CONS_DL 64799
|
||||
#define main_IN_SPEED 64800
|
||||
#define main_BANS 64801
|
||||
#define main_MEMORY 64802
|
||||
#define main_CUST_TPL 64803
|
||||
#define main_VFS_ITEMS 64804
|
||||
#define main_MSG_ITEM_EXISTS 64805
|
||||
#define main_MSG_INSTALL_TPL 64806
|
||||
#define main_MSG_FOLDER_UPLOAD 64807
|
||||
#define main_MSG_VFS_DRAG_INVIT 64808
|
||||
#define main_MSG_VFS_URL 64809
|
||||
#define main_MSG_VFS_PATH 64810
|
||||
#define main_MSG_VFS_SIZE 64811
|
||||
#define main_MSG_VFS_DLS 64812
|
||||
#define main_MSG_VFS_INVISIBLE 64813
|
||||
#define main_MSG_VFS_DL_FORB 64814
|
||||
#define main_MSG_VFS_DONT_LOG 64815
|
||||
#define main_MSG_UPD_DL 64816
|
||||
#define main_MSG_UPDATE 64817
|
||||
#define main_MSG_REQUESTING 64818
|
||||
#define main_MSG_CHK_UPD 64819
|
||||
#define main_MSG_CHK_UPD_FAIL 64820
|
||||
#define main_MSG_CHK_UPD_HEAD 64821
|
||||
#define main_MSG_CHK_UPD_VER 64822
|
||||
#define main_MSG_CHK_UPD_VER_EXT 64823
|
||||
#define main_MSG_CHK_UPD_NONE 64824
|
||||
#define main_TO_CLIP 64825
|
||||
#define main_ALREADY_CLIP 64826
|
||||
#define main_MSG_NO_SPACE 64827
|
||||
#define main_CONN 64828
|
||||
#define main_TOT_IN 64829
|
||||
#define main_TOT_OUT 64830
|
||||
#define main_OUT_SPEED 64831
|
||||
#define main_MSG_FILE_ADD_ABORT 64832
|
||||
#define main_MSG_ADDING 64833
|
||||
#define main_MSG_INV_FILENAME 64834
|
||||
#define main_MSG_DELETE 64835
|
||||
#define main_AUTOSAVE 64836
|
||||
#define main_SECONDS 64837
|
||||
#define main_MSG_SPD_LIMIT_SING 64838
|
||||
#define main_MSG_SPD_LIMIT 64839
|
||||
#define main_MSG_AUTO_SAVE 64840
|
||||
#define main_MSG_AUTO_SAVE_LONG 64841
|
||||
#define main_MSG_MIN 64842
|
||||
#define main_MSG_BAN 64843
|
||||
#define main_MSG_CANT_SAVE_OPT 64844
|
||||
#define main_MSG_UPD_SAVE_ERROR 64845
|
||||
#define main_MSG_UPD_REQ_ONLY1 64846
|
||||
#define main_MSG_UPD_WAIT 64847
|
||||
#define main_MSG_LOG_HEAD 64848
|
||||
#define main_MSG_LOG_NOT_MOD 64849
|
||||
#define main_MSG_LOG_REDIR 64850
|
||||
#define main_MSG_LOG_NOT_SERVED 64851
|
||||
#define main_MSG_LOG_UPL 64852
|
||||
#define main_MSG_LOG_UPLOADED 64853
|
||||
#define main_MSG_LOG_UPL_FAIL 64854
|
||||
#define main_MSG_LOG_DL 64855
|
||||
#define main_MSG_LOGIN_FAILED 64856
|
||||
#define main_MSG_MIN_DISK_REACHED 64857
|
||||
#define main_MSG_UPL_NAME_FORB 64858
|
||||
#define main_MSG_UPL_CANT_CREATE 64859
|
||||
#define main_FINGERPRINT 64860
|
||||
#define main_NO_FINGERPRINT 64861
|
||||
#define main_MSG_SAVE_VFS 64862
|
||||
#define main_MSG_INP_COMMENT 64863
|
||||
#define main_MSG_BAN_CMT 64864
|
||||
#define main_MSG_BAN_CMT_LONG 64865
|
||||
#define main_MSG_BREAK_DYN_DNS 64866
|
||||
#define main_MSG_CANT_OPEN_PORT 64867
|
||||
#define main_MSG_PORT_USED_BY 64868
|
||||
#define main_MSG_PORT_BLOCKED 64869
|
||||
#define main_MSG_KICK_ALL 64870
|
||||
#define main_MSG_TPL_INCOMPATIBLE 64871
|
||||
#define main_MSG_LOG_SERVER_START 64872
|
||||
#define main_MSG_LOG_SERVER_STOP 64873
|
||||
#define main_MSG_LOG_CONNECTED 64874
|
||||
#define main_MSG_LOG_DISC_SRV 64875
|
||||
#define main_MSG_LOG_DISC 64876
|
||||
#define main_MSG_LOG_GOT 64877
|
||||
#define main_MSG_LOG_BYTES_SENT 64878
|
||||
#define main_MSG_LOG_SERVED 64879
|
||||
#define main_MSG_DDNS_FAIL 64880
|
||||
#define main_MSG_DDNS_REPLY_SIZE 64881
|
||||
#define main_MSG_DDNS_badauth 64882
|
||||
#define main_MSG_DDNS_notfqdn 64883
|
||||
#define main_MSG_DDNS_nohost 64884
|
||||
#define main_MSG_DDNS_notyours 64885
|
||||
#define main_MSG_DDNS_numhost 64886
|
||||
#define main_MSG_DDNS_abuse 64887
|
||||
#define main_MSG_DDNS_dnserr 64888
|
||||
#define main_MSG_DDNS_911 64889
|
||||
#define main_MSG_DDNS_notdonator 64890
|
||||
#define main_MSG_DDNS_badagent 64891
|
||||
#define main_MSG_BAN_MASK 64892
|
||||
#define main_MSG_IP_MASK_LONG 64893
|
||||
#define main_MSG_KICK_ADDR 64894
|
||||
#define main_MSG_BAN_ALREADY 64895
|
||||
#define main_MSG_ADDRESSES_EXCEED 64896
|
||||
#define main_MSG_NO_TEMP 64897
|
||||
#define main_MSG_ERROR_REGISTRY 64898
|
||||
#define main_MSG_MANY_ITEMS 64899
|
||||
#define main_MSG_ADD_TO_HFS 64900
|
||||
#define main_MSG_SINGLE_INSTANCE 64901
|
||||
#define main_MSG_COMM_ERROR 64902
|
||||
#define main_MSG_CON_PAUSED 64903
|
||||
#define main_MSG_CON_SENT 64904
|
||||
#define main_MSG_CON_RECEIVED 64905
|
||||
#define main_MSG_DDNS_NO_REPLY 64906
|
||||
#define main_MSG_DDNS_OK 64907
|
||||
#define main_MSG_DDNS_UNK 64908
|
||||
#define main_MSG_DDNS_ERR 64909
|
||||
#define main_MSG_DDNS_REQ 64910
|
||||
#define main_MSG_DDNS_DOING 64911
|
||||
#define main_MSG_MAX_CON_SING 64912
|
||||
#define main_MSG_MAX_SIM_ADDR 64913
|
||||
#define main_MSG_MAX_SIM_ADDR_DL 64914
|
||||
#define main_MSG_MAX_SIM_DL_SING 64915
|
||||
#define main_MSG_MAX_SIM_DL 64916
|
||||
#define main_MSG_SET_LIMIT 64917
|
||||
#define main_MSG_UNPROTECTED_LINKS 64918
|
||||
#define main_MSG_SAME_NAME 64919
|
||||
#define main_MSG_CONTINUE 64920
|
||||
#define main_MSG_PROCESSING 64921
|
||||
#define main_MSG_SPEED_KBS 64922
|
||||
#define main_MSG_OPTIONS_SAVED 64923
|
||||
#define main_MSG_SOME_LOCKED 64924
|
||||
#define main_MSG_ITEM_LOCKED 64925
|
||||
#define main_MSG_INVALID_VALUE 64926
|
||||
#define main_MSG_EMPTY_NO_LIMIT 64927
|
||||
#define JclResources_RsIntelCacheDescrF0 64928
|
||||
#define JclResources_RsIntelCacheDescrF1 64929
|
||||
#define JclResources_RsIntelCacheDescrFF 64930
|
||||
@ -141,15 +282,15 @@
|
||||
#define JclResources_RsOSVersionWinServer2012 64932
|
||||
#define JclResources_RsOSVersionWin81 64933
|
||||
#define JclResources_RsOSVersionWinServer2012R2 64934
|
||||
#define main_S_PORT_LABEL 64935
|
||||
#define main_S_PORT_ANY 64936
|
||||
#define main_DISABLED 64937
|
||||
#define main_MSG_UNPROTECTED_LINKS 64938
|
||||
#define main_MSG_SAME_NAME 64939
|
||||
#define main_MSG_OPTIONS_SAVED 64940
|
||||
#define main_MSG_SOME_LOCKED 64941
|
||||
#define main_MSG_ITEM_LOCKED 64942
|
||||
#define main_MSG_INVALID_VALUE 64943
|
||||
#define classesLib_MSG_ANTIDOS_REPLY 64935
|
||||
#define optionsDlg_MSG_INVERT_BAN 64936
|
||||
#define main_S_PORT_LABEL 64937
|
||||
#define main_S_PORT_ANY 64938
|
||||
#define main_DISABLED 64939
|
||||
#define main_S_OK 64940
|
||||
#define main_MSG_MENU_VAL 64941
|
||||
#define main_MSG_DL_TIMEOUT 64942
|
||||
#define main_MSG_MAX_CON 64943
|
||||
#define JclResources_RsIntelCacheDescrCA 64944
|
||||
#define JclResources_RsIntelCacheDescrD0 64945
|
||||
#define JclResources_RsIntelCacheDescrD1 64946
|
||||
@ -744,124 +885,227 @@
|
||||
#define System_SysConst_SDiskFull 65535
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
main_MSG, L"The current template is using macros.\rDo you want to cancel this action?"
|
||||
main_MSG_NUM_ADDR, L"In this moment there are %d different addresses"
|
||||
main_MSG_NUM_ADDR_DL, L"In this moment there are %d different addresses downloading"
|
||||
main_MSG_MAX_LINES, L"Max lines on screen."
|
||||
main_MSG_APACHE_LOG_FMT, L"Apache log file format"
|
||||
main_MSG_APACHE_LOG_FMT_LONG, L"Here you can specify how to format the log file complying Apache standard.\rLeave blank to get bare copy of screen on file.\r\rExample:\r %h %l %u %t \"%r\" %>s %b"
|
||||
main_MSG_ICONS_ADDED, L"%d new icons added"
|
||||
main_MSG_DDNS_DISABLED, L"Dynamic DNS updater disabled"
|
||||
main_MSG_MD5_WARN, L"This option creates an .md5 file for every new calculated fingerprint.\rUse with care to get not your disk invaded by these files."
|
||||
main_MSG_AUTO_MD5, L"Auto fingerprint"
|
||||
main_MSG_AUTO_MD5_LONG, L"When you add files and no fingerprint is found, it is calculated.\rTo avoid long waitings, set a limit to file size (in KiloBytes).\rLeave empty to disable, and have no fingerprint created."
|
||||
main_MSG_UPL_HOWTO, L"1. Add a folder (choose \"real folder\")\r\rYou should now see a RED folder in your virtual file sytem, inside HFS\r\r2. Right click on this folder\r3. Properties -> Permissions -> Upload\r4. Check on \"Anyone\"\r5. Ok\r\rNow anyone who has access to your HFS server can upload files to you."
|
||||
main_MSG_EVENTS_HLP, L"For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts"
|
||||
main_MSG_EDIT_RES, L"Edit resource"
|
||||
main_MSG_TPL_USE_MACROS, L"The current template is using macros.\rDo you want to cancel this action?"
|
||||
main_REMOVE_SHELL, L"Remove from shell context menu"
|
||||
main_S_OFF, L"Switch OFF"
|
||||
main_S_ON, L"Switch ON"
|
||||
main_LOG, L"Log"
|
||||
main_MSG, L"You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected."
|
||||
main_MSG, L"Max simultaneous addresses."
|
||||
main_MSG2, L"In this moment there are %d different addresses"
|
||||
main_MSG, L"Max simultaneous addresses downloading."
|
||||
main_MSG2, L"In this moment there are %d different addresses downloading"
|
||||
main_MSG, L"Max lines on screen"
|
||||
main_MSG, L"Here you can specify how to format the log file complying Apache standard.\rLeave blank to get bare copy of screen on file.\r\rExample:\r %h %l %u %t \"%r\" %>s %b"
|
||||
main_MSG, L"This option creates an .md5 file for every new calculated fingerprint.\rUse with care to get not your disk invaded by these files."
|
||||
main_MSG, L"When you add files and no fingerprint is found, it is calculated.\rTo avoid long waitings, set a limit to file size (in KiloBytes).\rLeave empty to disable, and have no fingerprint created."
|
||||
main_MSG, L"Specify your addresses, each per line"
|
||||
main_MSG, L"Can't find external address\r( %s )"
|
||||
main_MSG, L"This option makes pointless the option \"Find external address at startup\", which has now been disabled for your convenience."
|
||||
main_MSG, L"Enter URL for updating.\r%ip% will be translated to your external IP."
|
||||
main_MSG, L"The upload will fail if your disk has less than the specified amount of free MegaBytes."
|
||||
main_MSG, L"This string will be appended to the filename.\r\rIf you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename."
|
||||
main_MSG_BEFORE, L"Here you can test if your server does work on the Internet.\rIf you are not interested in serving files over the Internet, this is NOT for you.\r\rWe'll now perform a test involving network activity.\rIn order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\r\rWARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply."
|
||||
main_MSG_OK, L"The test is successful. The server should be working fine."
|
||||
main_MSG_OK_PORT, L"Port %s is not working, but another working port has been found and set: %s."
|
||||
main_MSG_3, L"You may be behind a router or firewall."
|
||||
main_MSG_6, L"You are behind a router.\rEnsure it is configured to forward port %s to your computer."
|
||||
main_MSG_7, L"You may be behind a firewall.\rEnsure nothing is blocking HFS."
|
||||
main_MSG, L"\"Suggest\" the browser to open directly the specified files.\rOther files should pop up a save dialog."
|
||||
main_MSG, L"You should not use this option unless you really know its meaning.\rContinue?"
|
||||
main_HELP, L"For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts"
|
||||
main_CAPTION, L"Edit resource"
|
||||
main_MSG_RE_NOIP, L"You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected."
|
||||
main_MSG_TRAY_DEF, L"%ip%\rUptime: %uptime%\rDownloads: %downloads%"
|
||||
main_MSG_CLEAN_START, L"Clean start"
|
||||
main_MSG_RESTORE_BAK, L"A file system backup has been created for a system shutdown.\rDo you want to restore this backup?"
|
||||
main_MSG_EXT_ADDR_FAIL, L"Search for external address failed"
|
||||
main_MSG_TO_EXPERT, L"Switch to expert mode."
|
||||
main_MSG_DONT_LOG_HINT, L"Select the files/folder you don't want to be logged,\rthen right click and select \"Don't log\"."
|
||||
main_MSG_DL_PERC, L"Downloading %d%%"
|
||||
main_MSG_UNINSTALL_WARN, L"Delete HFS and all settings?"
|
||||
main_MSG_SELF_3, L"You may be behind a router or firewall."
|
||||
main_MSG_SELF_6, L"You are behind a router.\rEnsure it is configured to forward port %s to your computer."
|
||||
main_MSG_SELF_7, L"You may be behind a firewall.\rEnsure nothing is blocking HFS."
|
||||
main_MSG_RET_EXT, L"Retrieving external address..."
|
||||
main_MSG_SELF_CANT_ON, L"Unable to switch the server on"
|
||||
main_MSG_SELF_CANT_LIST, L"Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1"
|
||||
main_MSG_SELF_CANT_S, L"Self test doesn't support HTTPS.\rIt's likely it won't work."
|
||||
main_MSG_SELF_ING, L"Self testing..."
|
||||
main_MSG_TEST_CANC, L"Test cancelled"
|
||||
main_MSG_TEST_INET, L"Testing internet connection..."
|
||||
main_MSG_SELF_UNAV, L"Sorry, the test is unavailable at the moment"
|
||||
main_MSG_SELF_NO_INET, L"Your internet connection does not work"
|
||||
main_MSG_SELF_NO_ANSWER, L"The test failed: server does not answer."
|
||||
main_MSG_OPEN_BROW, L"Open directly in browser"
|
||||
main_MSG_OPEN_BROW_LONG, L"\"Suggest\" the browser to open directly the specified files.\rOther files should pop up a save dialog."
|
||||
main_MSG_HIDE_PORT, L"You should not use this option unless you really know its meaning.\rContinue?"
|
||||
main_MSG_RESET_TOT, L"Do you want to reset total in/out?"
|
||||
main_MSG_DISAB_FIND_EXT, L"This option makes pointless the option \"Find external address at startup\", which has now been disabled for your convenience."
|
||||
main_MSG_ENT_URL, L"Enter URL"
|
||||
main_MSG_ENT_URL_LONG, L"Enter URL for updating.\r%ip% will be translated to your external IP."
|
||||
main_MSG_ENT_USR, L"Enter user"
|
||||
main_MSG_ENT_PWD, L"Enter password"
|
||||
main_MSG_ENT_HOST, L"Enter host"
|
||||
main_MSG_ENT_HOST_LONG, L"Enter domain (full form!)"
|
||||
main_MSG_HOST_FORM, L"Please, enter it in the FULL form, with dots"
|
||||
main_MSG_MIN_SPACE, L"Min disk space"
|
||||
main_MSG_MIN_SPACE_LONG, L"The upload will fail if your disk has less than the specified amount of free MegaBytes."
|
||||
main_MSG_REN_PART, L"Rename partial uploads"
|
||||
main_MSG_REN_PART_LONG, L"This string will be appended to the filename.\r\rIf you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename."
|
||||
main_MSG_SELF_BEFORE, L"Here you can test if your server does work on the Internet.\rIf you are not interested in serving files over the Internet, this is NOT for you.\r\rWe'll now perform a test involving network activity.\rIn order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\r\rWARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply."
|
||||
main_MSG_SELF_OK, L"The test is successful. The server should be working fine."
|
||||
main_MSG_SELF_OK_PORT, L"Port %s is not working, but another working port has been found and set: %s."
|
||||
main_MSG_LOG_FILE, L"Log file"
|
||||
main_MSG_LOG_FILE_LONG, L"This function does not save any previous information to the log file.\rInstead, it saves all information that appears in the log box in real-time (from when you click \"OK\", below).\rSpecify a filename for the log.\rIf you leave the filename blank, no log file is saved.\r\rHere are some symbols you can use in the filename to split the log:\r %d% -- day of the month (1..31)\r %m% -- month (1..12)\r %y% -- year (2000..)\r %dow% -- day of the week (0..6)\r %w% -- week of the year (1..53)\r %user% -- username surrounded by parenthesis"
|
||||
main_MSG_SET_URL, L"Set URL"
|
||||
main_MSG_SET_URL_LONG, L"Please insert an URL for the link\r\rDo not forget to specify http:// or whatever.\r%%ip%% will be translated to your address"
|
||||
main_MSG_REALM, L"Login realm"
|
||||
main_MSG_REALM_LONG, L"The realm string is shown on the user/pass dialog of the browser.\rHere you can customize the realm for the login button"
|
||||
main_MSG_INACT_TIMEOUT, L"Connection inactivity timeout"
|
||||
main_MSG_INACT_TIMEOUT_LONG, L"The connection is kicked after a timeout.\rSpecify in seconds.\rLeave blank to get no timeout."
|
||||
main_MSG_CHANGES_LOST, L"All changes will be lost\rContinue?"
|
||||
main_MSG_FLAG_NEW, L"Flag new files"
|
||||
main_MSG_FLAG_NEW_LONG, L"Enter the number of MINUTES files stay flagged from their addition.\rLeave blank to disable."
|
||||
main_MSG_DONT_LOG_MASK, L"Do not log address"
|
||||
main_MSG_DONT_LOG_MASK_LONG, L"Any event from the following IP address mask will be not logged."
|
||||
main_MSG_CUST_IP, L"Custom IP addresses"
|
||||
main_MSG_CUST_IP_LONG, L"Specify your addresses, each per line"
|
||||
main_MSG_NO_EXT_IP, L"Can't find external address\r( %s )"
|
||||
main_MSG_TENTH_SEC, L"Tenths of second"
|
||||
main_MSG_LOADING_VFS, L"Loading VFS"
|
||||
main_MSG_VFS_OLD, L"This file is old and uses different settings.\rThe \"let browse\" folder option will be reset.\rRe-saving the file will update its format."
|
||||
main_MSG_UNK_FK, L"This file has been created with a newer version.\rSome data was discarded because unknown.\rIf you save the file now, the discarded data will NOT be saved."
|
||||
main_MSG_VIS_ONLY_ANON, L"This VFS file uses the \"Visible only to anonymous users\" feature.\rThis feature is not available anymore.\rYou can achieve similar results by restricting access to @anonymous,\rthen enabling \"List protected items only for allowed users\"."
|
||||
main_MSG_AUTO_DISABLED, L"Because of the problems encountered in loading,\rautomatic saving has been disabled\runtil you save manually or load another one."
|
||||
main_MSG_CORRUPTED, L"This file does not contain valid data."
|
||||
main_MSG_MACROS_FOUND, L"!!!!!!!!! DANGER !!!!!!!!!\rThis file contains macros.\rDon't accept macros from people you don't trust.\r\rTrust this file?"
|
||||
main_MSG_INFO, L"Last stable version: %s\r\rLast untested version: %s\r"
|
||||
main_MSG_UPD_INFO, L"Last stable version: %s\r\rLast untested version: %s\r"
|
||||
main_MSG_NEWER, L"There's a new version available online: %s"
|
||||
main_MSG_SRC_UPD, L"Searching for updates..."
|
||||
main_ARE_EXPERT, L"You are in Expert mode"
|
||||
main_ARE_EASY, L"You are in Easy mode"
|
||||
main_SW2EXPERT, L"Switch to Expert mode"
|
||||
main_SW2EASY, L"Switch to Easy mode"
|
||||
main_MSG, L"Enter the number of MINUTES with no download after which the program automatically shuts down.\rLeave blank to get no timeout."
|
||||
main_MSG, L"This function does not save any previous information to the log file.\rInstead, it saves all information that appears in the log box in real-time (from when you click \"OK\", below).\rSpecify a filename for the log.\rIf you leave the filename blank, no log file is saved.\r\rHere are some symbols you can use in the filename to split the log:\r %d% -- day of the month (1..31)\r %m% -- month (1..12)\r %y% -- year (2000..)\r %dow% -- day of the week (0..6)\r %w% -- week of the year (1..53)\r %user% -- username surrounded by parenthesis"
|
||||
main_MSG, L"Please insert an URL for the link\r\rDo not forget to specify http:// or whatever.\r%%ip%% will be translated to your address"
|
||||
main_MSG, L"The realm string is shown on the user/pass dialog of the browser.\rHere you can customize the realm for the login button"
|
||||
main_MSG, L"The connection is kicked after a timeout.\rSpecify in seconds.\rLeave blank to get no timeout."
|
||||
main_MSG, L"All changes will be lost\rContinue?"
|
||||
main_MSG, L"Enter the number of MINUTES files stay flagged from their addition.\rLeave blank to disable."
|
||||
main_MSG, L"Any event from the following IP address mask will be not logged."
|
||||
main_LIMIT, L"Speed limit"
|
||||
main_MSG_MAX_BW_1, L"Max bandwidth for single address (KB/s)."
|
||||
main_LIMIT1, L"Speed limit for single address"
|
||||
main_NODL, L"No downloads timeout: "
|
||||
main_MSG, L"Graph refresh rate: %d (tenths of second)"
|
||||
main_MSG, L"Max simultaneous connections to serve.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads\"."
|
||||
main_MSG2, L"In this moment there are %d active connections"
|
||||
main_MSG, L"Max simultaneous downloads."
|
||||
main_MSG2, L"In this moment there are %d active downloads"
|
||||
main_MSG, L"Max simultaneous connections to accept from a single IP address.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads from a single IP address\"."
|
||||
main_MSG, L"Max simultaneous downloads from a single IP address."
|
||||
main_MSG_TITLE, L"Loading VFS"
|
||||
main_MSG_OLD, L"This file is old and uses different settings.\rThe \"let browse\" folder option will be reset.\rRe-saving the file will update its format."
|
||||
main_MSG_UNK_FK, L"This file has been created with a newer version.\rSome data was discarded because unknown.\rIf you save the file now, the discarded data will NOT be saved."
|
||||
main_MSG_VIS_ONLY_ANON, L"This VFS file uses the \"Visible only to anonymous users\" feature.\rThis feature is not available anymore.\rYou can achieve similar results by restricting access to @anonymous,\rthen enabling \"List protected items only for allowed users\"."
|
||||
main_MSG_AUTO_DISABLED, L"Because of the problems encountered in loading,\rautomatic saving has been disabled\runtil you save manually or load another one."
|
||||
main_IN_SPEED, L"In: %.1f KB/s"
|
||||
main_BANS, L"Ban rules: %d"
|
||||
main_MEMORY, L"Mem"
|
||||
main_CUSTOMIZED, L"Customized template"
|
||||
main_ITEMS, L"VFS: %d items"
|
||||
main_MSG1, L"%s item(s) already exists:\r%s\r\rContinue?"
|
||||
main_MSG, L"Leave empty to disable this feature.\rHere you can specify a mask.\rWhen a file is requested, if the mask doesn't match the \"Referer\" HTTP field, the request is rejected."
|
||||
main_MSG_BETTERSTOP, L"\rGoing on may lead to problems.\rIt is adviced to stop loading.\rStop?"
|
||||
main_MSG_BADCRC, L"This file is corrupted (CRC)."
|
||||
main_MSG_NEWER, L"This file has been created with a newer and incompatible version."
|
||||
main_MSG_DL_TIMEOUT_LONG, L"Enter the number of MINUTES with no download after which the program automatically shuts down.\rLeave blank to get no timeout."
|
||||
main_MSG_NEWER_INCOMP, L"This file has been created with a newer and incompatible version."
|
||||
main_MSG_ZLIB, L"This file is corrupted (ZLIB)."
|
||||
main_MSG_BAKAVAILABLE, L"This file is corrupted but a backup is available.\rContinue with backup?"
|
||||
main_MSG_CANT_LOAD_SAVE, L"Cannot load or save while adding files"
|
||||
main_MSG_OPEN_VFS, L"Open VFS file"
|
||||
main_LIMIT, L"Limit"
|
||||
main_TOP_SPEED, L"Top speed"
|
||||
main_MSG_MAX_BW, L"Max bandwidth (KB/s)."
|
||||
main_ZEROMSG, L"Zero is an effective limit.\rTo disable instead, leave empty."
|
||||
main_AUTOSAVE, L"Auto save every: "
|
||||
main_MSG, L"Auto-save %s.\rSpecify in seconds.\rLeave blank to disable."
|
||||
main_MSG_MIN, L"We don't accept less than %d"
|
||||
main_MSG_BAN, L"Your ban configuration may have been screwed up.\rPlease verify it."
|
||||
main_MSG, L"Can't save options there.\rShould I try to save to user registry?"
|
||||
main_MSG_SAVE_ERROR, L"Cannot save the update"
|
||||
main_MSG_LIMITED, L"The auto-update feature cannot work because it requires the \"Only 1 instance\" option enabled.\r\rYour browser will now be pointed to the update, so you can install it manually."
|
||||
main_MSG_LIM0, L"Zero is an effective limit.\rTo disable instead, leave empty."
|
||||
main_MSG_MAX_BW_1, L"Max bandwidth for single address (KB/s)."
|
||||
main_MSG_GRAPH_RATE_MENU, L"Graph refresh rate: %d (tenths of second)"
|
||||
main_MSG_MAX_CON_LONG, L"Max simultaneous connections to serve.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads\"."
|
||||
main_MSG_WARN_CONN, L"In this moment there are %d active connections"
|
||||
main_MSG_WARN_ACT_DL, L"In this moment there are %d active downloads"
|
||||
main_MSG_MAX_CON_SING_LONG, L"Max simultaneous connections to accept from a single IP address.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads from a single IP address\"."
|
||||
main_MSG_GRAPH_RATE, L"Graph refresh rate"
|
||||
main_MSG_VFS_DONT_CONS_DL_MASK, L"Don't consider as download (mask): %s"
|
||||
main_MSG_VFS_INHERITED, L" [inherited]"
|
||||
main_MSG_VFS_EXTERNAL, L" [external]"
|
||||
main_MSG_CON_HINT, L"Connection time: %s\rLast request time: %s\rAgent: %s"
|
||||
main_MSG_CON_STATE_IDLE, L"idle"
|
||||
main_MSG_CON_STATE_REQ, L"requesting"
|
||||
main_MSG_CON_STATE_RCV, L"receiving"
|
||||
main_MSG_CON_STATE_THINK, L"thinking"
|
||||
main_MSG_CON_STATE_REP, L"replying"
|
||||
main_MSG_CON_STATE_SEND, L"sending"
|
||||
main_MSG_CON_STATE_DISC, L"disconnected"
|
||||
main_MSG_TPL_RESET, L"The template has been reset"
|
||||
main_MSG_ALLO_REF, L"Allowed referer"
|
||||
main_MSG_ALLO_REF_LONG, L"Leave empty to disable this feature.\rHere you can specify a mask.\rWhen a file is requested, if the mask doesn't match the \"Referer\" HTTP field, the request is rejected."
|
||||
main_MSG_BETTERSTOP, L"\rGoing on may lead to problems.\rIt is adviced to stop loading.\rStop?"
|
||||
main_MSG_BADCRC, L"This file is corrupted (CRC)."
|
||||
main_MSG_VFS_HIDE_EMPTY, L"Hidden if empty"
|
||||
main_MSG_VFS_NOT_BROW, L"Not browsable"
|
||||
main_MSG_VFS_HIDE_EMPTY_FLD, L"Hide empty folders"
|
||||
main_MSG_VFS_HIDE_EXT, L"Hide extention"
|
||||
main_MSG_VFS_ARCABLE, L"Archivable"
|
||||
main_MSG_VFS_DEF_MASK, L"Default file mask: %s"
|
||||
main_MSG_VFS_ACCESS, L"Access for"
|
||||
main_MSG_VFS_UPLOAD, L"Upload allowed for"
|
||||
main_MSG_VFS_DELETE, L"Delete allowed for"
|
||||
main_MSG_VFS_COMMENT, L"Comment: %s"
|
||||
main_MSG_VFS_REALM, L"Realm: %s"
|
||||
main_MSG_VFS_DIFF_TPL, L"Diff template: %s"
|
||||
main_MSG_VFS_FILES_FLT, L"Files filter: %s"
|
||||
main_MSG_VFS_FLD_FLT, L"Folders filter: %s"
|
||||
main_MSG_VFS_UPL_FLT, L"Upload filter: %s"
|
||||
main_MSG_VFS_DONT_CONS_DL, L"Don't consider as download"
|
||||
main_IN_SPEED, L"In: %.1f KB/s"
|
||||
main_BANS, L"Ban rules: %d"
|
||||
main_MEMORY, L"Mem"
|
||||
main_CUST_TPL, L"Customized template"
|
||||
main_VFS_ITEMS, L"VFS: %d items"
|
||||
main_MSG_ITEM_EXISTS, L"%s item(s) already exists:\r%s\r\rContinue?"
|
||||
main_MSG_INSTALL_TPL, L"Install this template?"
|
||||
main_MSG_FOLDER_UPLOAD, L"Do you want ANYONE to be able to upload to this folder?"
|
||||
main_MSG_VFS_DRAG_INVIT, L"Drag your files here"
|
||||
main_MSG_VFS_URL, L"URL: %s"
|
||||
main_MSG_VFS_PATH, L"Path: %s"
|
||||
main_MSG_VFS_SIZE, L"Size: %s"
|
||||
main_MSG_VFS_DLS, L"Downloads: %s"
|
||||
main_MSG_VFS_INVISIBLE, L"Invisible"
|
||||
main_MSG_VFS_DL_FORB, L"Download forbidden"
|
||||
main_MSG_VFS_DONT_LOG, L"Don't log"
|
||||
main_MSG_UPD_DL, L"Downloading new version..."
|
||||
main_MSG_UPDATE, L"You are invited to use the new version.\r\rUpdate now?"
|
||||
main_MSG_FROMDISK, L"Update info has been read from local file.\rTo resume normal operation of the updater, delete the file hfs.updateinfo.txt from the HFS program folder."
|
||||
main_COPY, L"Copy to clipboard"
|
||||
main_ALREADY, L"Already in clipboard"
|
||||
main_NOSPACE, L"Out of space"
|
||||
main_MSG_REQUESTING, L"Requesting..."
|
||||
main_MSG_CHK_UPD, L"Checking for updates"
|
||||
main_MSG_CHK_UPD_FAIL, L"Check update: failed"
|
||||
main_MSG_CHK_UPD_HEAD, L"Check update: "
|
||||
main_MSG_CHK_UPD_VER, L"new version found: %s"
|
||||
main_MSG_CHK_UPD_VER_EXT, L"Build #%s (current is #%s)"
|
||||
main_MSG_CHK_UPD_NONE, L"no new version"
|
||||
main_TO_CLIP, L"Copy to clipboard"
|
||||
main_ALREADY_CLIP, L"Already in clipboard"
|
||||
main_MSG_NO_SPACE, L"Out of space"
|
||||
main_CONN, L"Connections: %d"
|
||||
main_TOT_IN, L"Total In: %s"
|
||||
main_TOT_OUT, L"Total Out: %s"
|
||||
main_OUT_SPEED, L"Out: %.1f KB/s"
|
||||
main_MSG_DDNS_notdonator, L"an option specified requires payment"
|
||||
main_MSG_DDNS_badagent, L"banned client"
|
||||
main_MSG, L"There are %d open connections from this address.\rDo you want to kick them all now?"
|
||||
main_MSG2, L"You can edit the address.\rMasks and ranges are allowed."
|
||||
main_MSG, L"This option is NOT compatible with \"dynamic dns updater\".\rContinue?"
|
||||
main_MSG2, L"There are %d connections open.\rDo you want to close them now?"
|
||||
main_FAILED, L"Login failed"
|
||||
main_LIMIT, L"Max simultaneous addresses: %s ..."
|
||||
main_LIMIT, L"Max simultaneous addresses downloading: %s ..."
|
||||
main_LIMIT, L"Max connections: %s ..."
|
||||
main_LIMIT, L"Max connections from single address: %s ..."
|
||||
main_LIMIT, L"Max simultaneous downloads: %s ..."
|
||||
main_LIMIT, L"Max simultaneous downloads from single address: %s ..."
|
||||
main_MSG_FILE_ADD_ABORT, L"File addition was aborted.\rThe list of files is incomplete."
|
||||
main_MSG_ADDING, L"Adding item #%d"
|
||||
main_MSG_INV_FILENAME, L"Invalid filename"
|
||||
main_MSG_DELETE, L"Delete?"
|
||||
main_AUTOSAVE, L"Auto save every: "
|
||||
main_SECONDS, L"%d seconds"
|
||||
main_MSG_SPD_LIMIT_SING, L"Speed limit for single address"
|
||||
main_MSG_SPD_LIMIT, L"Speed limit"
|
||||
main_MSG_AUTO_SAVE, L"Auto-save %s"
|
||||
main_MSG_AUTO_SAVE_LONG, L"Auto-save %s.\rSpecify in seconds.\rLeave blank to disable."
|
||||
main_MSG_MIN, L"We don't accept less than %d"
|
||||
main_MSG_BAN, L"Your ban configuration may have been screwed up.\rPlease verify it."
|
||||
main_MSG_CANT_SAVE_OPT, L"Can't save options there.\rShould I try to save to user registry?"
|
||||
main_MSG_UPD_SAVE_ERROR, L"Cannot save the update"
|
||||
main_MSG_UPD_REQ_ONLY1, L"The auto-update feature cannot work because it requires the \"Only 1 instance\" option enabled.\r\rYour browser will now be pointed to the update, so you can install it manually."
|
||||
main_MSG_UPD_WAIT, L"Waiting for last requests to be served, then we'll update"
|
||||
main_MSG_LOG_HEAD, L"Served head"
|
||||
main_MSG_LOG_NOT_MOD, L"Not modified, use cache"
|
||||
main_MSG_LOG_REDIR, L"Redirected to %s"
|
||||
main_MSG_LOG_NOT_SERVED, L"Not served: %d - %s"
|
||||
main_MSG_LOG_UPL, L"Uploading %s"
|
||||
main_MSG_LOG_UPLOADED, L"Fully uploaded %s - %s @ %sB/s"
|
||||
main_MSG_LOG_UPL_FAIL, L"Upload failed %s"
|
||||
main_MSG_LOG_DL, L"Fully downloaded - %s @ %sB/s - %s"
|
||||
main_MSG_LOGIN_FAILED, L"Login failed"
|
||||
main_MSG_MIN_DISK_REACHED, L"Minimum disk space reached."
|
||||
main_MSG_UPL_NAME_FORB, L"File name or extension forbidden."
|
||||
main_MSG_UPL_CANT_CREATE, L"Error creating file."
|
||||
main_FINGERPRINT, L"Create fingerprint on addition under %d KB"
|
||||
main_NO_FINGERPRINT, L"Create fingerprint on addition: disabled"
|
||||
main_MSG, L"Please insert a comment for \"%s\".\rYou should use HTML: <br> for break line."
|
||||
main_MSG_EMPTY_NO_LIMIT, L"Leave blank to get no limits."
|
||||
main_MSG_ADDRESSES_EXCEED, L"The following addresses exceed the limit:\r%s"
|
||||
main_MSG_NO_TEMP, L"Cannot save temporary file"
|
||||
main_MSG_ERROR_REGISTRY, L"Can't write to registry.\rYou may lack necessary rights."
|
||||
main_MSG_MANY_ITEMS, L"You are putting many files.\rTry using real folders instead of virtual folders.\rRead documentation or ask on the forum for help."
|
||||
main_MSG_ADD_TO_HFS, L"\"Add to HFS\" has been added to your Window's Explorer right-click menu."
|
||||
main_MSG_SINGLE_INSTANCE, L"Sorry, this feature only works with the \"Only 1 instance\" option enabled.\r\rYou can find this option under Menu -> Start/Exit\r(only in expert mode)"
|
||||
main_MSG_COMM_ERROR, L"Network error. Request failed."
|
||||
main_MSG_SAVE_VFS, L"Your current file system is not saved.\rSave it?"
|
||||
main_MSG_INP_COMMENT, L"Please insert a comment for \"%s\".\rYou should use HTML: <br> for break line."
|
||||
main_MSG_BAN_CMT, L"Ban comment"
|
||||
main_MSG_BAN_CMT_LONG, L"A comment for this ban..."
|
||||
main_MSG_BREAK_DYN_DNS, L"This option is NOT compatible with \"dynamic dns updater\".\rContinue?"
|
||||
main_MSG_CANT_OPEN_PORT, L"Cannot open port."
|
||||
main_MSG_PORT_USED_BY, L"It is already used by %s"
|
||||
main_MSG_PORT_BLOCKED, L"Something is blocking, maybe your system firewall."
|
||||
main_MSG_KICK_ALL, L"There are %d connections open.\rDo you want to close them now?"
|
||||
main_MSG_TPL_INCOMPATIBLE, L"The template you are trying to load is not compatible with current HFS version.\rHFS will now use default template.\rAsk on the forum if you need further help."
|
||||
main_MSG_LOG_SERVER_START, L"Server start"
|
||||
main_MSG_LOG_SERVER_STOP, L"Server stop"
|
||||
main_MSG_LOG_CONNECTED, L"Connected"
|
||||
main_MSG_LOG_DISC_SRV, L"Disconnected by server"
|
||||
main_MSG_LOG_DISC, L"Disconnected"
|
||||
main_MSG_LOG_GOT, L"Got %d bytes"
|
||||
main_MSG_LOG_BYTES_SENT, L"%s bytes sent"
|
||||
main_MSG_LOG_SERVED, L"Served %s"
|
||||
main_MSG_DDNS_FAIL, L"DNS update failed: %s\rUser intervention is required."
|
||||
main_MSG_DDNS_REPLY_SIZE, L"%d bytes reply"
|
||||
main_MSG_DDNS_badauth, L"invalid user/password"
|
||||
main_MSG_DDNS_notfqdn, L"incomplete hostname, required form aaa.bbb.com"
|
||||
main_MSG_DDNS_nohost, L"specified hostname does not exist"
|
||||
@ -870,6 +1114,44 @@ BEGIN
|
||||
main_MSG_DDNS_abuse, L"specified hostname is blocked for update abuse"
|
||||
main_MSG_DDNS_dnserr, L"server error"
|
||||
main_MSG_DDNS_911, L"server error"
|
||||
main_MSG_DDNS_notdonator, L"an option specified requires payment"
|
||||
main_MSG_DDNS_badagent, L"banned client"
|
||||
main_MSG_BAN_MASK, L"Ban IP mask"
|
||||
main_MSG_IP_MASK_LONG, L"You can edit the address.\rMasks and ranges are allowed."
|
||||
main_MSG_KICK_ADDR, L"There are %d open connections from this address.\rDo you want to kick them all now?"
|
||||
main_MSG_BAN_ALREADY, L"This IP address is already banned"
|
||||
main_MSG_ADDRESSES_EXCEED, L"The following addresses exceed the limit:\r%s"
|
||||
main_MSG_NO_TEMP, L"Cannot save temporary file"
|
||||
main_MSG_ERROR_REGISTRY, L"Can't write to registry.\rYou may lack necessary rights."
|
||||
main_MSG_MANY_ITEMS, L"You are putting many files.\rTry using real folders instead of virtual folders.\rRead documentation or ask on the forum for help."
|
||||
main_MSG_ADD_TO_HFS, L"\"Add to HFS\" has been added to your Window's Explorer right-click menu."
|
||||
main_MSG_SINGLE_INSTANCE, L"Sorry, this feature only works with the \"Only 1 instance\" option enabled.\r\rYou can find this option under Menu -> Start/Exit\r(only in expert mode)"
|
||||
main_MSG_COMM_ERROR, L"Network error. Request failed."
|
||||
main_MSG_CON_PAUSED, L"paused"
|
||||
main_MSG_CON_SENT, L"%s / %s sent"
|
||||
main_MSG_CON_RECEIVED, L"%s / %s received"
|
||||
main_MSG_DDNS_NO_REPLY, L"no reply"
|
||||
main_MSG_DDNS_OK, L"successful"
|
||||
main_MSG_DDNS_UNK, L"unknown reply: %s"
|
||||
main_MSG_DDNS_ERR, L"error: %s"
|
||||
main_MSG_DDNS_REQ, L"DNS update requested for %s: %s"
|
||||
main_MSG_DDNS_DOING, L"Updating dynamic DNS..."
|
||||
main_MSG_MAX_CON_SING, L"Max connections from single address"
|
||||
main_MSG_MAX_SIM_ADDR, L"Max simultaneous addresses"
|
||||
main_MSG_MAX_SIM_ADDR_DL, L"Max simultaneous addresses downloading"
|
||||
main_MSG_MAX_SIM_DL_SING, L"Max simultaneous downloads from single address"
|
||||
main_MSG_MAX_SIM_DL, L"Max simultaneous downloads"
|
||||
main_MSG_SET_LIMIT, L"Set limit"
|
||||
main_MSG_UNPROTECTED_LINKS, L"Links are NOT actually protected.\rThe feature is there to be used with the \"list protected items only...\" option.\rContinue?"
|
||||
main_MSG_SAME_NAME, L"An item with the same name is already present in this folder.\rContinue?"
|
||||
main_MSG_CONTINUE, L"Continue?"
|
||||
main_MSG_PROCESSING, L"Processing..."
|
||||
main_MSG_SPEED_KBS, L"%.1f kB/s"
|
||||
main_MSG_OPTIONS_SAVED, L"Options saved"
|
||||
main_MSG_SOME_LOCKED, L"Some items were not affected because locked"
|
||||
main_MSG_ITEM_LOCKED, L"The item is locked"
|
||||
main_MSG_INVALID_VALUE, L"Invalid value"
|
||||
main_MSG_EMPTY_NO_LIMIT, L"Leave blank to get no limits."
|
||||
JclResources_RsIntelCacheDescrF0, L"64-Byte Prefetching"
|
||||
JclResources_RsIntelCacheDescrF1, L"128-Byte Prefetching"
|
||||
JclResources_RsIntelCacheDescrFF, L"CPUID leaf 2 does not report cache descriptor information, use CPUID leaf 4 to query cache parameters"
|
||||
@ -877,15 +1159,15 @@ BEGIN
|
||||
JclResources_RsOSVersionWinServer2012, L"Windows Server 2012"
|
||||
JclResources_RsOSVersionWin81, L"Windows 8.1"
|
||||
JclResources_RsOSVersionWinServer2012R2, L"Windows Server 2012 R2"
|
||||
classesLib_MSG_ANTIDOS_REPLY, L"Please wait, server busy"
|
||||
optionsDlg_MSG_INVERT_BAN, L"Normal behavior of the Ban is to prevent access to the addresses you specify (also called black-list).\rIf you want the opposite, to allow the addresses that you specify (white-list), enter all addresses in a single row preceded by a \\ character.\r\rLet say you want to allow all your 192.168 local network plus your office at 1.1.1.1.\rJust put this IP address mask: \\192.168.*;1.1.1.1\rThe opening \\ character inverts the logic, so everything else is banned.\r\rIf you want to know more about address masks, check the guide."
|
||||
main_S_PORT_LABEL, L"Port: %s"
|
||||
main_S_PORT_ANY, L"any"
|
||||
main_DISABLED, L"disabled"
|
||||
main_MSG_UNPROTECTED_LINKS, L"Links are NOT actually protected.\rThe feature is there to be used with the \"list protected items only...\" option.\rContinue?"
|
||||
main_MSG_SAME_NAME, L"An item with the same name is already present in this folder.\rContinue?"
|
||||
main_MSG_OPTIONS_SAVED, L"Options saved"
|
||||
main_MSG_SOME_LOCKED, L"Some items were not affected because locked"
|
||||
main_MSG_ITEM_LOCKED, L"The item is locked"
|
||||
main_MSG_INVALID_VALUE, L"Invalid value"
|
||||
main_S_OK, L"Ok"
|
||||
main_MSG_MENU_VAL, L" (%s)"
|
||||
main_MSG_DL_TIMEOUT, L"No downloads timeout"
|
||||
main_MSG_MAX_CON, L"Max connections"
|
||||
JclResources_RsIntelCacheDescrCA, L"Shared 2nd-Level TLB: 4 KByte pages, 4-way associative, 512 entries"
|
||||
JclResources_RsIntelCacheDescrD0, L"3rd-level cache: 512 KByte, 4-way set associative, 64 byte line size"
|
||||
JclResources_RsIntelCacheDescrD1, L"3rd-level cache: 1 MByte, 4-way set associative, 64 byte line size"
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
[+download]
|
||||
{.remove header|ETag.}
|
||||
{.remove header|Set-cookie.}
|
||||
422
hfs.lng
422
hfs.lng
@ -1,5 +1,5 @@
|
||||
; Kryvich's Delphi Localizer Language File.
|
||||
; Generated by K.D.L. Scanner, 24/05/2020 20:02:17
|
||||
; Generated by K.D.L. Scanner, 02/08/2020 18:30:32
|
||||
|
||||
Humanize=1
|
||||
HumanizedCR=\^
|
||||
@ -120,6 +120,8 @@ filemenu.Editresource1.Caption=Edit resource...
|
||||
filemenu.CopyURL1.Caption=Copy URL address
|
||||
filemenu.CopyURL1.Hint=just double click!
|
||||
filemenu.CopyURLwithpassword1.Caption=Copy URL with password
|
||||
filemenu.CopyURLwithdifferentaddress1.Caption=Copy URL with different host address
|
||||
filemenu.CopyURLwithfingerprint1.Caption=Copy URL with fingerprint
|
||||
filemenu.Browseit1.Caption=Browse it
|
||||
filemenu.SetURL1.Caption=Set URL...
|
||||
filemenu.Openit1.Caption=Open it
|
||||
@ -127,8 +129,6 @@ filemenu.Flagasnew1.Caption=Flag as new
|
||||
filemenu.Resetnewflag1.Caption=Reset <new> flag
|
||||
filemenu.Setuserpass1.Caption=Set user/pass...
|
||||
filemenu.Resetuserpass1.Caption=Reset user/pass
|
||||
filemenu.CopyURLwithdifferentaddress1.Caption=Copy URL with different host address
|
||||
filemenu.CopyURLwithfingerprint1.Caption=Copy URL with fingerprint
|
||||
filemenu.Purge1.Caption=Purge...
|
||||
filemenu.Switchtovirtual1.Caption=Change to virtual-folder
|
||||
filemenu.Switchtorealfolder1.Caption=Change to real-folder
|
||||
@ -282,7 +282,6 @@ menu.Debug1.dumpTrafficChk.Caption=Dump traffic
|
||||
menu.Debug1.Showcustomizedoptions1.Caption=Show customized options...
|
||||
menu.Debug1.highSpeedChk.Caption=Experimental high speed handling
|
||||
menu.Debug1.macrosLogChk.Caption=Enable macros.log
|
||||
menu.Debug1.Appendmacroslog1.Caption=Append macros.log
|
||||
menu.Debug1.Runscript1.Caption=Run script...
|
||||
menu.Debug1.showMemUsageChk.Caption=Show memory usage
|
||||
menu.Debug1.noContentdispositionChk.Caption=No Content-disposition
|
||||
@ -397,7 +396,7 @@ pageCtrl.accountsPage.accountpropGrp.Label8.Caption=Notes
|
||||
pageCtrl.accountsPage.accountpropGrp.accountenabledChk.Caption=&Enabled
|
||||
pageCtrl.accountsPage.accountpropGrp.ignoreLimitsChk.Caption=&Ignore limits
|
||||
pageCtrl.accountsPage.accountpropGrp.pwdBox.EditLabel.Caption=&Password
|
||||
pageCtrl.accountsPage.accountpropGrp.redirBox.EditLabel.Caption=After ~login, redirect to
|
||||
pageCtrl.accountsPage.accountpropGrp.redirBox.EditLabel.Caption{1}=After login, redirect to
|
||||
pageCtrl.accountsPage.accountpropGrp.accountLinkBox.EditLabel.Caption=Member of
|
||||
pageCtrl.accountsPage.accountpropGrp.groupChk.Caption=&Group
|
||||
pageCtrl.accountsPage.accountpropGrp.groupsBtn.Caption=Choose...
|
||||
@ -452,141 +451,283 @@ Panel1.Button1.Caption=&Yes
|
||||
Panel1.Button2.Caption=&No
|
||||
|
||||
[ResourceStrings]
|
||||
64820_main_MSG{1}=The current template is using macros.\^Do you want to cancel this action?
|
||||
64801_main_REMOVE_SHELL=Remove from shell context menu
|
||||
64802_main_S_OFF=Switch OFF
|
||||
64803_main_S_ON{1}=Switch ON
|
||||
64804_main_LOG=Log
|
||||
64820_main_MSG=You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected.
|
||||
64820_main_MSG{1}=Max simultaneous addresses.
|
||||
64809_main_MSG2=In this moment there are %d different addresses
|
||||
64820_main_MSG{1}=Max simultaneous addresses downloading.
|
||||
64809_main_MSG2{1}=In this moment there are %d different addresses downloading
|
||||
64820_main_MSG{1}=Max lines on screen
|
||||
64820_main_MSG{1}=Here you can specify how to format the log file complying Apache standard.\^Leave blank to get bare copy of screen on file.\^\^Example:\^ %h %l %u %t "%r" %>s %b
|
||||
64820_main_MSG{1}=This option creates an .md5 file for every new calculated fingerprint.\^Use with care to get not your disk invaded by these files.
|
||||
64820_main_MSG{1}=When you add files and no fingerprint is found, it is calculated.\^To avoid long waitings, set a limit to file size (in KiloBytes).\^Leave empty to disable, and have no fingerprint created.
|
||||
64820_main_MSG{1}=Specify your addresses, each per line
|
||||
64820_main_MSG{1}=Can't find external address\^( %s )
|
||||
64820_main_MSG{1}=This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience.
|
||||
64820_main_MSG{1}=Enter URL for updating.\^%ip% will be translated to your external IP.
|
||||
64820_main_MSG{1}=The upload will fail if your disk has less than the specified amount of free MegaBytes.
|
||||
64820_main_MSG{1}=This string will be appended to the filename.\^\^If you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename.
|
||||
64822_main_MSG_BEFORE=Here you can test if your server does work on the Internet.\^If you are not interested in serving files over the Internet, this is NOT for you.\^\^We'll now perform a test involving network activity.\^In order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\^\^WARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply.
|
||||
64823_main_MSG_OK=The test is successful. The server should be working fine.
|
||||
64824_main_MSG_OK_PORT=Port %s is not working, but another working port has been found and set: %s.
|
||||
64825_main_MSG_3=You may be behind a router or firewall.
|
||||
64826_main_MSG_6=You are behind a router.\^Ensure it is configured to forward port %s to your computer.
|
||||
64827_main_MSG_7=You may be behind a firewall.\^Ensure nothing is blocking HFS.
|
||||
64820_main_MSG{1}="Suggest" the browser to open directly the specified files.\^Other files should pop up a save dialog.
|
||||
64820_main_MSG{1}=You should not use this option unless you really know its meaning.\^Continue?
|
||||
64830_main_HELP=For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts
|
||||
64831_main_CAPTION=Edit resource
|
||||
64832_main_MSG_CORRUPTED=This file does not contain valid data.
|
||||
64833_main_MSG_MACROS_FOUND=!!!!!!!!! DANGER !!!!!!!!!\^This file contains macros.\^Don't accept macros from people you don't trust.\^\^Trust this file?
|
||||
64834_main_MSG_INFO=Last stable version: %s\^\^Last untested version: %s\^
|
||||
64835_main_MSG_NEWER=There's a new version available online: %s
|
||||
64836_main_ARE_EXPERT{1}=You are in Expert mode
|
||||
64837_main_ARE_EASY=You are in Easy mode
|
||||
64838_main_SW2EXPERT=Switch to Expert mode
|
||||
64839_main_SW2EASY=Switch to Easy mode
|
||||
64820_main_MSG{1}=Enter the number of MINUTES with no download after which the program automatically shuts down.\^Leave blank to get no timeout.
|
||||
64820_main_MSG{1}=This function does not save any previous information to the log file.\^Instead, it saves all information that appears in the log box in real-time (from when you click "OK", below).\^Specify a filename for the log.\^If you leave the filename blank, no log file is saved.\^\^Here are some symbols you can use in the filename to split the log:\^ %d% -- day of the month (1..31)\^ %m% -- month (1..12)\^ %y% -- year (2000..)\^ %dow% -- day of the week (0..6)\^ %w% -- week of the year (1..53)\^ %user% -- username surrounded by parenthesis
|
||||
64820_main_MSG{1}=Please insert an URL for the link\^\^Do not forget to specify http:// or whatever.\^%%ip%% will be translated to your address
|
||||
64820_main_MSG{1}=The realm string is shown on the user/pass dialog of the browser.\^Here you can customize the realm for the login button
|
||||
64820_main_MSG{1}=The connection is kicked after a timeout.\^Specify in seconds.\^Leave blank to get no timeout.
|
||||
64820_main_MSG{1}=All changes will be lost\^Continue?
|
||||
64820_main_MSG{1}=Enter the number of MINUTES files stay flagged from their addition.\^Leave blank to disable.
|
||||
64820_main_MSG{1}=Any event from the following IP address mask will be not logged.
|
||||
64876_main_LIMIT{1}=Speed limit
|
||||
64849_main_MSG_MAX_BW_1=Max bandwidth for single address (KB/s).
|
||||
64850_main_LIMIT1=Speed limit for single address
|
||||
64851_main_NODL=No downloads timeout:
|
||||
64820_main_MSG{1}=Graph refresh rate: %d (tenths of second)
|
||||
64820_main_MSG{1}=Max simultaneous connections to serve.\^Most people don't know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads".
|
||||
64809_main_MSG2{1}=In this moment there are %d active connections
|
||||
64820_main_MSG{1}=Max simultaneous downloads.
|
||||
64809_main_MSG2{1}=In this moment there are %d active downloads
|
||||
64820_main_MSG{1}=Max simultaneous connections to accept from a single IP address.\^Most people don't know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads from a single IP address".
|
||||
64820_main_MSG{1}=Max simultaneous downloads from a single IP address.
|
||||
64859_main_MSG_TITLE=Loading VFS
|
||||
64860_main_MSG_OLD=This file is old and uses different settings.\^The "let browse" folder option will be reset.\^Re-saving the file will update its format.
|
||||
64861_main_MSG_UNK_FK=This file has been created with a newer version.\^Some data was discarded because unknown.\^If you save the file now, the discarded data will NOT be saved.
|
||||
64862_main_MSG_VIS_ONLY_ANON=This VFS file uses the "Visible only to anonymous users" feature.\^This feature is not available anymore.\^You can achieve similar results by restricting access to @anonymous,\^then enabling "List protected items only for allowed users".
|
||||
64863_main_MSG_AUTO_DISABLED=Because of the problems encountered in loading,\^automatic saving has been disabled\^until you save manually or load another one.
|
||||
64864_main_IN_SPEED=In: %.1f KB/s
|
||||
64865_main_BANS=Ban rules: %d
|
||||
64866_main_MEMORY=Mem
|
||||
64867_main_CUSTOMIZED=Customized template
|
||||
64868_main_ITEMS=VFS: %d items
|
||||
64869_main_MSG1=%s item(s) already exists:\^%s\^\^Continue?
|
||||
64820_main_MSG{1}=Leave empty to disable this feature.\^Here you can specify a mask.\^When a file is requested, if the mask doesn't match the "Referer" HTTP field, the request is rejected.
|
||||
64871_main_MSG_BETTERSTOP=\^Going on may lead to problems.\^It is adviced to stop loading.\^Stop?
|
||||
64872_main_MSG_BADCRC=This file is corrupted (CRC).
|
||||
64835_main_MSG_NEWER{1}=This file has been created with a newer and incompatible version.
|
||||
64874_main_MSG_ZLIB=This file is corrupted (ZLIB).
|
||||
64875_main_MSG_BAKAVAILABLE=This file is corrupted but a backup is available.\^Continue with backup?
|
||||
64876_main_LIMIT=Limit
|
||||
64877_main_TOP_SPEED=Top speed
|
||||
64878_main_MSG_MAX_BW=Max bandwidth (KB/s).
|
||||
64879_main_ZEROMSG=Zero is an effective limit.\^To disable instead, leave empty.
|
||||
64880_main_AUTOSAVE=Auto save every:
|
||||
64820_main_MSG{1}=Auto-save %s.\^Specify in seconds.\^Leave blank to disable.
|
||||
64882_main_MSG_MIN=We don't accept less than %d
|
||||
64883_main_MSG_BAN=Your ban configuration may have been screwed up.\^Please verify it.
|
||||
64820_main_MSG{1}=Can't save options there.\^Should I try to save to user registry?
|
||||
64885_main_MSG_SAVE_ERROR=Cannot save the update
|
||||
64886_main_MSG_LIMITED=The auto-update feature cannot work because it requires the "Only 1 instance" option enabled.\^\^Your browser will now be pointed to the update, so you can install it manually.
|
||||
64887_main_MSG_UPDATE=You are invited to use the new version.\^\^Update now?
|
||||
64888_main_MSG_FROMDISK=Update info has been read from local file.\^To resume normal operation of the updater, delete the file hfs.updateinfo.txt from the HFS program folder.
|
||||
64889_main_COPY=Copy to clipboard
|
||||
64890_main_ALREADY=Already in clipboard
|
||||
64891_main_NOSPACE=Out of space
|
||||
64892_main_CONN=Connections: %d
|
||||
64893_main_TOT_IN=Total In: %s
|
||||
64894_main_TOT_OUT{1}=Total Out: %s
|
||||
64895_main_OUT_SPEED=Out: %.1f KB/s
|
||||
64896_main_MSG_DDNS_notdonator=an option specified requires payment
|
||||
64897_main_MSG_DDNS_badagent=banned client
|
||||
64820_main_MSG{1}=There are %d open connections from this address.\^Do you want to kick them all now?
|
||||
64809_main_MSG2{1}=You can edit the address.\^Masks and ranges are allowed.
|
||||
64820_main_MSG{1}=This option is NOT compatible with "dynamic dns updater".\^Continue?
|
||||
64809_main_MSG2{1}=There are %d connections open.\^Do you want to close them now?
|
||||
64902_main_FAILED=Login failed
|
||||
64876_main_LIMIT{1}=Max simultaneous addresses: %s ...
|
||||
64876_main_LIMIT{1}=Max simultaneous addresses downloading: %s ...
|
||||
64876_main_LIMIT{1}=Max connections: %s ...
|
||||
64876_main_LIMIT{1}=Max connections from single address: %s ...
|
||||
64876_main_LIMIT{1}=Max simultaneous downloads: %s ...
|
||||
64876_main_LIMIT{1}=Max simultaneous downloads from single address: %s ...
|
||||
64909_main_FINGERPRINT=Create fingerprint on addition under %d KB
|
||||
64910_main_NO_FINGERPRINT=Create fingerprint on addition: disabled
|
||||
64820_main_MSG{1}=Please insert a comment for "%s".\^You should use HTML: <br> for break line.
|
||||
64912_main_MSG_EMPTY_NO_LIMIT=Leave blank to get no limits.
|
||||
64913_main_MSG_ADDRESSES_EXCEED=The following addresses exceed the limit:\^%s
|
||||
64914_main_MSG_NO_TEMP=Cannot save temporary file
|
||||
64915_main_MSG_ERROR_REGISTRY=Can't write to registry.\^You may lack necessary rights.
|
||||
64916_main_MSG_MANY_ITEMS=You are putting many files.\^Try using real folders instead of virtual folders.\^Read documentation or ask on the forum for help.
|
||||
64917_main_MSG_ADD_TO_HFS="Add to HFS" has been added to your Window's Explorer right-click menu.
|
||||
64918_main_MSG_SINGLE_INSTANCE=Sorry, this feature only works with the "Only 1 instance" option enabled.\^\^You can find this option under Menu -> Start/Exit\^(only in expert mode)
|
||||
64919_main_MSG_COMM_ERROR=Network error. Request failed.
|
||||
64920_main_MSG_DDNS_badauth=invalid user/password
|
||||
64921_main_MSG_DDNS_notfqdn=incomplete hostname, required form aaa.bbb.com
|
||||
64922_main_MSG_DDNS_nohost=specified hostname does not exist
|
||||
64923_main_MSG_DDNS_notyours=specified hostname belongs to another username
|
||||
64924_main_MSG_DDNS_numhost=too many or too few hosts found
|
||||
64925_main_MSG_DDNS_abuse=specified hostname is blocked for update abuse
|
||||
64926_main_MSG_DDNS_dnserr=server error
|
||||
64927_main_MSG_DDNS_911=server error
|
||||
64935_main_S_PORT_LABEL=Port: %s
|
||||
64936_main_S_PORT_ANY=any
|
||||
64937_main_DISABLED=disabled
|
||||
64938_main_MSG_UNPROTECTED_LINKS=Links are NOT actually protected.\^The feature is there to be used with the "list protected items only..." option.\^Continue?
|
||||
64939_main_MSG_SAME_NAME=An item with the same name is already present in this folder.\^Continue?
|
||||
64940_main_MSG_OPTIONS_SAVED=Options saved
|
||||
64941_main_MSG_SOME_LOCKED=Some items were not affected because locked
|
||||
64942_main_MSG_ITEM_LOCKED=The item is locked
|
||||
64943_main_MSG_INVALID_VALUE=Invalid value
|
||||
64656_main_MSG_NUM_ADDR=In this moment there are %d different addresses
|
||||
64657_main_MSG_NUM_ADDR_DL=In this moment there are %d different addresses downloading
|
||||
64658_main_MSG_MAX_LINES=Max lines on screen.
|
||||
64659_main_MSG_APACHE_LOG_FMT=Apache log file format
|
||||
64660_main_MSG_APACHE_LOG_FMT_LONG=Here you can specify how to format the log file complying Apache standard.\^Leave blank to get bare copy of screen on file.\^\^Example:\^ %h %l %u %t "%r" %>s %b
|
||||
64661_main_MSG_ICONS_ADDED=%d new icons added
|
||||
64662_main_MSG_DDNS_DISABLED=Dynamic DNS updater disabled
|
||||
64663_main_MSG_MD5_WARN=This option creates an .md5 file for every new calculated fingerprint.\^Use with care to get not your disk invaded by these files.
|
||||
64664_main_MSG_AUTO_MD5=Auto fingerprint
|
||||
64665_main_MSG_AUTO_MD5_LONG=When you add files and no fingerprint is found, it is calculated.\^To avoid long waitings, set a limit to file size (in KiloBytes).\^Leave empty to disable, and have no fingerprint created.
|
||||
64666_main_MSG_UPL_HOWTO=1. Add a folder (choose "real folder")\^\^You should now see a RED folder in your virtual file sytem, inside HFS\^\^2. Right click on this folder\^3. Properties -> Permissions -> Upload\^4. Check on "Anyone"\^5. Ok\^\^Now anyone who has access to your HFS server can upload files to you.
|
||||
64672_main_MSG_EVENTS_HLP=For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts
|
||||
64673_main_MSG_EDIT_RES=Edit resource
|
||||
64674_main_MSG_TPL_USE_MACROS=The current template is using macros.\^Do you want to cancel this action?
|
||||
64675_main_REMOVE_SHELL=Remove from shell context menu
|
||||
64676_main_S_OFF=Switch OFF
|
||||
64677_main_S_ON{1}=Switch ON
|
||||
64678_main_LOG=Log
|
||||
64679_main_MSG_RE_NOIP=You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected.
|
||||
64680_main_MSG_TRAY_DEF=%ip%\^Uptime: %uptime%\^Downloads: %downloads%
|
||||
64681_main_MSG_CLEAN_START=Clean start
|
||||
64682_main_MSG_RESTORE_BAK=A file system backup has been created for a system shutdown.\^Do you want to restore this backup?
|
||||
64683_main_MSG_EXT_ADDR_FAIL=Search for external address failed
|
||||
64684_main_MSG_TO_EXPERT=Switch to expert mode.
|
||||
64685_main_MSG_DONT_LOG_HINT=Select the files/folder you don't want to be logged,\^then right click and select "Don't log".
|
||||
64686_main_MSG_DL_PERC=Downloading %d%%
|
||||
64687_main_MSG_UNINSTALL_WARN=Delete HFS and all settings?
|
||||
64688_main_MSG_SELF_3=You may be behind a router or firewall.
|
||||
64689_main_MSG_SELF_6=You are behind a router.\^Ensure it is configured to forward port %s to your computer.
|
||||
64690_main_MSG_SELF_7=You may be behind a firewall.\^Ensure nothing is blocking HFS.
|
||||
64691_main_MSG_RET_EXT=Retrieving external address...
|
||||
64692_main_MSG_SELF_CANT_ON=Unable to switch the server on
|
||||
64693_main_MSG_SELF_CANT_LIST=Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1
|
||||
64694_main_MSG_SELF_CANT_S=Self test doesn't support HTTPS.\^It's likely it won't work.
|
||||
64695_main_MSG_SELF_ING=Self testing...
|
||||
64696_main_MSG_TEST_CANC=Test cancelled
|
||||
64697_main_MSG_TEST_INET=Testing internet connection...
|
||||
64698_main_MSG_SELF_UNAV=Sorry, the test is unavailable at the moment
|
||||
64699_main_MSG_SELF_NO_INET=Your internet connection does not work
|
||||
64700_main_MSG_SELF_NO_ANSWER=The test failed: server does not answer.
|
||||
64701_main_MSG_OPEN_BROW=Open directly in browser
|
||||
64702_main_MSG_OPEN_BROW_LONG="Suggest" the browser to open directly the specified files.\^Other files should pop up a save dialog.
|
||||
64703_main_MSG_HIDE_PORT=You should not use this option unless you really know its meaning.\^Continue?
|
||||
64704_main_MSG_RESET_TOT=Do you want to reset total in/out?
|
||||
64705_main_MSG_DISAB_FIND_EXT=This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience.
|
||||
64706_main_MSG_ENT_URL=Enter URL
|
||||
64707_main_MSG_ENT_URL_LONG=Enter URL for updating.\^%ip% will be translated to your external IP.
|
||||
64708_main_MSG_ENT_USR=Enter user
|
||||
64709_main_MSG_ENT_PWD=Enter password
|
||||
64710_main_MSG_ENT_HOST=Enter host
|
||||
64711_main_MSG_ENT_HOST_LONG=Enter domain (full form!)
|
||||
64712_main_MSG_HOST_FORM=Please, enter it in the FULL form, with dots
|
||||
64713_main_MSG_MIN_SPACE=Min disk space
|
||||
64714_main_MSG_MIN_SPACE_LONG=The upload will fail if your disk has less than the specified amount of free MegaBytes.
|
||||
64715_main_MSG_REN_PART=Rename partial uploads
|
||||
64716_main_MSG_REN_PART_LONG=This string will be appended to the filename.\^\^If you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename.
|
||||
64717_main_MSG_SELF_BEFORE=Here you can test if your server does work on the Internet.\^If you are not interested in serving files over the Internet, this is NOT for you.\^\^We'll now perform a test involving network activity.\^In order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\^\^WARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply.
|
||||
64718_main_MSG_SELF_OK=The test is successful. The server should be working fine.
|
||||
64719_main_MSG_SELF_OK_PORT=Port %s is not working, but another working port has been found and set: %s.
|
||||
64720_main_MSG_LOG_FILE=Log file
|
||||
64721_main_MSG_LOG_FILE_LONG=This function does not save any previous information to the log file.\^Instead, it saves all information that appears in the log box in real-time (from when you click "OK", below).\^Specify a filename for the log.\^If you leave the filename blank, no log file is saved.\^\^Here are some symbols you can use in the filename to split the log:\^ %d% -- day of the month (1..31)\^ %m% -- month (1..12)\^ %y% -- year (2000..)\^ %dow% -- day of the week (0..6)\^ %w% -- week of the year (1..53)\^ %user% -- username surrounded by parenthesis
|
||||
64722_main_MSG_SET_URL=Set URL
|
||||
64723_main_MSG_SET_URL_LONG=Please insert an URL for the link\^\^Do not forget to specify http:// or whatever.\^%%ip%% will be translated to your address
|
||||
64724_main_MSG_REALM=Login realm
|
||||
64725_main_MSG_REALM_LONG=The realm string is shown on the user/pass dialog of the browser.\^Here you can customize the realm for the login button
|
||||
64726_main_MSG_INACT_TIMEOUT=Connection inactivity timeout
|
||||
64727_main_MSG_INACT_TIMEOUT_LONG=The connection is kicked after a timeout.\^Specify in seconds.\^Leave blank to get no timeout.
|
||||
64728_main_MSG_CHANGES_LOST=All changes will be lost\^Continue?
|
||||
64729_main_MSG_FLAG_NEW=Flag new files
|
||||
64730_main_MSG_FLAG_NEW_LONG=Enter the number of MINUTES files stay flagged from their addition.\^Leave blank to disable.
|
||||
64731_main_MSG_DONT_LOG_MASK=Do not log address
|
||||
64732_main_MSG_DONT_LOG_MASK_LONG=Any event from the following IP address mask will be not logged.
|
||||
64733_main_MSG_CUST_IP=Custom IP addresses
|
||||
64734_main_MSG_CUST_IP_LONG=Specify your addresses, each per line
|
||||
64735_main_MSG_NO_EXT_IP=Can't find external address\^( %s )
|
||||
64736_main_MSG_TENTH_SEC=Tenths of second
|
||||
64737_main_MSG_LOADING_VFS=Loading VFS
|
||||
64738_main_MSG_VFS_OLD=This file is old and uses different settings.\^The "let browse" folder option will be reset.\^Re-saving the file will update its format.
|
||||
64739_main_MSG_UNK_FK=This file has been created with a newer version.\^Some data was discarded because unknown.\^If you save the file now, the discarded data will NOT be saved.
|
||||
64740_main_MSG_VIS_ONLY_ANON=This VFS file uses the "Visible only to anonymous users" feature.\^This feature is not available anymore.\^You can achieve similar results by restricting access to @anonymous,\^then enabling "List protected items only for allowed users".
|
||||
64741_main_MSG_AUTO_DISABLED=Because of the problems encountered in loading,\^automatic saving has been disabled\^until you save manually or load another one.
|
||||
64742_main_MSG_CORRUPTED=This file does not contain valid data.
|
||||
64743_main_MSG_MACROS_FOUND=!!!!!!!!! DANGER !!!!!!!!!\^This file contains macros.\^Don't accept macros from people you don't trust.\^\^Trust this file?
|
||||
64744_main_MSG_UPD_INFO=Last stable version: %s\^\^Last untested version: %s\^
|
||||
64745_main_MSG_NEWER=There's a new version available online: %s
|
||||
64746_main_MSG_SRC_UPD=Searching for updates...
|
||||
64747_main_ARE_EXPERT{1}=You are in Expert mode
|
||||
64748_main_ARE_EASY=You are in Easy mode
|
||||
64749_main_SW2EXPERT=Switch to Expert mode
|
||||
64750_main_SW2EASY=Switch to Easy mode
|
||||
64751_main_MSG_DL_TIMEOUT_LONG=Enter the number of MINUTES with no download after which the program automatically shuts down.\^Leave blank to get no timeout.
|
||||
64752_main_MSG_NEWER_INCOMP=This file has been created with a newer and incompatible version.
|
||||
64753_main_MSG_ZLIB=This file is corrupted (ZLIB).
|
||||
64754_main_MSG_BAKAVAILABLE=This file is corrupted but a backup is available.\^Continue with backup?
|
||||
64755_main_MSG_CANT_LOAD_SAVE=Cannot load or save while adding files
|
||||
64756_main_MSG_OPEN_VFS=Open VFS file
|
||||
64757_main_LIMIT{2}=Limit
|
||||
64758_main_TOP_SPEED=Top speed
|
||||
64759_main_MSG_MAX_BW=Max bandwidth (KB/s).
|
||||
64760_main_MSG_LIM0=Zero is an effective limit.\^To disable instead, leave empty.
|
||||
64761_main_MSG_MAX_BW_1=Max bandwidth for single address (KB/s).
|
||||
64762_main_MSG_GRAPH_RATE_MENU=Graph refresh rate: %d (tenths of second)
|
||||
64763_main_MSG_MAX_CON_LONG=Max simultaneous connections to serve.\^Most people don't know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads".
|
||||
64764_main_MSG_WARN_CONN=In this moment there are %d active connections
|
||||
64765_main_MSG_WARN_ACT_DL=In this moment there are %d active downloads
|
||||
64766_main_MSG_MAX_CON_SING_LONG=Max simultaneous connections to accept from a single IP address.\^Most people don't know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads from a single IP address".
|
||||
64767_main_MSG_GRAPH_RATE{1}=Graph refresh rate
|
||||
64768_main_MSG_VFS_DONT_CONS_DL_MASK=Don't consider as download (mask): %s
|
||||
64769_main_MSG_VFS_INHERITED= [inherited]
|
||||
64770_main_MSG_VFS_EXTERNAL= [external]
|
||||
64771_main_MSG_CON_HINT=Connection time: %s\^Last request time: %s\^Agent: %s
|
||||
64772_main_MSG_CON_STATE_IDLE=idle
|
||||
64773_main_MSG_CON_STATE_REQ=requesting
|
||||
64774_main_MSG_CON_STATE_RCV=receiving
|
||||
64775_main_MSG_CON_STATE_THINK=thinking
|
||||
64776_main_MSG_CON_STATE_REP=replying
|
||||
64777_main_MSG_CON_STATE_SEND=sending
|
||||
64778_main_MSG_CON_STATE_DISC=disconnected
|
||||
64779_main_MSG_TPL_RESET=The template has been reset
|
||||
64780_main_MSG_ALLO_REF=Allowed referer
|
||||
64781_main_MSG_ALLO_REF_LONG=Leave empty to disable this feature.\^Here you can specify a mask.\^When a file is requested, if the mask doesn't match the "Referer" HTTP field, the request is rejected.
|
||||
64782_main_MSG_BETTERSTOP=\^Going on may lead to problems.\^It is adviced to stop loading.\^Stop?
|
||||
64783_main_MSG_BADCRC=This file is corrupted (CRC).
|
||||
64784_main_MSG_VFS_HIDE_EMPTY=Hidden if empty
|
||||
64785_main_MSG_VFS_NOT_BROW=Not browsable
|
||||
64786_main_MSG_VFS_HIDE_EMPTY_FLD=Hide empty folders
|
||||
64787_main_MSG_VFS_HIDE_EXT=Hide extention
|
||||
64788_main_MSG_VFS_ARCABLE=Archivable
|
||||
64789_main_MSG_VFS_DEF_MASK=Default file mask: %s
|
||||
64790_main_MSG_VFS_ACCESS=Access for
|
||||
64791_main_MSG_VFS_UPLOAD=Upload allowed for
|
||||
64792_main_MSG_VFS_DELETE=Delete allowed for
|
||||
64793_main_MSG_VFS_COMMENT=Comment: %s
|
||||
64794_main_MSG_VFS_REALM=Realm: %s
|
||||
64795_main_MSG_VFS_DIFF_TPL=Diff template: %s
|
||||
64796_main_MSG_VFS_FILES_FLT=Files filter: %s
|
||||
64797_main_MSG_VFS_FLD_FLT=Folders filter: %s
|
||||
64798_main_MSG_VFS_UPL_FLT=Upload filter: %s
|
||||
64799_main_MSG_VFS_DONT_CONS_DL=Don't consider as download
|
||||
64800_main_IN_SPEED=In: %.1f KB/s
|
||||
64801_main_BANS=Ban rules: %d
|
||||
64802_main_MEMORY=Mem
|
||||
64803_main_CUST_TPL=Customized template
|
||||
64804_main_VFS_ITEMS=VFS: %d items
|
||||
64805_main_MSG_ITEM_EXISTS=%s item(s) already exists:\^%s\^\^Continue?
|
||||
64806_main_MSG_INSTALL_TPL=Install this template?
|
||||
64807_main_MSG_FOLDER_UPLOAD=Do you want ANYONE to be able to upload to this folder?
|
||||
64808_main_MSG_VFS_DRAG_INVIT=Drag your files here
|
||||
64809_main_MSG_VFS_URL=URL: %s
|
||||
64810_main_MSG_VFS_PATH=Path: %s
|
||||
64811_main_MSG_VFS_SIZE=Size: %s
|
||||
64812_main_MSG_VFS_DLS=Downloads: %s
|
||||
64813_main_MSG_VFS_INVISIBLE=Invisible
|
||||
64814_main_MSG_VFS_DL_FORB=Download forbidden
|
||||
64815_main_MSG_VFS_DONT_LOG=Don't log
|
||||
64816_main_MSG_UPD_DL=Downloading new version...
|
||||
64817_main_MSG_UPDATE=You are invited to use the new version.\^\^Update now?
|
||||
64818_main_MSG_REQUESTING=Requesting...
|
||||
64819_main_MSG_CHK_UPD=Checking for updates
|
||||
64820_main_MSG_CHK_UPD_FAIL=Check update: failed
|
||||
64821_main_MSG_CHK_UPD_HEAD=Check update:
|
||||
64822_main_MSG_CHK_UPD_VER=new version found: %s
|
||||
64823_main_MSG_CHK_UPD_VER_EXT=Build #%s (current is #%s)
|
||||
64824_main_MSG_CHK_UPD_NONE=no new version
|
||||
64825_main_TO_CLIP=Copy to clipboard
|
||||
64826_main_ALREADY_CLIP=Already in clipboard
|
||||
64827_main_MSG_NO_SPACE=Out of space
|
||||
64828_main_CONN=Connections: %d
|
||||
64829_main_TOT_IN=Total In: %s
|
||||
64830_main_TOT_OUT{1}=Total Out: %s
|
||||
64831_main_OUT_SPEED=Out: %.1f KB/s
|
||||
64832_main_MSG_FILE_ADD_ABORT=File addition was aborted.\^The list of files is incomplete.
|
||||
64833_main_MSG_ADDING=Adding item #%d
|
||||
64834_main_MSG_INV_FILENAME=Invalid filename
|
||||
64835_main_MSG_DELETE=Delete?
|
||||
64836_main_AUTOSAVE=Auto save every:
|
||||
64837_main_SECONDS=%d seconds
|
||||
64838_main_MSG_SPD_LIMIT_SING=Speed limit for single address
|
||||
64839_main_MSG_SPD_LIMIT=Speed limit
|
||||
64840_main_MSG_AUTO_SAVE=Auto-save %s
|
||||
64841_main_MSG_AUTO_SAVE_LONG=Auto-save %s.\^Specify in seconds.\^Leave blank to disable.
|
||||
64842_main_MSG_MIN=We don't accept less than %d
|
||||
64843_main_MSG_BAN=Your ban configuration may have been screwed up.\^Please verify it.
|
||||
64844_main_MSG_CANT_SAVE_OPT=Can't save options there.\^Should I try to save to user registry?
|
||||
64845_main_MSG_UPD_SAVE_ERROR=Cannot save the update
|
||||
64846_main_MSG_UPD_REQ_ONLY1=The auto-update feature cannot work because it requires the "Only 1 instance" option enabled.\^\^Your browser will now be pointed to the update, so you can install it manually.
|
||||
64847_main_MSG_UPD_WAIT=Waiting for last requests to be served, then we'll update
|
||||
64848_main_MSG_LOG_HEAD=Served head
|
||||
64849_main_MSG_LOG_NOT_MOD=Not modified, use cache
|
||||
64850_main_MSG_LOG_REDIR=Redirected to %s
|
||||
64851_main_MSG_LOG_NOT_SERVED=Not served: %d - %s
|
||||
64852_main_MSG_LOG_UPL=Uploading %s
|
||||
64853_main_MSG_LOG_UPLOADED=Fully uploaded %s - %s @ %sB/s
|
||||
64854_main_MSG_LOG_UPL_FAIL=Upload failed %s
|
||||
64855_main_MSG_LOG_DL=Fully downloaded - %s @ %sB/s - %s
|
||||
64856_main_MSG_LOGIN_FAILED=Login failed
|
||||
64857_main_MSG_MIN_DISK_REACHED=Minimum disk space reached.
|
||||
64858_main_MSG_UPL_NAME_FORB=File name or extension forbidden.
|
||||
64859_main_MSG_UPL_CANT_CREATE=Error creating file.
|
||||
64860_main_FINGERPRINT=Create fingerprint on addition under %d KB
|
||||
64861_main_NO_FINGERPRINT=Create fingerprint on addition: disabled
|
||||
64862_main_MSG_SAVE_VFS=Your current file system is not saved.\^Save it?
|
||||
64863_main_MSG_INP_COMMENT=Please insert a comment for "%s".\^You should use HTML: <br> for break line.
|
||||
64864_main_MSG_BAN_CMT=Ban comment
|
||||
64865_main_MSG_BAN_CMT_LONG=A comment for this ban...
|
||||
64866_main_MSG_BREAK_DYN_DNS=This option is NOT compatible with "dynamic dns updater".\^Continue?
|
||||
64867_main_MSG_CANT_OPEN_PORT=Cannot open port.
|
||||
64868_main_MSG_PORT_USED_BY=It is already used by %s
|
||||
64869_main_MSG_PORT_BLOCKED=Something is blocking, maybe your system firewall.
|
||||
64870_main_MSG_KICK_ALL=There are %d connections open.\^Do you want to close them now?
|
||||
64871_main_MSG_TPL_INCOMPATIBLE=The template you are trying to load is not compatible with current HFS version.\^HFS will now use default template.\^Ask on the forum if you need further help.
|
||||
64872_main_MSG_LOG_SERVER_START=Server start
|
||||
64873_main_MSG_LOG_SERVER_STOP=Server stop
|
||||
64874_main_MSG_LOG_CONNECTED=Connected
|
||||
64875_main_MSG_LOG_DISC_SRV=Disconnected by server
|
||||
64876_main_MSG_LOG_DISC=Disconnected
|
||||
64877_main_MSG_LOG_GOT=Got %d bytes
|
||||
64878_main_MSG_LOG_BYTES_SENT=%s bytes sent
|
||||
64879_main_MSG_LOG_SERVED=Served %s
|
||||
64880_main_MSG_DDNS_FAIL=DNS update failed: %s\^User intervention is required.
|
||||
64881_main_MSG_DDNS_REPLY_SIZE=%d bytes reply
|
||||
64882_main_MSG_DDNS_badauth=invalid user/password
|
||||
64883_main_MSG_DDNS_notfqdn=incomplete hostname, required form aaa.bbb.com
|
||||
64884_main_MSG_DDNS_nohost=specified hostname does not exist
|
||||
64885_main_MSG_DDNS_notyours=specified hostname belongs to another username
|
||||
64886_main_MSG_DDNS_numhost=too many or too few hosts found
|
||||
64887_main_MSG_DDNS_abuse=specified hostname is blocked for update abuse
|
||||
64888_main_MSG_DDNS_dnserr=server error
|
||||
64889_main_MSG_DDNS_911=server error
|
||||
64890_main_MSG_DDNS_notdonator=an option specified requires payment
|
||||
64891_main_MSG_DDNS_badagent=banned client
|
||||
64892_main_MSG_BAN_MASK=Ban IP mask
|
||||
64893_main_MSG_IP_MASK_LONG=You can edit the address.\^Masks and ranges are allowed.
|
||||
64894_main_MSG_KICK_ADDR=There are %d open connections from this address.\^Do you want to kick them all now?
|
||||
64895_main_MSG_BAN_ALREADY=This IP address is already banned
|
||||
64896_main_MSG_ADDRESSES_EXCEED=The following addresses exceed the limit:\^%s
|
||||
64897_main_MSG_NO_TEMP=Cannot save temporary file
|
||||
64898_main_MSG_ERROR_REGISTRY=Can't write to registry.\^You may lack necessary rights.
|
||||
64899_main_MSG_MANY_ITEMS=You are putting many files.\^Try using real folders instead of virtual folders.\^Read documentation or ask on the forum for help.
|
||||
64900_main_MSG_ADD_TO_HFS="Add to HFS" has been added to your Window's Explorer right-click menu.
|
||||
64901_main_MSG_SINGLE_INSTANCE=Sorry, this feature only works with the "Only 1 instance" option enabled.\^\^You can find this option under Menu -> Start/Exit\^(only in expert mode)
|
||||
64902_main_MSG_COMM_ERROR=Network error. Request failed.
|
||||
64903_main_MSG_CON_PAUSED=paused
|
||||
64904_main_MSG_CON_SENT=%s / %s sent
|
||||
64905_main_MSG_CON_RECEIVED=%s / %s received
|
||||
64906_main_MSG_DDNS_NO_REPLY=no reply
|
||||
64907_main_MSG_DDNS_OK=successful
|
||||
64908_main_MSG_DDNS_UNK=unknown reply: %s
|
||||
64909_main_MSG_DDNS_ERR=error: %s
|
||||
64910_main_MSG_DDNS_REQ=DNS update requested for %s: %s
|
||||
64911_main_MSG_DDNS_DOING=Updating dynamic DNS...
|
||||
64912_main_MSG_MAX_CON_SING=Max connections from single address
|
||||
64913_main_MSG_MAX_SIM_ADDR{1}=Max simultaneous addresses
|
||||
64914_main_MSG_MAX_SIM_ADDR_DL=Max simultaneous addresses downloading
|
||||
64915_main_MSG_MAX_SIM_DL_SING{2}=Max simultaneous downloads from single address
|
||||
64916_main_MSG_MAX_SIM_DL=Max simultaneous downloads
|
||||
64917_main_MSG_SET_LIMIT=Set limit
|
||||
64918_main_MSG_UNPROTECTED_LINKS=Links are NOT actually protected.\^The feature is there to be used with the "list protected items only..." option.\^Continue?
|
||||
64919_main_MSG_SAME_NAME=An item with the same name is already present in this folder.\^Continue?
|
||||
64920_main_MSG_CONTINUE=Continue?
|
||||
64921_main_MSG_PROCESSING=Processing...
|
||||
64922_main_MSG_SPEED_KBS=%.1f kB/s
|
||||
64923_main_MSG_OPTIONS_SAVED=Options saved
|
||||
64924_main_MSG_SOME_LOCKED=Some items were not affected because locked
|
||||
64925_main_MSG_ITEM_LOCKED=The item is locked
|
||||
64926_main_MSG_INVALID_VALUE=Invalid value
|
||||
64927_main_MSG_EMPTY_NO_LIMIT=Leave blank to get no limits.
|
||||
64935_classesLib_MSG_ANTIDOS_REPLY=Please wait, server busy
|
||||
64936_optionsDlg_MSG_INVERT_BAN=Normal behavior of the Ban is to prevent access to the addresses you specify (also called black-list).\^If you want the opposite, to allow the addresses that you specify (white-list), enter all addresses in a single row preceded by a \ character.\^\^Let say you want to allow all your 192.168 local network plus your office at 1.1.1.1.\^Just put this IP address mask: \192.168.*;1.1.1.1\^The opening \ character inverts the logic, so everything else is banned.\^\^If you want to know more about address masks, check the guide.
|
||||
64937_main_S_PORT_LABEL=Port: %s
|
||||
64938_main_S_PORT_ANY=any
|
||||
64939_main_DISABLED=disabled
|
||||
64940_main_S_OK=Ok
|
||||
64941_main_MSG_MENU_VAL= (%s)
|
||||
64942_main_MSG_DL_TIMEOUT{1}=No downloads timeout
|
||||
64943_main_MSG_MAX_CON=Max connections
|
||||
65046_OverbyteIcsHttpContCod_ERR_GETCODING_OVERRIDE=GetCoding must be overridden in %s
|
||||
65088_OverbyteIcsCharsetUtils_sHebrewISOVisual=Hebrew (ISO-Visual)
|
||||
65089_OverbyteIcsCharsetUtils_sHebrewWindows=Hebrew (Windows)
|
||||
65090_OverbyteIcsCharsetUtils_sJapaneseJIS=Japanese (JIS)
|
||||
@ -601,7 +742,6 @@ Panel1.Button2.Caption=&No
|
||||
65099_OverbyteIcsCharsetUtils_sVietnameseWindows=Vietnamese (Windows)
|
||||
65100_OverbyteIcsCharsetUtils_sWesternEuropeanISO=Western European (ISO)
|
||||
65101_OverbyteIcsCharsetUtils_sWesternEuropeanWindows=Western European (Windows)
|
||||
65102_OverbyteIcsHttpContCod_ERR_GETCODING_OVERRIDE=GetCoding must be overridden in %s
|
||||
65104_OverbyteIcsCharsetUtils_sBalticISO=Baltic (ISO)
|
||||
65105_OverbyteIcsCharsetUtils_sBalticWindows=Baltic (Windows)
|
||||
65106_OverbyteIcsCharsetUtils_sCentralEuropeanISO=Central European (ISO)
|
||||
|
||||
79
hslib.pas
79
hslib.pas
@ -1,5 +1,5 @@
|
||||
{
|
||||
Copyright (C) 2002-2014 Massimo Melina (www.rejetto.com)
|
||||
Copyright (C) 2002-2020 Massimo Melina (www.rejetto.com)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -19,6 +19,7 @@ Copyright (C) 2002-2014 Massimo Melina (www.rejetto.com)
|
||||
HTTP Server Lib
|
||||
|
||||
==== TO DO
|
||||
* https
|
||||
* upload bandwidth control (can it be done without multi-threading?)
|
||||
|
||||
}
|
||||
@ -156,6 +157,7 @@ type
|
||||
P_requestCount: integer;
|
||||
P_destroying: boolean; // destroying is in progress
|
||||
P_sndBuf: integer;
|
||||
P_v6: boolean;
|
||||
persistent: boolean;
|
||||
disconnecting: boolean; // disconnected() has been called
|
||||
lockCount: integer; // prevent freeing of the object
|
||||
@ -219,6 +221,7 @@ type
|
||||
function initInputStream():boolean;
|
||||
property address:string read P_address; // other peer ip address
|
||||
property port:string read P_port; // other peer port
|
||||
property v6:boolean read P_v6;
|
||||
property requestCount:integer read P_requestCount;
|
||||
property bytesToSend:int64 read getBytesToSend;
|
||||
property bytesToPost:int64 read getBytesToPost;
|
||||
@ -290,7 +293,7 @@ const
|
||||
MINIMUM_CHUNK_SIZE = 2*1024;
|
||||
MAXIMUM_CHUNK_SIZE = 1024*1024;
|
||||
HRM2CODE: array [ThttpReplyMode] of integer = (200, 200, 403, 401, 404, 400,
|
||||
500, 0, 0, 405, 302, 503, 413, 301, 304 );
|
||||
500, 0, 0, 405, 302, 429, 413, 301, 304 );
|
||||
METHOD2STR: array [ThttpMethod] of ansistring = ('UNK','GET','POST','HEAD');
|
||||
HRM2STR: array [ThttpReplyMode] of ansistring = ('Head+Body', 'Head only', 'Deny',
|
||||
'Unauthorized', 'Not found', 'Bad request', 'Internal error', 'Close',
|
||||
@ -334,6 +337,7 @@ uses
|
||||
Windows, ansistrings;
|
||||
const
|
||||
CRLF = #13#10;
|
||||
HEADER_LIMITER: ansistring = CRLF+CRLF;
|
||||
MAX_REQUEST_LENGTH = 64*1024;
|
||||
MAX_INPUT_BUFFER_LENGTH = 256*1024;
|
||||
// used as body content when the user did not specify any
|
||||
@ -349,7 +353,7 @@ const
|
||||
'',
|
||||
'405 - Method not allowed',
|
||||
'<html><head><meta http-equiv="refresh" content="url=%url%" /></head><body onload=''window.location="%url%"''>302 - <a href="%url%">Redirection to %url%</a></body></html>',
|
||||
'503 - Server is overloaded, retry later',
|
||||
'429 - Server is overloaded, retry later',
|
||||
'413 - The request has exceeded the max length allowed',
|
||||
'301 - Moved permanently to <a href="%url%">%url%</a>',
|
||||
'' // RFC2616: The 304 response MUST NOT contain a message-body
|
||||
@ -385,28 +389,11 @@ begin if c then result:=a else result:=b end;
|
||||
function min(a,b:integer):integer;
|
||||
begin if a < b then result:=a else result:=b end;
|
||||
|
||||
// this table is to be used by ipos(), to be calculated once
|
||||
var
|
||||
upcaseTab: array [char] of char;
|
||||
function ipos(ss, s: string; ofs:integer=1):integer; overload;
|
||||
|
||||
procedure initTab();
|
||||
var
|
||||
i: char;
|
||||
tmp: string;
|
||||
begin
|
||||
for i:=#0 to #255 do
|
||||
begin
|
||||
tmp:=ansiUppercase(i);
|
||||
upcaseTab[i]:=tmp[1];
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
rss, rs, rss1, p: pchar;
|
||||
l: integer;
|
||||
begin
|
||||
if upcaseTab[#1] = #0 then initTab();
|
||||
result:=0;
|
||||
l:=length(s);
|
||||
if (l < ofs) or (l = 0) or (ss = '') then exit;
|
||||
@ -418,7 +405,7 @@ for result:=ofs to l do
|
||||
begin
|
||||
rss:=rss1;
|
||||
p:=rs;
|
||||
while (rss^ <> #0) and (rss^ = upcaseTab[p^]) do
|
||||
while (rss^ <> #0) and (rss^ = upcase(p^)) do
|
||||
begin
|
||||
inc(rss);
|
||||
inc(p);
|
||||
@ -592,7 +579,8 @@ if url = '' then
|
||||
encodeHTML:=[];
|
||||
if nonascii then
|
||||
encodeHTML:=[#128..#255];
|
||||
encodePerc:=[#0..#31,'#','%','?','"','''','&','<','>',':'];
|
||||
encodePerc:=[#0..#31,'#','%','?','"','''','&','<','>',':',
|
||||
',',';']; // these for content-disposition
|
||||
// actually ':' needs encoding only in relative url
|
||||
if spaces then include(encodePerc,' ');
|
||||
if not htmlEncoding then
|
||||
@ -689,7 +677,7 @@ end; // chopline
|
||||
|
||||
function chopLine(var s:ansistring):ansistring; overload;
|
||||
begin
|
||||
result:=chop(pos(#10,s),1,s);
|
||||
result:=chop(#10,s);
|
||||
if (result>'') and (result[length(result)]=#13) then
|
||||
setlength(result, length(result)-1);
|
||||
end; // chopline
|
||||
@ -889,7 +877,6 @@ end; // timerEvent
|
||||
procedure ThttpSrv.notify(ev:ThttpEvent; conn:ThttpConn);
|
||||
begin
|
||||
if not assigned(onEvent) then exit;
|
||||
//if assigned(sock) then sock.pause();
|
||||
if assigned(conn) then
|
||||
begin
|
||||
inc(conn.lockCount);
|
||||
@ -994,6 +981,7 @@ limiters:=TObjectList.create;
|
||||
limiters.ownsObjects:=FALSE;
|
||||
P_address:=sock.GetPeerAddr();
|
||||
P_port:=sock.GetPeerPort();
|
||||
P_v6:=pos(':', address) > 0;
|
||||
state:=HCS_IDLE;
|
||||
srv:=server;
|
||||
srv.conns.add(self);
|
||||
@ -1226,8 +1214,8 @@ procedure ThttpConn.processInputBuffer();
|
||||
|
||||
var
|
||||
i: integer;
|
||||
s, l, k, c: string;
|
||||
|
||||
s, l, k, v: ansistring;
|
||||
ws: widestring;
|
||||
begin
|
||||
repeat
|
||||
{ When the buffer is stuffed with file bytes only, we can avoid calling pos() and chop().
|
||||
@ -1268,11 +1256,12 @@ procedure ThttpConn.processInputBuffer();
|
||||
break;
|
||||
end;
|
||||
// we wait for the header to be complete
|
||||
if posEx(CRLF+CRLF, buffer, i+length(post.boundary)) = 0 then break;
|
||||
if posEx(HEADER_LIMITER, buffer, i+length(post.boundary)) = 0 then
|
||||
break;
|
||||
handleLeftData(i);
|
||||
post.filename:='';
|
||||
post.data:='';
|
||||
post.header:=chop(CRLF+CRLF, buffer);
|
||||
post.header:=chop(HEADER_LIMITER, buffer);
|
||||
chopLine(post.header);
|
||||
// parse the header part
|
||||
s:=post.header;
|
||||
@ -1281,25 +1270,28 @@ procedure ThttpConn.processInputBuffer();
|
||||
l:=chopLine(s);
|
||||
if l = '' then continue;
|
||||
k:=chop(':', l);
|
||||
if not sameText(k, 'Content-Disposition') then continue; // we are not interested in other fields
|
||||
if not sameText(k, 'Content-Disposition') then // we are only interested in content-disposition: form-data
|
||||
continue;
|
||||
k:=trim(chop(';', l));
|
||||
if not sameText(k, 'form-data') then continue;
|
||||
if not sameText(k, 'form-data') then
|
||||
continue;
|
||||
while l > '' do
|
||||
begin
|
||||
c:=chop(nonQuotedPos(';', l), l);
|
||||
k:=UTF8toString(rawByteString(trim(chop('=', c))));
|
||||
c:=UTF8toString(rawByteString(ansiDequotedStr(c,'"')));
|
||||
v:=chop(nonQuotedPos(';', l), 1, l);
|
||||
k:=trim(chop('=', v));
|
||||
ws:=UTF8toString(ansiDequotedStr(v,'"'));
|
||||
if sameText(k, 'filename') then
|
||||
begin
|
||||
delete(c, 1, lastDelimiter('/\',c));
|
||||
post.filename:=c;
|
||||
end;
|
||||
if sameText(k, 'name') then
|
||||
post.varname:=c;
|
||||
delete(ws, 1, lastDelimiter('/\',ws));
|
||||
post.filename:=ws;
|
||||
end
|
||||
else if sameText(k, 'name') then
|
||||
post.varname:=ws;
|
||||
end;
|
||||
end;
|
||||
lastPostItemPos:=bytesPosted-length(buffer);
|
||||
if post.filename = '' then continue;
|
||||
if post.filename = '' then
|
||||
continue;
|
||||
firstPostFile:=FALSE;
|
||||
tryNotify(HE_POST_FILE);
|
||||
until false;
|
||||
@ -1383,7 +1375,7 @@ if buffer = '' then exit;
|
||||
if state = HCS_IDLE then
|
||||
begin
|
||||
state:=HCS_REQUESTING;
|
||||
reply.contentType:='text/html';
|
||||
reply.contentType:='text/html; charset=utf-8';
|
||||
notify(HE_REQUESTING);
|
||||
end;
|
||||
case state of
|
||||
@ -1401,7 +1393,7 @@ notify(HE_REQUESTED);
|
||||
if not initInputStream() then
|
||||
begin
|
||||
reply.mode:=HRM_INTERNAL_ERROR;
|
||||
reply.contentType:='text/html';
|
||||
reply.contentType:='text/html; charset=utf-8';
|
||||
notify(HE_CANT_OPEN_FILE);
|
||||
end;
|
||||
notify(HE_STREAM_READY);
|
||||
@ -1607,7 +1599,7 @@ end; // initInputStream
|
||||
|
||||
function ThttpConn.sendNextChunk(max:integer=MAXINT):integer;
|
||||
var
|
||||
n: int64;
|
||||
n, toSend: int64;
|
||||
buf: ansistring;
|
||||
begin
|
||||
result:=0;
|
||||
@ -1619,7 +1611,8 @@ if (n = 0) or (bytesSentLastItem = 0) then n:=max;
|
||||
if n > MAXIMUM_CHUNK_SIZE then n:=MAXIMUM_CHUNK_SIZE;
|
||||
if n < MINIMUM_CHUNK_SIZE then n:=MINIMUM_CHUNK_SIZE;
|
||||
if n > max then n:=max;
|
||||
if n > bytesToSend then n:=bytesToSend;
|
||||
toSend:=bytesToSend;
|
||||
if n > toSend then n:=toSend;
|
||||
if n = 0 then exit;
|
||||
setLength(buf, n);
|
||||
n:=stream.read(buf[1], n);
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
Normal behavior of the Ban is to prevent access to the addresses you specify (also called black-list).
|
||||
If you want the opposite, to allow the addresses that you specify (white-list), enter all addresses in a single row preceded by a \ character.
|
||||
|
||||
Let say you want to allow all your 192.168 local network plus your office at 1.1.1.1.
|
||||
Just put this IP address mask: \192.168.*;1.1.1.1
|
||||
The opening \ character inverts the logic, so everything else is banned.
|
||||
|
||||
If you want to know more about address masks, check the guide.
|
||||
22
main.dfm
22
main.dfm
@ -2,7 +2,7 @@ object mainFrm: TmainFrm
|
||||
Left = 293
|
||||
Top = 219
|
||||
Caption = 'HFS ~ HTTP File Server'
|
||||
ClientHeight = 483
|
||||
ClientHeight = 436
|
||||
ClientWidth = 879
|
||||
Color = clBtnFace
|
||||
Constraints.MinHeight = 260
|
||||
@ -218,7 +218,7 @@ object mainFrm: TmainFrm
|
||||
Left = 0
|
||||
Top = 83
|
||||
Width = 879
|
||||
Height = 400
|
||||
Height = 353
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
@ -231,7 +231,7 @@ object mainFrm: TmainFrm
|
||||
object splitV: TSplitter
|
||||
Left = 313
|
||||
Top = 0
|
||||
Height = 289
|
||||
Height = 242
|
||||
Beveled = True
|
||||
Constraints.MaxWidth = 3
|
||||
Constraints.MinWidth = 3
|
||||
@ -241,7 +241,7 @@ object mainFrm: TmainFrm
|
||||
end
|
||||
object splitH: TSplitter
|
||||
Left = 0
|
||||
Top = 289
|
||||
Top = 242
|
||||
Width = 879
|
||||
Height = 5
|
||||
Cursor = crVSplit
|
||||
@ -257,7 +257,7 @@ object mainFrm: TmainFrm
|
||||
Left = 316
|
||||
Top = 0
|
||||
Width = 563
|
||||
Height = 289
|
||||
Height = 242
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 1
|
||||
@ -265,7 +265,7 @@ object mainFrm: TmainFrm
|
||||
Left = 0
|
||||
Top = 23
|
||||
Width = 563
|
||||
Height = 266
|
||||
Height = 219
|
||||
Align = alClient
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clWindowText
|
||||
@ -557,7 +557,7 @@ object mainFrm: TmainFrm
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 313
|
||||
Height = 289
|
||||
Height = 242
|
||||
Align = alLeft
|
||||
BevelOuter = bvNone
|
||||
Caption = 'filesPnl'
|
||||
@ -566,7 +566,7 @@ object mainFrm: TmainFrm
|
||||
Left = 0
|
||||
Top = 23
|
||||
Width = 313
|
||||
Height = 266
|
||||
Height = 219
|
||||
Align = alClient
|
||||
BevelInner = bvLowered
|
||||
BevelOuter = bvSpace
|
||||
@ -616,7 +616,7 @@ object mainFrm: TmainFrm
|
||||
end
|
||||
object connPnl: TPanel
|
||||
Left = 0
|
||||
Top = 294
|
||||
Top = 247
|
||||
Width = 879
|
||||
Height = 106
|
||||
Align = alBottom
|
||||
@ -2963,10 +2963,6 @@ object mainFrm: TmainFrm
|
||||
AutoCheck = True
|
||||
Caption = 'Enable macros.log'
|
||||
end
|
||||
object Appendmacroslog1: TMenuItem
|
||||
AutoCheck = True
|
||||
Caption = 'Append macros.log'
|
||||
end
|
||||
object Runscript1: TMenuItem
|
||||
Caption = 'Run script...'
|
||||
OnClick = Runscript1Click
|
||||
|
||||
62
notes.txt
62
notes.txt
@ -1,62 +0,0 @@
|
||||
=== 4GB+ FILES DOWNLOAD SUPPORT
|
||||
Reget Deluxe 4.1
|
||||
MetaProducts Download Express 1.7
|
||||
Getright
|
||||
Firefox 2.0
|
||||
|
||||
=== 2GB+ FILES UPLOAD SUPPORT
|
||||
firefox 3.0: no
|
||||
|
||||
=== HOW TO CREATE BIG FILES
|
||||
fsutil file createnew <filename> <filesize>
|
||||
|
||||
=== HOW TO DOWNLOAD WITH NO DISK ACTIVITY (SPEED TEST)
|
||||
create a big file as above
|
||||
then download this way: wget -q -O nul http://localhost/big
|
||||
|
||||
=== SUBMITTED TO
|
||||
www.nonags.com
|
||||
www.sharewareconnection.com
|
||||
|
||||
=== LISTED ON
|
||||
www.sofotex.com
|
||||
www.download3000.com
|
||||
www.onekit.com
|
||||
www.all4you.dk/FreewareWorld
|
||||
www.snapfiles.com
|
||||
sourceforge
|
||||
www.freedownloadscenter.com
|
||||
download.freenet.de
|
||||
www.softonic.com
|
||||
www.portablefreeware.com
|
||||
www.download.com
|
||||
www.freewarepub.org
|
||||
www.handyarchive.com
|
||||
www.softpedia.com
|
||||
www.acidfiles.com
|
||||
www.fileedge.com
|
||||
www.freewarepark.com
|
||||
|
||||
=== REVIEWS
|
||||
http://www.technospot.net/blogs/host-a-web-server-on-your-home-pc/
|
||||
http://www.snapfiles.com/get/hfs.html
|
||||
http://www.downloadsquad.com/2006/05/24/hft-quick-and-easy-http-file-server/
|
||||
http://www.caseytech.com/how-to-host-a-web-site-from-your-computer/
|
||||
http://www.chip.de/downloads/c1_downloads_29480524.html
|
||||
http://blog.pcserenity.com/2009/01/easy-conten-sharing-with-windows.html
|
||||
http://hfs.onehelp.ch
|
||||
http://www.lanacion.com.ar/nota.asp?nota_id=1148507
|
||||
http://blogmotion.fr/systeme/partage-windows-hfs-3947
|
||||
ita
|
||||
http://lafabbricadibyte.wordpress.com/2007/05/01/hfs-file-server-http-gratuito-per-windows/
|
||||
http://server.html.it/articoli/leggi/2335/hfs-file-sharing-via-http/
|
||||
|
||||
=== OTHER SOFTWARE BASED ON HFS
|
||||
http://www.wrinx.com/products/pfs/
|
||||
commercial, licensed
|
||||
http://www.powernetservers.com/pnwfs.php
|
||||
commercial, probably unlicensed
|
||||
|
||||
=== INSTALLABLE PLUGINS
|
||||
log links usage
|
||||
http://www.rejetto.com/forum/index.php/topic,7765.msg1047258.html#msg1047258
|
||||
@ -834,7 +834,16 @@ procedure ToptionsFrm.okBtnClick(Sender: TObject);
|
||||
begin if saveValues() then close() end;
|
||||
|
||||
procedure ToptionsFrm.Button1Click(Sender: TObject);
|
||||
begin msgDlg(getRes('invertBan')) end;
|
||||
resourcestring MSG_INVERT_BAN =
|
||||
'Normal behavior of the Ban is to prevent access to the addresses you specify (also called black-list).'
|
||||
+#13'If you want the opposite, to allow the addresses that you specify (white-list), enter all addresses in a single row preceded by a \ character.'
|
||||
+#13
|
||||
+#13'Let say you want to allow all your 192.168 local network plus your office at 1.1.1.1.'
|
||||
+#13'Just put this IP address mask: \192.168.*;1.1.1.1'
|
||||
+#13'The opening \ character inverts the logic, so everything else is banned.'
|
||||
+#13
|
||||
+#13'If you want to know more about address masks, check the guide.';
|
||||
begin msgDlg(MSG_INVERT_BAN) end;
|
||||
|
||||
procedure ToptionsFrm.groupsBtnClick(Sender: TObject);
|
||||
var
|
||||
|
||||
119
scriptLib.pas
119
scriptLib.pas
@ -1,5 +1,5 @@
|
||||
{
|
||||
Copyright (C) 2002-2012 Massimo Melina (www.rejetto.com)
|
||||
Copyright (C) 2002-2020 Massimo Melina (www.rejetto.com)
|
||||
|
||||
This file is part of HFS ~ HTTP File Server.
|
||||
|
||||
@ -161,16 +161,18 @@ var
|
||||
procedure deprecatedMacro(what:string=''; instead:string='');
|
||||
begin mainfrm.add2log('WARNING, deprecated macro: '+first(what, name)+nonEmptyConcat(' - Use instead: ',instead), NIL, clRed) end;
|
||||
|
||||
procedure unsatisfied(b:boolean=TRUE);
|
||||
begin
|
||||
if b then
|
||||
macroError('cannot be used here')
|
||||
end;
|
||||
|
||||
function satisfied(p:pointer):boolean;
|
||||
begin
|
||||
result:=assigned(p);
|
||||
if not result then
|
||||
macroError('cannot be used here');
|
||||
unsatisfied(not result);
|
||||
end;
|
||||
|
||||
procedure unsatisfied(b:boolean=TRUE);
|
||||
begin if b then macroError('cannot be used here') end;
|
||||
|
||||
function parEx(idx:integer; name:string=''; doTrim:boolean=TRUE):string; overload;
|
||||
var
|
||||
i: integer;
|
||||
@ -262,9 +264,9 @@ var
|
||||
result:=staticVars;
|
||||
delete(varname,1,length(G_VAR_PREFIX));
|
||||
end
|
||||
else if satisfied(md.cd) then
|
||||
else if assigned(md.cd) then
|
||||
result:=md.cd.vars
|
||||
else if satisfied(md.tempVars) then
|
||||
else if assigned(md.tempVars) then
|
||||
result:=md.tempVars
|
||||
else
|
||||
raise Exception.create('no namespace available');
|
||||
@ -293,7 +295,7 @@ var
|
||||
if not satisfied(space) then exit;
|
||||
i:=space.indexOfName(varname);
|
||||
if i < 0 then
|
||||
if value = '' then exit // all is good the way it is
|
||||
if value = '' then exit(TRUE) // all is good the way it is
|
||||
else i:=space.add(varname+'='+value)
|
||||
else
|
||||
if value > '' then // in case of empty value, there's no need to assign, because we are going to delete it (after we cleared the bound object)
|
||||
@ -457,7 +459,8 @@ var
|
||||
vars: Tstrings;
|
||||
s: string;
|
||||
begin
|
||||
if not satisfied(md.cd) then exit;
|
||||
if not satisfied(md.cd) then
|
||||
exit;
|
||||
try
|
||||
result:=md.cd.conn.request.url;
|
||||
if pars.count < 2 then exit;
|
||||
@ -659,16 +662,40 @@ var
|
||||
|
||||
procedure inc_(v:integer=+1);
|
||||
begin
|
||||
try
|
||||
setVar(p, intToStr(strToIntDef(getVar(p),0)+v*parI(1,1)));
|
||||
result:='';
|
||||
try setVar(p, intToStr(strToIntDef(getVar(p),0)+v*parI(1,1))) except end;
|
||||
except
|
||||
end;
|
||||
end; // inc_
|
||||
|
||||
procedure convert();
|
||||
var
|
||||
dst, s: string;
|
||||
c: ansichar;
|
||||
begin
|
||||
if sameText(p, 'ansi') and sameText(par(1), 'utf-8') then
|
||||
result:=ansiToUTF8(ansistring(par(2)))
|
||||
else if sameText(p, 'utf-8') and sameText(par(1), 'ansi') then
|
||||
result:=utf8ToAnsi(ansistring(par(2)))
|
||||
dst:=par(1);
|
||||
s:=par(2);
|
||||
if sameText(p, 'ansi') and sameText(dst, 'utf-8') then
|
||||
result:=string(ansiToUTF8(ansistring(s)))
|
||||
else if sameText(p, 'utf-8') then
|
||||
if sameText(dst, 'ansi') then
|
||||
result:=utf8ToAnsi(ansistring(s))
|
||||
else if dst='dec' then
|
||||
begin
|
||||
result:='';
|
||||
for c in UTF8encode(s) do
|
||||
result:=result+intToStr(ord(c))+',';
|
||||
setLength(result, length(result)-1);
|
||||
end
|
||||
else if dst='hex' then
|
||||
begin
|
||||
result:='';
|
||||
for c in UTF8encode(s) do
|
||||
result:=result+intToHex(ord(c));
|
||||
end;
|
||||
if isFalse(par('macros')) then
|
||||
result:=noMacrosAllowed(result);
|
||||
end; // convert
|
||||
|
||||
procedure encodeuri();
|
||||
@ -930,9 +957,9 @@ var
|
||||
i: integer;
|
||||
begin
|
||||
code:=macroDequote(par(pars.count-1));
|
||||
lines:=TStringList.create();
|
||||
with TfastStringAppend.create do
|
||||
try
|
||||
lines:=TStringList.create();
|
||||
lines.text:= getVar(par('var'));
|
||||
for line in lines do
|
||||
begin
|
||||
@ -1077,6 +1104,7 @@ var
|
||||
procedure load(fn:string; varname:string='');
|
||||
var
|
||||
from, size: int64;
|
||||
s: ansistring;
|
||||
begin
|
||||
result:='';
|
||||
from:=parI('from', 0);
|
||||
@ -1095,11 +1123,17 @@ var
|
||||
try result:=httpGet(fn, from, size)
|
||||
except result:='' end
|
||||
else
|
||||
result:=loadFile(uri2diskMaybe(fn), from, size);
|
||||
begin
|
||||
s:=loadFile(uri2diskMaybe(fn), from, size);
|
||||
result:=UTF8ToString(s);
|
||||
if result = '' then
|
||||
result:=s;
|
||||
end;
|
||||
|
||||
if varname = '' then
|
||||
begin
|
||||
if anyCharIn('/\',fn) then result:=macroQuote(result);
|
||||
if anyCharIn('/\',fn) then
|
||||
result:=macroQuote(result);
|
||||
exit;
|
||||
end;
|
||||
if ansiStartsStr(ENCODED_TABLE_HEADER, result) then
|
||||
@ -1198,19 +1232,19 @@ var
|
||||
'information=64'
|
||||
);
|
||||
var
|
||||
i, j, code: integer;
|
||||
code: integer;
|
||||
decode: TStringDynArray;
|
||||
s: string;
|
||||
s, d: string;
|
||||
buttons, icon: boolean;
|
||||
begin
|
||||
decode:=split(' ',par(1));
|
||||
code:=0;
|
||||
for i:=0 to length(decode)-1 do
|
||||
for j:=1 to length(STR2CODE) do
|
||||
for d in decode do
|
||||
for s in STR2CODE do
|
||||
if startsStr(d+'=', s) then
|
||||
begin
|
||||
s:=STR2CODE[j];
|
||||
if ansiStartsStr(decode[i], s) then
|
||||
inc(code, strToIntDef(substr(s, 1+pos('=',s)), 0));
|
||||
inc(code, strToIntDef(substr(s, 2+d.length), 0));
|
||||
Break
|
||||
end;
|
||||
buttons:=code AND 15 > 0;
|
||||
icon:=code SHR 4 > 0;
|
||||
@ -1340,19 +1374,20 @@ var
|
||||
if not satisfied(space) then exit;
|
||||
// set the table variable as text
|
||||
v:=par(1);
|
||||
space.values[p]:=nonEmptyConcat('', space.values[p], CRLF)+v;
|
||||
// access the table object
|
||||
i:=space.indexOfName(p);
|
||||
h:=space.objects[i] as THashedStringList;
|
||||
if h = NIL then
|
||||
if i < 0 then
|
||||
begin
|
||||
h:=ThashedStringList.create();
|
||||
space.objects[i]:=h;
|
||||
end;
|
||||
space.AddPair(p, v, h);
|
||||
end
|
||||
else
|
||||
h:=space.objects[i] as THashedStringList;
|
||||
// fill the object
|
||||
k:=chop('=',v);
|
||||
v:=macroDequote(v);
|
||||
h.values[k]:=v;
|
||||
space.values[p]:=h.text;
|
||||
end; // setTable
|
||||
|
||||
procedure disconnect();
|
||||
@ -1445,7 +1480,8 @@ var
|
||||
exit;
|
||||
end;
|
||||
a:=findEnabledLinkedAccount(a, split(';',s));
|
||||
if assigned(a) then result:=a.user;
|
||||
if assigned(a) then
|
||||
result:=a.user;
|
||||
end; // memberOf
|
||||
|
||||
procedure canArchive(f:Tfile);
|
||||
@ -1905,9 +1941,15 @@ try
|
||||
disconnect();
|
||||
|
||||
if name = 'stop server' then
|
||||
begin
|
||||
stopServer();
|
||||
exit('');
|
||||
end;
|
||||
if name = 'start server' then
|
||||
begin
|
||||
startServer();
|
||||
exit('');
|
||||
end;
|
||||
|
||||
|
||||
if name = 'focus' then
|
||||
@ -1924,10 +1966,7 @@ try
|
||||
begin
|
||||
try
|
||||
if isFalse(parEx('if')) then
|
||||
begin
|
||||
result:='';
|
||||
exit;
|
||||
end;
|
||||
exit('');
|
||||
except end;
|
||||
result:=md.cd.disconnectReason; // return the previous state
|
||||
if pars.count > 0 then md.cd.disconnectReason:=p;
|
||||
@ -1962,13 +2001,19 @@ try
|
||||
result:=jsEncode(p, first(par(1),'''"'));
|
||||
|
||||
if name = 'base64' then
|
||||
result:=base64encode(UTF8encode(p));
|
||||
result:=string(base64encode(UTF8encode(p)));
|
||||
if name = 'base64decode' then
|
||||
begin
|
||||
result:=utf8ToString(base64decode(ansistring(p)));
|
||||
if isFalse(par('macros')) then
|
||||
result:=noMacrosAllowed(result);
|
||||
end;
|
||||
if name = 'md5' then
|
||||
result:=strMD5(p);
|
||||
if name = 'sha1' then
|
||||
result:=strSHA1(p);
|
||||
if name = 'sha256' then
|
||||
result:=strSHA256(p);
|
||||
|
||||
if name = 'vfs select' then
|
||||
if pars.count = 0 then
|
||||
@ -2041,7 +2086,7 @@ try
|
||||
encodeuri();
|
||||
|
||||
if name = 'decodeuri' then
|
||||
result:=decodeURL(ansistring(p));
|
||||
result:=noMacrosAllowed(decodeURL(ansistring(p)));
|
||||
|
||||
if name = 'set cfg' then
|
||||
trueIf(mainfrm.setcfg(p));
|
||||
|
||||
27
todo.txt
27
todo.txt
@ -1,12 +1,11 @@
|
||||
- update doesn't work without 'only 1 instance' (it's the -q)
|
||||
+ replace shellExtDlg.gif with transparent png (english system)
|
||||
+ self-test supporting https
|
||||
+ expiring links
|
||||
* dismiss regexp lib http://docwiki.embarcadero.com/Libraries/Rio/en/System.RegularExpressions.TRegEx
|
||||
+ ipv6
|
||||
+ load *.events
|
||||
+ url auth limited to resource
|
||||
+ global limit speed for downloads (browsing excluded)
|
||||
+ [tpl id] [SECTION|for-tpl=MASK]
|
||||
* consider letting comment "protected" files. Can it really cause harm?
|
||||
* flag to enable lnk files in a folder (disabled by default)
|
||||
+ sign exe http://www.rejetto.com/forum/hfs-~-http-file-server/'unsafe'/msg1061437/#msg1061437
|
||||
@ -25,13 +24,20 @@
|
||||
+ macros missing to cache a folder: {.reply|content=|var=|code=|filename=|mime=.}
|
||||
- unexpected scripting behavior http://www.rejetto.com/forum/index.php/topic,9728.msg1054517.html#msg1054517
|
||||
in handleItem() translate only symbols, and run all macros at the end
|
||||
document: [section|ver=MASK|build=MIN-MAX|template=MASK]
|
||||
document: {.if|var}
|
||||
document: {.exec|out|timeout|exitcode.}
|
||||
document: [+section]
|
||||
document: {.set item|diff template.}
|
||||
document: single line diff templates
|
||||
document: disconnection reason|if=XXX
|
||||
document: {.add header|overwrite=0.}
|
||||
document: {.calc| ][ }
|
||||
document: single line diff templates (file path)
|
||||
document: {.disconnection reason|if=XXX.}
|
||||
document: %url%
|
||||
document: commands returning white space: add folder, save, set account, exec, mkdir, chdir, delete, rename, move copy, set
|
||||
document: dir, disk free, filetime, file changed, load tpl
|
||||
document: pipe, base64, base64decode, dir, disk free, filetime, file changed, load tpl, sha256, for line
|
||||
document {.convert|macros|dec|hex.}
|
||||
document: new event [login]
|
||||
+ event to filter logging http://www.rejetto.com/forum/index.php/topic,9784.0.html
|
||||
- wrong browser http://www.rejetto.com/forum/index.php/topic,9710.0.html
|
||||
solution:
|
||||
@ -42,18 +48,14 @@ document: dir, disk free, filetime, file changed, load tpl
|
||||
+ upload to non-browsable folder
|
||||
- android doesn't upload http://www.rejetto.com/forum/index.php/topic,9699.0/topicseen.html#msg1054287
|
||||
- android doesn't work with passwords http://www.rejetto.com/forum/index.php/topic,9575.msg1054029.html#msg1054029
|
||||
? default tpl: check with IE6
|
||||
? default tpl: consider css data uri http://www.nczonline.net/blog/2010/07/06/data-uris-make-css-sprites-obsolete/
|
||||
+ default tpl: support for rawr thumbnails
|
||||
+ next VFS file format version should be XML-based
|
||||
+ next VFS file format version should be text (yaml or json)
|
||||
+ remove the "progress" from "log what", and use [progress|no log] instead
|
||||
? {.rename.} should update descript.ion
|
||||
+ folder archive depth limit http://www.rejetto.com/forum/index.php/topic,8546.msg1050027.html#msg1050027
|
||||
? in getPage() many %symbols% are translated in a way incompatible with {.section.}
|
||||
? Windows Script Interfaces
|
||||
? {.image|src=file|width=x|dst=outfile.}
|
||||
+ replace /~imgXX with ?mode=icon&id=XX
|
||||
+ user input through {.dialog.}
|
||||
+ user input through {.dialog.} or similar
|
||||
+ show missing files in VFS http://www.rejetto.com/forum/index.php/topic,8203.new.html
|
||||
* {.cache.} should be able to work on a simple variable
|
||||
+ plugins system http://www.rejetto.com/wiki/index.php/HFS:_plugins_design
|
||||
@ -67,8 +69,6 @@ document: dir, disk free, filetime, file changed, load tpl
|
||||
+ log event to filter www.rejetto.com/forum/?topic=7332.0
|
||||
? integration with mediainfo.dll www.rejetto.com/forum/?topic=7329
|
||||
+ folder archive log, just as for deletion http://www.rejetto.com/forum/index.php?topic=6904.msg1042974;topicseen#msg1042974
|
||||
- upload doesn't work on chinese folders with uneven length www.rejetto.com/forum/?topic=5382
|
||||
- chinese problems since #161 www.rejetto.com/forum/?topic=5344
|
||||
- AV with RealVNC on hints by mouse hovering www.rejetto.com/forum/?topic=5261
|
||||
- N-Stalker can locally crash HFS
|
||||
- AV in #179 http://www.rejetto.com/forum/index.php?topic=5653.msg1033457#msg1033457 www.rejetto.com/forum/?topic=5681
|
||||
@ -95,7 +95,6 @@ document: dir, disk free, filetime, file changed, load tpl
|
||||
+ make %list% available in every page
|
||||
+ support for ALT+F4 with option "Minimize to tray clicking the close button" www.rejetto.com/forum/?topic=6351
|
||||
+ replace and delete icons http://www.rejetto.com/forum/index.php?topic=6317.msg1038157#msg1038157
|
||||
+ self-test supporting https
|
||||
? currently the delete permission is only inside a folder. you can't mark a file or delete the marked folder. is this ok?
|
||||
+ when a link is protected (no access for this user) it may be displayed as a link to the %item-name%, then 401, and if login is successful provide a redirection
|
||||
+ change folder/link/generic-file icons (via GUI, without editing the template)
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
1. Add a folder (choose "real folder")
|
||||
|
||||
You should now see a RED folder in your virtual file sytem, inside HFS
|
||||
|
||||
2. Right click on this folder
|
||||
3. Properties -> Permissions -> Upload
|
||||
4. Check on "Anyone"
|
||||
5. Ok
|
||||
|
||||
Now anyone who has access to your HFS server can upload files to you.
|
||||
179
utillib.pas
179
utillib.pas
@ -1,5 +1,5 @@
|
||||
{
|
||||
Copyright (C) 2002-2012 Massimo Melina (www.rejetto.com)
|
||||
Copyright (C) 2002-2020 Massimo Melina (www.rejetto.com)
|
||||
|
||||
This file is part of HFS ~ HTTP File Server.
|
||||
|
||||
@ -44,6 +44,7 @@ type
|
||||
TnameExistsFun = function(user:string):boolean;
|
||||
|
||||
procedure doNothing(); inline; // useful for readability
|
||||
function httpsCanWork():boolean;
|
||||
function accountExists(user:string; evenGroups:boolean=FALSE):boolean;
|
||||
function getAccount(user:string; evenGroups:boolean=FALSE):Paccount;
|
||||
function nodeToFile(n:TtreeNode):Tfile;
|
||||
@ -165,7 +166,7 @@ function replaceString(var ss:TStringDynArray; old, new:string):integer;
|
||||
function popString(var ss:TstringDynArray):string;
|
||||
procedure insertString(s:string; idx:integer; var ss:TStringDynArray);
|
||||
function removeString(var a:TStringDynArray; idx:integer; l:integer=1):boolean; overload;
|
||||
function removeString(find:string; var a:TStringDynArray):boolean; overload;
|
||||
function removeString(s:string; var a:TStringDynArray; onlyOnce:boolean=TRUE; ci:boolean=TRUE; keepOrder:boolean=TRUE):boolean; overload;
|
||||
procedure removeStrings(find:string; var a:TStringDynArray);
|
||||
procedure toggleString(s:string; var ss:TStringDynArray);
|
||||
function onlyString(s:string; ss:TStringDynArray):boolean;
|
||||
@ -254,6 +255,7 @@ function strSHA256(s:string):string;
|
||||
function strSHA1(s:string):string;
|
||||
function strMD5(s:string):string;
|
||||
function strToOem(s:string):ansistring;
|
||||
function strToBytes(s:ansistring):Tbytes;
|
||||
|
||||
implementation
|
||||
|
||||
@ -667,10 +669,6 @@ begin
|
||||
until false;
|
||||
end; // removeStrings
|
||||
|
||||
// remove first instance of the specified string
|
||||
function removeString(find:string; var a:TStringDynArray):boolean;
|
||||
begin result:=removeString(a, idxOf(find,a)) end;
|
||||
|
||||
function removeArray(var src:TstringDynArray; toRemove:array of string):integer;
|
||||
var
|
||||
i, l, ofs: integer;
|
||||
@ -744,6 +742,35 @@ while idx+l < length(a) do
|
||||
setLength(a, idx);
|
||||
end; // removestring
|
||||
|
||||
function removeString(s:string; var a:TStringDynArray; onlyOnce:boolean=TRUE; ci:boolean=TRUE; keepOrder:boolean=TRUE):boolean; overload;
|
||||
var i, lessen:integer;
|
||||
begin
|
||||
result:=FALSE;
|
||||
if a = NIL then
|
||||
exit;
|
||||
lessen:=0;
|
||||
try
|
||||
for i:=length(a)-1 to 0 do
|
||||
if ci and sameText(a[i], s)
|
||||
or not ci and (a[i]=s) then
|
||||
begin
|
||||
result:=TRUE;
|
||||
if keepOrder then
|
||||
removeString(a, i)
|
||||
else
|
||||
begin
|
||||
inc(lessen);
|
||||
a[i]:=a[length(a)-lessen];
|
||||
end;
|
||||
if onlyOnce then
|
||||
exit;
|
||||
end;
|
||||
finally
|
||||
if lessen > 0 then
|
||||
setLength(a, length(a)-lessen);
|
||||
end;
|
||||
end;
|
||||
|
||||
function dotted(i:int64):string;
|
||||
begin
|
||||
result:=intToStr(i);
|
||||
@ -1651,71 +1678,103 @@ result:=inputQueryLongdlg.ShowModal() = mrOk;
|
||||
if result then value:=inputQueryLongdlg.inputBox.Text;
|
||||
end; // inputQueryLong
|
||||
|
||||
function dllIsPresent(name:string):boolean;
|
||||
var h: HMODULE;
|
||||
begin
|
||||
h:=LoadLibrary(@name);
|
||||
result:= h<>0;
|
||||
FreeLibrary(h);
|
||||
end;
|
||||
|
||||
function httpsCanWork():boolean;
|
||||
const
|
||||
files: array of string = ['libcrypto-1_1.dll','libssl-1_1.dll'];
|
||||
baseUrl = 'http://rejetto.com/hfs/';
|
||||
// these should be made resourcestring but then a runtime error is raised
|
||||
MSG = 'An HTTPS action is required but some files are missing. Download them?';
|
||||
MSG_OK = 'Download completed';
|
||||
MSG_KO = 'Download failed';
|
||||
var
|
||||
s: string;
|
||||
missing: TStringDynArray;
|
||||
begin
|
||||
missing:=NIL;
|
||||
for s in files do
|
||||
if not FileExists(s) and not dllIsPresent(s) then
|
||||
addString(s, missing);
|
||||
if missing=NIL then
|
||||
exit(TRUE);
|
||||
if msgDlg(MSG, MB_OKCANCEL+MB_ICONQUESTION) <> MROK then
|
||||
exit(FALSE);
|
||||
for s in missing do
|
||||
if not httpGetFile(baseUrl+s, s, 2, mainfrm.statusBarHttpGetUpdate) then
|
||||
begin
|
||||
msgDlg(MSG_KO, MB_ICONERROR);
|
||||
exit(FALSE);
|
||||
end;
|
||||
mainfrm.setStatusBarText(MSG_OK);
|
||||
result:=TRUE;
|
||||
end; // httpsCanWork
|
||||
|
||||
function httpGet(url:string; from:int64=0; size:int64=-1):string;
|
||||
var
|
||||
http: THttpCli;
|
||||
reply: Tstringstream;
|
||||
begin
|
||||
if size = 0 then
|
||||
begin
|
||||
result:='';
|
||||
exit;
|
||||
end;
|
||||
exit('');
|
||||
reply:=TStringStream.Create('');
|
||||
with ThttpClient.createURL(url) do
|
||||
try
|
||||
http:=Thttpcli.create(NIL);
|
||||
try
|
||||
http.URL:=url;
|
||||
http.followRelocation:=TRUE;
|
||||
http.rcvdStream:=reply;
|
||||
http.agent:=HFS_HTTP_AGENT;
|
||||
rcvdStream:=reply;
|
||||
if (from <> 0) or (size > 0) then
|
||||
http.contentRangeBegin:=intToStr(from);
|
||||
contentRangeBegin:=intToStr(from);
|
||||
if size > 0 then
|
||||
http.contentRangeEnd:=intToStr(from+size-1);
|
||||
http.get();
|
||||
contentRangeEnd:=intToStr(from+size-1);
|
||||
get();
|
||||
result:=reply.dataString;
|
||||
finally http.free end
|
||||
finally reply.free end
|
||||
if sameText('utf-8', reGet(ContentType, '; *charset=(.+) *($|;)')) then
|
||||
Result:=UTF8ToString(result);
|
||||
finally
|
||||
reply.free;
|
||||
Free;
|
||||
end
|
||||
end; // httpGet
|
||||
|
||||
function httpFileSize(url:string):int64;
|
||||
var
|
||||
http: THttpCli;
|
||||
begin
|
||||
http:=Thttpcli.create(NIL);
|
||||
with ThttpClient.createURL(url) do
|
||||
try
|
||||
http.URL:=url;
|
||||
http.Agent:=HFS_HTTP_AGENT;
|
||||
try
|
||||
http.head();
|
||||
result:=http.contentLength
|
||||
except result:=-1 end;
|
||||
finally http.free end
|
||||
head();
|
||||
result:=contentLength
|
||||
except result:=-1
|
||||
end;
|
||||
finally free
|
||||
end;
|
||||
end; // httpFileSize
|
||||
|
||||
function httpGetFile(url, filename:string; tryTimes:integer=1; notify:TdocDataEvent=NIL):boolean;
|
||||
var
|
||||
http: THttpCli;
|
||||
reply: Tfilestream;
|
||||
supposed: integer;
|
||||
reply: Tfilestream;
|
||||
begin
|
||||
reply:=TfileStream.Create(filename, fmCreate);
|
||||
with ThttpClient.createURL(url) do
|
||||
try
|
||||
http:=Thttpcli.create(NIL);
|
||||
try
|
||||
http.URL:=url;
|
||||
http.RcvdStream:=reply;
|
||||
http.Agent:=HFS_HTTP_AGENT;
|
||||
http.OnDocData:=notify;
|
||||
rcvdStream:=reply;
|
||||
onDocData:=notify;
|
||||
result:=TRUE;
|
||||
try http.get()
|
||||
except result:=FALSE end;
|
||||
supposed:=http.ContentLength;
|
||||
finally http.free end
|
||||
finally reply.free end;
|
||||
try get()
|
||||
except result:=FALSE
|
||||
end;
|
||||
supposed:=ContentLength;
|
||||
finally
|
||||
reply.free;
|
||||
free;
|
||||
end;
|
||||
result:= result and (sizeOfFile(filename)=supposed);
|
||||
if not result then deleteFile(filename);
|
||||
if not result then
|
||||
deleteFile(filename);
|
||||
|
||||
if not result and (tryTimes > 1) then
|
||||
result:=httpGetFile(url, filename, tryTimes-1, notify);
|
||||
@ -2161,7 +2220,7 @@ const
|
||||
var
|
||||
sa : TSecurityAttributes;
|
||||
ReadPipe,WritePipe : THandle;
|
||||
start : TStartUpInfoA;
|
||||
start : TStartUpInfoW;
|
||||
ProcessInfo : TProcessInformation;
|
||||
Buffer : Pansichar;
|
||||
TotalBytesRead,
|
||||
@ -2192,7 +2251,7 @@ else
|
||||
timeout:=now()+timeout/SECONDS;
|
||||
// Create a Console Child Process with redirected input and output
|
||||
try
|
||||
if CreateProcessA(nil, PansiChar(ansistring(DosApp)), @sa, @sa, true, CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then
|
||||
if CreateProcess(nil, PChar(dosApp), @sa, @sa, true, CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then
|
||||
repeat
|
||||
result:=TRUE;
|
||||
// wait for end of child process
|
||||
@ -2202,16 +2261,22 @@ try
|
||||
// so that the pipe is not blocked by an overflow. New information
|
||||
// can be written from the console app to the pipe only if there is
|
||||
// enough buffer space.
|
||||
if not PeekNamedPipe(ReadPipe, @Buffer[TotalBytesRead], ReadBuffer,
|
||||
@BytesRead, @TotalBytesAvail, @BytesLeftThisMessage ) then
|
||||
break
|
||||
else if BytesRead > 0 then
|
||||
ReadFile(ReadPipe, Buffer[TotalBytesRead], BytesRead, BytesRead, nil );
|
||||
if not PeekNamedPipe(ReadPipe, @Buffer[TotalBytesRead], ReadBuffer, @BytesRead, @TotalBytesAvail, @BytesLeftThisMessage )
|
||||
or (BytesRead > 0) and not ReadFile(ReadPipe, Buffer[TotalBytesRead], BytesRead, BytesRead, nil ) then
|
||||
break;
|
||||
inc(TotalBytesRead, BytesRead);
|
||||
until (Apprunning <> WAIT_TIMEOUT) or (now() >= timeout);
|
||||
if IsTextUnicode(Buffer, TotalBytesRead, NIL) then
|
||||
begin
|
||||
Pchar(@Buffer[TotalBytesRead])^:= #0;
|
||||
output:=pchar(Buffer)
|
||||
end
|
||||
else
|
||||
begin
|
||||
Buffer[TotalBytesRead]:= #0;
|
||||
OemToCharA(PansiChar(Buffer),Buffer);
|
||||
OemToCharA(Buffer,Buffer);
|
||||
output:=string(ansistrings.strPas(Buffer));
|
||||
end;
|
||||
finally
|
||||
GetExitCodeProcess(ProcessInfo.hProcess, exitcode);
|
||||
TerminateProcess(ProcessInfo.hProcess, 0);
|
||||
@ -2517,7 +2582,8 @@ var
|
||||
i:=mImp+dir;
|
||||
repeat
|
||||
j:=i+dir;
|
||||
if (j > 0) and (j <= length(s)) and charInSet(s[j], ['0'..'9','.']) then
|
||||
if (j > 0) and (j <= length(s))
|
||||
and (charInSet(s[j], ['0'..'9','.','E']) or (j>1) and charInSet(s[j],['+','-']) and (s[j-1]='E')) then
|
||||
i:=j
|
||||
else
|
||||
break;
|
||||
@ -2547,6 +2613,7 @@ begin
|
||||
end;
|
||||
|
||||
if (i = 1) // a starting operator is not an operator
|
||||
or (s[i-1]='E') // exponential syntax
|
||||
or (v <= mImpV) // left-to-right precedence
|
||||
then continue;
|
||||
// we got a better one, record it
|
||||
@ -2876,7 +2943,7 @@ finally
|
||||
end;
|
||||
end; // deltree
|
||||
|
||||
function str2bytes(s:ansistring):Tbytes;
|
||||
function strToBytes(s:ansistring):Tbytes;
|
||||
begin
|
||||
setLength(result, length(s));
|
||||
move(s[1], result[0], length(result));
|
||||
@ -2886,7 +2953,7 @@ function stringToGif(s:ansistring; gif:TgifImage=NIL):TgifImage;
|
||||
var
|
||||
ss: Tbytesstream;
|
||||
begin
|
||||
ss:=Tbytesstream.create(str2bytes(s));
|
||||
ss:=Tbytesstream.create(strToBytes(s));
|
||||
try
|
||||
if gif = NIL then
|
||||
gif:=TGIFImage.Create();
|
||||
|
||||
@ -12,20 +12,24 @@ propaganda
|
||||
Mobile-friendly template
|
||||
Unicode support
|
||||
Encrypted login, and logout
|
||||
DoS protection
|
||||
IPv6
|
||||
/propaganda
|
||||
+ new default template
|
||||
+ new login system, session based, with logout
|
||||
+ IPv6 support
|
||||
+ DoS protection https://rejetto.com/forum/index.php?topic=13060.msg1065962#msg1065962
|
||||
+ {.set item|name.}
|
||||
+ {.get item|icon.}
|
||||
+ {.set cfg.}
|
||||
+ {.for line.}
|
||||
+ {.if|var}
|
||||
+ cache for jquery and template sections
|
||||
+ new template commands: base64, base64decode, md5, sha1
|
||||
+ new template commands: base64, base64decode, md5, sha1, sha256
|
||||
+ *.diff.tpl in exe's folder
|
||||
+ default mime-type for mkv
|
||||
+ 'no list' section flag
|
||||
+ https client support (not server)
|
||||
- fixed template handling of section names with both '+' and '=' present
|
||||
- fixed LNK files to deleted items
|
||||
- fixed comments files were not updated upon deletion of files
|
||||
@ -33,6 +37,7 @@ propaganda
|
||||
- fixed double "Content-Length" header on compressed pages
|
||||
- fixed log text base color not matching system settings http://rejetto.com/forum/index.php?topic=13233.0
|
||||
- fixed while renaming a file in the GUI, CTRL+C/V didn't work on the text
|
||||
- fixed diff tpl logic: an empty section will now override the inherited one
|
||||
|
||||
VER 2.3m
|
||||
propaganda
|
||||
|
||||
Loading…
Reference in New Issue
Block a user