From 5ebf655c85076f200955458673a8bbf0dd927407 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 12 Aug 2005 00:25:52 +0000 Subject: Split avahi-common/util.h into avahi-common/domain.h avahi-core/fdutil.h avahi-core/timeval.h git-svn-id: file:///home/lennart/svn/public/avahi/trunk@299 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-core/Makefile.am | 16 ++++++- avahi-core/announce.c | 2 +- avahi-core/browse-dns-server.c | 2 +- avahi-core/browse-domain.c | 2 +- avahi-core/browse-service-type.c | 2 +- avahi-core/browse-service.c | 2 +- avahi-core/browse.c | 2 +- avahi-core/cache.c | 2 +- avahi-core/conformance-test.c | 1 - avahi-core/dns-test.c | 3 +- avahi-core/dns.c | 2 +- avahi-core/fdutil.c | 73 ++++++++++++++++++++++++++++ avahi-core/fdutil.h | 35 ++++++++++++++ avahi-core/probe-sched.c | 4 +- avahi-core/query-sched.c | 2 +- avahi-core/resolve-address.c | 2 +- avahi-core/resolve-host-name.c | 3 +- avahi-core/resolve-service.c | 3 +- avahi-core/response-sched.c | 2 +- avahi-core/rr.c | 2 +- avahi-core/server.c | 4 +- avahi-core/socket.c | 2 +- avahi-core/timeeventq-test.c | 2 +- avahi-core/timeeventq.c | 2 +- avahi-core/timeval-test.c | 41 ++++++++++++++++ avahi-core/timeval.c | 101 +++++++++++++++++++++++++++++++++++++++ avahi-core/timeval.h | 43 +++++++++++++++++ avahi-core/util.c | 93 +++++++++++++++++++++++++++++++++++ avahi-core/util.h | 37 ++++++++++++++ 29 files changed, 464 insertions(+), 23 deletions(-) create mode 100644 avahi-core/fdutil.c create mode 100644 avahi-core/fdutil.h create mode 100644 avahi-core/timeval-test.c create mode 100644 avahi-core/timeval.c create mode 100644 avahi-core/timeval.h create mode 100644 avahi-core/util.c create mode 100644 avahi-core/util.h (limited to 'avahi-core') diff --git a/avahi-core/Makefile.am b/avahi-core/Makefile.am index 2e436a6..e15f295 100644 --- a/avahi-core/Makefile.am +++ b/avahi-core/Makefile.am @@ -46,7 +46,8 @@ noinst_PROGRAMS = \ conformance-test \ avahi-reflector \ dns-test \ - timeeventq-test + timeeventq-test \ + timeval-test libavahi_core_la_SOURCES = \ timeeventq.c timeeventq.h\ @@ -72,7 +73,10 @@ libavahi_core_la_SOURCES = \ rr.c rr.h \ core.h \ log.c log.h \ - browse-dns-server.c + browse-dns-server.c \ + fdutil.h fdutil.c \ + timeval.h timeval.c \ + util.c util.h libavahi_core_la_CFLAGS = $(AM_CFLAGS) libavahi_core_la_LIBADD = $(AM_LDADD) $(COMMON_LDADD) @@ -101,6 +105,7 @@ dns_test_SOURCES = \ dns.c dns.h \ dns-test.c \ log.c log.h \ + util.c util.h \ rr.c rr.h dns_test_CFLAGS = $(AM_CFLAGS) dns_test_LDADD = $(AM_LDADD) $(COMMON_LDADD) @@ -108,10 +113,17 @@ dns_test_LDADD = $(AM_LDADD) $(COMMON_LDADD) timeeventq_test_SOURCES = \ timeeventq-test.c \ timeeventq.h timeeventq.c \ + timeval.c timeval.h \ prioq.h prioq.c timeeventq_test_CFLAGS = $(AM_CFLAGS) timeeventq_test_LDADD = $(AM_LDADD) $(COMMON_LDADD) +timeval_test_SOURCES = \ + timeval.c timeval.h \ + timeval-test.c +timeval_test_CFLAGS = $(AM_CFLAGS) +timeval_test_LDADD = $(AM_LDADD) + valgrind: avahi-test libtool --mode=execute valgrind ./avahi-test diff --git a/avahi-core/announce.c b/avahi-core/announce.c index 5d9e8cf..3787f8f 100644 --- a/avahi-core/announce.c +++ b/avahi-core/announce.c @@ -24,7 +24,7 @@ #endif #include "announce.h" -#include "util.h" +#include "timeval.h" #define AVAHI_ANNOUNCEMENT_JITTER_MSEC 250 #define AVAHI_PROBE_JITTER_MSEC 250 diff --git a/avahi-core/browse-dns-server.c b/avahi-core/browse-dns-server.c index 057f3e3..7b29ec6 100644 --- a/avahi-core/browse-dns-server.c +++ b/avahi-core/browse-dns-server.c @@ -25,8 +25,8 @@ #include +#include #include "browse.h" -#include "util.h" #include "log.h" #include "rr.h" diff --git a/avahi-core/browse-domain.c b/avahi-core/browse-domain.c index de3cb1b..71bc67f 100644 --- a/avahi-core/browse-domain.c +++ b/avahi-core/browse-domain.c @@ -23,8 +23,8 @@ #include #endif +#include #include "browse.h" -#include "util.h" struct AvahiDomainBrowser { AvahiServer *server; diff --git a/avahi-core/browse-service-type.c b/avahi-core/browse-service-type.c index 3534b6f..e769e91 100644 --- a/avahi-core/browse-service-type.c +++ b/avahi-core/browse-service-type.c @@ -25,8 +25,8 @@ #include +#include #include "browse.h" -#include "util.h" #include "log.h" struct AvahiServiceTypeBrowser { diff --git a/avahi-core/browse-service.c b/avahi-core/browse-service.c index 34a2536..35fcc53 100644 --- a/avahi-core/browse-service.c +++ b/avahi-core/browse-service.c @@ -25,8 +25,8 @@ #include +#include #include "browse.h" -#include "util.h" #include "log.h" struct AvahiServiceBrowser { diff --git a/avahi-core/browse.c b/avahi-core/browse.c index 42c13da..e2d996e 100644 --- a/avahi-core/browse.c +++ b/avahi-core/browse.c @@ -24,7 +24,7 @@ #endif #include "browse.h" -#include "util.h" +#include "timeval.h" #include "log.h" struct AvahiRecordBrowser { diff --git a/avahi-core/cache.c b/avahi-core/cache.c index 2f3296f..dddd5ee 100644 --- a/avahi-core/cache.c +++ b/avahi-core/cache.c @@ -25,7 +25,7 @@ #include -#include "util.h" +#include "timeval.h" #include "cache.h" #include "log.h" diff --git a/avahi-core/conformance-test.c b/avahi-core/conformance-test.c index 13704c3..7a4c601 100644 --- a/avahi-core/conformance-test.c +++ b/avahi-core/conformance-test.c @@ -31,7 +31,6 @@ #include #include "core.h" -#include "util.h" #include "alternative.h" #include "log.h" diff --git a/avahi-core/dns-test.c b/avahi-core/dns-test.c index 6b98ef3..bf141f5 100644 --- a/avahi-core/dns-test.c +++ b/avahi-core/dns-test.c @@ -23,9 +23,10 @@ #include #endif +#include #include "dns.h" -#include "util.h" #include "log.h" +#include "util.h" int main(int argc, char *argv[]) { gchar t[256]; diff --git a/avahi-core/dns.c b/avahi-core/dns.c index 2801386..9663fc4 100644 --- a/avahi-core/dns.c +++ b/avahi-core/dns.c @@ -29,8 +29,8 @@ #include #include +#include #include "dns.h" -#include "util.h" AvahiDnsPacket* avahi_dns_packet_new(guint mtu) { AvahiDnsPacket *p; diff --git a/avahi-core/fdutil.c b/avahi-core/fdutil.c new file mode 100644 index 0000000..de7b0cf --- /dev/null +++ b/avahi-core/fdutil.c @@ -0,0 +1,73 @@ +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include "fdutil.h" + +int avahi_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); +} + +int avahi_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 avahi_wait_for_write(int fd) { + fd_set fds; + int r; + + FD_ZERO(&fds); + FD_SET(fd, &fds); + + if ((r = select(fd+1, NULL, &fds, NULL, NULL)) < 0) + return -1; + + assert(r > 0); + + return 0; +} diff --git a/avahi-core/fdutil.h b/avahi-core/fdutil.h new file mode 100644 index 0000000..047b9bb --- /dev/null +++ b/avahi-core/fdutil.h @@ -0,0 +1,35 @@ +#ifndef foofdutilhfoo +#define foofdutilhfoo + +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#include + +AVAHI_C_DECL_BEGIN + +int avahi_set_cloexec(int fd); +int avahi_set_nonblock(int fd); +int avahi_wait_for_write(int fd); + +AVAHI_C_DECL_END + +#endif diff --git a/avahi-core/probe-sched.c b/avahi-core/probe-sched.c index ad23234..d7f9ca0 100644 --- a/avahi-core/probe-sched.c +++ b/avahi-core/probe-sched.c @@ -23,8 +23,10 @@ #include #endif +#include + #include "probe-sched.h" -#include "util.h" +#include "timeval.h" #include "log.h" #define AVAHI_PROBE_HISTORY_MSEC 150 diff --git a/avahi-core/query-sched.c b/avahi-core/query-sched.c index 129b15e..6e9234f 100644 --- a/avahi-core/query-sched.c +++ b/avahi-core/query-sched.c @@ -24,7 +24,7 @@ #endif #include "query-sched.h" -#include "util.h" +#include "timeval.h" #define AVAHI_QUERY_HISTORY_MSEC 100 #define AVAHI_QUERY_DEFER_MSEC 100 diff --git a/avahi-core/resolve-address.c b/avahi-core/resolve-address.c index c386875..fa50c39 100644 --- a/avahi-core/resolve-address.c +++ b/avahi-core/resolve-address.c @@ -24,7 +24,7 @@ #endif #include "browse.h" -#include "util.h" +#include "timeval.h" struct AvahiAddressResolver { AvahiServer *server; diff --git a/avahi-core/resolve-host-name.c b/avahi-core/resolve-host-name.c index c01c1a4..f50ddb4 100644 --- a/avahi-core/resolve-host-name.c +++ b/avahi-core/resolve-host-name.c @@ -23,8 +23,9 @@ #include #endif +#include +#include "timeval.h" #include "browse.h" -#include "util.h" struct AvahiHostNameResolver { AvahiServer *server; diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c index 135543f..bf4f7b9 100644 --- a/avahi-core/resolve-service.c +++ b/avahi-core/resolve-service.c @@ -25,8 +25,9 @@ #include +#include #include "browse.h" -#include "util.h" +#include "timeval.h" struct AvahiServiceResolver { AvahiServer *server; diff --git a/avahi-core/response-sched.c b/avahi-core/response-sched.c index e1024a6..6027287 100644 --- a/avahi-core/response-sched.c +++ b/avahi-core/response-sched.c @@ -24,7 +24,7 @@ #endif #include "response-sched.h" -#include "util.h" +#include "timeval.h" #include "log.h" #define AVAHI_RESPONSE_HISTORY_MSEC 500 diff --git a/avahi-core/rr.c b/avahi-core/rr.c index 1a30146..4ec3c11 100644 --- a/avahi-core/rr.c +++ b/avahi-core/rr.c @@ -29,7 +29,7 @@ #include #include -#include "util.h" +#include #include "rr.h" AvahiKey *avahi_key_new(const gchar *name, guint16 class, guint16 type) { diff --git a/avahi-core/server.c b/avahi-core/server.c index 2bbc1f0..d913738 100644 --- a/avahi-core/server.c +++ b/avahi-core/server.c @@ -31,8 +31,10 @@ #include #include +#include + #include "server.h" -#include "util.h" +#include "timeval.h" #include "iface.h" #include "socket.h" #include "browse.h" diff --git a/avahi-core/socket.c b/avahi-core/socket.c index 842d09a..fc312d5 100644 --- a/avahi-core/socket.c +++ b/avahi-core/socket.c @@ -37,7 +37,7 @@ #include #include "dns.h" -#include "util.h" +#include "fdutil.h" #include "socket.h" #include "log.h" diff --git a/avahi-core/timeeventq-test.c b/avahi-core/timeeventq-test.c index 91eceb6..6ac55b8 100644 --- a/avahi-core/timeeventq-test.c +++ b/avahi-core/timeeventq-test.c @@ -25,8 +25,8 @@ #include -#include "util.h" #include "timeeventq.h" +#include "timeval.h" static AvahiTimeEventQueue *q = NULL; diff --git a/avahi-core/timeeventq.c b/avahi-core/timeeventq.c index fbdb6d5..d466cd4 100644 --- a/avahi-core/timeeventq.c +++ b/avahi-core/timeeventq.c @@ -24,7 +24,7 @@ #endif #include "timeeventq.h" -#include "util.h" +#include "timeval.h" static gint compare(gconstpointer _a, gconstpointer _b) { const AvahiTimeEvent *a = _a, *b = _b; diff --git a/avahi-core/timeval-test.c b/avahi-core/timeval-test.c new file mode 100644 index 0000000..7dedf41 --- /dev/null +++ b/avahi-core/timeval-test.c @@ -0,0 +1,41 @@ +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include "timeval.h" + +int main(int argc, char *argv[]) { + + struct timeval a = { 5, 5 }, b; + + b = a; + + printf("%li.%li\n", a.tv_sec, a.tv_usec); + avahi_timeval_add(&a, -50); + + printf("%li.%li\n", a.tv_sec, a.tv_usec); + + printf("%lli\n", avahi_timeval_diff(&a, &b)); +} diff --git a/avahi-core/timeval.c b/avahi-core/timeval.c new file mode 100644 index 0000000..e5732cd --- /dev/null +++ b/avahi-core/timeval.c @@ -0,0 +1,101 @@ +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include "timeval.h" + +int avahi_timeval_compare(const struct timeval *a, const struct timeval *b) { + assert(a); + assert(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; +} + +AvahiUsec avahi_timeval_diff(const struct timeval *a, const struct timeval *b) { + assert(a); + assert(b); + + if (avahi_timeval_compare(a, b) < 0) + return - avahi_timeval_diff(b, a); + + return ((AvahiUsec) a->tv_sec - b->tv_sec)*1000000 + a->tv_usec - b->tv_usec; +} + +struct timeval* avahi_timeval_add(struct timeval *a, AvahiUsec usec) { + AvahiUsec u; + assert(a); + + u = usec + a->tv_usec; + + if (u < 0) { + a->tv_usec = (long) (1000000 + (u % 1000000)); + a->tv_sec += (long) (-1 + (u / 1000000)); + } else { + a->tv_usec = (long) (u % 1000000); + a->tv_sec += (long) (u / 1000000); + } + + return a; +} + +AvahiUsec avahi_age(const struct timeval *a) { + struct timeval now; + + assert(a); + + gettimeofday(&now, NULL); + + return avahi_timeval_diff(&now, a); +} + + +struct timeval *avahi_elapse_time(struct timeval *tv, unsigned msec, unsigned jitter) { + assert(tv); + + gettimeofday(tv, NULL); + + if (msec) + avahi_timeval_add(tv, (AvahiUsec) msec*1000); + + if (jitter) + avahi_timeval_add(tv, (AvahiUsec) (jitter*1000.0*rand()/(RAND_MAX+1.0))); + + return tv; +} + diff --git a/avahi-core/timeval.h b/avahi-core/timeval.h new file mode 100644 index 0000000..c046a19 --- /dev/null +++ b/avahi-core/timeval.h @@ -0,0 +1,43 @@ +#ifndef footimevalhfoo +#define footimevalhfoo + +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#include +#include + +#include + +AVAHI_C_DECL_BEGIN + +typedef int64_t AvahiUsec; + +int avahi_timeval_compare(const struct timeval *a, const struct timeval *b); +AvahiUsec avahi_timeval_diff(const struct timeval *a, const struct timeval *b); +struct timeval* avahi_timeval_add(struct timeval *a, AvahiUsec usec); + +AvahiUsec avahi_age(const struct timeval *a); +struct timeval *avahi_elapse_time(struct timeval *tv, unsigned msec, unsigned jitter); + +AVAHI_C_DECL_END + +#endif diff --git a/avahi-core/util.c b/avahi-core/util.c new file mode 100644 index 0000000..514f0d9 --- /dev/null +++ b/avahi-core/util.c @@ -0,0 +1,93 @@ +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include + +#include "util.h" + +void avahi_hexdump(const void* p, size_t size) { + const uint8_t *c = p; + assert(p); + + printf("Dumping %u bytes from %p:\n", size, p); + + while (size > 0) { + unsigned i; + + for (i = 0; i < 16; i++) { + if (i < size) + printf("%02x ", c[i]); + else + printf(" "); + } + + for (i = 0; i < 16; i++) { + if (i < size) + printf("%c", c[i] >= 32 && c[i] < 127 ? c[i] : '.'); + else + printf(" "); + } + + printf("\n"); + + c += 16; + + if (size <= 16) + break; + + size -= 16; + } +} + + +char *avahi_format_mac_address(const uint8_t* mac, size_t size) { + char *r, *t; + unsigned i; + static const char hex[] = "0123456789abcdef"; + + t = r = g_new(char, size > 0 ? size*3 : 1); + + if (size <= 0) { + *r = 0; + return r; + } + + for (i = 0; i < size; i++) { + *(t++) = hex[*mac >> 4]; + *(t++) = hex[*mac & 0xF]; + *(t++) = ':'; + + mac++; + } + + *(--t) = 0; + return r; +} + diff --git a/avahi-core/util.h b/avahi-core/util.h new file mode 100644 index 0000000..ec124bc --- /dev/null +++ b/avahi-core/util.h @@ -0,0 +1,37 @@ +#ifndef fooutilhfoo +#define fooutilhfoo + +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi 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.1 of the + License, or (at your option) any later version. + + avahi 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 Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#include + +#include + +AVAHI_C_DECL_BEGIN + +void avahi_hexdump(const void *p, size_t size); + +char *avahi_format_mac_address(const uint8_t* mac, size_t size); + +AVAHI_C_DECL_END + +#endif -- cgit