+++ /dev/null
-Patch nixed from OpenWRT svn to fix build breakage.
-
-Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
-
---- a/src/cds.c
-+++ b/src/cds.c
-@@ -20,6 +20,8 @@
- */
-
- #include <stdlib.h>
-+#include <stdio.h>
-+#include <string.h>
- #include <upnp/upnp.h>
- #include <upnp/upnptools.h>
-
---- a/src/http.c
-+++ b/src/http.c
-@@ -25,6 +25,7 @@
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
-+#include <string.h>
- #include <unistd.h>
- #include <errno.h>
-
-@@ -77,8 +78,7 @@ set_info_file (struct File_Info *info, c
- info->content_type = ixmlCloneDOMString (content_type);
- }
-
--static int
--http_get_info (const char *filename, struct File_Info *info)
-+int http_get_info (const char *filename, struct File_Info *info)
- {
- extern struct ushare_t *ut;
- struct upnp_entry_t *entry = NULL;
-@@ -197,8 +197,7 @@ get_file_memory (const char *fullpath, c
- return ((UpnpWebFileHandle) file);
- }
-
--static UpnpWebFileHandle
--http_open (const char *filename, enum UpnpOpenFileMode mode)
-+UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode)
- {
- extern struct ushare_t *ut;
- struct upnp_entry_t *entry = NULL;
-@@ -251,8 +250,7 @@ http_open (const char *filename, enum Up
- return ((UpnpWebFileHandle) file);
- }
-
--static int
--http_read (UpnpWebFileHandle fh, char *buf, size_t buflen)
-+int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen)
- {
- struct web_file_t *file = (struct web_file_t *) fh;
- ssize_t len = -1;
-@@ -286,8 +284,7 @@ http_read (UpnpWebFileHandle fh, char *b
- return len;
- }
-
--static int
--http_write (UpnpWebFileHandle fh __attribute__((unused)),
-+int http_write (UpnpWebFileHandle fh __attribute__((unused)),
- char *buf __attribute__((unused)),
- size_t buflen __attribute__((unused)))
- {
-@@ -296,8 +293,7 @@ http_write (UpnpWebFileHandle fh __attri
- return 0;
- }
-
--static int
--http_seek (UpnpWebFileHandle fh, off_t offset, int origin)
-+int http_seek (UpnpWebFileHandle fh, off_t offset, int origin)
- {
- struct web_file_t *file = (struct web_file_t *) fh;
- off_t newpos = -1;
-@@ -371,8 +367,7 @@ http_seek (UpnpWebFileHandle fh, off_t o
- return 0;
- }
-
--static int
--http_close (UpnpWebFileHandle fh)
-+int http_close (UpnpWebFileHandle fh)
- {
- struct web_file_t *file = (struct web_file_t *) fh;
-
-@@ -402,13 +397,3 @@ http_close (UpnpWebFileHandle fh)
-
- return 0;
- }
--
--struct UpnpVirtualDirCallbacks virtual_dir_callbacks =
-- {
-- http_get_info,
-- http_open,
-- http_read,
-- http_write,
-- http_seek,
-- http_close
-- };
---- a/src/http.h
-+++ b/src/http.h
-@@ -25,6 +25,18 @@
- #include <upnp/upnp.h>
- #include <upnp/upnptools.h>
-
--struct UpnpVirtualDirCallbacks virtual_dir_callbacks;
-+int http_get_info (const char *filename, struct File_Info *info);
-+
-+UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode);
-+
-+int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen);
-+
-+int http_seek (UpnpWebFileHandle fh, off_t offset, int origin);
-+
-+int http_write (UpnpWebFileHandle fh __attribute__((unused)),
-+ char *buf __attribute__((unused)),
-+ size_t buflen __attribute__((unused)));
-+
-+int http_close (UpnpWebFileHandle fh);
-
- #endif /* _HTTP_H_ */
---- a/src/ushare.c
-+++ b/src/ushare.c
-@@ -188,7 +188,7 @@ handle_action_request (struct Upnp_Actio
- if (strcmp (request->DevUDN + 5, ut->udn))
- return;
-
-- ip = request->CtrlPtIPAddr.s_addr;
-+ ip = (*(struct sockaddr_in *)&request->CtrlPtIPAddr).sin_addr.s_addr;
- ip = ntohl (ip);
- sprintf (val, "%d.%d.%d.%d",
- (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
-@@ -348,13 +348,23 @@ init_upnp (struct ushare_t *ut)
-
- UpnpEnableWebserver (TRUE);
-
-- res = UpnpSetVirtualDirCallbacks (&virtual_dir_callbacks);
-- if (res != UPNP_E_SUCCESS)
-- {
-- log_error (_("Cannot set virtual directory callbacks\n"));
-- free (description);
-- return -1;
-- }
-+#define upnp_set_callback(cb, func) \
-+ do { \
-+ res = UpnpVirtualDir_set_##cb##Callback(func); \
-+ if (res != UPNP_E_SUCCESS) \
-+ { \
-+ log_error (_("Cannot set virtual directory callbacks\n")); \
-+ free (description); \
-+ return -1; \
-+ } \
-+ } while(0)
-+
-+ upnp_set_callback(GetInfo, http_get_info);
-+ upnp_set_callback(Open, http_open);
-+ upnp_set_callback(Read, http_read);
-+ upnp_set_callback(Seek, http_seek);
-+ upnp_set_callback(Write, http_write);
-+ upnp_set_callback(Close, http_close);
-
- res = UpnpAddVirtualDir (VIRTUAL_DIR);
- if (res != UPNP_E_SUCCESS)
---- a/src/cms.c
-+++ b/src/cms.c
-@@ -20,6 +20,8 @@
- */
-
- #include <stdlib.h>
-+#include <stdio.h>
-+#include <string.h>
- #include <upnp/upnp.h>
- #include <upnp/upnptools.h>
-
---- a/src/mime.c
-+++ b/src/mime.c
-@@ -20,6 +20,7 @@
- */
-
- #include <stdlib.h>
-+#include <stdio.h>
- #include <string.h>
-
- #include "mime.h"
---- a/src/presentation.c
-+++ b/src/presentation.c
-@@ -19,6 +19,8 @@
- */
-
- #include <stdlib.h>
-+#include <stdio.h>
-+#include <string.h>
-
- #if HAVE_LANGINFO_CODESET
- # include <langinfo.h>
---- a/src/services.c
-+++ b/src/services.c
-@@ -20,6 +20,8 @@
- */
-
- #include <stdlib.h>
-+#include <stdio.h>
-+#include <string.h>
- #include <upnp/upnp.h>
- #include <upnp/upnptools.h>
-
+++ /dev/null
-From 4643b9cb9e6c0331fd663437a7ed8061b9edf971 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Mon, 24 Aug 2020 19:26:03 +0200
-Subject: [PATCH] switch to libupnp 1.14.x API
-
-Use the new libupnp 1.14.x API (i.e. UpnpInit2) to allow ushare to be
-protected against CallStranger a.k.a. CVE-2020-12695
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Retrieved from:
-https://github.com/ddugovic/uShare/commit/4643b9cb9e6c0331fd663437a7ed8061b9edf971]
----
- configure | 2 --
- src/http.c | 50 +++++++++++++++++++++++++++++++-------------------
- src/http.h | 24 ++++++++++++++++++------
- src/services.c | 28 ++++++++++++++++++----------
- src/services.h | 6 +++---
- src/ushare.c | 36 ++++++++++++++++++------------------
- src/ushare.h | 2 +-
- 7 files changed, 89 insertions(+), 59 deletions(-)
-
-diff --git a/configure b/configure
-index 20a08ed..4a3efe0 100755
---- a/configure
-+++ b/configure
-@@ -638,8 +638,6 @@ fi
- echolog "Checking for libixml ..."
- check_lib upnp/ixml.h ixmlRelaxParser -lixml || die "Error, can't find libixml !"
-
--echolog "Checking for libthreadutil ..."
--check_lib upnp/ThreadPool.h ThreadPoolAdd "-lthreadutil -lpthread" || die "Error, can't find libthreadutil !"
- add_extralibs -lpthread
-
- libupnp_min_version="1.4.2"
-diff --git a/src/http.c b/src/http.c
-index 8a4e67d..1e5b350 100644
---- a/src/http.c
-+++ b/src/http.c
-@@ -68,17 +68,19 @@ struct web_file_t {
-
-
- static inline void
--set_info_file (struct File_Info *info, const size_t length,
-+set_info_file (UpnpFileInfo *info, const size_t length,
- const char *content_type)
- {
-- info->file_length = length;
-- info->last_modified = 0;
-- info->is_directory = 0;
-- info->is_readable = 1;
-- info->content_type = ixmlCloneDOMString (content_type);
-+ UpnpFileInfo_set_FileLength(info, length);
-+ UpnpFileInfo_set_LastModified(info, 0);
-+ UpnpFileInfo_set_IsDirectory(info, 0);
-+ UpnpFileInfo_set_IsReadable(info, 1);
-+ UpnpFileInfo_set_ContentType(info, ixmlCloneDOMString (content_type));
- }
-
--int http_get_info (const char *filename, struct File_Info *info)
-+int http_get_info (const char *filename, UpnpFileInfo *info,
-+ const void* cookie __attribute__((unused)),
-+ const void** requestCookie __attribute__((unused)))
- {
- extern struct ushare_t *ut;
- struct upnp_entry_t *entry = NULL;
-@@ -143,15 +145,15 @@ int http_get_info (const char *filename, struct File_Info *info)
- {
- if (errno != EACCES)
- return -1;
-- info->is_readable = 0;
-+ UpnpFileInfo_set_IsReadable(info, 0);
- }
- else
-- info->is_readable = 1;
-+ UpnpFileInfo_set_IsReadable(info, 1);
-
- /* file exist and can be read */
-- info->file_length = st.st_size;
-- info->last_modified = st.st_mtime;
-- info->is_directory = S_ISDIR (st.st_mode);
-+ UpnpFileInfo_set_FileLength(info, st.st_size);
-+ UpnpFileInfo_set_LastModified(info, st.st_mtime);
-+ UpnpFileInfo_set_IsDirectory(info, S_ISDIR (st.st_mode));
-
- protocol =
- #ifdef HAVE_DLNA
-@@ -172,11 +174,11 @@ int http_get_info (const char *filename, struct File_Info *info)
-
- if (content_type)
- {
-- info->content_type = ixmlCloneDOMString (content_type);
-+ UpnpFileInfo_set_ContentType(info, ixmlCloneDOMString (content_type));
- free (content_type);
- }
- else
-- info->content_type = ixmlCloneDOMString ("");
-+ UpnpFileInfo_set_ContentType(info, ixmlCloneDOMString (""));
-
- return 0;
- }
-@@ -197,7 +199,9 @@ get_file_memory (const char *fullpath, const char *description,
- return ((UpnpWebFileHandle) file);
- }
-
--UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode)
-+UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)))
- {
- extern struct ushare_t *ut;
- struct upnp_entry_t *entry = NULL;
-@@ -250,7 +254,9 @@ UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode)
- return ((UpnpWebFileHandle) file);
- }
-
--int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen)
-+int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)))
- {
- struct web_file_t *file = (struct web_file_t *) fh;
- ssize_t len = -1;
-@@ -285,14 +291,18 @@ int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen)
-
- int http_write (UpnpWebFileHandle fh __attribute__((unused)),
- char *buf __attribute__((unused)),
-- size_t buflen __attribute__((unused)))
-+ size_t buflen __attribute__((unused)),
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)))
- {
- log_verbose ("http write\n");
-
- return 0;
- }
-
--int http_seek (UpnpWebFileHandle fh, off_t offset, int origin)
-+int http_seek (UpnpWebFileHandle fh, off_t offset, int origin,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)))
- {
- struct web_file_t *file = (struct web_file_t *) fh;
- off_t newpos = -1;
-@@ -366,7 +376,9 @@ int http_seek (UpnpWebFileHandle fh, off_t offset, int origin)
- return 0;
- }
-
--int http_close (UpnpWebFileHandle fh)
-+int http_close (UpnpWebFileHandle fh,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)))
- {
- struct web_file_t *file = (struct web_file_t *) fh;
-
-diff --git a/src/http.h b/src/http.h
-index 32d6bcc..c912a7b 100644
---- a/src/http.h
-+++ b/src/http.h
-@@ -25,18 +25,30 @@
- #include <upnp/upnp.h>
- #include <upnp/upnptools.h>
-
--int http_get_info (const char *filename, struct File_Info *info);
-+int http_get_info (const char *filename, UpnpFileInfo *info,
-+ const void* cookie __attribute__((unused)),
-+ const void** requestCookie __attribute__((unused)));
-
--UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode);
-+UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)));
-
--int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen);
-+int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)));
-
--int http_seek (UpnpWebFileHandle fh, off_t offset, int origin);
-+int http_seek (UpnpWebFileHandle fh, off_t offset, int origin,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)));
-
- int http_write (UpnpWebFileHandle fh __attribute__((unused)),
- char *buf __attribute__((unused)),
-- size_t buflen __attribute__((unused)));
-+ size_t buflen __attribute__((unused)),
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)));
-
--int http_close (UpnpWebFileHandle fh);
-+int http_close (UpnpWebFileHandle fh,
-+ const void* cookie __attribute__((unused)),
-+ const void* requestCookie __attribute__((unused)));
-
- #endif /* _HTTP_H_ */
-diff --git a/src/services.c b/src/services.c
-index aec9cf8..287df55 100644
---- a/src/services.c
-+++ b/src/services.c
-@@ -62,25 +62,28 @@ static struct service_t services[] = {
- };
-
- bool
--find_service_action (struct Upnp_Action_Request *request,
-+find_service_action (UpnpActionRequest *request,
- struct service_t **service,
- struct service_action_t **action)
- {
- int c, d;
-+ const char *actionName = NULL;
-
- *service = NULL;
- *action = NULL;
-+
-+ actionName = UpnpActionRequest_get_ActionName_cstr(request);
-
-- if (!request || !request->ActionName)
-+ if (!request || !actionName)
- return false;
-
- for (c = 0; services[c].id != NULL; c++)
-- if (!strcmp (services[c].id, request->ServiceID))
-+ if (!strcmp (services[c].id, UpnpActionRequest_get_ServiceID_cstr(request)))
- {
- *service = &services[c];
- for (d = 0; services[c].actions[d].name; d++)
- {
-- if (!strcmp (services[c].actions[d].name, request->ActionName))
-+ if (!strcmp (services[c].actions[d].name, actionName))
- {
- *action = &services[c].actions[d];
- return true;
-@@ -97,6 +100,7 @@ upnp_add_response (struct action_event_t *event, char *key, const char *value)
- {
- char *val;
- int res;
-+ IXML_Document* actionResult = NULL;
-
- if (!event || !event->status || !key || !value)
- return false;
-@@ -105,8 +109,9 @@ upnp_add_response (struct action_event_t *event, char *key, const char *value)
- if (!val)
- return false;
-
-- res = UpnpAddToActionResponse (&event->request->ActionResult,
-- event->request->ActionName,
-+ actionResult = UpnpActionRequest_get_ActionResult(event->request);
-+ res = UpnpAddToActionResponse (&actionResult,
-+ UpnpActionRequest_get_ActionName_cstr(event->request),
- event->service->type, key, val);
-
- if (res != UPNP_E_SUCCESS)
-@@ -120,14 +125,17 @@ upnp_add_response (struct action_event_t *event, char *key, const char *value)
- }
-
- char *
--upnp_get_string (struct Upnp_Action_Request *request, const char *key)
-+upnp_get_string (UpnpActionRequest *request, const char *key)
- {
- IXML_Node *node = NULL;
-+ IXML_Document *actionRequest = NULL;
-
-- if (!request || !request->ActionRequest || !key)
-+ actionRequest = UpnpActionRequest_get_ActionRequest(request);
-+
-+ if (!request || !actionRequest || !key)
- return NULL;
-
-- node = (IXML_Node *) request->ActionRequest;
-+ node = (IXML_Node *) actionRequest;
- if (!node)
- {
- log_verbose ("Invalid action request document\n");
-@@ -157,7 +165,7 @@ upnp_get_string (struct Upnp_Action_Request *request, const char *key)
- }
-
- int
--upnp_get_ui4 (struct Upnp_Action_Request *request, const char *key)
-+upnp_get_ui4 (UpnpActionRequest *request, const char *key)
- {
- char *value;
- int val;
-diff --git a/src/services.h b/src/services.h
-index 89c072e..d5726b4 100644
---- a/src/services.h
-+++ b/src/services.h
-@@ -39,15 +39,15 @@ struct service_t {
-
- #define SERVICE_CONTENT_TYPE "text/xml"
-
--bool find_service_action (struct Upnp_Action_Request *request,
-+bool find_service_action (UpnpActionRequest *request,
- struct service_t **service,
- struct service_action_t **action);
-
- bool upnp_add_response (struct action_event_t *event,
- char *key, const char *value);
-
--char * upnp_get_string (struct Upnp_Action_Request *request, const char *key);
-+char * upnp_get_string (UpnpActionRequest *request, const char *key);
-
--int upnp_get_ui4 (struct Upnp_Action_Request *request, const char *key);
-+int upnp_get_ui4 (UpnpActionRequest *request, const char *key);
-
- #endif /* _SERVICES_H_ */
-diff --git a/src/ushare.c b/src/ushare.c
-index 28fd67e..92e2345 100644
---- a/src/ushare.c
-+++ b/src/ushare.c
-@@ -177,7 +177,7 @@ ushare_signal_exit (void)
- }
-
- static void
--handle_action_request (struct Upnp_Action_Request *request)
-+handle_action_request (UpnpActionRequest *request)
- {
- struct service_t *service;
- struct service_action_t *action;
-@@ -187,25 +187,25 @@ handle_action_request (struct Upnp_Action_Request *request)
- if (!request || !ut)
- return;
-
-- if (request->ErrCode != UPNP_E_SUCCESS)
-+ if (UpnpActionRequest_get_ErrCode(request) != UPNP_E_SUCCESS)
- return;
-
-- if (strcmp (request->DevUDN + 5, ut->udn))
-+ if (strcmp (UpnpActionRequest_get_DevUDN_cstr(request) + 5, ut->udn))
- return;
-
-- ip = (*(struct sockaddr_in *)&request->CtrlPtIPAddr).sin_addr.s_addr;
-+ ip = (*(struct sockaddr_in *)UpnpActionRequest_get_CtrlPtIPAddr(request)).sin_addr.s_addr;
- ip = ntohl (ip);
- sprintf (val, "%d.%d.%d.%d",
- (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
-
- if (ut->verbose)
- {
-- DOMString str = ixmlPrintDocument (request->ActionRequest);
-+ DOMString str = ixmlPrintDocument (UpnpActionRequest_get_ActionRequest(request));
- log_verbose ("***************************************************\n");
- log_verbose ("** New Action Request **\n");
- log_verbose ("***************************************************\n");
-- log_verbose ("ServiceID: %s\n", request->ServiceID);
-- log_verbose ("ActionName: %s\n", request->ActionName);
-+ log_verbose ("ServiceID: %s\n", UpnpActionRequest_get_ServiceID_cstr(request));
-+ log_verbose ("ActionName: %s\n", UpnpActionRequest_get_ActionName_cstr(request));
- log_verbose ("CtrlPtIP: %s\n", val);
- log_verbose ("Action Request:\n%s\n", str);
- ixmlFreeDOMString (str);
-@@ -220,11 +220,11 @@ handle_action_request (struct Upnp_Action_Request *request)
- event.service = service;
-
- if (action->function (&event) && event.status)
-- request->ErrCode = UPNP_E_SUCCESS;
-+ UpnpActionRequest_set_ErrCode(request, UPNP_E_SUCCESS);
-
- if (ut->verbose)
- {
-- DOMString str = ixmlPrintDocument (request->ActionResult);
-+ DOMString str = ixmlPrintDocument (UpnpActionRequest_get_ActionResult(request));
- log_verbose ("Action Result:\n%s", str);
- log_verbose ("***************************************************\n");
- log_verbose ("\n");
-@@ -235,22 +235,22 @@ handle_action_request (struct Upnp_Action_Request *request)
- }
-
- if (service) /* Invalid Action name */
-- strcpy (request->ErrStr, "Unknown Service Action");
-+ UpnpActionRequest_strcpy_ErrStr(request, "Unknown Service Action");
- else /* Invalid Service name */
-- strcpy (request->ErrStr, "Unknown Service ID");
-+ UpnpActionRequest_strcpy_ErrStr(request, "Unknown Service ID");
-
-- request->ActionResult = NULL;
-- request->ErrCode = UPNP_SOAP_E_INVALID_ACTION;
-+ UpnpActionRequest_set_ActionResult(request, NULL);
-+ UpnpActionRequest_set_ErrCode(request, UPNP_SOAP_E_INVALID_ACTION);
- }
-
- static int
--device_callback_event_handler (Upnp_EventType type, void *event,
-+device_callback_event_handler (Upnp_EventType type, const void *event,
- void *cookie __attribute__((unused)))
- {
- switch (type)
- {
- case UPNP_CONTROL_ACTION_REQUEST:
-- handle_action_request ((struct Upnp_Action_Request *) event);
-+ handle_action_request ((UpnpActionRequest *) event);
- break;
- case UPNP_CONTROL_ACTION_COMPLETE:
- case UPNP_EVENT_SUBSCRIPTION_REQUEST:
-@@ -323,7 +323,7 @@ init_upnp (struct ushare_t *ut)
- #endif /* HAVE_DLNA */
-
- log_info (_("Initializing UPnP subsystem ...\n"));
-- res = UpnpInit (ut->ip, ut->port);
-+ res = UpnpInit2 (ut->interface, ut->port);
- if (res != UPNP_E_SUCCESS)
- {
- log_error (_("Cannot initialize UPnP subsystem\n"));
-@@ -351,7 +351,7 @@ init_upnp (struct ushare_t *ut)
- log_info (_("UPnP MediaServer listening on %s:%d\n"),
- UpnpGetServerIpAddress (), ut->port);
-
-- UpnpEnableWebserver (TRUE);
-+ UpnpEnableWebserver (1);
-
- #define upnp_set_callback(cb, func) \
- do { \
-@@ -371,7 +371,7 @@ init_upnp (struct ushare_t *ut)
- upnp_set_callback(Write, http_write);
- upnp_set_callback(Close, http_close);
-
-- res = UpnpAddVirtualDir (VIRTUAL_DIR);
-+ res = UpnpAddVirtualDir (VIRTUAL_DIR, NULL, NULL);
- if (res != UPNP_E_SUCCESS)
- {
- log_error (_("Cannot add virtual directory for web server\n"));
-diff --git a/src/ushare.h b/src/ushare.h
-index a29da01..cd86cef 100644
---- a/src/ushare.h
-+++ b/src/ushare.h
-@@ -125,7 +125,7 @@ struct ushare_t {
- };
-
- struct action_event_t {
-- struct Upnp_Action_Request *request;
-+ UpnpActionRequest *request;
- bool status;
- struct service_t *service;
- };