diff --git a/classesLib.pas b/classesLib.pas index ba465ef..85443f4 100644 --- a/classesLib.pas +++ b/classesLib.pas @@ -27,6 +27,16 @@ uses 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; @@ -221,6 +231,70 @@ implementation uses utilLib, main, windows, dateUtils, forms; +const folderConcurrents: integer = 0; +const MAX_CONCURRENTS = 3; +const ip2availability: Tdictionary = 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.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; + 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) diff --git a/defs.inc b/defs.inc index 95fe7e7..f4fd2a1 100644 --- a/defs.inc +++ b/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} diff --git a/hfs.drc b/hfs.drc index 1d1d574..226b4a1 100644 --- a/hfs.drc +++ b/hfs.drc @@ -8,272 +8,273 @@ resources were bound to the produced executable. */ -#define main_MSG_NUM_ADDR_DL 64656 -#define main_MSG_MAX_LINES 64657 -#define main_MSG_APACHE_LOG_FMT 64658 -#define main_MSG_APACHE_LOG_FMT_LONG 64659 -#define main_MSG_ICONS_ADDED 64660 -#define main_MSG_DDNS_DISABLED 64661 -#define main_MSG_MD5_WARN 64662 -#define main_MSG_AUTO_MD5 64663 -#define main_MSG_AUTO_MD5_LONG 64664 -#define main_MSG_UPL_HOWTO 64665 -#define main_MSG_EDIT_RES 64672 -#define main_MSG_TPL_USE_MACROS 64673 -#define main_REMOVE_SHELL 64674 -#define main_S_OFF 64675 -#define main_S_ON 64676 -#define main_LOG 64677 -#define main_MSG_RE_NOIP 64678 -#define main_MSG_TRAY_DEF 64679 -#define main_MSG_CLEAN_START 64680 -#define main_MSG_RESTORE_BAK 64681 -#define main_MSG_EXT_ADDR_FAIL 64682 -#define main_MSG_TO_EXPERT 64683 -#define main_MSG_DONT_LOG_HINT 64684 -#define main_MSG_DL_PERC 64685 -#define main_MSG_UNINSTALL_WARN 64686 -#define main_MSG_NUM_ADDR 64687 -#define main_MSG_SELF_6 64688 -#define main_MSG_SELF_7 64689 -#define main_MSG_RET_EXT 64690 -#define main_MSG_SELF_CANT_ON 64691 -#define main_MSG_SELF_CANT_LIST 64692 -#define main_MSG_SELF_CANT_S 64693 -#define main_MSG_SELF_ING 64694 -#define main_MSG_TEST_CANC 64695 -#define main_MSG_TEST_INET 64696 -#define main_MSG_SELF_UNAV 64697 -#define main_MSG_SELF_NO_INET 64698 -#define main_MSG_SELF_NO_ANSWER 64699 -#define main_MSG_OPEN_BROW 64700 -#define main_MSG_OPEN_BROW_LONG 64701 -#define main_MSG_HIDE_PORT 64702 -#define main_MSG_EVENTS_HLP 64703 -#define main_MSG_DISAB_FIND_EXT 64704 -#define main_MSG_ENT_URL 64705 -#define main_MSG_ENT_URL_LONG 64706 -#define main_MSG_ENT_USR 64707 -#define main_MSG_ENT_PWD 64708 -#define main_MSG_ENT_HOST 64709 -#define main_MSG_ENT_HOST_LONG 64710 -#define main_MSG_HOST_FORM 64711 -#define main_MSG_MIN_SPACE 64712 -#define main_MSG_MIN_SPACE_LONG 64713 -#define main_MSG_REN_PART 64714 -#define main_MSG_REN_PART_LONG 64715 -#define main_MSG_SELF_BEFORE 64716 -#define main_MSG_SELF_OK 64717 -#define main_MSG_SELF_OK_PORT 64718 -#define main_MSG_SELF_3 64719 -#define main_MSG_LOG_FILE_LONG 64720 -#define main_MSG_SET_URL 64721 -#define main_MSG_SET_URL_LONG 64722 -#define main_MSG_REALM 64723 -#define main_MSG_REALM_LONG 64724 -#define main_MSG_INACT_TIMEOUT 64725 -#define main_MSG_INACT_TIMEOUT_LONG 64726 -#define main_MSG_CHANGES_LOST 64727 -#define main_MSG_FLAG_NEW 64728 -#define main_MSG_FLAG_NEW_LONG 64729 -#define main_MSG_DONT_LOG_MASK 64730 -#define main_MSG_DONT_LOG_MASK_LONG 64731 -#define main_MSG_CUST_IP 64732 -#define main_MSG_CUST_IP_LONG 64733 -#define main_MSG_NO_EXT_IP 64734 -#define main_MSG_RESET_TOT 64735 -#define main_MSG_LOADING_VFS 64736 -#define main_MSG_VFS_OLD 64737 -#define main_MSG_UNK_FK 64738 -#define main_MSG_VIS_ONLY_ANON 64739 -#define main_MSG_AUTO_DISABLED 64740 -#define main_MSG_CORRUPTED 64741 -#define main_MSG_MACROS_FOUND 64742 -#define main_MSG_UPD_INFO 64743 -#define main_MSG_NEWER 64744 -#define main_MSG_SRC_UPD 64745 -#define main_ARE_EXPERT 64746 -#define main_ARE_EASY 64747 -#define main_SW2EXPERT 64748 -#define main_SW2EASY 64749 -#define main_MSG_DL_TIMEOUT_LONG 64750 -#define main_MSG_LOG_FILE 64751 -#define main_MSG_ZLIB 64752 -#define main_MSG_BAKAVAILABLE 64753 -#define main_MSG_CANT_LOAD_SAVE 64754 -#define main_MSG_OPEN_VFS 64755 -#define main_LIMIT 64756 -#define main_TOP_SPEED 64757 -#define main_MSG_MAX_BW 64758 -#define main_MSG_LIM0 64759 -#define main_MSG_MAX_BW_1 64760 -#define main_MSG_GRAPH_RATE_MENU 64761 -#define main_MSG_MAX_CON_LONG 64762 -#define main_MSG_WARN_CONN 64763 -#define main_MSG_WARN_ACT_DL 64764 -#define main_MSG_MAX_CON_SING_LONG 64765 -#define main_MSG_GRAPH_RATE 64766 -#define main_MSG_TENTH_SEC 64767 -#define main_MSG_CON_STATE_IDLE 64768 -#define main_MSG_CON_STATE_REQ 64769 -#define main_MSG_CON_STATE_RCV 64770 -#define main_MSG_CON_STATE_THINK 64771 -#define main_MSG_CON_STATE_REP 64772 -#define main_MSG_CON_STATE_SEND 64773 -#define main_MSG_CON_STATE_DISC 64774 -#define main_MSG_CON_PAUSED 64775 -#define main_MSG_CON_SENT 64776 -#define main_MSG_CON_RECEIVED 64777 -#define main_MSG_TPL_RESET 64778 -#define main_MSG_ALLO_REF 64779 -#define main_MSG_ALLO_REF_LONG 64780 -#define main_MSG_BETTERSTOP 64781 -#define main_MSG_BADCRC 64782 -#define main_MSG_NEWER 64783 -#define main_MSG_VFS_ARCABLE 64784 -#define main_MSG_VFS_DEF_MASK 64785 -#define main_MSG_VFS_ACCESS 64786 -#define main_MSG_VFS_UPLOAD 64787 -#define main_MSG_VFS_DELETE 64788 -#define main_MSG_VFS_COMMENT 64789 -#define main_MSG_VFS_REALM 64790 -#define main_MSG_VFS_DIFF_TPL 64791 -#define main_MSG_VFS_FILES_FLT 64792 -#define main_MSG_VFS_FLD_FLT 64793 -#define main_MSG_VFS_UPL_FLT 64794 -#define main_MSG_VFS_DONT_CONS_DL 64795 -#define main_MSG_VFS_DONT_CONS_DL_MASK 64796 -#define main_MSG_VFS_INHERITED 64797 -#define main_MSG_VFS_EXTERNAL 64798 -#define main_MSG_CON_HINT 64799 -#define main_VFS_ITEMS 64800 -#define main_MSG_ITEM_EXISTS 64801 -#define main_MSG_INSTALL_TPL 64802 -#define main_MSG_FOLDER_UPLOAD 64803 -#define main_MSG_VFS_DRAG_INVIT 64804 -#define main_MSG_VFS_URL 64805 -#define main_MSG_VFS_PATH 64806 -#define main_MSG_VFS_SIZE 64807 -#define main_MSG_VFS_DLS 64808 -#define main_MSG_VFS_INVISIBLE 64809 -#define main_MSG_VFS_DL_FORB 64810 -#define main_MSG_VFS_DONT_LOG 64811 -#define main_MSG_VFS_HIDE_EMPTY 64812 -#define main_MSG_VFS_NOT_BROW 64813 -#define main_MSG_VFS_HIDE_EMPTY_FLD 64814 -#define main_MSG_VFS_HIDE_EXT 64815 -#define main_MSG_CHK_UPD_FAIL 64816 -#define main_MSG_CHK_UPD_HEAD 64817 -#define main_MSG_CHK_UPD_VER 64818 -#define main_MSG_CHK_UPD_VER_EXT 64819 -#define main_MSG_CHK_UPD_NONE 64820 -#define main_TO_CLIP 64821 -#define main_ALREADY_CLIP 64822 -#define main_MSG_NO_SPACE 64823 -#define main_CONN 64824 -#define main_TOT_IN 64825 -#define main_TOT_OUT 64826 -#define main_OUT_SPEED 64827 -#define main_IN_SPEED 64828 -#define main_BANS 64829 -#define main_MEMORY 64830 -#define main_CUST_TPL 64831 -#define main_AUTOSAVE 64832 -#define main_SECONDS 64833 -#define main_MSG_SPD_LIMIT_SING 64834 -#define main_MSG_SPD_LIMIT 64835 -#define main_MSG_AUTO_SAVE 64836 -#define main_MSG_AUTO_SAVE_LONG 64837 -#define main_MSG_MIN 64838 -#define main_MSG_BAN 64839 -#define main_MSG_CANT_SAVE_OPT 64840 -#define main_MSG_UPD_SAVE_ERROR 64841 -#define main_MSG_UPD_REQ_ONLY1 64842 -#define main_MSG_UPD_WAIT 64843 -#define main_MSG_UPD_DL 64844 -#define main_MSG_UPDATE 64845 -#define main_MSG_REQUESTING 64846 -#define main_MSG_CHK_UPD 64847 -#define main_MSG_LOG_UPL 64848 -#define main_MSG_LOG_UPLOADED 64849 -#define main_MSG_LOG_UPL_FAIL 64850 -#define main_MSG_LOG_DL 64851 -#define main_MSG_LOGIN_FAILED 64852 -#define main_MSG_MIN_DISK_REACHED 64853 -#define main_MSG_UPL_NAME_FORB 64854 -#define main_MSG_UPL_CANT_CREATE 64855 -#define main_FINGERPRINT 64856 -#define main_NO_FINGERPRINT 64857 -#define main_MSG_SAVE_VFS 64858 -#define main_MSG_INP_COMMENT 64859 -#define main_MSG_FILE_ADD_ABORT 64860 -#define main_MSG_ADDING 64861 -#define main_MSG_INV_FILENAME 64862 -#define main_MSG_DELETE 64863 -#define main_MSG_PORT_USED_BY 64864 -#define main_MSG_PORT_BLOCKED 64865 -#define main_MSG_KICK_ALL 64866 -#define main_MSG_TPL_INCOMPATIBLE 64867 -#define main_MSG_LOG_SERVER_START 64868 -#define main_MSG_LOG_SERVER_STOP 64869 -#define main_MSG_LOG_CONNECTED 64870 -#define main_MSG_LOG_DISC_SRV 64871 -#define main_MSG_LOG_DISC 64872 -#define main_MSG_LOG_GOT 64873 -#define main_MSG_LOG_BYTES_SENT 64874 -#define main_MSG_LOG_SERVED 64875 -#define main_MSG_LOG_HEAD 64876 -#define main_MSG_LOG_NOT_MOD 64877 -#define main_MSG_LOG_REDIR 64878 -#define main_MSG_LOG_NOT_SERVED 64879 -#define main_MSG_DDNS_nohost 64880 -#define main_MSG_DDNS_notyours 64881 -#define main_MSG_DDNS_numhost 64882 -#define main_MSG_DDNS_abuse 64883 -#define main_MSG_DDNS_dnserr 64884 -#define main_MSG_DDNS_911 64885 -#define main_MSG_DDNS_notdonator 64886 -#define main_MSG_DDNS_badagent 64887 -#define main_MSG_BAN_MASK 64888 -#define main_MSG_IP_MASK_LONG 64889 -#define main_MSG_KICK_ADDR 64890 -#define main_MSG_BAN_ALREADY 64891 -#define main_MSG_BAN_CMT 64892 -#define main_MSG_BAN_CMT_LONG 64893 -#define main_MSG_BREAK_DYN_DNS 64894 -#define main_MSG_CANT_OPEN_PORT 64895 -#define main_MSG_NO_TEMP 64896 -#define main_MSG_ERROR_REGISTRY 64897 -#define main_MSG_MANY_ITEMS 64898 -#define main_MSG_ADD_TO_HFS 64899 -#define main_MSG_SINGLE_INSTANCE 64900 -#define main_MSG_COMM_ERROR 64901 -#define main_MSG_DDNS_NO_REPLY 64902 -#define main_MSG_DDNS_OK 64903 -#define main_MSG_DDNS_UNK 64904 -#define main_MSG_DDNS_ERR 64905 -#define main_MSG_DDNS_REQ 64906 -#define main_MSG_DDNS_DOING 64907 -#define main_MSG_DDNS_FAIL 64908 -#define main_MSG_DDNS_REPLY_SIZE 64909 -#define main_MSG_DDNS_badauth 64910 -#define main_MSG_DDNS_notfqdn 64911 -#define main_MSG_MAX_SIM_ADDR 64912 -#define main_MSG_MAX_SIM_ADDR_DL 64913 -#define main_MSG_MAX_SIM_DL_SING 64914 -#define main_MSG_MAX_SIM_DL 64915 -#define main_MSG_SET_LIMIT 64916 -#define main_MSG_UNPROTECTED_LINKS 64917 -#define main_MSG_SAME_NAME 64918 -#define main_MSG_CONTINUE 64919 -#define main_MSG_PROCESSING 64920 -#define main_MSG_SPEED_KBS 64921 -#define main_MSG_OPTIONS_SAVED 64922 -#define main_MSG_SOME_LOCKED 64923 -#define main_MSG_ITEM_LOCKED 64924 -#define main_MSG_INVALID_VALUE 64925 -#define main_MSG_EMPTY_NO_LIMIT 64926 -#define main_MSG_ADDRESSES_EXCEED 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 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_CON_HINT 64768 +#define main_MSG_CON_STATE_IDLE 64769 +#define main_MSG_CON_STATE_REQ 64770 +#define main_MSG_CON_STATE_RCV 64771 +#define main_MSG_CON_STATE_THINK 64772 +#define main_MSG_CON_STATE_REP 64773 +#define main_MSG_CON_STATE_SEND 64774 +#define main_MSG_CON_STATE_DISC 64775 +#define main_MSG_CON_PAUSED 64776 +#define main_MSG_CON_SENT 64777 +#define main_MSG_CON_RECEIVED 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_EXT 64784 +#define main_MSG_VFS_ARCABLE 64785 +#define main_MSG_VFS_DEF_MASK 64786 +#define main_MSG_VFS_ACCESS 64787 +#define main_MSG_VFS_UPLOAD 64788 +#define main_MSG_VFS_DELETE 64789 +#define main_MSG_VFS_COMMENT 64790 +#define main_MSG_VFS_REALM 64791 +#define main_MSG_VFS_DIFF_TPL 64792 +#define main_MSG_VFS_FILES_FLT 64793 +#define main_MSG_VFS_FLD_FLT 64794 +#define main_MSG_VFS_UPL_FLT 64795 +#define main_MSG_VFS_DONT_CONS_DL 64796 +#define main_MSG_VFS_DONT_CONS_DL_MASK 64797 +#define main_MSG_VFS_INHERITED 64798 +#define main_MSG_VFS_EXTERNAL 64799 +#define main_CUST_TPL 64800 +#define main_VFS_ITEMS 64801 +#define main_MSG_ITEM_EXISTS 64802 +#define main_MSG_INSTALL_TPL 64803 +#define main_MSG_FOLDER_UPLOAD 64804 +#define main_MSG_VFS_DRAG_INVIT 64805 +#define main_MSG_VFS_URL 64806 +#define main_MSG_VFS_PATH 64807 +#define main_MSG_VFS_SIZE 64808 +#define main_MSG_VFS_DLS 64809 +#define main_MSG_VFS_INVISIBLE 64810 +#define main_MSG_VFS_DL_FORB 64811 +#define main_MSG_VFS_DONT_LOG 64812 +#define main_MSG_VFS_HIDE_EMPTY 64813 +#define main_MSG_VFS_NOT_BROW 64814 +#define main_MSG_VFS_HIDE_EMPTY_FLD 64815 +#define main_MSG_CHK_UPD 64816 +#define main_MSG_CHK_UPD_FAIL 64817 +#define main_MSG_CHK_UPD_HEAD 64818 +#define main_MSG_CHK_UPD_VER 64819 +#define main_MSG_CHK_UPD_VER_EXT 64820 +#define main_MSG_CHK_UPD_NONE 64821 +#define main_TO_CLIP 64822 +#define main_ALREADY_CLIP 64823 +#define main_MSG_NO_SPACE 64824 +#define main_CONN 64825 +#define main_TOT_IN 64826 +#define main_TOT_OUT 64827 +#define main_OUT_SPEED 64828 +#define main_IN_SPEED 64829 +#define main_BANS 64830 +#define main_MEMORY 64831 +#define main_MSG_DELETE 64832 +#define main_AUTOSAVE 64833 +#define main_SECONDS 64834 +#define main_MSG_SPD_LIMIT_SING 64835 +#define main_MSG_SPD_LIMIT 64836 +#define main_MSG_AUTO_SAVE 64837 +#define main_MSG_AUTO_SAVE_LONG 64838 +#define main_MSG_MIN 64839 +#define main_MSG_BAN 64840 +#define main_MSG_CANT_SAVE_OPT 64841 +#define main_MSG_UPD_SAVE_ERROR 64842 +#define main_MSG_UPD_REQ_ONLY1 64843 +#define main_MSG_UPD_WAIT 64844 +#define main_MSG_UPD_DL 64845 +#define main_MSG_UPDATE 64846 +#define main_MSG_REQUESTING 64847 +#define main_MSG_LOG_NOT_SERVED 64848 +#define main_MSG_LOG_UPL 64849 +#define main_MSG_LOG_UPLOADED 64850 +#define main_MSG_LOG_UPL_FAIL 64851 +#define main_MSG_LOG_DL 64852 +#define main_MSG_LOGIN_FAILED 64853 +#define main_MSG_MIN_DISK_REACHED 64854 +#define main_MSG_UPL_NAME_FORB 64855 +#define main_MSG_UPL_CANT_CREATE 64856 +#define main_FINGERPRINT 64857 +#define main_NO_FINGERPRINT 64858 +#define main_MSG_SAVE_VFS 64859 +#define main_MSG_INP_COMMENT 64860 +#define main_MSG_FILE_ADD_ABORT 64861 +#define main_MSG_ADDING 64862 +#define main_MSG_INV_FILENAME 64863 +#define main_MSG_CANT_OPEN_PORT 64864 +#define main_MSG_PORT_USED_BY 64865 +#define main_MSG_PORT_BLOCKED 64866 +#define main_MSG_KICK_ALL 64867 +#define main_MSG_TPL_INCOMPATIBLE 64868 +#define main_MSG_LOG_SERVER_START 64869 +#define main_MSG_LOG_SERVER_STOP 64870 +#define main_MSG_LOG_CONNECTED 64871 +#define main_MSG_LOG_DISC_SRV 64872 +#define main_MSG_LOG_DISC 64873 +#define main_MSG_LOG_GOT 64874 +#define main_MSG_LOG_BYTES_SENT 64875 +#define main_MSG_LOG_SERVED 64876 +#define main_MSG_LOG_HEAD 64877 +#define main_MSG_LOG_NOT_MOD 64878 +#define main_MSG_LOG_REDIR 64879 +#define main_MSG_DDNS_notfqdn 64880 +#define main_MSG_DDNS_nohost 64881 +#define main_MSG_DDNS_notyours 64882 +#define main_MSG_DDNS_numhost 64883 +#define main_MSG_DDNS_abuse 64884 +#define main_MSG_DDNS_dnserr 64885 +#define main_MSG_DDNS_911 64886 +#define main_MSG_DDNS_notdonator 64887 +#define main_MSG_DDNS_badagent 64888 +#define main_MSG_BAN_MASK 64889 +#define main_MSG_IP_MASK_LONG 64890 +#define main_MSG_KICK_ADDR 64891 +#define main_MSG_BAN_ALREADY 64892 +#define main_MSG_BAN_CMT 64893 +#define main_MSG_BAN_CMT_LONG 64894 +#define main_MSG_BREAK_DYN_DNS 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_DDNS_NO_REPLY 64903 +#define main_MSG_DDNS_OK 64904 +#define main_MSG_DDNS_UNK 64905 +#define main_MSG_DDNS_ERR 64906 +#define main_MSG_DDNS_REQ 64907 +#define main_MSG_DDNS_DOING 64908 +#define main_MSG_DDNS_FAIL 64909 +#define main_MSG_DDNS_REPLY_SIZE 64910 +#define main_MSG_DDNS_badauth 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 @@ -281,15 +282,15 @@ #define JclResources_RsOSVersionWinServer2012 64932 #define JclResources_RsOSVersionWin81 64933 #define JclResources_RsOSVersionWinServer2012R2 64934 -#define optionsDlg_MSG_INVERT_BAN 64935 -#define main_S_PORT_LABEL 64936 -#define main_S_PORT_ANY 64937 -#define main_DISABLED 64938 -#define main_S_OK 64939 -#define main_MSG_MENU_VAL 64940 -#define main_MSG_DL_TIMEOUT 64941 -#define main_MSG_MAX_CON 64942 -#define main_MSG_MAX_CON_SING 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 @@ -884,6 +885,7 @@ #define System_SysConst_SDiskFull 65535 STRINGTABLE BEGIN + 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" @@ -894,6 +896,7 @@ BEGIN 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" @@ -909,7 +912,7 @@ BEGIN 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_NUM_ADDR, L"In this moment there are %d different addresses" + 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..." @@ -925,7 +928,7 @@ BEGIN 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_EVENTS_HLP, L"For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts" + 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." @@ -941,7 +944,7 @@ BEGIN 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_SELF_3, L"You may be behind a router or firewall." + 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" @@ -957,7 +960,7 @@ BEGIN 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_RESET_TOT, L"Do you want to reset total in/out?" + 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." @@ -973,7 +976,7 @@ BEGIN main_SW2EXPERT, L"Switch to Expert mode" main_SW2EASY, L"Switch to Easy mode" 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_LOG_FILE, L"Log file" + main_MSG_NEWER, 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" @@ -989,7 +992,7 @@ BEGIN 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_TENTH_SEC, L"Tenths of second" + 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" @@ -1005,7 +1008,7 @@ BEGIN 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_NEWER, L"This file has been created with a newer and incompatible version." + 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" @@ -1021,7 +1024,7 @@ BEGIN 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_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?" @@ -1037,7 +1040,7 @@ BEGIN 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_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" @@ -1053,7 +1056,7 @@ BEGIN 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_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" @@ -1069,7 +1072,7 @@ BEGIN 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_REQUESTING, L"Requesting..." - main_MSG_CHK_UPD, L"Checking for updates" + 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" @@ -1085,7 +1088,7 @@ BEGIN 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_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?" @@ -1101,7 +1104,7 @@ BEGIN 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_DDNS_notfqdn, L"incomplete hostname, required form aaa.bbb.com" main_MSG_DDNS_nohost, L"specified hostname does not exist" main_MSG_DDNS_notyours, L"specified hostname belongs to another username" main_MSG_DDNS_numhost, L"too many or too few hosts found" @@ -1117,7 +1120,7 @@ BEGIN 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_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." @@ -1133,7 +1136,7 @@ BEGIN 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_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" @@ -1149,7 +1152,6 @@ BEGIN 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." - main_MSG_ADDRESSES_EXCEED, L"The following addresses exceed the limit:\r%s" 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" @@ -1157,6 +1159,7 @@ 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" @@ -1165,7 +1168,6 @@ BEGIN main_MSG_MENU_VAL, L" (%s)" main_MSG_DL_TIMEOUT, L"No downloads timeout" main_MSG_MAX_CON, L"Max connections" - main_MSG_MAX_CON_SING, L"Max connections from single address" 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" diff --git a/hfs.lng b/hfs.lng index c524b15..46d5c67 100644 --- a/hfs.lng +++ b/hfs.lng @@ -1,5 +1,5 @@ ; Kryvich's Delphi Localizer Language File. -; Generated by K.D.L. Scanner, 6/5/2020 6:56:45 PM +; Generated by K.D.L. Scanner, 27/06/2020 16:23:26 Humanize=1 HumanizedCR=\^ @@ -452,281 +452,282 @@ Panel1.Button1.Caption=&Yes Panel1.Button2.Caption=&No [ResourceStrings] -64656_main_MSG_NUM_ADDR_DL=In this moment there are %d different addresses downloading -64657_main_MSG_MAX_LINES=Max lines on screen. -64658_main_MSG_APACHE_LOG_FMT=Apache log file format -64659_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 -64660_main_MSG_ICONS_ADDED=%d new icons added -64661_main_MSG_DDNS_DISABLED=Dynamic DNS updater disabled -64662_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. -64663_main_MSG_AUTO_MD5=Auto fingerprint -64664_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. -64665_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_EDIT_RES=Edit resource -64673_main_MSG_TPL_USE_MACROS=The current template is using macros.\^Do you want to cancel this action? -64674_main_REMOVE_SHELL=Remove from shell context menu -64675_main_S_OFF=Switch OFF -64676_main_S_ON{1}=Switch ON -64677_main_LOG=Log -64678_main_MSG_RE_NOIP=You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected. -64679_main_MSG_TRAY_DEF=%ip%\^Uptime: %uptime%\^Downloads: %downloads% -64680_main_MSG_CLEAN_START=Clean start -64681_main_MSG_RESTORE_BAK=A file system backup has been created for a system shutdown.\^Do you want to restore this backup? -64682_main_MSG_EXT_ADDR_FAIL=Search for external address failed -64683_main_MSG_TO_EXPERT=Switch to expert mode. -64684_main_MSG_DONT_LOG_HINT=Select the files/folder you don't want to be logged,\^then right click and select "Don't log". -64685_main_MSG_DL_PERC=Downloading %d%% -64686_main_MSG_UNINSTALL_WARN=Delete HFS and all settings? -64687_main_MSG_NUM_ADDR=In this moment there are %d different addresses -64688_main_MSG_SELF_6=You are behind a router.\^Ensure it is configured to forward port %s to your computer. -64689_main_MSG_SELF_7=You may be behind a firewall.\^Ensure nothing is blocking HFS. -64690_main_MSG_RET_EXT=Retrieving external address... -64691_main_MSG_SELF_CANT_ON=Unable to switch the server on -64692_main_MSG_SELF_CANT_LIST=Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1 -64693_main_MSG_SELF_CANT_S=Self test doesn't support HTTPS.\^It's likely it won't work. -64694_main_MSG_SELF_ING=Self testing... -64695_main_MSG_TEST_CANC=Test cancelled -64696_main_MSG_TEST_INET=Testing internet connection... -64697_main_MSG_SELF_UNAV=Sorry, the test is unavailable at the moment -64698_main_MSG_SELF_NO_INET=Your internet connection does not work -64699_main_MSG_SELF_NO_ANSWER=The test failed: server does not answer. -64700_main_MSG_OPEN_BROW=Open directly in browser -64701_main_MSG_OPEN_BROW_LONG="Suggest" the browser to open directly the specified files.\^Other files should pop up a save dialog. -64702_main_MSG_HIDE_PORT=You should not use this option unless you really know its meaning.\^Continue? -64703_main_MSG_EVENTS_HLP=For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts -64704_main_MSG_DISAB_FIND_EXT=This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience. -64705_main_MSG_ENT_URL=Enter URL -64706_main_MSG_ENT_URL_LONG=Enter URL for updating.\^%ip% will be translated to your external IP. -64707_main_MSG_ENT_USR=Enter user -64708_main_MSG_ENT_PWD=Enter password -64709_main_MSG_ENT_HOST=Enter host -64710_main_MSG_ENT_HOST_LONG=Enter domain (full form!) -64711_main_MSG_HOST_FORM=Please, enter it in the FULL form, with dots -64712_main_MSG_MIN_SPACE=Min disk space -64713_main_MSG_MIN_SPACE_LONG=The upload will fail if your disk has less than the specified amount of free MegaBytes. -64714_main_MSG_REN_PART=Rename partial uploads -64715_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. -64716_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. -64717_main_MSG_SELF_OK=The test is successful. The server should be working fine. -64718_main_MSG_SELF_OK_PORT=Port %s is not working, but another working port has been found and set: %s. -64719_main_MSG_SELF_3=You may be behind a router or firewall. -64720_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 -64721_main_MSG_SET_URL=Set URL -64722_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 -64723_main_MSG_REALM=Login realm -64724_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 -64725_main_MSG_INACT_TIMEOUT=Connection inactivity timeout -64726_main_MSG_INACT_TIMEOUT_LONG=The connection is kicked after a timeout.\^Specify in seconds.\^Leave blank to get no timeout. -64727_main_MSG_CHANGES_LOST=All changes will be lost\^Continue? -64728_main_MSG_FLAG_NEW=Flag new files -64729_main_MSG_FLAG_NEW_LONG=Enter the number of MINUTES files stay flagged from their addition.\^Leave blank to disable. -64730_main_MSG_DONT_LOG_MASK=Do not log address -64731_main_MSG_DONT_LOG_MASK_LONG=Any event from the following IP address mask will be not logged. -64732_main_MSG_CUST_IP=Custom IP addresses -64733_main_MSG_CUST_IP_LONG=Specify your addresses, each per line -64734_main_MSG_NO_EXT_IP=Can't find external address\^( %s ) -64735_main_MSG_RESET_TOT=Do you want to reset total in/out? -64736_main_MSG_LOADING_VFS=Loading VFS -64737_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. -64738_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. -64739_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". -64740_main_MSG_AUTO_DISABLED=Because of the problems encountered in loading,\^automatic saving has been disabled\^until you save manually or load another one. -64741_main_MSG_CORRUPTED=This file does not contain valid data. -64742_main_MSG_MACROS_FOUND=!!!!!!!!! DANGER !!!!!!!!!\^This file contains macros.\^Don't accept macros from people you don't trust.\^\^Trust this file? -64743_main_MSG_UPD_INFO=Last stable version: %s\^\^Last untested version: %s\^ -64744_main_MSG_NEWER=There's a new version available online: %s -64745_main_MSG_SRC_UPD=Searching for updates... -64746_main_ARE_EXPERT{1}=You are in Expert mode -64747_main_ARE_EASY=You are in Easy mode -64748_main_SW2EXPERT=Switch to Expert mode -64749_main_SW2EASY=Switch to Easy mode -64750_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. -64751_main_MSG_LOG_FILE=Log file -64752_main_MSG_ZLIB=This file is corrupted (ZLIB). -64753_main_MSG_BAKAVAILABLE=This file is corrupted but a backup is available.\^Continue with backup? -64754_main_MSG_CANT_LOAD_SAVE=Cannot load or save while adding files -64755_main_MSG_OPEN_VFS=Open VFS file -64756_main_LIMIT{2}=Limit -64757_main_TOP_SPEED=Top speed -64758_main_MSG_MAX_BW=Max bandwidth (KB/s). -64759_main_MSG_LIM0=Zero is an effective limit.\^To disable instead, leave empty. -64760_main_MSG_MAX_BW_1=Max bandwidth for single address (KB/s). -64761_main_MSG_GRAPH_RATE_MENU=Graph refresh rate: %d (tenths of second) -64762_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". -64763_main_MSG_WARN_CONN=In this moment there are %d active connections -64764_main_MSG_WARN_ACT_DL=In this moment there are %d active downloads -64765_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". -64766_main_MSG_GRAPH_RATE{1}=Graph refresh rate -64767_main_MSG_TENTH_SEC=Tenths of second -64768_main_MSG_CON_STATE_IDLE=idle -64769_main_MSG_CON_STATE_REQ=requesting -64770_main_MSG_CON_STATE_RCV=receiving -64771_main_MSG_CON_STATE_THINK=thinking -64772_main_MSG_CON_STATE_REP=replying -64773_main_MSG_CON_STATE_SEND=sending -64774_main_MSG_CON_STATE_DISC=disconnected -64775_main_MSG_CON_PAUSED=paused -64776_main_MSG_CON_SENT=%s / %s sent -64777_main_MSG_CON_RECEIVED=%s / %s received -64778_main_MSG_TPL_RESET=The template has been reset -64779_main_MSG_ALLO_REF=Allowed referer -64780_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. -64781_main_MSG_BETTERSTOP=\^Going on may lead to problems.\^It is adviced to stop loading.\^Stop? -64782_main_MSG_BADCRC=This file is corrupted (CRC). -64744_main_MSG_NEWER{1}=This file has been created with a newer and incompatible version. -64784_main_MSG_VFS_ARCABLE=Archivable -64785_main_MSG_VFS_DEF_MASK=Default file mask: %s -64786_main_MSG_VFS_ACCESS=Access for -64787_main_MSG_VFS_UPLOAD=Upload allowed for -64788_main_MSG_VFS_DELETE=Delete allowed for -64789_main_MSG_VFS_COMMENT=Comment: %s -64790_main_MSG_VFS_REALM=Realm: %s -64791_main_MSG_VFS_DIFF_TPL=Diff template: %s -64792_main_MSG_VFS_FILES_FLT=Files filter: %s -64793_main_MSG_VFS_FLD_FLT=Folders filter: %s -64794_main_MSG_VFS_UPL_FLT=Upload filter: %s -64795_main_MSG_VFS_DONT_CONS_DL=Don't consider as download -64796_main_MSG_VFS_DONT_CONS_DL_MASK=Don't consider as download (mask): %s -64797_main_MSG_VFS_INHERITED= [inherited] -64798_main_MSG_VFS_EXTERNAL= [external] -64799_main_MSG_CON_HINT=Connection time: %s\^Last request time: %s\^Agent: %s -64800_main_VFS_ITEMS=VFS: %d items -64801_main_MSG_ITEM_EXISTS=%s item(s) already exists:\^%s\^\^Continue? -64802_main_MSG_INSTALL_TPL=Install this template? -64803_main_MSG_FOLDER_UPLOAD=Do you want ANYONE to be able to upload to this folder? -64804_main_MSG_VFS_DRAG_INVIT=Drag your files here -64805_main_MSG_VFS_URL=URL: %s -64806_main_MSG_VFS_PATH=Path: %s -64807_main_MSG_VFS_SIZE=Size: %s -64808_main_MSG_VFS_DLS=Downloads: %s -64809_main_MSG_VFS_INVISIBLE=Invisible -64810_main_MSG_VFS_DL_FORB=Download forbidden -64811_main_MSG_VFS_DONT_LOG=Don't log -64812_main_MSG_VFS_HIDE_EMPTY=Hidden if empty -64813_main_MSG_VFS_NOT_BROW=Not browsable -64814_main_MSG_VFS_HIDE_EMPTY_FLD=Hide empty folders -64815_main_MSG_VFS_HIDE_EXT=Hide extention -64816_main_MSG_CHK_UPD_FAIL=Check update: failed -64817_main_MSG_CHK_UPD_HEAD=Check update: -64818_main_MSG_CHK_UPD_VER=new version found: %s -64819_main_MSG_CHK_UPD_VER_EXT=Build #%s (current is #%s) -64820_main_MSG_CHK_UPD_NONE=no new version -64821_main_TO_CLIP=Copy to clipboard -64822_main_ALREADY_CLIP=Already in clipboard -64823_main_MSG_NO_SPACE=Out of space -64824_main_CONN=Connections: %d -64825_main_TOT_IN=Total In: %s -64826_main_TOT_OUT{1}=Total Out: %s -64827_main_OUT_SPEED=Out: %.1f KB/s -64828_main_IN_SPEED=In: %.1f KB/s -64829_main_BANS=Ban rules: %d -64830_main_MEMORY=Mem -64831_main_CUST_TPL=Customized template -64832_main_AUTOSAVE=Auto save every: -64833_main_SECONDS=%d seconds -64834_main_MSG_SPD_LIMIT_SING=Speed limit for single address -64835_main_MSG_SPD_LIMIT=Speed limit -64836_main_MSG_AUTO_SAVE=Auto-save %s -64837_main_MSG_AUTO_SAVE_LONG=Auto-save %s.\^Specify in seconds.\^Leave blank to disable. -64838_main_MSG_MIN=We don't accept less than %d -64839_main_MSG_BAN=Your ban configuration may have been screwed up.\^Please verify it. -64840_main_MSG_CANT_SAVE_OPT=Can't save options there.\^Should I try to save to user registry? -64841_main_MSG_UPD_SAVE_ERROR=Cannot save the update -64842_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. -64843_main_MSG_UPD_WAIT=Waiting for last requests to be served, then we'll update -64844_main_MSG_UPD_DL=Downloading new version... -64845_main_MSG_UPDATE=You are invited to use the new version.\^\^Update now? -64846_main_MSG_REQUESTING=Requesting... -64847_main_MSG_CHK_UPD=Checking for updates -64848_main_MSG_LOG_UPL=Uploading %s -64849_main_MSG_LOG_UPLOADED=Fully uploaded %s - %s @ %sB/s -64850_main_MSG_LOG_UPL_FAIL=Upload failed %s -64851_main_MSG_LOG_DL=Fully downloaded - %s @ %sB/s - %s -64852_main_MSG_LOGIN_FAILED=Login failed -64853_main_MSG_MIN_DISK_REACHED=Minimum disk space reached. -64854_main_MSG_UPL_NAME_FORB=File name or extension forbidden. -64855_main_MSG_UPL_CANT_CREATE=Error creating file. -64856_main_FINGERPRINT=Create fingerprint on addition under %d KB -64857_main_NO_FINGERPRINT=Create fingerprint on addition: disabled -64858_main_MSG_SAVE_VFS=Your current file system is not saved.\^Save it? -64859_main_MSG_INP_COMMENT=Please insert a comment for "%s".\^You should use HTML:
for break line. -64860_main_MSG_FILE_ADD_ABORT=File addition was aborted.\^The list of files is incomplete. -64861_main_MSG_ADDING=Adding item #%d -64862_main_MSG_INV_FILENAME=Invalid filename -64863_main_MSG_DELETE=Delete? -64864_main_MSG_PORT_USED_BY=It is already used by %s -64865_main_MSG_PORT_BLOCKED=Something is blocking, maybe your system firewall. -64866_main_MSG_KICK_ALL=There are %d connections open.\^Do you want to close them now? -64867_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. -64868_main_MSG_LOG_SERVER_START=Server start -64869_main_MSG_LOG_SERVER_STOP=Server stop -64870_main_MSG_LOG_CONNECTED=Connected -64871_main_MSG_LOG_DISC_SRV=Disconnected by server -64872_main_MSG_LOG_DISC=Disconnected -64873_main_MSG_LOG_GOT=Got %d bytes -64874_main_MSG_LOG_BYTES_SENT=%s bytes sent -64875_main_MSG_LOG_SERVED=Served %s -64876_main_MSG_LOG_HEAD=Served head -64877_main_MSG_LOG_NOT_MOD=Not modified, use cache -64878_main_MSG_LOG_REDIR=Redirected to %s -64879_main_MSG_LOG_NOT_SERVED=Not served: %d - %s -64880_main_MSG_DDNS_nohost=specified hostname does not exist -64881_main_MSG_DDNS_notyours=specified hostname belongs to another username -64882_main_MSG_DDNS_numhost=too many or too few hosts found -64883_main_MSG_DDNS_abuse=specified hostname is blocked for update abuse -64884_main_MSG_DDNS_dnserr=server error -64885_main_MSG_DDNS_911=server error -64886_main_MSG_DDNS_notdonator=an option specified requires payment -64887_main_MSG_DDNS_badagent=banned client -64888_main_MSG_BAN_MASK=Ban IP mask -64889_main_MSG_IP_MASK_LONG=You can edit the address.\^Masks and ranges are allowed. -64890_main_MSG_KICK_ADDR=There are %d open connections from this address.\^Do you want to kick them all now? -64891_main_MSG_BAN_ALREADY=This IP address is already banned -64892_main_MSG_BAN_CMT=Ban comment -64893_main_MSG_BAN_CMT_LONG=A comment for this ban... -64894_main_MSG_BREAK_DYN_DNS=This option is NOT compatible with "dynamic dns updater".\^Continue? -64895_main_MSG_CANT_OPEN_PORT=Cannot open port. -64896_main_MSG_NO_TEMP=Cannot save temporary file -64897_main_MSG_ERROR_REGISTRY=Can't write to registry.\^You may lack necessary rights. -64898_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. -64899_main_MSG_ADD_TO_HFS="Add to HFS" has been added to your Window's Explorer right-click menu. -64900_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) -64901_main_MSG_COMM_ERROR=Network error. Request failed. -64902_main_MSG_DDNS_NO_REPLY=no reply -64903_main_MSG_DDNS_OK=successful -64904_main_MSG_DDNS_UNK=unknown reply: %s -64905_main_MSG_DDNS_ERR=error: %s -64906_main_MSG_DDNS_REQ=DNS update requested for %s: %s -64907_main_MSG_DDNS_DOING=Updating dynamic DNS... -64908_main_MSG_DDNS_FAIL=DNS update failed: %s\^User intervention is required. -64909_main_MSG_DDNS_REPLY_SIZE=%d bytes reply -64910_main_MSG_DDNS_badauth=invalid user/password -64911_main_MSG_DDNS_notfqdn=incomplete hostname, required form aaa.bbb.com -64912_main_MSG_MAX_SIM_ADDR{1}=Max simultaneous addresses -64913_main_MSG_MAX_SIM_ADDR_DL=Max simultaneous addresses downloading -64914_main_MSG_MAX_SIM_DL_SING{2}=Max simultaneous downloads from single address -64915_main_MSG_MAX_SIM_DL=Max simultaneous downloads -64916_main_MSG_SET_LIMIT=Set limit -64917_main_MSG_UNPROTECTED_LINKS=Links are NOT actually protected.\^The feature is there to be used with the "list protected items only..." option.\^Continue? -64918_main_MSG_SAME_NAME=An item with the same name is already present in this folder.\^Continue? -64919_main_MSG_CONTINUE=Continue? -64920_main_MSG_PROCESSING=Processing... -64921_main_MSG_SPEED_KBS=%.1f kB/s -64922_main_MSG_OPTIONS_SAVED=Options saved -64923_main_MSG_SOME_LOCKED=Some items were not affected because locked -64924_main_MSG_ITEM_LOCKED=The item is locked -64925_main_MSG_INVALID_VALUE=Invalid value -64926_main_MSG_EMPTY_NO_LIMIT=Leave blank to get no limits. -64927_main_MSG_ADDRESSES_EXCEED=The following addresses exceed the limit:\^%s -64935_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. -64936_main_S_PORT_LABEL=Port: %s -64937_main_S_PORT_ANY=any -64938_main_DISABLED=disabled -64939_main_S_OK=Ok -64940_main_MSG_MENU_VAL= (%s) -64941_main_MSG_DL_TIMEOUT{1}=No downloads timeout -64942_main_MSG_MAX_CON=Max connections -64943_main_MSG_MAX_CON_SING=Max connections from single address +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\^ +64752_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{1}=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_CON_HINT=Connection time: %s\^Last request time: %s\^Agent: %s +64769_main_MSG_CON_STATE_IDLE=idle +64770_main_MSG_CON_STATE_REQ=requesting +64771_main_MSG_CON_STATE_RCV=receiving +64772_main_MSG_CON_STATE_THINK=thinking +64773_main_MSG_CON_STATE_REP=replying +64774_main_MSG_CON_STATE_SEND=sending +64775_main_MSG_CON_STATE_DISC=disconnected +64776_main_MSG_CON_PAUSED=paused +64777_main_MSG_CON_SENT=%s / %s sent +64778_main_MSG_CON_RECEIVED=%s / %s received +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_EXT=Hide extention +64785_main_MSG_VFS_ARCABLE=Archivable +64786_main_MSG_VFS_DEF_MASK=Default file mask: %s +64787_main_MSG_VFS_ACCESS=Access for +64788_main_MSG_VFS_UPLOAD=Upload allowed for +64789_main_MSG_VFS_DELETE=Delete allowed for +64790_main_MSG_VFS_COMMENT=Comment: %s +64791_main_MSG_VFS_REALM=Realm: %s +64792_main_MSG_VFS_DIFF_TPL=Diff template: %s +64793_main_MSG_VFS_FILES_FLT=Files filter: %s +64794_main_MSG_VFS_FLD_FLT=Folders filter: %s +64795_main_MSG_VFS_UPL_FLT=Upload filter: %s +64796_main_MSG_VFS_DONT_CONS_DL=Don't consider as download +64797_main_MSG_VFS_DONT_CONS_DL_MASK=Don't consider as download (mask): %s +64798_main_MSG_VFS_INHERITED= [inherited] +64799_main_MSG_VFS_EXTERNAL= [external] +64800_main_CUST_TPL=Customized template +64801_main_VFS_ITEMS=VFS: %d items +64802_main_MSG_ITEM_EXISTS=%s item(s) already exists:\^%s\^\^Continue? +64803_main_MSG_INSTALL_TPL=Install this template? +64804_main_MSG_FOLDER_UPLOAD=Do you want ANYONE to be able to upload to this folder? +64805_main_MSG_VFS_DRAG_INVIT=Drag your files here +64806_main_MSG_VFS_URL=URL: %s +64807_main_MSG_VFS_PATH=Path: %s +64808_main_MSG_VFS_SIZE=Size: %s +64809_main_MSG_VFS_DLS=Downloads: %s +64810_main_MSG_VFS_INVISIBLE=Invisible +64811_main_MSG_VFS_DL_FORB=Download forbidden +64812_main_MSG_VFS_DONT_LOG=Don't log +64813_main_MSG_VFS_HIDE_EMPTY=Hidden if empty +64814_main_MSG_VFS_NOT_BROW=Not browsable +64815_main_MSG_VFS_HIDE_EMPTY_FLD=Hide empty folders +64816_main_MSG_CHK_UPD=Checking for updates +64817_main_MSG_CHK_UPD_FAIL=Check update: failed +64818_main_MSG_CHK_UPD_HEAD=Check update: +64819_main_MSG_CHK_UPD_VER=new version found: %s +64820_main_MSG_CHK_UPD_VER_EXT=Build #%s (current is #%s) +64821_main_MSG_CHK_UPD_NONE=no new version +64822_main_TO_CLIP=Copy to clipboard +64823_main_ALREADY_CLIP=Already in clipboard +64824_main_MSG_NO_SPACE=Out of space +64825_main_CONN=Connections: %d +64826_main_TOT_IN=Total In: %s +64827_main_TOT_OUT{1}=Total Out: %s +64828_main_OUT_SPEED=Out: %.1f KB/s +64829_main_IN_SPEED=In: %.1f KB/s +64830_main_BANS=Ban rules: %d +64831_main_MEMORY=Mem +64832_main_MSG_DELETE=Delete? +64833_main_AUTOSAVE=Auto save every: +64834_main_SECONDS=%d seconds +64835_main_MSG_SPD_LIMIT_SING=Speed limit for single address +64836_main_MSG_SPD_LIMIT=Speed limit +64837_main_MSG_AUTO_SAVE=Auto-save %s +64838_main_MSG_AUTO_SAVE_LONG=Auto-save %s.\^Specify in seconds.\^Leave blank to disable. +64839_main_MSG_MIN=We don't accept less than %d +64840_main_MSG_BAN=Your ban configuration may have been screwed up.\^Please verify it. +64841_main_MSG_CANT_SAVE_OPT=Can't save options there.\^Should I try to save to user registry? +64842_main_MSG_UPD_SAVE_ERROR=Cannot save the update +64843_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. +64844_main_MSG_UPD_WAIT=Waiting for last requests to be served, then we'll update +64845_main_MSG_UPD_DL=Downloading new version... +64846_main_MSG_UPDATE=You are invited to use the new version.\^\^Update now? +64847_main_MSG_REQUESTING=Requesting... +64848_main_MSG_LOG_NOT_SERVED=Not served: %d - %s +64849_main_MSG_LOG_UPL=Uploading %s +64850_main_MSG_LOG_UPLOADED=Fully uploaded %s - %s @ %sB/s +64851_main_MSG_LOG_UPL_FAIL=Upload failed %s +64852_main_MSG_LOG_DL=Fully downloaded - %s @ %sB/s - %s +64853_main_MSG_LOGIN_FAILED=Login failed +64854_main_MSG_MIN_DISK_REACHED=Minimum disk space reached. +64855_main_MSG_UPL_NAME_FORB=File name or extension forbidden. +64856_main_MSG_UPL_CANT_CREATE=Error creating file. +64857_main_FINGERPRINT=Create fingerprint on addition under %d KB +64858_main_NO_FINGERPRINT=Create fingerprint on addition: disabled +64859_main_MSG_SAVE_VFS=Your current file system is not saved.\^Save it? +64860_main_MSG_INP_COMMENT=Please insert a comment for "%s".\^You should use HTML:
for break line. +64861_main_MSG_FILE_ADD_ABORT=File addition was aborted.\^The list of files is incomplete. +64862_main_MSG_ADDING=Adding item #%d +64863_main_MSG_INV_FILENAME=Invalid filename +64864_main_MSG_CANT_OPEN_PORT=Cannot open port. +64865_main_MSG_PORT_USED_BY=It is already used by %s +64866_main_MSG_PORT_BLOCKED=Something is blocking, maybe your system firewall. +64867_main_MSG_KICK_ALL=There are %d connections open.\^Do you want to close them now? +64868_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. +64869_main_MSG_LOG_SERVER_START=Server start +64870_main_MSG_LOG_SERVER_STOP=Server stop +64871_main_MSG_LOG_CONNECTED=Connected +64872_main_MSG_LOG_DISC_SRV=Disconnected by server +64873_main_MSG_LOG_DISC=Disconnected +64874_main_MSG_LOG_GOT=Got %d bytes +64875_main_MSG_LOG_BYTES_SENT=%s bytes sent +64876_main_MSG_LOG_SERVED=Served %s +64877_main_MSG_LOG_HEAD=Served head +64878_main_MSG_LOG_NOT_MOD=Not modified, use cache +64879_main_MSG_LOG_REDIR=Redirected to %s +64880_main_MSG_DDNS_notfqdn=incomplete hostname, required form aaa.bbb.com +64881_main_MSG_DDNS_nohost=specified hostname does not exist +64882_main_MSG_DDNS_notyours=specified hostname belongs to another username +64883_main_MSG_DDNS_numhost=too many or too few hosts found +64884_main_MSG_DDNS_abuse=specified hostname is blocked for update abuse +64885_main_MSG_DDNS_dnserr=server error +64886_main_MSG_DDNS_911=server error +64887_main_MSG_DDNS_notdonator=an option specified requires payment +64888_main_MSG_DDNS_badagent=banned client +64889_main_MSG_BAN_MASK=Ban IP mask +64890_main_MSG_IP_MASK_LONG=You can edit the address.\^Masks and ranges are allowed. +64891_main_MSG_KICK_ADDR=There are %d open connections from this address.\^Do you want to kick them all now? +64892_main_MSG_BAN_ALREADY=This IP address is already banned +64893_main_MSG_BAN_CMT=Ban comment +64894_main_MSG_BAN_CMT_LONG=A comment for this ban... +64895_main_MSG_BREAK_DYN_DNS=This option is NOT compatible with "dynamic dns updater".\^Continue? +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_DDNS_NO_REPLY=no reply +64904_main_MSG_DDNS_OK=successful +64905_main_MSG_DDNS_UNK=unknown reply: %s +64906_main_MSG_DDNS_ERR=error: %s +64907_main_MSG_DDNS_REQ=DNS update requested for %s: %s +64908_main_MSG_DDNS_DOING=Updating dynamic DNS... +64909_main_MSG_DDNS_FAIL=DNS update failed: %s\^User intervention is required. +64910_main_MSG_DDNS_REPLY_SIZE=%d bytes reply +64911_main_MSG_DDNS_badauth=invalid user/password +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) diff --git a/main.pas b/main.pas index ce1abd7..80f1209 100644 --- a/main.pas +++ b/main.pas @@ -17,7 +17,6 @@ This file is part of HFS ~ HTTP File Server. along with HFS; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } -{$A+,B-,C+,E-,F-,G+,H+,I-,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,X+,Y+,Z1} {$INCLUDE defs.inc } unit main; @@ -36,8 +35,8 @@ uses HSlib, traylib, monoLib, progFrmLib, classesLib; const - VERSION = '2.4.0 RC5'; - VERSION_BUILD = '317'; + VERSION = '2.4.0 RC6'; + VERSION_BUILD = '318'; VERSION_STABLE = {$IFDEF STABLE } TRUE {$ELSE} FALSE {$ENDIF}; CURRENT_VFS_FORMAT :integer = 1; CRLF = #13#10; @@ -386,7 +385,7 @@ type str:string; int:integer; end; - + TmainFrm = class(TForm) filemenu: TPopupMenu; newfolder1: TMenuItem; @@ -2508,7 +2507,7 @@ begin result:=FALSE; if not isFolder() then exit; listing:=TfileListing.create(); -//** i fear it is not ok to use fromFolder() to know if the folder is empty, because it gives empty also for unallowed folders. +//** i fear it is not ok to use fromFolder() to know if the folder is empty, because it gives empty also for unallowed folders. listing.fromFolder( self, cd, FALSE, 1 ); result:= length(listing.dir) = 0; listing.free; @@ -2611,7 +2610,7 @@ end; // fixTreeStructure function Tfile.getParent():Tfile; begin -if node = NIL then +if node = NIL then exit(NIL); if node.data <> self then // the tree structure is unreliable, at least on DISPLAYCHANGE event. This will workaround it fixTreeStructure(mainFrm.filesBox.Items[0]); @@ -2852,7 +2851,7 @@ result:=''; diff:=''; runPath:=''; f:=self; -if assigned(outInherited) then outInherited^:=FALSE; +if assigned(outInherited) then outInherited^:=FALSE; if assigned(outFromDisk) then outFromDisk^:=FALSE; first:=TRUE; while assigned(f) do @@ -3093,7 +3092,7 @@ f:=self; while assigned(f) do begin list:=f.accounts[FA_ACCESS]; // shortcut - + if (username = '') and stringExists(USER_ANONYMOUS, list, TRUE) then break; // first check in user/pass if (f.user > '') and sameText(f.user, username) and (f.pwd = password) then break; @@ -3107,7 +3106,7 @@ while assigned(f) do if assigned(a) and (a.pwd = password) and (stringExists(USER_ANY_ACCOUNT, list, TRUE) or (findEnabledLinkedAccount(a, list, TRUE) <> NIL)) then break; - + exit; end; // there's a user/pass restriction, but the password didn't match (if we got this far). We didn't exit before to give accounts a chance. @@ -3212,7 +3211,7 @@ end; // getSafeHost function nodeIsLocked(n:Ttreenode):boolean; begin -if (n = NIL) or (n.data = NIL) then +if (n = NIL) or (n.data = NIL) then exit(FALSE); result:=nodeToFile(n).isLocked(); end; // nodeIsLocked @@ -3274,7 +3273,7 @@ var while i < length(parts) do begin if parts[i] = '.' then - goto REMOVE; // 10+ years have passed since the last time i used labels in pascal. It's a thrill. + goto REMOVE; // 10+ years have passed since the last time i used labels in pascal. It's a thrill. if parts[i] <> '..' then begin inc(i); @@ -3605,48 +3604,12 @@ var fast.append(s); end; // handleItem -const ip2availability: Tdictionary = NIL; -const folderConcurrents: integer = 0; -const MAX_CONCURRENTS = 3; - - procedure updateAvailability(); - var - pair: Tpair; - t: Tdatetime; - begin - t:=now(); - if folderConcurrents = MAX_CONCURRENTS then // serving multiple addresses at max capacity, let's give a grace period for others - ip2availability[cd.address]:=t + 1/SECONDS - else - ip2availability.Remove(cd.address); - dec(folderConcurrents); - // purge leftovers - for pair in ip2availability do - if pair.Value < t then - ip2availability.Remove(pair.Key); - end; - - function available():boolean; - begin - if ip2availability = NIL then - ip2availability:=Tdictionary.create(); - try - if ip2availability[cd.address] > now() then // this specific address has to wait? - exit(FALSE); - except - end; - if folderConcurrents >= MAX_CONCURRENTS then // max number of concurrent folder loading, others are postponed - exit(FALSE); - inc(folderConcurrents); - ip2availability.AddOrSetValue(cd.address, now()+1); - result:=TRUE; - end; // available - var i, n: integer; f: Tfile; useList: boolean; mainSection: PtplSection; + antiDos: TantiDos; begin result:=''; if (folder = NIL) or not folder.isFolder() then exit; @@ -3677,12 +3640,9 @@ try exit; useList:=not mainSection.noList; - if useList and not available() then - begin - cd.conn.reply.mode:=HRM_OVERLOAD; - cd.conn.addHeader('Refresh: '+intToStr(1+random(2))); // random for less collisions - exit('Please wait, server busy'); - end; + antiDos:=TantiDos.create(); + if useList and not antiDos.accept(cd.conn, cd.address) then + exit(cd.conn.reply.body); fullEncode:=FALSE; ofsRelUrl:=length(folder.url(fullEncode))+1; @@ -3792,8 +3752,7 @@ try result:=replaceText(result, '%build-time%', floatToStrF((now()-buildTime)*SECONDS, ffFixed, 7,3) ); finally - if useList then - updateAvailability(); + freeAndNIL(antiDos); folder.unlock(); diffTpl.free; end; @@ -5098,10 +5057,10 @@ var for s in getFilesSelection() do begin selection:=TRUE; - if dirCrossing(s) then + if dirCrossing(s) then continue; ft:=findFilebyURL(s, f); - if ft = NIL then + if ft = NIL then continue; try if not ft.accessFor(data) then @@ -5124,6 +5083,8 @@ var end; end; // addSelection + var + antiDos: TantiDos; begin if not f.hasRecursive(FA_ARCHIVABLE) then begin @@ -5139,38 +5100,46 @@ var noFolders:=not stringExists(data.postVars.values['nofolders'], ['','0','false']); itsAsearch:=data.urlvars.values['search'] > ''; - tar:=TtarStream.create(); // this is freed by ThttpSrv + antiDos:=TantiDos.create; try - tar.fileNamesOEM:=oemTarChk.checked; - addSelection(); - if not selection then - addFolder(f); + tar:=TtarStream.create(); // this is freed by ThttpSrv + try + tar.fileNamesOEM:=oemTarChk.checked; + addSelection(); + if not selection then + if antiDos.accept(data.conn, data.address) then + addFolder(f) + else + exit; - if tar.count = 0 then - begin - tar.free; - data.disconnectReason:='There is no file you are allowed to download'; - getPage('deny', data, f); - exit; + if tar.count = 0 then + begin + tar.free; + data.disconnectReason:='There is no file you are allowed to download'; + getPage('deny', data, f); + exit; + end; + data.fileXferStart:=now(); + conn.reply.mode:=HRM_REPLY; + conn.reply.contentType:=DEFAULT_MIME; + conn.reply.bodyMode:=RBM_STREAM; + conn.reply.bodyStream:=tar; + + if f.name = '' then exit; // can this really happen? + data.lastFN:=if_(f.name='/', 'home', f.name) + +'.'+if_(selection, 'selection', if_(itsAsearch, 'search', 'folder')) + +'.tar'; + data.lastFN:=first(eventToFilename('archive name', [ + '%archive-name%', data.lastFN, + '%mode%', if_(selection, 'selection','folder'), + '%archive-size%', intToStr(tar.size) + ]), data.lastFN); + if not noContentdispositionChk.checked then + addContentDisposition(); + except tar.free end; - data.fileXferStart:=now(); - conn.reply.mode:=HRM_REPLY; - conn.reply.contentType:=DEFAULT_MIME; - conn.reply.bodyMode:=RBM_STREAM; - conn.reply.bodyStream:=tar; - - if f.name = '' then exit; // can this really happen? - data.lastFN:=if_(f.name='/', 'home', f.name) - +'.'+if_(selection, 'selection', if_(itsAsearch, 'search', 'folder')) - +'.tar'; - data.lastFN:=first(eventToFilename('archive name', [ - '%archive-name%', data.lastFN, - '%mode%', if_(selection, 'selection','folder'), - '%archive-size%', intToStr(tar.size) - ]), data.lastFN); - if not noContentdispositionChk.checked then - addContentDisposition(); - except tar.free end; + finally freeAndNIL(antiDos) + end; end; // serveTar procedure checkCurrentAddress(); @@ -5245,10 +5214,10 @@ var getPage('deny', data); exit; end; - + if conn.reply.contentType = '' then conn.reply.contentType:=ansistring(if_(trim(getTill('<', s))='', 'text/html', 'text/plain'))+'; charset=utf-8'; - if conn.reply.mode = HRM_IGNORE then + if conn.reply.mode = HRM_IGNORE then conn.reply.mode:=HRM_REPLY; conn.reply.bodyMode:=RBM_STRING; conn.reply.body:=UTF8encode(s); @@ -5344,7 +5313,7 @@ var except end; if data.session.ttl < 0 then - exit('expired'); + exit('expired'); data.account:=acc; data.session.user:=acc.user; data.user:=acc.user; @@ -5352,7 +5321,7 @@ var data.session.redirect:='.'; runEventScript('login') end; //urlAuth - + var b: boolean; s: string; @@ -5626,7 +5595,7 @@ var s:=''; if (s > '') and f.isFolder() and not ansiStartsText('special:', s) then with tplFromFile(f) do // temporarily builds from diff tpls - try + try section:=getsection(s); if assigned(section) and section.public then // it has to exist and be accessible begin @@ -5635,7 +5604,7 @@ var getPage(s, data, f, me()); exit; end; - finally free + finally free end; if f.isFolder() and not (FA_BROWSABLE in f.flags) @@ -5727,7 +5696,7 @@ var conn.addHeader('ETag: '+getEtag(f.resource)); except end; } - + data.fileXferStart:=now(); if data.countAsDownload and (flashOn = 'download') then flash(); @@ -6222,7 +6191,7 @@ if f.isFile() and fingerprintsChk.checked and (autoFingerprint > 0) then end; except end; - + if (f.resource = '') or not f.isVirtualFolder() then exit; // virtual folders must be run at addition-time if findFirst(f.resource+'\*',faAnyfile, sr) <> 0 then exit; @@ -6957,7 +6926,7 @@ var // account properties are separated by pipes t:=chop('|',s); p:=chop(':',t); // get property name - if p = '' then + if p = '' then continue; if p = 'login' then begin @@ -6966,15 +6935,15 @@ var a.user:=chop(':',t); a.pwd:=t; end - else if p = 'enabled' then + else if p = 'enabled' then a.enabled:=yes(t) - else if p = 'no-limits' then + else if p = 'no-limits' then a.noLimits:=yes(t) - else if p = 'group' then + else if p = 'group' then a.group:=yes(t) - else if p = 'redir' then + else if p = 'redir' then a.redir:=t - else if p = 'link' then + else if p = 'link' then a.link:=split(':',t) else if p = 'notes' then a.notes:=UTF8ToString(unzipCfgProp(ansistring(t))) @@ -7291,7 +7260,7 @@ end; // setcfg function loadCfg(var ini,tpl:string):boolean; - // until 2.2 the template could be kept in the registry, so we need to move it now. + // until 2.2 the template could be kept in the registry, so we need to move it now. // returns true if the registry source can be deleted function moveLegacyTpl(tpl:string):boolean; begin @@ -8012,7 +7981,7 @@ var if not stringExists(defaultIP, getPossibleAddresses()) then // previous address not available anymore (it happens using dial-up) findSimilarIP(defaultIP); - + if searchbetteripChk.checked and not stringExists(defaultIP, customIPs) // we don't mess with custom IPs and isLocalIP(defaultIP) then // we prefer non-local addresses @@ -8619,7 +8588,7 @@ try kind:=if_(res = mrYes, 'virtual', 'real'); end; - if kind = 'virtual' then + if kind = 'virtual' then include(f.flags, FA_VIRTUAL); end; @@ -9209,7 +9178,7 @@ end; function TmainFrm.appEventsHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; begin callHelp:=FALSE; // avoid exception to be thrown -result:=FALSE; +result:=FALSE; end; procedure TmainFrm.appEventsMinimize(Sender: TObject); @@ -9231,7 +9200,7 @@ if userInteraction.disabled then exit; case ev of TE_RCLICK: begin - setForegroundWindow(handle); // application.bringToFront() will act up when the window is minimized: the popped up menu will stay up forever + setForegroundWindow(handle); // application.bringToFront() will act up when the window is minimized: the popped up menu will stay up forever with mouse.cursorPos do menu.popup(x,y); end; @@ -9943,7 +9912,7 @@ var i: integer; begin if mi.shortcut = sc then mi.click(); -for i:=0 to mi.count-1 do resendShortcut(mi.items[i], sc); +for i:=0 to mi.count-1 do resendShortcut(mi.items[i], sc); end; procedure TmainFrm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -11300,7 +11269,7 @@ if i = sbarIdxs.banStatus then BannedIPaddresses1Click(NIL); if i = sbarIdxs.customTpl then Edit1Click(NIL); if i = sbarIdxs.oos then Minimumdiskspace1Click(NIL); if i = sbarIdxs.out then Speedlimit1Click(NIL); -if i = sbarIdxs.notSaved then Savefilesystem1Click(NIL); +if i = sbarIdxs.notSaved then Savefilesystem1Click(NIL); end; procedure TmainFrm.sbarMouseDown(Sender: TObject; Button: TMouseButton; @@ -11316,7 +11285,7 @@ resourcestring MSG_DISAB_FIND_EXT = 'This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience.'; begin dyndns.url:=url; -if url = '' then exit; +if url = '' then exit; // this function is called when setting any dyndns service. // calling it from somewhere else may make the following test unsuitable if mainfrm.findExtOnStartupChk.checked then @@ -11523,7 +11492,7 @@ resourcestring http.agent:=HFS_HTTP_AGENT; try http.get() except // a redirection will result in an exception - if (http.statusCode < 300) or (http.statusCode >= 400) then exit; + if (http.statusCode < 300) or (http.statusCode >= 400) then exit; result:=TRUE; host:=http.hostname; port:=http.ctrlSocket.Port; @@ -12134,7 +12103,7 @@ and only1instanceChk.checked and not mono.master then if not cfgLoaded then setTplText(); - + processParams_before(params); if not quitASAP then @@ -12279,7 +12248,7 @@ end; // purgeFilesCB procedure TmainFrm.Properties1Click(Sender: TObject); begin -if selectedFile = NIL then exit; +if selectedFile = NIL then exit; filepropFrm:=TfilepropFrm.Create(mainFrm); try @@ -12477,7 +12446,7 @@ while current > '' do 'dynamic-dns-user', 'dynamic-dns-host', 'ips-ever', 'ips-ever-connected', 'icon-masks-user-images', 'last-external-address', 'last-dialog-folder']) then continue; - + defV:=default.values[k]; if defV = v then continue; if k = 'dynamic-dns-updater' then @@ -12723,7 +12692,7 @@ for I := 0 to Form.ControlCount-1 do else if Ctrl is TEdit then Edit := TEdit(Ctrl); end; - + Edit.SetBounds(Prompt.Left, Prompt.Top + Prompt.Height + 5, max(200, Prompt.Width), Edit.Height); Form.ClientWidth := (Edit.Left * 2) + Edit.Width; ButtonTop := Edit.Top + Edit.Height + 15; diff --git a/scriptLib.pas b/scriptLib.pas index 3632e11..f56f2dc 100644 --- a/scriptLib.pas +++ b/scriptLib.pas @@ -955,9 +955,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 diff --git a/todo.txt b/todo.txt index 362eb14..7737085 100644 --- a/todo.txt +++ b/todo.txt @@ -35,6 +35,7 @@ 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: 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 @@ -53,7 +54,7 @@ document: new event [login] ? in getPage() many %symbols% are translated in a way incompatible with {.section.} ? Windows Script Interfaces ? {.image|src=file|width=x|dst=outfile.} -+ 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