Compare commits

..

10 Commits

Author SHA1 Message Date
Andrey Prygunkov
bbfcf07689 updated version string to "21.0" 2019-05-02 21:48:05 +02:00
Andrey Prygunkov
fd35e05b61 updated ChangeLog for v21.0 2019-05-02 21:45:50 +02:00
Andrey Prygunkov
3e0be12cb3 #629: added aarch64 binaries to Linux installer and Android installer 2019-04-20 23:11:14 +02:00
Andrey Prygunkov
d6e8f67927 #622, #135, ff69fbbeb9: fixed trimming of relative paths in config 2019-04-07 15:56:31 +02:00
Andrey Prygunkov
a159a1ff5a #612: better description of option UMask 2019-03-10 22:06:44 +01:00
Andrey Prygunkov
15f4955f38 #620: wildcards in option AuthorizedIP 2019-03-10 21:52:08 +01:00
Andrey Prygunkov
aac98b53ee #621: fixed: remote server could crash when feed with invalid api request 2019-03-10 13:54:53 +01:00
Andrey Prygunkov
fa4a5bb261 #618: 32-bit and 64-bit unrar and 7-zip on Windows 2019-03-04 01:11:44 +01:00
Andrey Prygunkov
d19c9b80e7 #611: removed suggestion of RC4 cipher 2019-02-28 21:31:08 +01:00
Andrey Prygunkov
c7716ae9b7 #351, #610, e3bd94189a: fixed: remote clients not displaying current download speed 2019-02-13 18:20:04 +01:00
17 changed files with 115 additions and 50 deletions

View File

@@ -1,6 +1,63 @@
nzbget-21.0:
- please see repository change log at
https://github.com/nzbget/nzbget/commits/develop
- reworked duplicate handling to support URLs, especially when using RSS
feeds:
- queue items added via URLs (to be fetched by nzbget) are no longer
immediately fetched;
- instead url-items are handled by duplicate check similar to nzb-items
and may be placed into history as duplicate backups;
- if an url-item needs to be downloaded as backup for a failed other item
the nzb-file is fetched via provided URL;
- this greatly reduces the number of nzbs fetched from indexers when using
RSS feeds and duplicate handling;
- improved support for Android devices:
- now providing a separate installer package for Android;
- the package contains binaries built using Android NDK;
- this improves compatibility with Android, in particular with Android 8,
where general Linux installer version of NZBGet didn't work anymore due
to security changes in Android;
- android installer app is updated to use the new android installer package
instead of general Linux package;
- thoroughly optimised the program to reduce power consumption in idle state:
- number of CPU wake ups in idle state has been reduced from hundreds times
per second to about only one per second;
- optimisations for large queues with thousands of items:
- speed up saving of queue state and reduced number of queue state savings;
- improved queue state format to reduce amount of state data saved during
downloading;
- in tests download speed for very large queue (16000 items) has been
increased from 45 MB/s to 300 MB/s (comparing to 400 MB/s with small
queue);
- added native support for aarch64 architecture (ARM 64 Bit CPU) in Linux and
Android installers;
- force par-check for nzbs without archives;
- added functional tests for unpack CRC error;
- click on nzbget logo in web-interface now switches to downloads tab instead
of showing "About dialog" which has been moved into settings;
- improved handling of files splitted via par2;
- added python 3 compatibility to EMail.py script;
- added python 3 compatibility to Logger.py script;
- proper UTF-8 encoding of email content in EMail.py script;
- improved error reporting for queue disk state corruption;
- updated unrar to 5.7 and 7-zip to 19.0;
- Windows installer now includes unrar in 32 bit and 64 bit variants;
- allowing wildcards in option AuthorizedIP;
- removed suggestion of RC4 cipher;
- better description of option UMask;
- integrated LGTM code analyser tool into project;
- fixed: failed downloads not having any par2- or archive- files were moved to
DestDir instead of remaining in InterDir;
- fixed crash when using FIPS version of OpenSSL;
- fixed compatibility issue with OpenSSL compiled without compression support;
- fixed deprecated OpenSSL calls;
- fixed potential crash in built-in web-server;
- fixed: statistics for session download time and speed may be way off on high
load;
- fixed many compilation warnings in GCC;
- fixed: macOS menubar widget could not connect if password contained special
characters;
- fixed: remote clients not displaying current download speed;
- fixed: remote server could crash when feed with invalid api request;
- fixed trimming of relative paths in config.
nzbget-20.0:
- massive performance optimisations in downloader:

20
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for nzbget 21.0-testing.
# Generated by GNU Autoconf 2.69 for nzbget 21.0.
#
# Report bugs to <hugbug@users.sourceforge.net>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='nzbget'
PACKAGE_TARNAME='nzbget'
PACKAGE_VERSION='21.0-testing'
PACKAGE_STRING='nzbget 21.0-testing'
PACKAGE_VERSION='21.0'
PACKAGE_STRING='nzbget 21.0'
PACKAGE_BUGREPORT='hugbug@users.sourceforge.net'
PACKAGE_URL=''
@@ -1348,7 +1348,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures nzbget 21.0-testing to adapt to many kinds of systems.
\`configure' configures nzbget 21.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1419,7 +1419,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of nzbget 21.0-testing:";;
short | recursive ) echo "Configuration of nzbget 21.0:";;
esac
cat <<\_ACEOF
@@ -1584,7 +1584,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
nzbget configure 21.0-testing
nzbget configure 21.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2053,7 +2053,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by nzbget $as_me 21.0-testing, which was
It was created by nzbget $as_me 21.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3026,7 +3026,7 @@ fi
# Define the identity of the package.
PACKAGE='nzbget'
VERSION='21.0-testing'
VERSION='21.0'
cat >>confdefs.h <<_ACEOF
@@ -9177,7 +9177,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by nzbget $as_me 21.0-testing, which was
This file was extended by nzbget $as_me 21.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9243,7 +9243,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
nzbget config.status 21.0-testing
nzbget config.status 21.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@@ -1,7 +1,7 @@
#
# This file is part of nzbget. See <http://nzbget.net>.
#
# Copyright (C) 2008-2018 Andrey Prygunkov <hugbug@users.sourceforge.net>
# Copyright (C) 2008-2019 Andrey Prygunkov <hugbug@users.sourceforge.net>
#
# 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
@@ -21,7 +21,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.65)
AC_INIT(nzbget, 21.0-testing, hugbug@users.sourceforge.net)
AC_INIT(nzbget, 21.0, hugbug@users.sourceforge.net)
AC_CONFIG_AUX_DIR(posix)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([foreign subdir-objects])

View File

@@ -642,8 +642,6 @@ void Options::CheckDir(CString& dir, const char* optionName,
FileSystem::NormalizePathSeparators((char*)usedir2);
dir = usedir2;
usedir2[usedir2.Length() - 1] = '\0';
SetOption(optionName, usedir2);
}

View File

@@ -675,7 +675,7 @@ void ListBinCommand::Execute()
Util::SplitInt64(remainingSize, &sizeHi, &sizeLo);
ListResponse.m_remainingSizeHi = htonl(sizeHi);
ListResponse.m_remainingSizeLo = htonl(sizeLo);
ListResponse.m_downloadRate = htonl(g_WorkState->GetSpeedLimit());
ListResponse.m_downloadLimit = htonl(g_WorkState->GetSpeedLimit());
ListResponse.m_downloadPaused = htonl(g_WorkState->GetPauseDownload());
ListResponse.m_postPaused = htonl(g_WorkState->GetPausePostProcess());
ListResponse.m_scanPaused = htonl(g_WorkState->GetPauseScan());

View File

@@ -541,9 +541,9 @@ bool RemoteClient::RequestServerList(bool files, bool groups, const char* patter
int averageSpeed = (int)(ntohl(ListResponse.m_downloadTimeSec) > 0 ? allBytes / ntohl(ListResponse.m_downloadTimeSec) : 0);
printf("Session download rate: %s\n", *Util::FormatSpeed(averageSpeed));
if (ntohl(ListResponse.m_downloadRate) > 0)
if (ntohl(ListResponse.m_downloadLimit) > 0)
{
printf("Speed limit: %s\n", *Util::FormatSpeed(ntohl(ListResponse.m_downloadRate)));
printf("Speed limit: %s\n", *Util::FormatSpeed(ntohl(ListResponse.m_downloadLimit)));
}
int sec = ntohl(ListResponse.m_upTimeSec);

View File

@@ -301,9 +301,10 @@ bool WebProcessor::IsAuthorizedIp(const char* remoteAddr)
// split option AuthorizedIP into tokens and check each token
bool authorized = false;
Tokenizer tok(g_Options->GetAuthorizedIp(), ",;");
while (const char* iP = tok.Next())
while (const char* ip = tok.Next())
{
if (!strcmp(iP, remoteIp))
WildMask mask(ip);
if (mask.Match(remoteIp))
{
authorized = true;
break;

View File

@@ -561,9 +561,7 @@ void XmlRpcProcessor::BuildResponse(const char* response, const char* callbackFu
void XmlRpcProcessor::BuildErrorResponse(int errCode, const char* errText)
{
ErrorXmlCommand command(errCode, errText);
command.SetRequest(m_request);
command.SetProtocol(m_protocol);
command.PrepareParams();
command.Execute();
BuildResponse(command.GetResponse(), "", command.GetFault(), nullptr);
}

View File

@@ -2,7 +2,7 @@
#
# This file is part of nzbget
#
# Copyright (C) 2015-2018 Andrey Prygunkov <hugbug@users.sourceforge.net>
# Copyright (C) 2015-2019 Andrey Prygunkov <hugbug@users.sourceforge.net>
#
# 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
@@ -25,7 +25,7 @@ set -o errexit
# Uncomment next line for debuging
#set -x
ALLTARGETS="dist i686 x86_64 armel armhf mipsel mipseb ppc6xx ppc500 x86_64-bsd i686-ndk armhf-ndk"
ALLTARGETS="dist i686 x86_64 armel armhf aarch64 mipsel mipseb ppc6xx ppc500 x86_64-bsd i686-ndk armhf-ndk aarch64-ndk"
ROOT=`pwd`
ROOTPATH=$PATH
OUTPUTDIR=$ROOT/output

View File

@@ -2,7 +2,7 @@
#
# This file is part of nzbget. See <http://nzbget.net>.
#
# Copyright (C) 2015-2018 Andrey Prygunkov <hugbug@users.sourceforge.net>
# Copyright (C) 2015-2019 Andrey Prygunkov <hugbug@users.sourceforge.net>
#
# 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
@@ -25,7 +25,7 @@ set -o errexit
# Uncomment next line for debuging
#set -x
ALLTARGETS="i686 x86_64 armel armhf mipsel mipseb ppc6xx ppc500 x86_64-bsd i686-ndk x86_64-ndk armhf-ndk aarch64-ndk"
ALLTARGETS="i686 x86_64 armel armhf aarch64 mipsel mipseb ppc6xx ppc500 x86_64-bsd i686-ndk x86_64-ndk armhf-ndk aarch64-ndk"
ROOT=`pwd`
OUTPUTDIR=$ROOT/setup
BUILDDIR=temp

View File

@@ -92,6 +92,7 @@ PrintHelp()
PrintArch "x86_64" " x86_64 - x86, 64 Bit"
PrintArch "armel" " armel - ARMv5/v6 (ARM9 and ARM11 families)"
PrintArch "armhf" " armhf - ARMv7/v8 (Cortex family)"
PrintArch "aarch64" " aarch64 - ARMv8, 64 Bit"
PrintArch "mipsel" " mipsel - MIPS (little endian)"
PrintArch "mipseb" " mipseb - MIPS (big endian)"
PrintArch "ppc6xx" " ppc6xx - PowerPC 6xx (603e series)"
@@ -188,9 +189,12 @@ DetectArch()
armv5*|armv6*|armel)
ARCH=armel
;;
armv7*|armv8*|aarch64)
armv7*|armv8*)
ARCH=armhf
;;
aarch64)
ARCH=aarch64
;;
ppc)
ARCH=ppcx
;;

View File

@@ -225,13 +225,6 @@ Server1.Encryption=no
#
# See http://nzbget.net/choosing-cipher for details.
#
# NOTE: One of the fastest cipher is RC4. To select it use the cipher string
# "RC4-MD5" (if NZBGet was configured to use OpenSSL) or
# "NONE:+VERS-TLS-ALL:+ARCFOUR-128:+RSA:+MD5:+COMP-ALL"
# (if NZBGet was configured to use GnuTLS). Note that RC4 is considered insecure
# by the IETF (http://tools.ietf.org/html/rfc7465), but may be sufficient for
# the usage of NZBGet.
#
# NOTE: You may get a TLS handshake error if the news server does
# not support the chosen cipher. You can also get an error "Could not
# select cipher for TLS" if the cipher string is not valid.
@@ -404,11 +397,13 @@ SecureKey=
# IP-addresses allowed to connect without authorization.
#
# Comma separated list of privileged IPs for easy access to NZBGet
# built-in web-server (web-interface and RPC). The connected clients
# have full unrestricted access.
# List of privileged IPs for easy access to NZBGet built-in web-server
# (web-interface and RPC). The connected clients have full unrestricted access.
#
# Example: 127.0.0.1,192.168.178.2.
# Separate entries with commas or semicolons. Use wildcard characters
# * and ? for pattern matching.
#
# Example: 127.0.0.1, 192.168.178.*
#
# NOTE: Do not use this option if the program works behind another
# web-server because all requests will have the address of this server.
@@ -454,12 +449,18 @@ UpdateCheck=stable
# current user id.
DaemonUsername=root
# Specify default umask (affects file permissions) for newly created
# files, POSIX only (000-1000).
# Specify default umask, POSIX only (000-1000).
#
# UMask determines the settings of a mask that controls how file permissions
# are set for newly created files and directories. Please note that UMask
# doesn't set file permissions directly, it merely filters out certain
# permissions. It also has very different effect from command "chmod", which
# you shouldn't confuse UMask with. Please read
# http://en.wikipedia.org/wiki/Umask for details.
#
# The value should be written in octal form (the same as for "umask" shell
# command).
# Empty value or value "1000" disable the setting of umask-mode; current
# Empty value or value "1000" disables the setting of umask-mode; current
# umask-mode (set via shell) is used in this case.
UMask=1000

View File

@@ -80,7 +80,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0-testing";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -101,7 +101,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0-testing";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -120,7 +120,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0-testing";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@@ -151,7 +151,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0-testing";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>

View File

@@ -25,7 +25,7 @@
<key>LSUIElement</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2007-2018 Andrey Prygunkov</string>
<string>Copyright © 2007-2019 Andrey Prygunkov</string>
<key>NSMainNibFile</key>
<string>MainApp</string>
<key>NSAppTransportSecurity</key>

View File

@@ -829,7 +829,6 @@ var Config = (new function($)
else if (option.caption.toLowerCase().indexOf('password') > -1 &&
option.name.toLowerCase() !== '*unpack:password')
{
console.log(option.caption);
option.type = 'password';
html += '<div class="password-field input-append">' +
'<input type="password" id="' + option.formId + '" value="' + Util.textToAttr(value) + '" class="editsmall">'+
@@ -879,6 +878,11 @@ var Config = (new function($)
htmldescr = htmldescr.replace(/&/g, '&amp;');
// add extra new line after Examples not ended with dot
htmldescr = htmldescr.replace(/Example:.*/g, function (match) {
return match + (Util.endsWith(match, '.') ? '' : '\n');
});
// replace URLs
exp = /(http:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
htmldescr = htmldescr.replace(exp, "<a href='$1'>$1</a>");

View File

@@ -3,7 +3,7 @@
rem
rem This file is part of nzbget
rem
rem Copyright (C) 2013-2017 Andrey Prygunkov <hugbug@users.sourceforge.net>
rem Copyright (C) 2013-2019 Andrey Prygunkov <hugbug@users.sourceforge.net>
rem
rem This program is free software; you can redistribute it and/or modify
rem it under the terms of the GNU General Public License as published by
@@ -241,6 +241,8 @@ xcopy /E scripts ..\distrib\NZBGet\scripts
if errorlevel 1 goto BUILD_FAILED
copy ..\..\image\* ..\distrib\NZBGet
copy ..\..\image\32\* ..\distrib\NZBGet\32
copy ..\..\image\64\* ..\distrib\NZBGet\64
if errorlevel 1 goto BUILD_FAILED
del /S ..\distrib\NZBGet\_*.*

View File

@@ -90,7 +90,7 @@ BEGIN
CTEXT "Version 15.0-testing-r1200",IDC_ABOUT_VERSION,16,70,144,8
CTEXT "Lightweight usenet downloader",IDC_STATIC,16,83,144,8
CTEXT "http://nzbget.net",IDC_ABOUT_HOMEPAGE,55,144,64,9,SS_NOTIFY
CTEXT "Copyright <20> 2007-2018 Andrey Prygunkov",IDC_STATIC,16,156,144,8
CTEXT "Copyright <20> 2007-2019 Andrey Prygunkov",IDC_STATIC,16,156,144,8
ICON "",IDC_ABOUT_ICON,67,7,21,20
CTEXT "NZBGet",IDC_ABOUT_NAME,16,51,144,16
CTEXT "The package includes other software; see program's folder for licenses.",IDC_STATIC,16,121,144,20