gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r4101 - in GNUnet: . m4 src/include src/transports src/tran


From: grothoff
Subject: [GNUnet-SVN] r4101 - in GNUnet: . m4 src/include src/transports src/transports/upnp
Date: Fri, 29 Dec 2006 07:41:12 -0800 (PST)

Author: grothoff
Date: 2006-12-29 07:41:06 -0800 (Fri, 29 Dec 2006)
New Revision: 4101

Added:
   GNUnet/src/include/gnunet_upnp_service.h
Removed:
   GNUnet/src/transports/upnp/upnpdemo.c
Modified:
   GNUnet/README.debian
   GNUnet/configure.ac
   GNUnet/m4/Makefile.in
   GNUnet/src/include/Makefile.am
   GNUnet/src/transports/Makefile.am
   GNUnet/src/transports/upnp/Makefile.am
   GNUnet/src/transports/upnp/init.c
   GNUnet/src/transports/upnp/todo
   GNUnet/src/transports/upnp/upnptest.c
Log:
integrating upnp support into build

Modified: GNUnet/README.debian
===================================================================
--- GNUnet/README.debian        2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/README.debian        2006-12-29 15:41:06 UTC (rev 4101)
@@ -28,6 +28,7 @@
 dialog (optional)
 libglade2-dev (recommended)
 libgtk2.0-dev (recommended)
+libxml2-dev (recommended, especially with NAT)
 
 
 Additional libextractor dependencies:

Modified: GNUnet/configure.ac
===================================================================
--- GNUnet/configure.ac 2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/configure.ac 2006-12-29 15:41:06 UTC (rev 4101)
@@ -173,6 +173,9 @@
 # libcurl
 LIBCURL_CHECK_CONFIG(,,,AC_MSG_ERROR([GNUnet requires libcurl]))
 
+# libxml2
+AM_PATH_XML2(,xml=1,xml=0)
+AM_CONDITIONAL(HAVE_XML2, test x$xml = x1)
 
 # test for kvm and kstat (for CPU stats under BSD/Solaris)
 AC_CHECK_LIB([kvm],[kvm_open])

Modified: GNUnet/m4/Makefile.in
===================================================================
--- GNUnet/m4/Makefile.in       2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/m4/Makefile.in       2006-12-29 15:41:06 UTC (rev 4101)
@@ -108,6 +108,8 @@
 HAVE_MYSQL_TRUE = @HAVE_MYSQL_TRUE@
 HAVE_SQLITE_FALSE = @HAVE_SQLITE_FALSE@
 HAVE_SQLITE_TRUE = @HAVE_SQLITE_TRUE@
+HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
+HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
 HAVE_ZLIB_FALSE = @HAVE_ZLIB_FALSE@
 HAVE_ZLIB_TRUE = @HAVE_ZLIB_TRUE@
 INSTALL_DATA = @INSTALL_DATA@
@@ -169,6 +171,9 @@
 XFREEBSD_FALSE = @XFREEBSD_FALSE@
 XFREEBSD_TRUE = @XFREEBSD_TRUE@
 XGETTEXT = @XGETTEXT@
+XML2_CONFIG = @XML2_CONFIG@
+XML_CPPFLAGS = @XML_CPPFLAGS@
+XML_LIBS = @XML_LIBS@
 _libcurl_config = @_libcurl_config@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@

Modified: GNUnet/src/include/Makefile.am
===================================================================
--- GNUnet/src/include/Makefile.am      2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/src/include/Makefile.am      2006-12-29 15:41:06 UTC (rev 4101)
@@ -45,6 +45,7 @@
   gnunet_traffic_service.h \
   gnunet_transport.h \
   gnunet_transport_service.h \
+  gnunet_upnp_service.h \
   gnunet_uritrack_lib.h \
   gnunet_util.h \
   gnunet_util_boot.h \

Added: GNUnet/src/include/gnunet_upnp_service.h
===================================================================
--- GNUnet/src/include/gnunet_upnp_service.h    2006-12-29 15:10:02 UTC (rev 
4100)
+++ GNUnet/src/include/gnunet_upnp_service.h    2006-12-29 15:41:06 UTC (rev 
4101)
@@ -0,0 +1,64 @@
+/*
+     This file is part of GNUnet
+     (C) 2006 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file include/gnunet_upnp_service.h
+ * @brief API for UPnP access
+ * @author Christian Grothoff
+ */
+
+#ifndef GNUNET_UPNP_SERVICE_H
+#define GNUNET_UPNP_SERVICE_H
+
+#include "gnunet_util.h"
+
+#ifdef __cplusplus
+extern "C" {
+#if 0 /* keep Emacsens' auto-indent happy */
+}
+#endif
+#endif
+
+/**
+ * @brief UPNP API
+ */
+typedef struct {
+
+  /**
+   * Get the external IP address for the local machine.
+   * @param protocol "UDP" or "TCP".
+   *
+   * @return SYSERR on error, OK on success
+   */
+  int (*get_ip)(unsigned short port,
+               const char * protocol,
+               IPaddr * address);
+
+} UPnP_ServiceAPI;
+
+
+#if 0 /* keep Emacsens' auto-indent happy */
+{
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#endif


Property changes on: GNUnet/src/include/gnunet_upnp_service.h
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: GNUnet/src/transports/Makefile.am
===================================================================
--- GNUnet/src/transports/Makefile.am   2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/src/transports/Makefile.am   2006-12-29 15:41:06 UTC (rev 4101)
@@ -11,7 +11,12 @@
  v6ip = \
   libip6.la
 endif
+#if HAVE_XML2
+  build_upnp=upnp
+#endif
 
+SUBDIRS = $(build_upnp) .
+
 noinst_LTLIBRARIES = \
   $(v6ip) \
   libip.la

Modified: GNUnet/src/transports/upnp/Makefile.am
===================================================================
--- GNUnet/src/transports/upnp/Makefile.am      2006-12-29 15:10:02 UTC (rev 
4100)
+++ GNUnet/src/transports/upnp/Makefile.am      2006-12-29 15:41:06 UTC (rev 
4101)
@@ -4,13 +4,12 @@
 
 plugindir = $(libdir)/GNUnet
 
-# GNU Gettext support
 LIBS = @LIBINTL@ @LIBS@
 
-lib_LTLIBRARIES = \
-  libgnunetupnp.la
+plugin_LTLIBRARIES = \
+  libgnunetmodule_upnp.la
 
-libgnunetupnp_la_SOURCES = \
+libgnunetmodule_upnp_la_SOURCES = \
  error.c error.h \
  init.c \
  ip.c ip.h \
@@ -18,41 +17,16 @@
  xmlnode.c xmlnode.h \
  upnp.c upnp.h 
 
-libgnunetupnp_la_LDFLAGS = \
- $(GTK_LIBS) @EXT_LIB_PATH@ @EXT_LIBS@ @LIBCURL@ \
- -export-dynamic \
- -version-info 0:0:0
-
-# FIXME: detect libxml2 path properly!
-libgnunetupnp_la_CFLAGS =  @LIBCURL_CPPFLAGS@ \
+libgnunetmodule_upnp_la_LDFLAGS = \
+ -export-dynamic -avoid-version -module
+libgnunetmodule_upnp_la_CFLAGS = \
  -I$(top_scrdir)/include \
- -I/usr/include/libxml2 \
- @GNUNETGTK_CFLAGS@ \
- @GTK_CFLAGS@ 
-
-
-libgnunetupnp_la_LIBADD = \
+ @LIBCURL_CPPFLAGS@ @XML_CPPFLAGS@ @GNUNETGTK_CFLAGS@ @GTK_CFLAGS@
+libgnunetmodule_upnp_la_LIBADD = \
  @GTK_LIBS@ @EXT_LIB_PATH@ @EXT_LIBS@ \
- @GNUNETGTK_LIBS@ \
-  $(INTLLIBS) \
-  -lgthread-2.0 \
+ @GNUNETGTK_LIBS@ @XML_LIBS@ @LIBCURL@ \
  $(top_builddir)/src/util/libgnunetutil.la 
 
-
-noinst_PROGRAMS = \
- upnpdemo
-
-upnpdemo_SOURCES = \
- upnpdemo.c 
-upnpdemo_LDADD = \
- $(top_builddir)/src/util/libgnunetutil.la \
- $(top_builddir)/src/util/loggers/libgnunetutil_logging.la \
- $(top_builddir)/src/transports/upnp/libgnunetupnp.la \
- $(top_builddir)/src/util/config_impl/libgnunetutil_config.la \
- $(top_builddir)/src/util/cron/libgnunetutil_cron.la 
-
-
-
 check_PROGRAMS = \
  upnptest 
 
@@ -63,7 +37,6 @@
 upnptest_LDADD = \
  $(top_builddir)/src/util/libgnunetutil.la \
  $(top_builddir)/src/util/loggers/libgnunetutil_logging.la \
- $(top_builddir)/src/transports/upnp/libgnunetupnp.la \
  $(top_builddir)/src/util/config_impl/libgnunetutil_config.la \
  $(top_builddir)/src/util/cron/libgnunetutil_cron.la 
 

Modified: GNUnet/src/transports/upnp/init.c
===================================================================
--- GNUnet/src/transports/upnp/init.c   2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/src/transports/upnp/init.c   2006-12-29 15:41:06 UTC (rev 4101)
@@ -28,6 +28,8 @@
 #include "gnunet_util.h"
 #include "gnunet_util_cron.h"
 #include "upnp.h"
+#include "gnunet_upnp_service.h"
+#include "gnunet_core.h"
 
 static struct GE_Context * ectx;
 
@@ -113,34 +115,12 @@
 
 /**
  * Get the external IP address for the local machine.
- */
-void gnunet_upnp_init(struct GC_Configuration * c,
-                     struct GE_Context * e) {
-  ectx = e;
-  cfg = c;
-  cron = cron_create(ectx);
-  lock = MUTEX_CREATE(NO);
-  cron_start(cron);
-  cron_add_job(cron,
-              &discover,
-              0,
-              5 * cronMINUTES,
-              NULL);
-  cron_add_job(cron,
-              &portmap,
-              150 * cronSECONDS,
-              5 * cronMINUTES,
-              NULL);
-}
-
-/**
- * Get the external IP address for the local machine.
  *
  * @return SYSERR on error, OK on success
  */
-int gnunet_upnp_get_ip(unsigned short port,
-                      const char * protocol,
-                      IPaddr * address) {
+static int gnunet_upnp_get_ip(unsigned short port,
+                             const char * protocol,
+                             IPaddr * address) {
   unsigned int i;
 
   MUTEX_LOCK(lock);
@@ -165,14 +145,41 @@
   return gnunet_upnp_get_public_ip(address);
 }
 
+
 /**
+ * Get the external IP address for the local machine.
+ */
+UPnP_ServiceAPI * 
+provide_module_upnp(CoreAPIForApplication * capi) {
+  static UPnP_ServiceAPI api;
+
+  ectx = capi->ectx;
+  cfg = capi->cfg;
+  cron = cron_create(ectx);
+  lock = MUTEX_CREATE(NO);
+  cron_start(cron);
+  cron_add_job(cron,
+              &discover,
+              0,
+              5 * cronMINUTES,
+              NULL);
+  cron_add_job(cron,
+              &portmap,
+              150 * cronSECONDS,
+              5 * cronMINUTES,
+              NULL);
+  api.get_ip = gnunet_upnp_get_ip;
+  return &api;
+}
+
+/**
  * Shutdown UPNP.
  */
-void gnunet_upnp_done() {
+int release_module_upnp() {
   unsigned int i;
 
   if (cron == NULL)
-    return; /* never used! */
+    return SYSERR; /* not loaded! */
   for (i=0;i<maps_size;i++) 
     gaim_upnp_change_port_mapping(ectx,
                                  cfg,
@@ -198,6 +205,7 @@
        0);
   ectx = NULL;
   cfg = NULL;
+  return OK;
 }
 
 

Modified: GNUnet/src/transports/upnp/todo
===================================================================
--- GNUnet/src/transports/upnp/todo     2006-12-29 15:10:02 UTC (rev 4100)
+++ GNUnet/src/transports/upnp/todo     2006-12-29 15:41:06 UTC (rev 4101)
@@ -1,5 +1,5 @@
-1) write testcase
-2) integrate with transports -- tricky bit: making it optional!
-3) remove glib dependency from upnp code!
-4) adjust configure to check for libxml2
-5) fix xmlnode memory leaks (for invalid / incomplete XML responses)
+1) adjust configure to check for libxml2
+2) remove glib dependency from upnp code!
+3) fix xmlnode memory leaks (for invalid / incomplete XML responses)
+4) integrate with transports -- tricky bit: making it optional!
+   (make it a module?)

Deleted: GNUnet/src/transports/upnp/upnpdemo.c
===================================================================
--- GNUnet/src/transports/upnp/upnpdemo.c       2006-12-29 15:10:02 UTC (rev 
4100)
+++ GNUnet/src/transports/upnp/upnpdemo.c       2006-12-29 15:41:06 UTC (rev 
4101)
@@ -1,66 +0,0 @@
-/*
-     This file is part of GNUnet.
-     (C) 2006 Christian Grothoff (and other contributing authors)
-
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
-     option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
-*/
-/**
- * @file src/transports/upnp/upnpdemo.c
- * @brief Demo for UPnP
- * @author Christian Grothoff
- */
-
-#include "gnunet_util.h"
-#include "gnunet_util_config_impl.h"
-#include "gnunet_transport_upnp.h"
-#include "gnunet_util_error_loggers.h"
-#include "platform.h"
-
-int main(int argc,
-        const char *argv[]) {
-  struct GE_Context * ectx;
-  struct GC_Configuration * cfg;
-  IPaddr addr;
-
-  ectx = GE_create_context_stderr(NO,
-                                 GE_WARNING | GE_ERROR | GE_FATAL |
-                                 GE_USER | GE_ADMIN | GE_DEVELOPER |
-                                 GE_IMMEDIATE | GE_BULK);
-  GE_setDefaultContext(ectx);
-  cfg = GC_create_C_impl();
-  GE_ASSERT(ectx, cfg != NULL);
-  os_init(ectx);
-  gnunet_upnp_init(cfg, ectx);
-
-  printf("Testing UPnP.  Press CTRL-C to abort.\n");
-  while (GNUNET_SHUTDOWN_TEST() == NO) {
-    if (OK == gnunet_upnp_get_ip(2086,
-                                "TCP",
-                                &addr)) {
-      printf("UPnP returned external IP %u.%u.%u.%u\n",
-            PRIP(ntohl(*(int*)&addr)));
-    } else {
-      printf("No UPnP response (yet).\n");
-    }
-    PTHREAD_SLEEP(2 * cronSECONDS);
-  }
-  gnunet_upnp_done();
-  GC_free(cfg);
-  GE_free_context(ectx);
-  return 0;
-}
-
-/* end of upnpdemo.c */

Modified: GNUnet/src/transports/upnp/upnptest.c
===================================================================
--- GNUnet/src/transports/upnp/upnptest.c       2006-12-29 15:10:02 UTC (rev 
4100)
+++ GNUnet/src/transports/upnp/upnptest.c       2006-12-29 15:41:06 UTC (rev 
4101)
@@ -25,16 +25,24 @@
 
 #include "gnunet_util.h"
 #include "gnunet_util_config_impl.h"
-#include "gnunet_transport_upnp.h"
+#include "gnunet_upnp_service.h"
+#include "gnunet_core.h"
 #include "gnunet_util_error_loggers.h"
 #include "platform.h"
 
+
+
 int main(int argc,
         const char *argv[]) {
+  static CoreAPIForApplication capi;
   struct GE_Context * ectx;
   struct GC_Configuration * cfg;
   IPaddr addr;
   int i;
+  UPnP_ServiceAPI * upnp;
+  struct PluginHandle * plug;
+  ServiceInitMethod init;
+  ServiceDoneMethod done;
 
   ectx = GE_create_context_stderr(NO,
                                  GE_WARNING | GE_ERROR | GE_FATAL |
@@ -44,14 +52,36 @@
   cfg = GC_create_C_impl();
   GE_ASSERT(ectx, cfg != NULL);
   os_init(ectx);
-  gnunet_upnp_init(cfg, ectx);
-
+  capi.ectx = ectx;
+  capi.cfg = cfg;
+  plug = os_plugin_load(ectx, "libgnunet", "module_upnp");
+  if (plug == NULL) {
+    GC_free(cfg);
+    GE_free_context(ectx);
+    return 1;
+  }
+  init = os_plugin_resolve_function(plug,
+                                   "provide_",
+                                   YES);
+  if (init == NULL) {
+    os_plugin_unload(plug);
+    GC_free(cfg);
+    GE_free_context(ectx);
+    return 1;
+  }
+  upnp = init(&capi);
+  if (upnp == NULL) {
+    os_plugin_unload(plug);
+    GC_free(cfg);
+    GE_free_context(ectx);
+    return 1;
+  }
   for (i=0;i<10;i++) {
     if (GNUNET_SHUTDOWN_TEST() != NO) 
       break;
-    if (OK == gnunet_upnp_get_ip(2086,
-                                "TCP",
-                                &addr)) {
+    if (OK == upnp->get_ip(2086,
+                          "TCP",
+                          &addr)) {
       printf("UPnP returned external IP %u.%u.%u.%u\n",
             PRIP(ntohl(*(int*)&addr)));
     } else {
@@ -62,7 +92,12 @@
     }
     PTHREAD_SLEEP(2 * cronSECONDS);
   }
-  gnunet_upnp_done();
+  done = os_plugin_resolve_function(plug,
+                                   "release_",
+                                   YES);
+  if (done != NULL)
+    done();
+  os_plugin_unload(plug);
   GC_free(cfg);
   GE_free_context(ectx);
   return 0;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]