The problem is only evident with devices and only if
the device uses the
UpnpRegisterRootDevice2 entry point. It appears as if
the SDK authors
realized that UpnpRegisterRootDevice was simplistic and
inflexible and
added UpnpRegisterRootDevice2 later in development.
Perhaps at some
point these two functions could be collapsed into one.
With UpnpRegisterRootDevice2 it is possible to generate
the device
description document dynamically and have the internal
web server serve
an in-memory copy of the document as opposed to a file.
This is actually
a very useful technique and ixmlPrintDocument is the
means to get an
in-memory copy of the XML description document given a
DOM tree. Just
one problem. ixmlPrintDocument does not produce a valid
XML document
because it leaves out the XML document prolog. I
discovered this when
testing with control points based on Microsoft Windows
UPnP framework.
The Microsoft implementation will silently ignore any
UPnP devices whose
description document is malformed and that includes
omitting the XML
prolog.
In the UPnP SDK ixmlPrintDocument had been #define'd to
be ixmlPrintNode
which prints XML elements. The fix I believe is to have
to independent
functions, ixmlPrintDocument and ixmlPrintNode (same
for the toString
versions) where the Document functions include the
prolog and the Node
functions omit it. The attached patch (which I'll also
post on the SF
site) creates the new Document functions which prepends
the prolog and
replaces every instance of ixmlPrintDocument with
ixmlPrintNode because
the two are now no longer interchangeable (except in
configure_urlbase()
in the file urlconfig.c, because here you do want a
document).
add ixmlPrintDocument implementation and call it correctly
Logged In: YES
user_id=1404737
I applied the patch, added to CVS (seems like I
m not able to close it)