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>
 
