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    \

Reply via email to