diff --git a/ChangeLog b/ChangeLog index 298291d..dd761ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,24 @@ Version 1.6.16 ******************************************************************************* +2012-03-05 Marcelo Roberto Jimenez + + SF Bug Tracker id 2989399 - UpnpSetVirtualDirCallbacks API removal in 1.6.x + + Submitted: Nick Leverton ( leveret ) - 2010-04-19 07:44:10 PDT + + Details: The recent codebase merge has removed a significant API call + which is used by several pupnp devices such as mediatomb and gmediaserver. + UpnpSetVirtualDirCallbacks() has been replaced by individual routines to + set each callback. Essentially this means that 1.6.7 will in fact be a majo + bump and 1.6.6 devices can no longer link against it. Could we have the call + reinstated please, perhaps as a wrapper around the individual calls ? As + it is, all distros will have to patch their 1.6.x apps, rebuild and re-link them. + + The other removed API calls and external variables don't seem to be used + by any of the apps I have copies of, but UpnpSetVirtualDirCallbacks is + important for maintaining compatibility within 1.6.x. + 2012-03-05 Marcelo Roberto Jimenez SF Bug Tracker id 3325246 - Memory Leak in XML Parser diff --git a/configure.ac b/configure.ac index 3adf608..76ac7d7 100644 --- a/configure.ac +++ b/configure.ac @@ -284,16 +284,23 @@ dnl ############################################################################ dnl # Release 1.6.16: dnl # "current:revision:age" dnl # -dnl # - +dnl # - Code has changed in ixml +dnl # revision: 6 -> 7 +dnl # - Code has changed in upnp +dnl # revision: 1 -> 2 +dnl # - interface changed/added/removed in upnp +dnl # current++(9); revision = 0 +dnl # - interface added in upnp +dnl # age++(3) dnl # -dnl #AC_SUBST([LT_VERSION_IXML], [::]) -dnl #AC_SUBST([LT_VERSION_THREADUTIL], [::]) -dnl #AC_SUBST([LT_VERSION_UPNP], [::]) +dnl #AC_SUBST([LT_VERSION_IXML], [2:7:0]) +dnl #AC_SUBST([LT_VERSION_THREADUTIL], [6:0:0]) +dnl #AC_SUBST([LT_VERSION_UPNP], [9:0:3]) dnl # dnl ############################################################################ -AC_SUBST([LT_VERSION_IXML], [2:6:0]) +AC_SUBST([LT_VERSION_IXML], [2:7:0]) AC_SUBST([LT_VERSION_THREADUTIL], [6:0:0]) -AC_SUBST([LT_VERSION_UPNP], [8:1:2]) +AC_SUBST([LT_VERSION_UPNP], [9:0:3]) dnl ############################################################################ dnl # Repeating the algorithm to place it closer to the modificatin place: dnl # - library code modified: revision++ diff --git a/upnp/inc/upnp.h b/upnp/inc/upnp.h index 169e15c..3db693e 100644 --- a/upnp/inc/upnp.h +++ b/upnp/inc/upnp.h @@ -2790,6 +2790,21 @@ typedef int (*VDCallback_Close)( */ EXPORT_SPEC int UpnpVirtualDir_set_CloseCallback(VDCallback_Close callback); +/*! + * \brief The {\bf UpnpVirtualDirCallbacks} structure contains the pointers to + * file-related callback functions a device application can register to + * virtualize URLs. + */ +struct UpnpVirtualDirCallbacks +{ + VDCallback_GetInfo get_info; + VDCallback_Open open; + VDCallback_Read read; + VDCallback_Write write; + VDCallback_Seek seek; + VDCallback_Close close; +}; + /*! * \brief Enables or disables the webserver. * @@ -2810,6 +2825,17 @@ EXPORT_SPEC int UpnpEnableWebserver( */ EXPORT_SPEC int UpnpIsWebserverEnabled(void); +/*! + * \brief Sets the callback functions to be used to access a virtual directory. + * + * \return An integer representing one of the following: + * \li \c UPNP_E_SUCCESS: The operation completed successfully. + * \li \c UPNP_E_INVALID_PARAM: one of the callbacks is not valid. + */ +EXPORT_SPEC int UpnpSetVirtualDirCallbacks( + /*! [in] A structure that contains the callback functions. */ + struct UpnpVirtualDirCallbacks *callbacks ); + /*! * \brief Adds a virtual directory mapping. * diff --git a/upnp/src/api/upnpapi.c b/upnp/src/api/upnpapi.c index 5c8c3e7..22066a9 100644 --- a/upnp/src/api/upnpapi.c +++ b/upnp/src/api/upnpapi.c @@ -3989,6 +3989,27 @@ int UpnpIsWebserverEnabled(void) return bWebServerState == WEB_SERVER_ENABLED; } +int UpnpSetVirtualDirCallbacks(struct UpnpVirtualDirCallbacks *callbacks) +{ + int ret = 0; + + if( UpnpSdkInit != 1 ) { + /* SDK is not initialized */ + return UPNP_E_FINISH; + } + + if( callbacks == NULL ) + return UPNP_E_INVALID_PARAM; + + ret = UpnpVirtualDir_set_GetInfoCallback(callbacks->get_info) == UPNP_E_SUCCESS + && UpnpVirtualDir_set_OpenCallback(callbacks->open) == UPNP_E_SUCCESS + && UpnpVirtualDir_set_ReadCallback(callbacks->read) == UPNP_E_SUCCESS + && UpnpVirtualDir_set_WriteCallback(callbacks->write) == UPNP_E_SUCCESS + && UpnpVirtualDir_set_SeekCallback(callbacks->seek) == UPNP_E_SUCCESS + && UpnpVirtualDir_set_CloseCallback(callbacks->close) == UPNP_E_SUCCESS; + + return ret ? UPNP_E_SUCCESS : UPNP_E_INVALID_PARAM; +} int UpnpVirtualDir_set_GetInfoCallback(VDCallback_GetInfo callback) {