Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libnpupnp for openSUSE:Factory checked in at 2026-03-26 21:12:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libnpupnp (Old) and /work/SRC/openSUSE:Factory/.libnpupnp.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libnpupnp" Thu Mar 26 21:12:12 2026 rev:11 rq:1342925 version:6.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libnpupnp/libnpupnp.changes 2025-11-25 15:55:05.664165793 +0100 +++ /work/SRC/openSUSE:Factory/.libnpupnp.new.8177/libnpupnp.changes 2026-03-27 06:43:23.746842000 +0100 @@ -0,0 +1,10 @@ +------------------------------------------------------------------- +Mon Mar 23 19:23:42 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 6.3.0 + * Disable expat usage by default. Seems to work fine with the + internal XML parser. + * Improve logging subsystem (switch subsystems logging through + environ). + +------------------------------------------------------------------- Old: ---- libnpupnp-6.2.3.tar.gz libnpupnp-6.2.3.tar.gz.asc New: ---- libnpupnp-6.3.0.tar.gz libnpupnp-6.3.0.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libnpupnp.spec ++++++ --- /var/tmp/diff_new_pack.dZ04CM/_old 2026-03-27 06:43:24.410869435 +0100 +++ /var/tmp/diff_new_pack.dZ04CM/_new 2026-03-27 06:43:24.414869600 +0100 @@ -1,7 +1,7 @@ # # spec file for package libnpupnp # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # Copyright (c) 2025 Andreas Stieger <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -19,7 +19,7 @@ %define so_ver 13 Name: libnpupnp -Version: 6.2.3 +Version: 6.3.0 Release: 0 Summary: A C++ base UPnP library, derived from Portable UPnP, a.k.a libupnp License: BSD-3-Clause ++++++ libnpupnp-6.2.3.tar.gz -> libnpupnp-6.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/macos/autoconfig-macos.h new/libnpupnp-6.3.0/macos/autoconfig-macos.h --- old/libnpupnp-6.2.3/macos/autoconfig-macos.h 2024-12-27 14:21:27.000000000 +0100 +++ new/libnpupnp-6.3.0/macos/autoconfig-macos.h 2026-03-20 09:04:19.000000000 +0100 @@ -41,7 +41,7 @@ #define UPNP_HAVE_WEBSERVER 1 /* Use expat */ -#define USE_EXPAT 1 +#undef USE_EXPAT /* File Offset size */ #define _FILE_OFFSET_BITS 64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/macos/upnpconfig-macos.h new/libnpupnp-6.3.0/macos/upnpconfig-macos.h --- old/libnpupnp-6.2.3/macos/upnpconfig-macos.h 2025-11-20 14:33:29.000000000 +0100 +++ new/libnpupnp-6.3.0/macos/upnpconfig-macos.h 2026-03-20 09:05:06.000000000 +0100 @@ -40,16 +40,16 @@ ***************************************************************************/ /** The library version (string) e.g. "1.3.0" */ -#define NPUPNP_VERSION_STRING "6.2.3" +#define NPUPNP_VERSION_STRING "6.3.0" /** Major version of the library */ #define NPUPNP_VERSION_MAJOR 6 /** Minor version of the library */ -#define NPUPNP_VERSION_MINOR 2 +#define NPUPNP_VERSION_MINOR 3 /** Patch version of the library */ -#define NPUPNP_VERSION_PATCH 3 +#define NPUPNP_VERSION_PATCH 0 /** The library version (numeric) e.g. 10300 means version 1.3.0 */ #define NPUPNP_VERSION \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/meson.build new/libnpupnp-6.3.0/meson.build --- old/libnpupnp-6.2.3/meson.build 2025-11-20 14:32:39.000000000 +0100 +++ new/libnpupnp-6.3.0/meson.build 2026-03-20 09:02:31.000000000 +0100 @@ -2,7 +2,7 @@ 'libnpupnp', 'cpp', license: 'BSD-3-Clause', - version: '6.2.3', + version: '6.3.0', default_options: 'cpp_std=c++17', meson_version: '>=0.49', ) @@ -14,7 +14,7 @@ # To keep consistent with autoconf: # Interface added (backward compat): increment first number, set last to 0 # Release with only internal changes: increment last number -npupnp_soversion_minor = '.3.1' +npupnp_soversion_minor = '.3.2' cpp = meson.get_compiler('cpp') deps = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/meson_options.txt new/libnpupnp-6.3.0/meson_options.txt --- old/libnpupnp-6.2.3/meson_options.txt 2024-12-27 14:21:27.000000000 +0100 +++ new/libnpupnp-6.3.0/meson_options.txt 2026-03-20 08:57:58.000000000 +0100 @@ -44,6 +44,7 @@ ) option('expat', type : 'feature', + value : 'disabled', description : 'Use expat', ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/qmk/libnpupnp.pro new/libnpupnp-6.3.0/qmk/libnpupnp.pro --- old/libnpupnp-6.2.3/qmk/libnpupnp.pro 2023-12-31 07:45:13.000000000 +0100 +++ new/libnpupnp-6.3.0/qmk/libnpupnp.pro 2026-03-20 09:04:36.000000000 +0100 @@ -45,19 +45,10 @@ DEFINES += CURL_STATICLIB DEFINES += PSAPI_VERSION=1 - ## W7 with mingw - contains(QMAKE_CC, gcc){ - INCLUDEPATH += $$PWD/../../expat-2.1.0/lib - INCLUDEPATH += $$PWD/../../curl-7.70.0/include - INCLUDEPATH += $$PWD/../../libmicrohttpd-0.9.65/src/include - QMAKE_CXXFLAGS += -std=c++17 -Wno-unused-parameter - } - # W10 with msvc 2017 contains(QMAKE_CC, cl){ QMAKE_CXXFLAGS += /std:c++17 DEFINES += NOMINMAX - INCLUDEPATH += $$PWD/../../expat.v140.2.4.1.1/build/native/include INCLUDEPATH += $$PWD/../../curl-7.70.0/include INCLUDEPATH += $$PWD/../../libmicrohttpd-0.9.65-w32-bin/x86_64/VS2019/Release-dll/ } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/qmk/libnpupnp.pro.user new/libnpupnp-6.3.0/qmk/libnpupnp.pro.user --- old/libnpupnp-6.2.3/qmk/libnpupnp.pro.user 2023-09-01 09:49:15.000000000 +0200 +++ new/libnpupnp-6.3.0/qmk/libnpupnp.pro.user 1970-01-01 01:00:00.000000000 +0100 @@ -1,406 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE QtCreatorProject> -<!-- Written by QtCreator 10.0.1, 2023-08-31T17:53:24. --> -<qtcreator> - <data> - <variable>EnvironmentId</variable> - <value type="QByteArray">{8650a31b-ca0b-4a0b-b764-066b30ac029a}</value> - </data> - <data> - <variable>ProjectExplorer.Project.ActiveTarget</variable> - <value type="qlonglong">0</value> - </data> - <data> - <variable>ProjectExplorer.Project.EditorSettings</variable> - <valuemap type="QVariantMap"> - <value type="bool" key="EditorConfiguration.AutoIndent">true</value> - <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value> - <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value> - <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> - <value type="QString" key="language">Cpp</value> - <valuemap type="QVariantMap" key="value"> - <value type="QByteArray" key="CurrentPreferences">CppGlobal</value> - </valuemap> - </valuemap> - <value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">1</value> - <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value> - <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> - <value type="int" key="EditorConfiguration.IndentSize">4</value> - <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value> - <value type="int" key="EditorConfiguration.MarginColumn">80</value> - <value type="bool" key="EditorConfiguration.MouseHiding">true</value> - <value type="bool" key="EditorConfiguration.MouseNavigation">true</value> - <value type="int" key="EditorConfiguration.PaddingMode">1</value> - <value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value> - <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> - <value type="bool" key="EditorConfiguration.ShowMargin">false</value> - <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> - <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value> - <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value> - <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> - <value type="int" key="EditorConfiguration.TabSize">8</value> - <value type="bool" key="EditorConfiguration.UseGlobal">true</value> - <value type="bool" key="EditorConfiguration.UseIndenter">false</value> - <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> - <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> - <value type="bool" key="EditorConfiguration.cleanIndentation">true</value> - <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> - <value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value> - <value type="bool" key="EditorConfiguration.inEntireDocument">false</value> - <value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value> - <value type="bool" key="EditorConfiguration.tintMarginArea">true</value> - </valuemap> - </data> - <data> - <variable>ProjectExplorer.Project.PluginSettings</variable> - <valuemap type="QVariantMap"> - <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"> - <value type="QString">-fno-delayed-template-parsing</value> - </valuelist> - <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value> - <value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value> - <valuemap type="QVariantMap" key="ClangTools"> - <value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value> - <value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value> - <value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value> - <value type="int" key="ClangTools.ParallelJobs">2</value> - <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/> - <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/> - <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/> - <value type="bool" key="ClangTools.UseGlobalSettings">true</value> - </valuemap> - </valuemap> - </data> - <data> - <variable>ProjectExplorer.Project.Target.0</variable> - <valuemap type="QVariantMap"> - <value type="QString" key="DeviceType">Desktop</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.5.2 MSVC2019 64bit</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.5.2 MSVC2019 64bit</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.652.win64_msvc2019_64_kit</value> - <value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value> - <value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> - <value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> - <value type="int" key="EnableQmlDebugging">0</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\bill\Documents\upnp\npupnp\build-libnpupnp-Desktop_Qt_6_5_2_MSVC2019_64bit-Debug</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/bill/Documents/upnp/npupnp/build-libnpupnp-Desktop_Qt_6_5_2_MSVC2019_64bit-Debug</value> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> - <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> - <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> - <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\bill\Documents\upnp\npupnp\build-libnpupnp-Desktop_Qt_6_5_2_MSVC2019_64bit-Release</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/bill/Documents/upnp/npupnp/build-libnpupnp-Desktop_Qt_6_5_2_MSVC2019_64bit-Release</value> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> - <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> - <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> - <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> - <value type="int" key="QtQuickCompiler">0</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> - <value type="int" key="EnableQmlDebugging">0</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\bill\Documents\upnp\npupnp\build-libnpupnp-Desktop_Qt_6_5_2_MSVC2019_64bit-Profile</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/bill/Documents/upnp/npupnp/build-libnpupnp-Desktop_Qt_6_5_2_MSVC2019_64bit-Profile</value> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> - <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> - <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> - <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> - <value type="int" key="QtQuickCompiler">0</value> - <value type="int" key="SeparateDebugInfo">0</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> - <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/> - <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> - <valuelist type="QVariantList" key="CustomOutputParsers"/> - <value type="int" key="PE.EnvironmentAspect.Base">2</value> - <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> - <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value> - <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> - <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> - <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> - <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value> - </valuemap> - </data> - <data> - <variable>ProjectExplorer.Project.Target.1</variable> - <valuemap type="QVariantMap"> - <value type="QString" key="DeviceType">Desktop</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.2 MSVC2019 32bit</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.2 MSVC2019 32bit</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5152.win32_msvc2019_kit</value> - <value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value> - <value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> - <value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> - <value type="int" key="EnableQmlDebugging">0</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\bill\Documents\upnp\npupnp\qmk\..\build-libnpupnp-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/bill/Documents/upnp/npupnp/build-libnpupnp-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug</value> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> - <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> - <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> - <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\bill\Documents\upnp\npupnp\qmk\..\build-libnpupnp-Desktop_Qt_5_15_2_MSVC2019_32bit-Release</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/bill/Documents/upnp/npupnp/build-libnpupnp-Desktop_Qt_5_15_2_MSVC2019_32bit-Release</value> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> - <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> - <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> - <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> - <value type="int" key="QtQuickCompiler">0</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> - <value type="int" key="EnableQmlDebugging">0</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\bill\Documents\upnp\npupnp\qmk\..\build-libnpupnp-Desktop_Qt_5_15_2_MSVC2019_32bit-Profile</value> - <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/bill/Documents/upnp/npupnp/build-libnpupnp-Desktop_Qt_5_15_2_MSVC2019_32bit-Profile</value> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> - <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> - <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> - </valuemap> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> - <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> - <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> - <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> - <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> - <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> - <value type="int" key="QtQuickCompiler">0</value> - <value type="int" key="SeparateDebugInfo">0</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> - <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> - <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> - </valuemap> - <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> - <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/> - <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> - <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> - <valuelist type="QVariantList" key="CustomOutputParsers"/> - <value type="int" key="PE.EnvironmentAspect.Base">2</value> - <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> - <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> - <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value> - <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> - <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> - <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> - <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> - </valuemap> - <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value> - </valuemap> - </data> - <data> - <variable>ProjectExplorer.Project.TargetCount</variable> - <value type="qlonglong">2</value> - </data> - <data> - <variable>ProjectExplorer.Project.Updater.FileVersion</variable> - <value type="int">22</value> - </data> - <data> - <variable>Version</variable> - <value type="int">22</value> - </data> -</qtcreator> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/api/upnpdebug.cpp new/libnpupnp-6.3.0/src/api/upnpdebug.cpp --- old/libnpupnp-6.2.3/src/api/upnpdebug.cpp 2025-04-28 08:23:45.000000000 +0200 +++ new/libnpupnp-6.3.0/src/api/upnpdebug.cpp 2026-01-18 08:21:23.000000000 +0100 @@ -33,6 +33,7 @@ #include "upnp.h" #include "upnpdebug.h" +#include "smallut.h" #include <cstdarg> #include <cstdlib> @@ -43,6 +44,7 @@ #include <sstream> #include <string> #include <thread> +#include <vector> /* Mutex to synchronize all the log file operations in the debug mode */ static std::mutex GlobalDebugMutex; @@ -59,6 +61,76 @@ /* Name of the output file. We keep a copy */ static std::string o_fileName; +enum SubSysDebugFlag {SSDF_NONE=0, SSDF_SSDP=0x1, SSDF_SOAP=0x2, SSDF_GENA=0x4, SSDF_TPOOL=0x8, + SSDF_MSERV=0x10, SSDF_DOM=0x20, SSDF_HTTP=0x40, SSDF_ALL=0xFFFF}; + +static unsigned int subsysdebug = SSDF_ALL; +static bool subsysdone; + +static void setModuleFlags() +{ + const char *cp = getenv("NPUPNP_DEBUGMODULES"); + if (cp) { + std::string scp(cp); + bool neg = false; + if (!scp.empty() && scp[0] == '-') { + neg = true; + subsysdebug = SSDF_ALL; + } else { + subsysdebug = SSDF_NONE; + } + if (neg) + scp = scp.substr(1); + std::vector<std::string> modules; + stringToStrings(scp, modules, ",;"); + for (const auto& mod : modules) { + if (mod == "SSDP") { + if (neg) { + subsysdebug &= ~SSDF_SSDP; + } else { + subsysdebug |= SSDF_SSDP; + } + } else if (mod == "SOAP") { + if (neg) { + subsysdebug &= ~SSDF_SOAP; + } else { + subsysdebug |= SSDF_SOAP; + } + } else if (mod == "GENA") { + if (neg) { + subsysdebug &= ~SSDF_GENA; + } else { + subsysdebug |= SSDF_GENA; + } + } else if (mod == "TPOOL") { + if (neg) { + subsysdebug &= ~SSDF_TPOOL; + } else { + subsysdebug |= SSDF_TPOOL; + } + } else if (mod == "MSERV") { + if (neg) { + subsysdebug &= ~SSDF_MSERV; + } else { + subsysdebug |= SSDF_MSERV; + } + } else if (mod == "DOM") { + if (neg) { + subsysdebug &= ~SSDF_DOM; + } else { + subsysdebug |= SSDF_DOM; + } + } else if (mod == "HTTP") { + if (neg) { + subsysdebug &= ~SSDF_HTTP; + } else { + subsysdebug |= SSDF_HTTP; + } + } + } + } +} + /* This can be called multiple times, for example to rotate the log file.*/ int UpnpInitLog(void) { @@ -127,14 +199,18 @@ static int DebugAtThisLevel(Upnp_LogLevel DLevel, Dbg_Module Module) { + if (!subsysdone) { + setModuleFlags(); + subsysdone = true; + } return (DLevel <= g_log_level) && - (DEBUG_ALL || - (Module == SSDP && DEBUG_SSDP) || - (Module == SOAP && DEBUG_SOAP) || - (Module == GENA && DEBUG_GENA) || - (Module == TPOOL && DEBUG_TPOOL) || - (Module == MSERV && DEBUG_MSERV) || - (Module == DOM && DEBUG_DOM) || (Module == HTTP && DEBUG_HTTP)); + ( (Module == SSDP && (subsysdebug & SSDF_SSDP)) || + (Module == SOAP && (subsysdebug & SSDF_SOAP)) || + (Module == GENA && (subsysdebug & SSDF_GENA)) || + (Module == TPOOL && (subsysdebug & SSDF_TPOOL)) || + (Module == MSERV && (subsysdebug & SSDF_MSERV)) || + (Module == DOM && (subsysdebug & SSDF_DOM)) || + (Module == HTTP && (subsysdebug & SSDF_HTTP))); } static void UpnpDisplayFileAndLine( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/gena/gena_ctrlpt.cpp new/libnpupnp-6.3.0/src/gena/gena_ctrlpt.cpp --- old/libnpupnp-6.2.3/src/gena/gena_ctrlpt.cpp 2025-09-16 15:23:24.000000000 +0200 +++ new/libnpupnp-6.3.0/src/gena/gena_ctrlpt.cpp 2026-01-18 09:19:05.000000000 +0100 @@ -629,16 +629,17 @@ void gena_process_notification_event(MHDTransaction *mhdt) { - UpnpPrintf(UPNP_ALL, GENA, __FILE__, __LINE__, "gena_process_notification_event\n"); - - auto itsid = mhdt->headers.find("sid"); /* get SID */ + auto itsid = mhdt->headers.find("sid"); if (itsid == mhdt->headers.end()) { http_SendStatusResponse(mhdt, HTTP_PRECONDITION_FAILED); UpnpPrintf(UPNP_DEBUG,GENA,__FILE__,__LINE__, "gena_process_notification_event: no SID\n"); return; } const std::string& sid = itsid->second; + UpnpPrintf(UPNP_ALL, GENA, __FILE__, __LINE__, "gena_process_notification_event. SID [%s]\n", + sid.c_str()); + auto itseq = mhdt->headers.find("seq"); /* get event key */ @@ -688,6 +689,14 @@ mhdt->postdata.c_str()); return; } + if (nullptr != UpnpGetDebugFile(UPNP_ALL, GENA)) { + // Using getdebugfile above to test the log level avoids running the loop for nothing. + for (const auto& [nm, value] : propset) { + UpnpPrintf(UPNP_ALL, GENA, __FILE__, __LINE__, + "gena_process_notification_event: [%s] -> [%s]\n", nm.c_str(), value.c_str()); + } + } + globalHndLock.lock(); /* get client info */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/inc/config.h new/libnpupnp-6.3.0/src/inc/config.h --- old/libnpupnp-6.2.3/src/inc/config.h 2025-06-17 17:40:35.000000000 +0200 +++ new/libnpupnp-6.3.0/src/inc/config.h 2026-01-18 07:42:52.000000000 +0100 @@ -351,25 +351,6 @@ /* @} */ - -/*! - * \name Other debugging features - * - * The UPnP SDK contains other features to aid in debugging: - * see <upnp/inc/upnpdebug.h> - */ - -#define DEBUG_ALL 1 -#define DEBUG_SSDP 0 -#define DEBUG_SOAP 0 -#define DEBUG_GENA 0 -#define DEBUG_TPOOL 0 -#define DEBUG_MSERV 0 -#define DEBUG_DOM 0 -#define DEBUG_HTTP 0 - - - /* * Set additional defines based on requested configuration */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/inc/expatmm.h new/libnpupnp-6.3.0/src/inc/expatmm.h --- old/libnpupnp-6.2.3/src/inc/expatmm.h 2024-04-07 08:39:08.000000000 +0200 +++ new/libnpupnp-6.3.0/src/inc/expatmm.h 2025-11-27 17:19:30.000000000 +0100 @@ -23,6 +23,7 @@ #ifndef _EXPATMM_EXPATXMLPARSER_H #define _EXPATMM_EXPATXMLPARSER_H +#include <stdio.h> #include <expat.h> #include <cstring> @@ -125,6 +126,9 @@ virtual XML_Size getLastErrorColumn(void) const { return last_error_column; } + virtual XML_Index getCurrentByteIndex(void) const { + return XML_GetCurrentByteIndex(expat_parser); + } virtual std::string getLastErrorMessage(void) const { return last_error_message; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/inc/picoxml.h new/libnpupnp-6.3.0/src/inc/picoxml.h --- old/libnpupnp-6.2.3/src/inc/picoxml.h 2024-12-27 14:37:39.000000000 +0100 +++ new/libnpupnp-6.3.0/src/inc/picoxml.h 2026-01-02 19:12:10.000000000 +0100 @@ -69,7 +69,7 @@ class PicoXMLParser { public: PicoXMLParser(const std::string& input) - : m_in(input), m_pos(0) {} + : m_input(input), m_pos(0) {} virtual ~PicoXMLParser() = default; PicoXMLParser(const PicoXMLParser&) = delete; @@ -85,7 +85,10 @@ virtual std::string getLastErrorMessage() { return m_reason.str(); } - + virtual std::string::size_type getCurrentByteIndex(void) { + return m_pos; + } + protected: /* Methods to be overriden */ @@ -143,9 +146,11 @@ }; std::vector<StackEl> m_path; + const std::string& m_input; + private: - const std::string& m_in; std::string::size_type m_pos{0}; + std::string::size_type m_tagstart{0}; std::stringstream m_reason; std::vector<std::string> m_tagstack; @@ -153,7 +158,7 @@ const std::map<std::string, std::string>& attrs, bool empty) { m_path.emplace_back(tagname); StackEl& lastelt = m_path.back(); - lastelt.start_index = m_pos; + lastelt.start_index = m_tagstart; lastelt.attributes = attrs; startElement(tagname, attrs); @@ -203,7 +208,7 @@ for (;;) { // Current char is '<' and the next char is not '?' - //std::cerr << "m_pos " << m_pos << " char " << m_in[m_pos] << "\n"; + //std::cerr << "m_pos " << m_pos << " char " << m_input[m_pos] << "\n"; // skipComment also processes bool wascomment; if (!skipComment(wascomment)) { @@ -218,13 +223,14 @@ } if (wascomment) continue; + m_tagstart = m_pos; m_pos++; if (nomore()) { m_reason << "EOF within tag"; return false; } std::string::size_type spos = m_pos; - int isendtag = m_in[m_pos] == '/' ? 1 : 0; + int isendtag = m_input[m_pos] == '/' ? 1 : 0; skipStr(">"); if (m_pos == std::string::npos || m_pos <= spos + 1) { @@ -232,13 +238,13 @@ return false; } - int emptyel = m_in[m_pos-2] == '/' ? 1 : 0; + int emptyel = m_input[m_pos-2] == '/' ? 1 : 0; if (emptyel && isendtag) { m_reason << "Bad tag </xx/> at cpos " << spos; return false; } - std::string tag = m_in.substr(spos + isendtag, m_pos - (spos + 1 + isendtag + emptyel)); + std::string tag = m_input.substr(spos + isendtag, m_pos - (spos + 1 + isendtag + emptyel)); //std::cerr << "TAG NAME [" << tag << "]\n"; trimtag(tag); std::map<std::string, std::string> attrs; @@ -263,12 +269,12 @@ bool _chardata() { std::string::size_type spos = m_pos; - m_pos = m_in.find("<", m_pos); + m_pos = m_input.find("<", m_pos); if (nomore()) { return true; } if (m_pos != spos) { - std::string data{unQuote(m_in.substr(spos, m_pos - spos))}; + std::string data{unQuote(m_input.substr(spos, m_pos - spos))}; if (m_unquoteError) { return false; } @@ -279,7 +285,7 @@ } bool nomore(int sz = 0) const { - return m_pos == std::string::npos || m_pos >= m_in.size() - sz; + return m_pos == std::string::npos || m_pos >= m_input.size() - sz; } bool skipWS(const std::string& in, std::string::size_type& pos) { if (pos == std::string::npos) @@ -290,7 +296,7 @@ bool skipStr(const std::string& str) { if (m_pos == std::string::npos) return false; - m_pos = m_in.find(str, m_pos); + m_pos = m_input.find(str, m_pos); if (m_pos != std::string::npos) m_pos += str.size(); return m_pos != std::string::npos; @@ -298,7 +304,7 @@ int peek(int sz = 0) const { if (nomore(sz)) return -1; - return m_in[m_pos + 1 + sz]; + return m_input[m_pos + 1 + sz]; } void trimtag(std::string& tag) { auto trimpos = tag.find_last_not_of(" \t\n\r"); @@ -308,13 +314,13 @@ bool skipDecl() { for (;;) { - if (!skipWS(m_in, m_pos)) { + if (!skipWS(m_input, m_pos)) { m_reason << "EOF during initial ws skip"; return true; } - if (m_in[m_pos] != '<') { + if (m_input[m_pos] != '<') { m_reason << "EOF file does not begin with decl/tag: m_pos " << - m_pos << " char [" << m_in[m_pos] << "]\n"; + m_pos << " char [" << m_input[m_pos] << "]\n"; return false; } if (peek() == '?') { @@ -334,9 +340,9 @@ if (nomore()) { return true; } - if (m_in[m_pos] != '<') { + if (m_input[m_pos] != '<') { m_reason << "Internal error: skipComment called with wrong " - "start: m_pos " << m_pos << " char [" << m_in[m_pos] << "]\n"; + "start: m_pos " << m_pos << " char [" << m_input[m_pos] << "]\n"; return false; } if (peek() == '!' && peek(1) == '-' && peek(2) == '-') { @@ -425,7 +431,7 @@ std::string out; out.reserve(s.size()); std::string::const_iterator it = s.begin(); - auto epos = 0; + std::string::size_type epos = 0; while (it != s.end()) { if (*it != '&') { out += *it++; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/inc/smallut.h new/libnpupnp-6.3.0/src/inc/smallut.h --- old/libnpupnp-6.2.3/src/inc/smallut.h 2025-11-01 11:05:08.000000000 +0100 +++ new/libnpupnp-6.3.0/src/inc/smallut.h 2026-02-10 17:24:58.000000000 +0100 @@ -86,6 +86,9 @@ extern void stringtoupper(std::string& io); extern std::string stringtoupper(const std::string& io); extern bool beginswith(const std::string& b, const std::string& sml); +inline bool startswith(const std::string& b, const std::string& sml) { + return beginswith(b, sml); +} extern bool endswith(const std::string& bg, const std::string& sml); #ifdef _WIN32 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/inc/upnpinet.h new/libnpupnp-6.3.0/src/inc/upnpinet.h --- old/libnpupnp-6.2.3/src/inc/upnpinet.h 2025-11-20 14:32:39.000000000 +0100 +++ new/libnpupnp-6.3.0/src/inc/upnpinet.h 2025-11-21 08:24:31.000000000 +0100 @@ -41,7 +41,7 @@ static inline int np_setsockopt( SOCKET sockfd, int level, int optname, const void *optval, socklen_t optlen) { #ifdef _WIN32 - return setsockopt(sockfd, level, optname, reinterpret_cast<const char*>(optval), optlen); + return setsockopt(sockfd, level, optname, static_cast<const char*>(optval), optlen); #else return setsockopt(sockfd, level, optname, optval, optlen); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/src/soap/soap_device.cpp new/libnpupnp-6.3.0/src/soap/soap_device.cpp --- old/libnpupnp-6.2.3/src/soap/soap_device.cpp 2025-04-28 12:24:40.000000000 +0200 +++ new/libnpupnp-6.3.0/src/soap/soap_device.cpp 2025-12-04 11:52:45.000000000 +0100 @@ -179,6 +179,8 @@ std::string outxml; protected: + /* !! Beware: if changed to use the attrs, and using picoxml, need to define + PICOXML_EXPAT_STARTELEMENT_COMPAT before the picoxml.h include */ void StartElement(const XML_Char *name, const XML_Char**) override { if (!m_isresp && m_path.size() >= 3) { outxml += std::string("<") + name + ">"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/windows/autoconfig-windows.h new/libnpupnp-6.3.0/windows/autoconfig-windows.h --- old/libnpupnp-6.2.3/windows/autoconfig-windows.h 2024-12-27 14:21:27.000000000 +0100 +++ new/libnpupnp-6.3.0/windows/autoconfig-windows.h 2026-03-20 09:04:01.000000000 +0100 @@ -46,7 +46,7 @@ #define UPNP_HAVE_WEBSERVER 1 /* Use expat */ -#define USE_EXPAT 1 +#undef USE_EXPAT /* File Offset size */ #define _FILE_OFFSET_BITS 64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnpupnp-6.2.3/windows/upnpconfig-windows.h new/libnpupnp-6.3.0/windows/upnpconfig-windows.h --- old/libnpupnp-6.2.3/windows/upnpconfig-windows.h 2025-11-20 14:33:29.000000000 +0100 +++ new/libnpupnp-6.3.0/windows/upnpconfig-windows.h 2026-03-20 09:05:06.000000000 +0100 @@ -40,16 +40,16 @@ ***************************************************************************/ /** The library version (string) e.g. "1.3.0" */ -#define NPUPNP_VERSION_STRING "6.2.3" +#define NPUPNP_VERSION_STRING "6.3.0" /** Major version of the library */ #define NPUPNP_VERSION_MAJOR 6 /** Minor version of the library */ -#define NPUPNP_VERSION_MINOR 2 +#define NPUPNP_VERSION_MINOR 3 /** Patch version of the library */ -#define NPUPNP_VERSION_PATCH 3 +#define NPUPNP_VERSION_PATCH 0 /** The library version (numeric) e.g. 10300 means version 1.3.0 */ #define NPUPNP_VERSION \
