gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r21339 - in gnunet/src/gns: . nss


From: gnunet
Subject: [GNUnet-SVN] r21339 - in gnunet/src/gns: . nss
Date: Tue, 8 May 2012 14:02:49 +0200

Author: schanzen
Date: 2012-05-08 14:02:49 +0200 (Tue, 08 May 2012)
New Revision: 21339

Added:
   gnunet/src/gns/nss/Makefile.am
   gnunet/src/gns/nss/map-file
   gnunet/src/gns/nss/query.h
   gnunet/src/gns/nss/util.c
   gnunet/src/gns/nss/util.h
Modified:
   gnunet/src/gns/Makefile.am
   gnunet/src/gns/nss/nss_gns.c
Log:
-nss build files



Modified: gnunet/src/gns/Makefile.am
===================================================================
--- gnunet/src/gns/Makefile.am  2012-05-08 11:34:52 UTC (rev 21338)
+++ gnunet/src/gns/Makefile.am  2012-05-08 12:02:49 UTC (rev 21339)
@@ -1,5 +1,7 @@
 INCLUDES = -I$(top_srcdir)/src/include
 
+#SUBDIRS=nss
+
 if MINGW
   WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
 endif

Added: gnunet/src/gns/nss/Makefile.am
===================================================================
--- gnunet/src/gns/nss/Makefile.am                              (rev 0)
+++ gnunet/src/gns/nss/Makefile.am      2012-05-08 12:02:49 UTC (rev 21339)
@@ -0,0 +1,57 @@
+# $Id$
+#
+# This file taken and modified from nss-gns.
+#
+# nss-gns is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# nss-gns 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 Lesser General Public
+# License along with nss-gns; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+
+EXTRA_DIST = map-file
+
+# This cool debug trap works on i386/gcc only
+AM_CFLAGS='-DDEBUG_TRAP=__asm__("int $$3")'
+
+AM_LDFLAGS=-avoid-version -module -export-dynamic
+
+lib_LTLIBRARIES = 
+
+lib_LTLIBRARIES += \
+       libnss_gns.la \
+       libnss_gns4.la \
+       libnss_gns6.la
+
+sources = util.c util.h query.h
+
+# GNU Libc
+libnss_gns_la_SOURCES= $(sources) nss_gns.c
+libnss_gns_la_CFLAGS=$(AM_CFLAGS) 
+libnss_gns_la_LDFLAGS=$(AM_LDFLAGS) -shrext .so.2 
-Wl,-version-script=$(srcdir)/map-file
+
+libnss_gns4_la_SOURCES=$(libnss_gns_la_SOURCES)
+libnss_gns4_la_CFLAGS=$(libnss_gns_la_CFLAGS) -DNSS_IPV4_ONLY=1
+libnss_gns4_la_LDFLAGS=$(libnss_gns_la_LDFLAGS)
+
+libnss_gns6_la_SOURCES=$(libnss_gns_la_SOURCES)
+libnss_gns6_la_CFLAGS=$(libnss_gns_la_CFLAGS) -DNSS_IPV6_ONLY=1
+libnss_gns6_la_LDFLAGS=$(libnss_gns_la_LDFLAGS)
+
+install-exec-hook:
+       rm -f $(DESTDIR)$(libdir)/libnss_gns.la 
+       rm -f $(DESTDIR)$(libdir)/libnss_gns4.la 
+       rm -f $(DESTDIR)$(libdir)/libnss_gns6.la 
+
+uninstall-hook:
+       rm -f $(DESTDIR)$(libdir)/libnss_gns.so.2 
+       rm -f $(DESTDIR)$(libdir)/libnss_gns4.so.2 
+       rm -f $(DESTDIR)$(libdir)/libnss_gns6.so.2 

Added: gnunet/src/gns/nss/map-file
===================================================================
--- gnunet/src/gns/nss/map-file                         (rev 0)
+++ gnunet/src/gns/nss/map-file 2012-05-08 12:02:49 UTC (rev 21339)
@@ -0,0 +1,14 @@
+NSSGNS_0 {
+global:
+_nss_gns_gethostbyaddr_r;
+_nss_gns4_gethostbyaddr_r;
+_nss_gns6_gethostbyaddr_r;
+_nss_gns_gethostbyname_r;         
+_nss_gns4_gethostbyname_r;
+_nss_gns6_gethostbyname_r;
+_nss_gns_gethostbyname2_r;         
+_nss_gns4_gethostbyname2_r;
+_nss_gns6_gethostbyname2_r;
+local: 
+*;
+};

Modified: gnunet/src/gns/nss/nss_gns.c
===================================================================
--- gnunet/src/gns/nss/nss_gns.c        2012-05-08 11:34:52 UTC (rev 21338)
+++ gnunet/src/gns/nss/nss_gns.c        2012-05-08 12:02:49 UTC (rev 21339)
@@ -19,10 +19,7 @@
     USA.
 ***/
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
+#include <gnunet_config.h>
 #include <unistd.h>
 #include <errno.h>
 #include <string.h>
@@ -33,6 +30,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "query.h"
+
 #ifdef NSS_IPV4_ONLY
 #define _nss_mdns_gethostbyname2_r _nss_gns4_minimal_gethostbyname2_r
 #define _nss_mdns_gethostbyname_r  _nss_gns4_minimal_gethostbyname_r

Added: gnunet/src/gns/nss/query.h
===================================================================
--- gnunet/src/gns/nss/query.h                          (rev 0)
+++ gnunet/src/gns/nss/query.h  2012-05-08 12:02:49 UTC (rev 21339)
@@ -0,0 +1,56 @@
+#ifndef fooqueryhfoo
+#define fooqueryhfoo
+
+/* $Id$ */
+
+/***
+  This file is part of nss-mdns.
+ 
+  nss-mdns is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+ 
+  nss-mdns 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 Lesser General Public
+  License along with nss-mdns; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#include <inttypes.h>
+
+typedef struct {
+    uint32_t address;
+} ipv4_address_t;
+
+typedef struct {
+    uint8_t address[16];
+} ipv6_address_t;
+
+int gns_open_socket(void);
+
+int gns_query_name(int fd,
+               const char *name,
+               void (*ipv4_func)(const ipv4_address_t *ipv4, void *userdata),
+               void (*ipv6_func)(const ipv6_address_t *ipv6, void *userdata),
+               void *userdata);
+
+#ifndef NSS_IPV6_ONLY
+int gns_query_ipv4(int fd,
+               const ipv4_address_t *ipv4,
+               void (*name_func)(const char *name, void *userdata),
+               void *userdata);
+#endif
+#ifndef NSS_IPV4_ONLY
+int gns_query_ipv6(int fd,
+               const ipv6_address_t *ipv6,
+               void (*name_func)(const char *name, void *userdata),
+               void *userdata);
+#endif
+
+#endif

Added: gnunet/src/gns/nss/util.c
===================================================================
--- gnunet/src/gns/nss/util.c                           (rev 0)
+++ gnunet/src/gns/nss/util.c   2012-05-08 12:02:49 UTC (rev 21339)
@@ -0,0 +1,207 @@
+/* $Id$ */
+
+/***
+  This file is part of nss-mdns.
+ 
+  nss-mdns is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+ 
+  nss-mdns 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 Lesser General Public
+  License along with nss-mdns; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#include <gnunet_config.h>
+
+#include <sys/select.h>
+#include <errno.h>
+#include <string.h>
+#include <assert.h>
+#include <fcntl.h>
+
+#include "util.h"
+
+#ifdef ENABLE_LEGACY
+
+/* Calculate the difference between the two specfified timeval
+ * timestamsps. */
+usec_t timeval_diff(const struct timeval *a, const struct timeval *b) {
+    usec_t r;
+    assert(a && b);
+
+    /* Check which whan is the earlier time and swap the two arguments if 
reuqired. */
+    if (timeval_cmp(a, b) < 0) {
+        const struct timeval *c;
+        c = a;
+        a = b;
+        b = c;
+    }
+
+    /* Calculate the second difference*/
+    r = ((usec_t) a->tv_sec - b->tv_sec)* 1000000;
+
+    /* Calculate the microsecond difference */
+    if (a->tv_usec > b->tv_usec)
+        r += ((usec_t) a->tv_usec - b->tv_usec);
+    else if (a->tv_usec < b->tv_usec)
+        r -= ((usec_t) b->tv_usec - a->tv_usec);
+
+    return r;
+}
+
+/* Compare the two timeval structs and return 0 when equal, negative when a < 
b, positive otherwse */
+int timeval_cmp(const struct timeval *a, const struct timeval *b) {
+    assert(a && b);
+
+    if (a->tv_sec < b->tv_sec)
+        return -1;
+
+    if (a->tv_sec > b->tv_sec)
+        return 1;
+
+    if (a->tv_usec < b->tv_usec)
+        return -1;
+
+    if (a->tv_usec > b->tv_usec)
+        return 1;
+
+    return 0;
+}
+
+/* Return the time difference between now and the specified timestamp */
+usec_t timeval_age(const struct timeval *tv) {
+    struct timeval now;
+    assert(tv);
+    gettimeofday(&now, NULL);
+    return timeval_diff(&now, tv);
+}
+
+/* Add the specified time inmicroseconds to the specified timeval structure */
+void timeval_add(struct timeval *tv, usec_t v) {
+    unsigned long secs;
+    assert(tv);
+    
+    secs = (v/1000000);
+    tv->tv_sec += (unsigned long) secs;
+    v -= secs*1000000;
+
+    tv->tv_usec += v;
+
+    /* Normalize */
+    while (tv->tv_usec >= 1000000) {
+        tv->tv_sec++;
+        tv->tv_usec -= 1000000;
+    }
+}
+
+int set_nonblock(int fd) {
+    int n;
+    assert(fd >= 0);
+
+    if ((n = fcntl(fd, F_GETFL)) < 0)
+        return -1;
+
+    if (n & O_NONBLOCK)
+        return 0;
+
+    return fcntl(fd, F_SETFL, n|O_NONBLOCK);
+}
+
+int wait_for_write(int fd, struct timeval *end) {
+    struct timeval now;
+
+    if (end)
+        gettimeofday(&now, NULL);
+    
+    for (;;) {
+        struct timeval tv;
+        fd_set fds;
+        int r;
+        
+        FD_ZERO(&fds);
+        FD_SET(fd, &fds);
+
+        if (end) {
+            if (timeval_cmp(&now, end) >= 0)
+                return 1;
+
+            tv.tv_sec = tv.tv_usec = 0;
+            timeval_add(&tv, timeval_diff(end, &now));
+        }
+
+        if ((r = select(fd+1, NULL, &fds, NULL, end ? &tv : NULL)) < 0) {
+            if (errno != EINTR)
+                return -1;
+        } else if (r == 0)
+            return 1;
+        else {
+            if (FD_ISSET(fd, &fds))
+                return 0;
+        }
+
+        if (end)
+            gettimeofday(&now, NULL);
+    }
+}
+
+int wait_for_read(int fd, struct timeval *end) {
+    struct timeval now;
+
+    if (end)
+        gettimeofday(&now, NULL);
+
+    for (;;) {
+        struct timeval tv;
+        fd_set fds;
+        int r;
+        
+        FD_ZERO(&fds);
+        FD_SET(fd, &fds);
+
+        if (end) {
+            if (timeval_cmp(&now, end) >= 0)
+                return 1;
+            
+            tv.tv_sec = tv.tv_usec = 0;
+            timeval_add(&tv, timeval_diff(end, &now));
+        }
+        
+        if ((r = select(fd+1, &fds, NULL, NULL, end ? &tv : NULL)) < 0) {
+            if (errno != EINTR)
+                return -1;
+        } else if (r == 0) 
+            return 1;
+        else {
+            
+            if (FD_ISSET(fd, &fds))
+                return 0;
+        }
+
+        if (end)
+            gettimeofday(&now, NULL);
+    }
+}
+
+#endif
+
+int set_cloexec(int fd) {
+    int n;
+    assert(fd >= 0);
+    
+    if ((n = fcntl(fd, F_GETFD)) < 0)
+        return -1;
+
+    if (n & FD_CLOEXEC)
+        return 0;
+
+    return fcntl(fd, F_SETFD, n|FD_CLOEXEC);
+}
+

Added: gnunet/src/gns/nss/util.h
===================================================================
--- gnunet/src/gns/nss/util.h                           (rev 0)
+++ gnunet/src/gns/nss/util.h   2012-05-08 12:02:49 UTC (rev 21339)
@@ -0,0 +1,47 @@
+#ifndef fooutilhfoo
+#define fooutilhfoo
+
+/* $Id$ */
+
+/***
+  This file is part of nss-mdns.
+ 
+  nss-mdns is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as
+  published by the Free Software Foundation; either version 2 of the
+  License, or (at your option) any later version.
+ 
+  nss-mdns 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 Lesser General Public
+  License along with nss-mdns; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#include <sys/time.h>
+#include <time.h>
+#include <inttypes.h>
+
+#ifdef ENABLE_LEGACY
+typedef uint64_t usec_t;
+
+usec_t timeval_diff(const struct timeval *a, const struct timeval *b);
+int timeval_cmp(const struct timeval *a, const struct timeval *b);
+usec_t timeval_age(const struct timeval *tv);
+void timeval_add(struct timeval *tv, usec_t v);
+
+int set_nonblock(int fd);
+
+int wait_for_write(int fd, struct timeval *end);
+int wait_for_read(int fd, struct timeval *end);
+
+#endif
+
+int set_cloexec(int fd);
+
+
+#endif




reply via email to

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