[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r21339 - in gnunet/src/gns: . nss,
gnunet <=