File upnp167-port.patch of Package ushare

---
 src/http.c   |   22 +++++++++++++---------
 src/http.h   |    5 +----
 src/ushare.c |   25 ++++++++++++++++++-------
 3 files changed, 32 insertions(+), 20 deletions(-)

--- a/src/http.c
+++ b/src/http.c
@@ -404,12 +404,16 @@ http_close (UpnpWebFileHandle fh)
   return 0;
 }
 
-struct UpnpVirtualDirCallbacks virtual_dir_callbacks =
-  {
-    http_get_info,
-    http_open,
-    http_read,
-    http_write,
-    http_seek,
-    http_close
-  };
+int register_virtual_dir_callbacks(void)
+{
+	int ret = 0;
+
+	ret |= UpnpVirtualDir_set_GetInfoCallback(http_get_info);
+	ret |= UpnpVirtualDir_set_OpenCallback(http_open);
+	ret |= UpnpVirtualDir_set_ReadCallback(http_read);
+	ret |= UpnpVirtualDir_set_WriteCallback(http_write);
+	ret |= UpnpVirtualDir_set_SeekCallback(http_seek);
+	ret |= UpnpVirtualDir_set_CloseCallback(http_close);
+
+	return ret;
+}
--- a/src/http.h
+++ b/src/http.h
@@ -22,9 +22,6 @@
 #ifndef _HTTP_H_
 #define _HTTP_H_
 
-#include <upnp/upnp.h>
-#include <upnp/upnptools.h>
-
-struct UpnpVirtualDirCallbacks virtual_dir_callbacks;
+int register_virtual_dir_callbacks(void);
 
 #endif /* _HTTP_H_ */
--- a/src/ushare.c
+++ b/src/ushare.c
@@ -28,6 +28,8 @@
 #include <errno.h>
 #include <getopt.h>
 
+#include <arpa/inet.h>
+
 #if (defined(BSD) || defined(__FreeBSD__) || defined(__APPLE__))
 #include <sys/socket.h>
 #include <sys/sysctl.h>
@@ -171,13 +173,23 @@ ushare_signal_exit (void)
   pthread_mutex_unlock (&ut->termination_mutex);
 }
 
+static const void *get_address_ptr(struct sockaddr *sa)
+{
+  switch (sa->sa_family) {
+  case AF_INET:
+    return &(((struct sockaddr_in*)sa)->sin_addr);
+  case AF_INET6:
+    return &(((struct sockaddr_in6*)sa)->sin6_addr);
+  }
+  return NULL;
+}
+
 static void
 handle_action_request (struct Upnp_Action_Request *request)
 {
   struct service_t *service;
   struct service_action_t *action;
   char val[256];
-  uint32_t ip;
 
   if (!request || !ut)
     return;
@@ -188,10 +200,9 @@ handle_action_request (struct Upnp_Actio
   if (strcmp (request->DevUDN + 5, ut->udn))
     return;
 
-  ip = request->CtrlPtIPAddr.s_addr;
-  ip = ntohl (ip);
-  sprintf (val, "%d.%d.%d.%d",
-           (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
+  inet_ntop(request->CtrlPtIPAddr.ss_family,
+      get_address_ptr((struct sockaddr *)&request->CtrlPtIPAddr), val,
+      sizeof(val));
 
   if (ut->verbose)
   {
@@ -348,8 +359,8 @@ init_upnp (struct ushare_t *ut)
 
   UpnpEnableWebserver (TRUE);
 
-  res = UpnpSetVirtualDirCallbacks (&virtual_dir_callbacks);
-  if (res != UPNP_E_SUCCESS)
+  res = register_virtual_dir_callbacks();
+  if (res)
   {
     log_error (_("Cannot set virtual directory callbacks\n"));
     free (description);
openSUSE Build Service is sponsored by