From 2b4c5f816809ea25bab6d92c46df883291fdda20 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Sun, 6 May 2012 23:10:07 +0200 Subject: [PATCH 01/10] Added a custom tag (void*) to the Node object and a callback before freeing a Node. This to aid in resource management for a scripting language with auto-garbage collection. --- build/vc10/ixml.vcxproj | 4 ++-- ixml/inc/ixml.h | 44 ++++++++++++++++++++++++++++++++++++++- ixml/src/inc/ixmlparser.h | 19 +++++++++++++++++ ixml/src/ixml.c | 7 +++++++ ixml/src/ixmlparser.c | 14 +++++++++++++ ixml/src/node.c | 18 ++++++++++++++++ 6 files changed, 103 insertions(+), 3 deletions(-) diff --git a/build/vc10/ixml.vcxproj b/build/vc10/ixml.vcxproj index 5054848..192c688 100644 --- a/build/vc10/ixml.vcxproj +++ b/build/vc10/ixml.vcxproj @@ -1,4 +1,4 @@ - + @@ -158,7 +158,7 @@ Disabled ..\..\ixml\inc;..\..\ixml\src\inc;..\inc;..\..\upnp\inc;%(AdditionalIncludeDirectories) - DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_DEPRECATE;_AFX_SECURE_NO_WARNINGS;_AFX_SECURE_NO_DEPRECATE;_SECURE_ATL;_ATL_NO_COM_SUPPORT;_ATL_SECURE_NO_WARNINGS;_ATL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;SCRIPTSUPPORT;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_DEPRECATE;_AFX_SECURE_NO_WARNINGS;_AFX_SECURE_NO_DEPRECATE;_SECURE_ATL;_ATL_NO_COM_SUPPORT;_ATL_SECURE_NO_WARNINGS;_ATL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL diff --git a/ixml/inc/ixml.h b/ixml/inc/ixml.h index d58255d..36f7508 100644 --- a/ixml/inc/ixml.h +++ b/ixml/inc/ixml.h @@ -158,6 +158,13 @@ typedef struct _IXML_Document *Docptr; typedef struct _IXML_Node *Nodeptr; +#ifdef SCRIPTSUPPORT +/*! + * \brief Signature for GC support method, called before a node is freed. + */ +typedef void (*IXML_BeforeFreeNode_t) (Nodeptr obj); +#endif + /*! * \brief Data structure common to all types of nodes. @@ -178,6 +185,9 @@ typedef struct _IXML_Node Nodeptr nextSibling; Nodeptr firstAttr; Docptr ownerDocument; +#ifdef SCRIPTSUPPORT + void* ctag; // custom tag +#endif } IXML_Node; @@ -625,9 +635,29 @@ EXPORT_SPEC BOOL ixmlNode_hasAttributes( * \brief Frees a \b Node and all \b Nodes in its subtree. */ EXPORT_SPEC void ixmlNode_free( - /*! [in] The \b Node tree to free. */ + /*! [in] The \b Node tree to free. Before it is freed, the handler + * set by \b ixmlSetBeforeFree will be called, the order will be + * top-down. + */ IXML_Node *nodeptr); +#ifdef SCRIPTSUPPORT +/*! + * \brief Sets the custom tag for the node. + */ +EXPORT_SPEC void ixmlNode_setCTag( + /*! [in] The \b Node to which to attach the tag. */ + IXML_Node *nodeptr, + /*! [in] The \b tag to attach. */ + void *ctag); + +/*! + * \brief Gets the custom tag for the node. + */ +EXPORT_SPEC void* ixmlNode_getCTag( + /*! [in] The \b Node from which to get the tag. */ + IXML_Node *nodeptr); +#endif /* @} Interface Node */ @@ -1737,6 +1767,18 @@ EXPORT_SPEC void ixmlRelaxParser( */ char errorChar); +#ifdef SCRIPTSUPPORT +/*! + * \brief Sets the handler to call before a node is freed. + */ +EXPORT_SPEC void ixmlSetBeforeFree( + /*! [in] If \b hndlr is set to a function, it will be called before any + * node is freed, with the node as its parameter. This allows scripting + * languages to do their garbage collection, without maintaining their + * own tree structure. + */ + IXML_BeforeFreeNode_t hndlr); +#endif /*! * \brief Parses an XML text buffer converting it into an IXML DOM representation. diff --git a/ixml/src/inc/ixmlparser.h b/ixml/src/inc/ixmlparser.h index a58ba89..eb29e6b 100644 --- a/ixml/src/inc/ixmlparser.h +++ b/ixml/src/inc/ixmlparser.h @@ -120,6 +120,25 @@ void Parser_setErrorChar( /*! [in] The character to become the error character. */ char c); +#ifdef SCRIPTSUPPORT +/*! + * \brief Sets the handler to call before a node is freed. + * + * If \b hndlr is set to a function, it will be called before any + * node is freed, with the node as its parameter. This allows scripting + * languages to do their garbage collection, without maintaining their + * own tree structure. + */ +void Parser_setBeforeFree( + /*! [in] The handler callback to call before each node to be freed. */ + IXML_BeforeFreeNode_t hndlr); + +/*! + * \brief Gets the handler to call before a node is freed. + */ +IXML_BeforeFreeNode_t Parser_getBeforeFree(); +#endif + /*! * \brief Fees a node contents. diff --git a/ixml/src/ixml.c b/ixml/src/ixml.c index 2f7fc01..e33b6d6 100644 --- a/ixml/src/ixml.c +++ b/ixml/src/ixml.c @@ -417,6 +417,13 @@ void ixmlRelaxParser(char errorChar) Parser_setErrorChar(errorChar); } +#ifdef SCRIPTSUPPORT +void ixmlSetBeforeFree(IXML_BeforeFreeNode_t hndlr) +{ + Parser_setBeforeFree(hndlr); +} +#endif + int ixmlParseBufferEx(const char *buffer, IXML_Document **retDoc) { diff --git a/ixml/src/ixmlparser.c b/ixml/src/ixmlparser.c index c342272..2f54daf 100644 --- a/ixml/src/ixmlparser.c +++ b/ixml/src/ixmlparser.c @@ -55,6 +55,9 @@ static char g_error_char = '\0'; +#ifdef SCRIPTSUPPORT +static IXML_BeforeFreeNode_t Before_Free_callback; +#endif static const char LESSTHAN = '<'; @@ -2498,6 +2501,17 @@ void Parser_setErrorChar(char c) g_error_char = c; } +#ifdef SCRIPTSUPPORT +void Parser_setBeforeFree(IXML_BeforeFreeNode_t hndlr) +{ + Before_Free_callback = hndlr; +} + +IXML_BeforeFreeNode_t Parser_getBeforeFree() +{ + return Before_Free_callback; +} +#endif /*! * \brief Initializes a xml parser. diff --git a/ixml/src/node.c b/ixml/src/node.c index c20b841..6bb738a 100644 --- a/ixml/src/node.c +++ b/ixml/src/node.c @@ -107,6 +107,10 @@ static void ixmlNode_freeSingleNode( void ixmlNode_free(IXML_Node *nodeptr) { if (nodeptr != NULL) { +#ifdef SCRIPTSUPPORT + IXML_BeforeFreeNode_t hndlr = Parser_getBeforeFree(); + if (hndlr != NULL) hndlr(nodeptr); +#endif ixmlNode_free(nodeptr->firstChild); ixmlNode_free(nodeptr->nextSibling); ixmlNode_free(nodeptr->firstAttr); @@ -1377,3 +1381,17 @@ ErrorHandler: return IXML_INSUFFICIENT_MEMORY; } +#ifdef SCRIPTSUPPORT +void ixmlNode_setCTag(IXML_Node *nodeptr, void *ctag) +{ + if (nodeptr != NULL) nodeptr->ctag = ctag; +} + +void* ixmlNode_getCTag(IXML_Node *nodeptr) +{ + if (nodeptr != NULL) + return nodeptr->ctag; + else + return NULL; +} +#endif From f2cceaf021f984f7dd3dd6ac823712939ed07ad6 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Thu, 7 Jun 2012 23:30:03 +0200 Subject: [PATCH 02/10] cleanup of VC project, removing files from UPnP project that are part of IXML project --- build/vc10/.gitignore | 3 ++- build/vc10/libupnp.vcxproj | 15 +----------- build/vc10/libupnp.vcxproj.filters | 39 ------------------------------ 3 files changed, 3 insertions(+), 54 deletions(-) diff --git a/build/vc10/.gitignore b/build/vc10/.gitignore index 102253c..2c7023e 100644 --- a/build/vc10/.gitignore +++ b/build/vc10/.gitignore @@ -1,3 +1,4 @@ *.suo -*.user \ No newline at end of file +*.user +*.sdf \ No newline at end of file diff --git a/build/vc10/libupnp.vcxproj b/build/vc10/libupnp.vcxproj index 31e0006..5494c46 100644 --- a/build/vc10/libupnp.vcxproj +++ b/build/vc10/libupnp.vcxproj @@ -292,7 +292,7 @@ Disabled ..\inc;..\msvc;..\..\upnp\inc;..\..\upnp\src\inc;..\..\ixml\inc;..\..\ixml\src\inc;..\..\threadutil\inc;..\..\pthreads;..\..\pthreads\include;%(AdditionalIncludeDirectories) - DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_DEPRECATE;_AFX_SECURE_NO_WARNINGS;_AFX_SECURE_NO_DEPRECATE;_SECURE_ATL;_ATL_NO_COM_SUPPORT;_ATL_SECURE_NO_WARNINGS;_ATL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + DEBUG;WIN32;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;SCRIPTSUPPORT;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_DEPRECATE;_AFX_SECURE_NO_WARNINGS;_AFX_SECURE_NO_DEPRECATE;_SECURE_ATL;_ATL_NO_COM_SUPPORT;_ATL_SECURE_NO_WARNINGS;_ATL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -574,31 +574,20 @@ - - - - - - - - - - - @@ -615,8 +604,6 @@ - - diff --git a/build/vc10/libupnp.vcxproj.filters b/build/vc10/libupnp.vcxproj.filters index 1c25aaa..633ee69 100644 --- a/build/vc10/libupnp.vcxproj.filters +++ b/build/vc10/libupnp.vcxproj.filters @@ -17,9 +17,6 @@ sources - - sources - sources @@ -29,12 +26,6 @@ sources - - sources - - - sources - sources @@ -44,9 +35,6 @@ sources - - sources - sources @@ -62,18 +50,6 @@ sources - - sources - - - sources - - - sources - - - sources - sources @@ -83,15 +59,6 @@ sources - - sources - - - sources - - - sources - sources @@ -140,12 +107,6 @@ sources - - sources - - - sources - sources From 42dd1ad53394e68f02782229bfacc36040cf8891 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Thu, 7 Jun 2012 23:31:57 +0200 Subject: [PATCH 03/10] Small documentation updates and updating 2 parameters to the DOMString type for consistency. --- ixml/inc/ixml.h | 9 ++++++--- ixml/src/document.c | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ixml/inc/ixml.h b/ixml/inc/ixml.h index 36f7508..447aa20 100644 --- a/ixml/inc/ixml.h +++ b/ixml/inc/ixml.h @@ -273,6 +273,8 @@ extern "C" { * The \b Node interface forms the primary datatype for all other DOM * objects. Every other interface is derived from this interface, inheriting * its functionality. For more information, refer to DOM2-Core page 34. + * (Note: within the IXML library the NamedNodeMap and NodeList interfaces are + * the only interfaces that are not DOM objects and hence do not inherit from Node) * * @{ */ @@ -324,7 +326,8 @@ EXPORT_SPEC int ixmlNode_setNodeValue( /*! - * \brief Retrieves the type of a \b Node. + * \brief Retrieves the type of a \b Node. Note that not all possible + * return values are actually implemented. * * \return An enum IXML_NODE_TYPE representing the type of the \b Node. */ @@ -901,7 +904,7 @@ EXPORT_SPEC IXML_Attr *ixmlDocument_createAttribute( /*! [in] The owner \b Document of the new node. */ IXML_Document *doc, /*! [in] The name of the new attribute. */ - const char *name); + const DOMString name); /*! @@ -922,7 +925,7 @@ EXPORT_SPEC int ixmlDocument_createAttributeEx( /*! [in] The owner \b Document of the new node. */ IXML_Document *doc, /*! [in] The name of the new attribute. */ - const char *name, + const DOMString name, /*! [out] A pointer to a \b Attr where the new object will be stored. */ IXML_Attr **attrNode); diff --git a/ixml/src/document.c b/ixml/src/document.c index 9a72b0e..c6285c9 100644 --- a/ixml/src/document.c +++ b/ixml/src/document.c @@ -281,7 +281,7 @@ IXML_Node *ixmlDocument_createTextNode( int ixmlDocument_createAttributeEx( IXML_Document *doc, - const char *name, + const DOMString name, IXML_Attr **rtAttr) { IXML_Attr *attrNode = NULL; @@ -322,7 +322,7 @@ ErrorHandler: IXML_Attr *ixmlDocument_createAttribute( IXML_Document *doc, - const char *name) + const DOMString name) { IXML_Attr *attrNode = NULL; From cc69373a7d637df3e5de3be532b638e7e54a3ead Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Fri, 22 Jun 2012 20:59:52 +0200 Subject: [PATCH 04/10] Added the SCRIPTSUPPORT directive to the doxygen configfile so documentation will be generated --- Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doxyfile b/Doxyfile index d334ad3..2af481f 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1029,7 +1029,7 @@ INCLUDE_FILE_PATTERNS = # undefined via #undef or recursively expanded use the := operator # instead of the = operator. -PREDEFINED = DEBUG UPNP_HAVE_TOOLS INCLUDE_DEVICE_APIS INCLUDE_CLIENT_APIS EXCLUDE_GENA=0 EXCLUDE_DOM=0 +PREDEFINED = DEBUG UPNP_HAVE_TOOLS INCLUDE_DEVICE_APIS INCLUDE_CLIENT_APIS SCRIPTSUPPORT EXCLUDE_GENA=0 EXCLUDE_DOM=0 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. From 77b7ec848f06fddd6482a2beef9849c4a37deab7 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Tue, 3 Jul 2012 21:47:47 +0200 Subject: [PATCH 05/10] added ipch folder to ignore list Added documentation/usage of SCRIPTSUPPORT to the README file. --- .gitignore | 3 ++- README | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0515e66..43f3edb 100644 --- a/.gitignore +++ b/.gitignore @@ -109,4 +109,5 @@ docs/doxygen /build/vc10/out.vc9.Win32/Debug /build/vc10/out.vc10.Win32 /build/vc10/out.vc10.x64 -/pthreads \ No newline at end of file +/pthreads +/build/vc10/ipch \ No newline at end of file diff --git a/README b/README index 6347b9c..c7946ad 100644 --- a/README +++ b/README @@ -17,6 +17,7 @@ sections: 6. Product Release Notes 7. New Features 8. Support and Contact Information +9. IXML support for scriptinglanguages 1) Release Contents @@ -343,3 +344,53 @@ us know. * Other brands, names, and trademarks are the property of their respective owners. + +9. IXML support for scriptinglanguages +------------------------------------------- +The treestructure of XML documents created by IXML is hard to maintain when +creating a binding for a scripting language. Even when many elements may +never be used on the script side, it requires copying the entire tree +structure once you start accessing elements several levels deep. +Hence scriptsupport was added. To enable it compile while SCRIPTSUPPORT has +been defined. This allows control using only a list instead of a tree-like +structure, and only nodes actually accessed need to be created instead of +all the nodes in the tree. + +Here's how its supposed to work; +* The scriptsupport allows you to add a callback when a node is freed on + the C side, so appropriate action can be taken on the script side, see + function ixmlSetBeforeFree(). +* Instead of recreating the tree structure, an intermediate object should + be created only for the nodes actually accessed. The object should be + containing a pointer to the node and a 'valid flag' which is initially + set to TRUE (the valid flag, can simply be the pointer to the node being + NULL or not). Before creating the intermediate object, the custom tag + 'ctag' can be used to check whether one was already created. +* the node object gets an extra 'void* ctag' field, a custom tag to make a + cross reference to the script side intermediate object. It can be set + using ixmlNode_setCTag(), and read using ixmlNode_getCTag(). Whenever + a new intermediate object is created, the ctag of the coirresponding + node should be set to point to this intermediate object. +* The tree structure traversal is done on the C side (looking up parents, + children and siblings) +* Every intermediate object created should be kept in a list (preferably a + key-value list, where the key is the pointer to the node and the value is + the pointer to the intermediate object) +* when the callback is called, the node should be looked up in the list, + the flag set to false, the pointer to the C-side node be cleared and on + the C-side the ctag should be cleared. +* whenever the intermediate object is accessed and its flag is set to False, + an error should be thrown that the XML document has been closed. + +Freeing resources can be done in 2 ways, C side by simply calling the free +node methods, or script side by the garbage collector of the scriptengine. +Scriptside steps; +* if the valid flag is set to False (XML document is closed), then the + intermediate object can be destroyed, no further action +* if the node has a parent, then the intermediate object can be destroyed + after the ctag on the corresponding node has been cleared. Nothing needs + to be freed on the C-side. +* if the node has no parent, then the node must be freed on the C side by + calling the corresponding free node methods. This will result in a chain + of callbacks closing the node and all underlying nodes. + From 6c2346a526bc720602ff4f53a9402beeaeaa8d0b Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Fri, 6 Jul 2012 02:11:12 +0200 Subject: [PATCH 06/10] added debug output to ignore list changed some project settings to make debugging available (PDB file didn't match) --- .gitignore | 4 +++- build/vc10/libupnp.vcxproj | 2 -- build/vc10/tvdevice.vcxproj | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 43f3edb..f01fc8f 100644 --- a/.gitignore +++ b/.gitignore @@ -110,4 +110,6 @@ docs/doxygen /build/vc10/out.vc10.Win32 /build/vc10/out.vc10.x64 /pthreads -/build/vc10/ipch \ No newline at end of file +/build/vc10/ipch +/build/vc10/IUpnpErrFile.txt +/build/vc10/IUpnpInfoFile.txt \ No newline at end of file diff --git a/build/vc10/libupnp.vcxproj b/build/vc10/libupnp.vcxproj index 5494c46..50cf350 100644 --- a/build/vc10/libupnp.vcxproj +++ b/build/vc10/libupnp.vcxproj @@ -300,7 +300,6 @@ $(IntDir) $(IntDir) - $(IntDir)$(ProjectName).pdb Level3 @@ -318,7 +317,6 @@ true ..\..\pthreads\;..\..\pthreads\lib;$(OutDir)..\lib\ixml;$(OutDir)..\lib\threadutil;%(AdditionalLibraryDirectories) true - $(OutDir)$(ProjectName).pdb Windows false diff --git a/build/vc10/tvdevice.vcxproj b/build/vc10/tvdevice.vcxproj index 1446778..e5763ac 100644 --- a/build/vc10/tvdevice.vcxproj +++ b/build/vc10/tvdevice.vcxproj @@ -163,7 +163,6 @@ EnableFastChecks MultiThreadedDebugDLL $(IntDir) - $(IntDir)$(ProjectName).pdb Level3 ProgramDatabase CompileAsC @@ -172,7 +171,6 @@ pthreadVC2.lib;ixml.lib;threadutil.lib;libupnp.lib;%(AdditionalDependencies) ..\..\pthreads\;..\..\pthreads\lib;$(OutDir)..\lib\libupnp;$(OutDir)..\lib\threadutil;$(OutDir)..\lib\ixml;$(OutDir)..\bin;%(AdditionalLibraryDirectories) true - $(OutDir)$(ProjectName).pdb Console MachineX86 From d00e4944814b6a5ee38645e4ca756b626e51728c Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Wed, 11 Jul 2012 23:18:23 +0200 Subject: [PATCH 07/10] Updated parameter to UpnpAcceptSubscriptionExt to a 'const' declaration, this aligns with UpnpAcceptSubscription --- upnp/inc/upnp.h | 2 +- upnp/src/api/upnpapi.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/upnp/inc/upnp.h b/upnp/inc/upnp.h index 8508a47..894702e 100644 --- a/upnp/inc/upnp.h +++ b/upnp/inc/upnp.h @@ -1492,7 +1492,7 @@ EXPORT_SPEC int UpnpAcceptSubscriptionExt( * Plug and Play Device Architecture specification. */ IXML_Document *PropSet, /*! [in] The subscription ID of the newly registered control point. */ - Upnp_SID SubsId); + const Upnp_SID SubsId); /*! * \brief Sends out an event change notification to all control points diff --git a/upnp/src/api/upnpapi.c b/upnp/src/api/upnpapi.c index 2a24b52..f231f67 100644 --- a/upnp/src/api/upnpapi.c +++ b/upnp/src/api/upnpapi.c @@ -2522,7 +2522,7 @@ int UpnpAcceptSubscriptionExt( const char *DevID_const, const char *ServName_const, IXML_Document *PropSet, - Upnp_SID SubsId) + const Upnp_SID SubsId) { int ret = 0; int line = 0; From 05e66448944d712161439ef5e6ff279e10091876 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Fri, 21 Sep 2012 22:20:51 +0200 Subject: [PATCH 08/10] added scriptsupport switch to release configuration --- build/vc10/ixml.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/vc10/ixml.vcxproj b/build/vc10/ixml.vcxproj index 192c688..7c0bfcb 100644 --- a/build/vc10/ixml.vcxproj +++ b/build/vc10/ixml.vcxproj @@ -206,7 +206,7 @@ Default true ..\..\ixml\inc;..\..\ixml\src\inc;..\inc;..\..\upnp\inc;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_DEPRECATE;_AFX_SECURE_NO_WARNINGS;_AFX_SECURE_NO_DEPRECATE;_SECURE_ATL;_ATL_NO_COM_SUPPORT;_ATL_SECURE_NO_WARNINGS;_ATL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBUPNP_EXPORTS;UPNP_USE_MSVCPP;SCRIPTSUPPORT;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_DEPRECATE;_AFX_SECURE_NO_WARNINGS;_AFX_SECURE_NO_DEPRECATE;_SECURE_ATL;_ATL_NO_COM_SUPPORT;_ATL_SECURE_NO_WARNINGS;_ATL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true MultiThreadedDLL true From 617bda0ab91637563127f123491f6146af166530 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Sun, 14 Oct 2012 08:56:47 +0200 Subject: [PATCH 09/10] updated ChangeLog --- ChangeLog | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6b783c4..d3ba399 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,23 @@ Version 1.8.0 ******************************************************************************* +2012-07-11 Thijs Schreijer + + Changed param to const UpnpAcceptSubscriptionExt() for consistency + +2012-06-07 Thijs Schreijer + + updated ixmlDocument_createAttributeEx() and ixmlDocument_createAttribute() + to use parameter DOMString instead of char * (same but now consistent) + +2012-05-06 Thijs Schreijer + + Added script support (directive SCRIPTSUPPORT) for better support of + garbage collected script languages. The node element gets a custom tag + through ixmlNode_setCTag() and ixmlNode_getCTag(). And a callback upon + releasing the node resources can be set using ixmlSetBeforeFree() + See updated readme for usage. + 2012-03-24 Fabrice Fontaine SF Bug Tracker id 3510595 - UpnpDownloadXmlDoc : can't get the file From 3f37b55ebc5f73b3a0a8dbcc7e28d14c0d622fab Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Sun, 21 Oct 2012 21:26:11 +0200 Subject: [PATCH 10/10] exported the UUID function to enable reuse in client applications --- upnp/src/inc/uuid.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/upnp/src/inc/uuid.h b/upnp/src/inc/uuid.h index 93f5681..099160b 100644 --- a/upnp/src/inc/uuid.h +++ b/upnp/src/inc/uuid.h @@ -41,14 +41,14 @@ typedef struct _uuid_upnp { /*! * \brief Generate a UUID. */ -int uuid_create( +EXPORT_SPEC int uuid_create( /*! . */ uuid_upnp * id); /*! * \brief Out will be xxxx-xx-xx-xx-xxxxxx format. */ -void uuid_unpack( +EXPORT_SPEC void uuid_unpack( /*! . */ uuid_upnp * u, /*! . */ @@ -57,7 +57,7 @@ void uuid_unpack( /*! * \brief Create a UUID using a "name" from a "name space" */ -void uuid_create_from_name( +EXPORT_SPEC void uuid_create_from_name( /*! Resulting UUID. */ uuid_upnp * uid, /*! UUID to serve as context, so identical names from different name @@ -78,7 +78,7 @@ void uuid_create_from_name( * * \note Lexical ordering is not temporal ordering! */ -int uuid_compare( +EXPORT_SPEC int uuid_compare( /*! . */ uuid_upnp * u1, /*! . */