]> git.meshlink.io Git - catta/commitdiff
Split avahi-common/util.h into
authorLennart Poettering <lennart@poettering.net>
Fri, 12 Aug 2005 00:25:52 +0000 (00:25 +0000)
committerLennart Poettering <lennart@poettering.net>
Fri, 12 Aug 2005 00:25:52 +0000 (00:25 +0000)
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

40 files changed:
avahi-common/Makefile.am
avahi-common/address.c
avahi-common/alternative.c
avahi-common/domain-test.c
avahi-common/domain.c [new file with mode: 0644]
avahi-common/domain.h [new file with mode: 0644]
avahi-common/timeval-test.c [deleted file]
avahi-common/util.c [deleted file]
avahi-common/util.h [deleted file]
avahi-core/Makefile.am
avahi-core/announce.c
avahi-core/browse-dns-server.c
avahi-core/browse-domain.c
avahi-core/browse-service-type.c
avahi-core/browse-service.c
avahi-core/browse.c
avahi-core/cache.c
avahi-core/conformance-test.c
avahi-core/dns-test.c
avahi-core/dns.c
avahi-core/fdutil.c [new file with mode: 0644]
avahi-core/fdutil.h [new file with mode: 0644]
avahi-core/probe-sched.c
avahi-core/query-sched.c
avahi-core/resolve-address.c
avahi-core/resolve-host-name.c
avahi-core/resolve-service.c
avahi-core/response-sched.c
avahi-core/rr.c
avahi-core/server.c
avahi-core/socket.c
avahi-core/timeeventq-test.c
avahi-core/timeeventq.c
avahi-core/timeval-test.c [new file with mode: 0644]
avahi-core/timeval.c [new file with mode: 0644]
avahi-core/timeval.h [new file with mode: 0644]
avahi-core/util.c [new file with mode: 0644]
avahi-core/util.h [new file with mode: 0644]
avahi-daemon/dbus-protocol.c
avahi-dnsconfd/main.c

index 3b025be41b1c8ac4e7ad902e99e6d0758bd1b738..20eaee3eb398005cebaee4da372a4b3866c9652d 100644 (file)
@@ -32,7 +32,7 @@ avahi_commoninclude_HEADERS = \
        strlst.h \
        address.h \
        alternative.h \
-       util.h \
+       domain.h \
        cdecl.h \
        defs.h \
        malloc.h
@@ -46,8 +46,7 @@ noinst_HEADERS = llist.h
 noinst_PROGRAMS = \
        strlst-test \
        domain-test \
-       alternative-test \
-       timeval-test
+       alternative-test
 
 lib_LTLIBRARIES = \
        libavahi-common.la 
@@ -58,7 +57,7 @@ libavahi_common_la_SOURCES = \
        alternative.c alternative.h \
        error.c error.h \
        strlst.c strlst.h \
-       util.c util.h
+       domain.c domain.h
 libavahi_common_la_CFLAGS = $(AM_CFLAGS)
 libavahi_common_la_LIBADD = $(AM_LDADD)
 
@@ -72,22 +71,15 @@ strlst_test_LDADD = $(AM_LDADD)
 alternative_test_SOURCES = \
        alternative.c alternative.h \
        malloc.c malloc.h \
-       util.c util.h \
+       domain.c domain.h \
        alternative-test.c
 alternative_test_CFLAGS = $(AM_CFLAGS)
 alternative_test_LDADD = $(AM_LDADD)
 
 domain_test_SOURCES = \
-       util.c util.h \
+       domain.c domain.h \
        malloc.c malloc.h \
        domain-test.c
 domain_test_CFLAGS = $(AM_CFLAGS)
 domain_test_LDADD = $(AM_LDADD)
 
-timeval_test_SOURCES = \
-       util.c util.h \
-       malloc.c malloc.h \
-       timeval-test.c
-timeval_test_CFLAGS = $(AM_CFLAGS)
-timeval_test_LDADD = $(AM_LDADD)
-
index c638b41f4ae4391e804ed76dab84c231ceb81476..50224edbc1277788425779876ebc72dd6efd85f0 100644 (file)
@@ -30,7 +30,6 @@
 #include <assert.h>
 
 #include "address.h"
-#include "util.h"
 #include "malloc.h"
 
 size_t avahi_address_get_size(const AvahiAddress *a) {
index 53a1e6c1259265d23d7b7f4a6d6cac4de557a405..436a0d47b2f1e3a3899afa308299c2cf6b33a47e 100644 (file)
@@ -30,7 +30,6 @@
 
 #include "alternative.h"
 #include "malloc.h"
-#include "util.h"
 
 char * avahi_alternative_host_name(const char *s) {
     const char *p, *e;
index a9ad0b66da8f8d33f8551f6e5475a3c45cff1bce..0113a8b51a17fcb2bbe8732066bc378801986347 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <stdio.h>
 
-#include "util.h"
+#include "domain.h"
 #include "malloc.h"
 
 int main(int argc, char *argv[]) {
diff --git a/avahi-common/domain.c b/avahi-common/domain.c
new file mode 100644 (file)
index 0000000..b1e7cfe
--- /dev/null
@@ -0,0 +1,369 @@
+/* $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 <config.h>
+#endif
+
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "domain.h"
+#include "malloc.h"
+
+char *avahi_get_host_name(void) {
+#ifdef HOST_NAME_MAX
+    char t[HOST_NAME_MAX];
+#else
+    char t[256];
+#endif
+    gethostname(t, sizeof(t));
+    t[sizeof(t)-1] = 0;
+    return avahi_normalize_name(t);
+}
+
+static char *unescape_uneeded(const char *src, char *ret_dest, size_t size) {
+    int escaped = 0;
+    
+    assert(src);
+    assert(ret_dest);
+    assert(size > 0);
+    
+    for (; *src; src++) {
+
+        if (!escaped && *src == '\\')
+            escaped = 1;
+        else if (escaped && (*src == '.' || *src == '\\')) {
+
+            if ((size -= 2) <= 1) break;
+            
+            *(ret_dest++) = '\\';
+            *(ret_dest++) = *src;
+            escaped = 0;
+        } else {
+            if (--size <= 1) break;
+
+            *(ret_dest++) = *src;
+            escaped = 0;
+        }
+
+    }
+
+    *ret_dest = 0;
+    
+    return ret_dest;
+}
+
+char *avahi_normalize_name(const char *s) {
+    char tmp[256];
+    size_t l;
+    
+    assert(s);
+
+    unescape_uneeded(s, tmp, sizeof(tmp));
+
+    l = strlen(tmp);
+
+    while (l > 0 && tmp[l-1] == '.')
+        tmp[--l] = 0;
+
+    return avahi_strdup(tmp);
+}
+
+
+/* Read the first label from string *name, unescape "\" and write it to dest */
+char *avahi_unescape_label(const char **name, char *dest, size_t size) {
+    unsigned i = 0;
+    char *d;
+    
+    assert(dest);
+    assert(size > 0);
+    assert(name);
+
+    if (!**name)
+        return NULL;
+
+    d = dest;
+    
+    for (;;) {
+        if (i >= size)
+            return NULL;
+
+        if (**name == '.') {
+            (*name)++;
+            break;
+        }
+        
+        if (**name == 0)
+            break;
+        
+        if (**name == '\\') {
+            (*name) ++;
+            
+            if (**name == 0)
+                break;
+        }
+        
+        *(d++) = *((*name) ++);
+        i++;
+    }
+
+    assert(i < size);
+
+    *d = 0;
+
+    return dest;
+}
+
+/* Escape "\" and ".", append \0 */
+char *avahi_escape_label(const uint8_t* src, size_t src_length, char **ret_name, size_t *ret_size) {
+    char *r;
+
+    assert(src);
+    assert(ret_name);
+    assert(*ret_name);
+    assert(ret_size);
+    assert(*ret_size > 0);
+
+    r = *ret_name;
+
+    while (src_length > 0) {
+        if (*src == '.' || *src == '\\') {
+            if (*ret_size < 3)
+                return NULL;
+            
+            *((*ret_name) ++) = '\\';
+            (*ret_size) --;
+        }
+
+        if (*ret_size < 2)
+            return NULL;
+        
+        *((*ret_name)++) = *src;
+        (*ret_size) --;
+
+        src_length --;
+        src++;
+    }
+
+    **ret_name = 0;
+
+    return r;
+}
+
+int avahi_domain_equal(const char *a, const char *b) {
+    assert(a);
+    assert(b);
+
+    if (a == b)
+        return 1;
+    
+    for (;;) {
+        char ca[65], cb[65], *pa, *pb;
+
+        pa = avahi_unescape_label(&a, ca, sizeof(ca));
+        pb = avahi_unescape_label(&b, cb, sizeof(cb));
+
+        if (!pa && !pb)
+            return 1;
+        else if ((pa && !pb) || (!pa && pb))
+            return 0;
+
+        if (strcasecmp(pa, pb))
+            return 0;
+    }
+
+    return 1;
+}
+
+int avahi_binary_domain_cmp(const char *a, const char *b) {
+    assert(a);
+    assert(b);
+
+    if (a == b)
+        return 0;
+
+    for (;;) {
+        char ca[65], cb[65], *pa, *pb;
+        int r;
+
+        pa = avahi_unescape_label(&a, ca, sizeof(ca));
+        pb = avahi_unescape_label(&b, cb, sizeof(cb));
+
+        if (!pa && !pb)
+            return 0;
+        else if (pa && !pb)
+            return 1;
+        else if (!pa && pb)
+            return -1;
+        
+        if ((r = strcmp(pa, pb)))
+            return r;
+    }
+}
+
+unsigned avahi_strhash(const char *p) {
+    unsigned hash = 0;
+
+    for (; *p; p++)
+        hash = 31 * hash + *p;
+
+    return hash;
+}
+
+unsigned avahi_domain_hash(const char *s) {
+    unsigned hash = 0;
+    
+    for (;;) {
+        char c[65];
+
+        if (!avahi_unescape_label(&s, c, sizeof(c)))
+            return hash;
+
+        if (!c[0])
+            continue;
+        
+        hash += avahi_strhash(avahi_strdown(c));
+    }
+}
+
+int avahi_valid_service_type(const char *t) {
+    const char *p;
+    assert(t);
+
+    if (strlen(t) < 5)
+        return 0;
+    
+    if (*t != '_')
+        return 0;
+
+    if (!(p = strchr(t, '.')))
+        return 0;
+
+    if (p - t > 63 || p - t < 2)
+        return 0;
+
+    if (*(++p) != '_')
+        return 0;
+
+    if (strchr(p, '.'))
+        return 0;
+
+    if (strlen(p) > 63 || strlen(p) < 2)
+        return 0;
+    
+    return 1;
+}
+
+int avahi_valid_domain_name(const char *t) {
+    const char *p, *dp;
+    int dot = 0;
+        
+    assert(t);
+
+    if (*t == 0)
+        return 0;
+
+    /* Domains may not start with a dot */
+    if (*t == '.')
+        return 0;
+
+    dp = t; 
+
+    for (p = t; *p; p++) {
+
+        if (*p == '.') {
+            if (dot) /* Two subsequent dots */
+                return 0;
+
+            if (p - dp > 63)
+                return 0;
+
+            dot = 1;
+            dp = p + 1;
+        } else
+            dot = 0;
+
+    }
+
+    if (p - dp > 63)
+        return 0;
+
+    /* A trailing dot IS allowed */
+    
+    return 1;
+}
+
+int avahi_valid_service_name(const char *t) {
+    assert(t);
+
+    if (*t == 0)
+        return 0;
+
+    if (strlen(t) > 63)
+        return 0;
+
+    return 1;
+}
+
+int avahi_valid_host_name(const char *t) {
+    assert(t);
+
+    if (*t == 0)
+        return 0;
+
+    if (strlen(t) > 63)
+        return 0;
+
+    if (strchr(t, '.'))
+        return 0;
+
+    return 1;
+}
+
+char *avahi_strdown(char *s) {
+    char *c;
+    
+    assert(s);
+
+    for (c = s; *c; c++)
+        *c = (char) tolower(*c);
+
+    return s;
+}
+
+char *avahi_strup(char *s) {
+    char *c;
+    assert(s);
+
+    for (c = s; *c; c++)
+        *c = (char) toupper(*c);
+
+    return s;
+}
+
diff --git a/avahi-common/domain.h b/avahi-common/domain.h
new file mode 100644 (file)
index 0000000..4a94be1
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef foodomainhfoo
+#define foodimainhfoo
+
+/* $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 <inttypes.h>
+#include <sys/types.h>
+
+#include <avahi-common/cdecl.h>
+
+AVAHI_C_DECL_BEGIN
+
+char *avahi_normalize_name(const char *s); /* avahi_free() the result! */
+char *avahi_get_host_name(void); /* avahi_free() the result! */
+
+int avahi_domain_equal(const char *a, const char *b);
+int avahi_binary_domain_cmp(const char *a, const char *b);
+
+/* Read the first label from the textual domain name *name, unescape
+ * it and write it to dest, *name is changed to point to the next label*/
+char *avahi_unescape_label(const char **name, char *dest, size_t size);
+
+/* Escape the domain name in *src and write it to *ret_name */
+char *avahi_escape_label(const uint8_t* src, size_t src_length, char **ret_name, size_t *ret_size);
+
+unsigned avahi_strhash(const char *p);
+unsigned avahi_domain_hash(const char *s);
+
+int avahi_valid_service_type(const char *t);
+int avahi_valid_domain_name(const char *t);
+int avahi_valid_service_name(const char *t);
+int avahi_valid_host_name(const char *t);
+
+char *avahi_strup(char *s);
+char *avahi_strdown(char *s);
+
+AVAHI_C_DECL_END
+
+#endif
diff --git a/avahi-common/timeval-test.c b/avahi-common/timeval-test.c
deleted file mode 100644 (file)
index 6f44034..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $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 <config.h>
-#endif
-
-#include <stdio.h>
-#include "util.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-common/util.c b/avahi-common/util.c
deleted file mode 100644 (file)
index cc80fe5..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-/* $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 <config.h>
-#endif
-
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "util.h"
-#include "malloc.h"
-
-char *avahi_get_host_name(void) {
-#ifdef HOST_NAME_MAX
-    char t[HOST_NAME_MAX];
-#else
-    char t[256];
-#endif
-    gethostname(t, sizeof(t));
-    t[sizeof(t)-1] = 0;
-    return avahi_normalize_name(t);
-}
-
-static char *unescape_uneeded(const char *src, char *ret_dest, size_t size) {
-    int escaped = 0;
-    
-    assert(src);
-    assert(ret_dest);
-    assert(size > 0);
-    
-    for (; *src; src++) {
-
-        if (!escaped && *src == '\\')
-            escaped = 1;
-        else if (escaped && (*src == '.' || *src == '\\')) {
-
-            if ((size -= 2) <= 1) break;
-            
-            *(ret_dest++) = '\\';
-            *(ret_dest++) = *src;
-            escaped = 0;
-        } else {
-            if (--size <= 1) break;
-
-            *(ret_dest++) = *src;
-            escaped = 0;
-        }
-
-    }
-
-    *ret_dest = 0;
-    
-    return ret_dest;
-}
-
-char *avahi_normalize_name(const char *s) {
-    char tmp[256];
-    size_t l;
-    
-    assert(s);
-
-    unescape_uneeded(s, tmp, sizeof(tmp));
-
-    l = strlen(tmp);
-
-    while (l > 0 && tmp[l-1] == '.')
-        tmp[--l] = 0;
-
-    return avahi_strdup(tmp);
-}
-
-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;
-}
-
-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;
-}
-
-/* Read the first label from string *name, unescape "\" and write it to dest */
-char *avahi_unescape_label(const char **name, char *dest, size_t size) {
-    unsigned i = 0;
-    char *d;
-    
-    assert(dest);
-    assert(size > 0);
-    assert(name);
-
-    if (!**name)
-        return NULL;
-
-    d = dest;
-    
-    for (;;) {
-        if (i >= size)
-            return NULL;
-
-        if (**name == '.') {
-            (*name)++;
-            break;
-        }
-        
-        if (**name == 0)
-            break;
-        
-        if (**name == '\\') {
-            (*name) ++;
-            
-            if (**name == 0)
-                break;
-        }
-        
-        *(d++) = *((*name) ++);
-        i++;
-    }
-
-    assert(i < size);
-
-    *d = 0;
-
-    return dest;
-}
-
-/* Escape "\" and ".", append \0 */
-char *avahi_escape_label(const uint8_t* src, size_t src_length, char **ret_name, size_t *ret_size) {
-    char *r;
-
-    assert(src);
-    assert(ret_name);
-    assert(*ret_name);
-    assert(ret_size);
-    assert(*ret_size > 0);
-
-    r = *ret_name;
-
-    while (src_length > 0) {
-        if (*src == '.' || *src == '\\') {
-            if (*ret_size < 3)
-                return NULL;
-            
-            *((*ret_name) ++) = '\\';
-            (*ret_size) --;
-        }
-
-        if (*ret_size < 2)
-            return NULL;
-        
-        *((*ret_name)++) = *src;
-        (*ret_size) --;
-
-        src_length --;
-        src++;
-    }
-
-    **ret_name = 0;
-
-    return r;
-}
-
-int avahi_domain_equal(const char *a, const char *b) {
-    assert(a);
-    assert(b);
-
-    if (a == b)
-        return 1;
-    
-    for (;;) {
-        char ca[65], cb[65], *pa, *pb;
-
-        pa = avahi_unescape_label(&a, ca, sizeof(ca));
-        pb = avahi_unescape_label(&b, cb, sizeof(cb));
-
-        if (!pa && !pb)
-            return 1;
-        else if ((pa && !pb) || (!pa && pb))
-            return 0;
-
-        if (strcasecmp(pa, pb))
-            return 0;
-    }
-
-    return 1;
-}
-
-int avahi_binary_domain_cmp(const char *a, const char *b) {
-    assert(a);
-    assert(b);
-
-    if (a == b)
-        return 0;
-
-    for (;;) {
-        char ca[65], cb[65], *pa, *pb;
-        int r;
-
-        pa = avahi_unescape_label(&a, ca, sizeof(ca));
-        pb = avahi_unescape_label(&b, cb, sizeof(cb));
-
-        if (!pa && !pb)
-            return 0;
-        else if (pa && !pb)
-            return 1;
-        else if (!pa && pb)
-            return -1;
-        
-        if ((r = strcmp(pa, pb)))
-            return r;
-    }
-}
-
-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;
-    }
-}
-
-unsigned avahi_strhash(const char *p) {
-    unsigned hash = 0;
-
-    for (; *p; p++)
-        hash = 31 * hash + *p;
-
-    return hash;
-}
-
-unsigned avahi_domain_hash(const char *s) {
-    unsigned hash = 0;
-    
-    for (;;) {
-        char c[65];
-
-        if (!avahi_unescape_label(&s, c, sizeof(c)))
-            return hash;
-
-        if (!c[0])
-            continue;
-        
-        hash += avahi_strhash(avahi_strdown(c));
-    }
-}
-
-char *avahi_format_mac_address(const uint8_t* mac, size_t size) {
-    char *r, *t;
-    unsigned i;
-    static const char hex[] = "0123456789abcdef";
-
-    t = r = avahi_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;
-}
-
-int avahi_valid_service_type(const char *t) {
-    const char *p;
-    assert(t);
-
-    if (strlen(t) < 5)
-        return 0;
-    
-    if (*t != '_')
-        return 0;
-
-    if (!(p = strchr(t, '.')))
-        return 0;
-
-    if (p - t > 63 || p - t < 2)
-        return 0;
-
-    if (*(++p) != '_')
-        return 0;
-
-    if (strchr(p, '.'))
-        return 0;
-
-    if (strlen(p) > 63 || strlen(p) < 2)
-        return 0;
-    
-    return 1;
-}
-
-int avahi_valid_domain_name(const char *t) {
-    const char *p, *dp;
-    int dot = 0;
-        
-    assert(t);
-
-    if (*t == 0)
-        return 0;
-
-    /* Domains may not start with a dot */
-    if (*t == '.')
-        return 0;
-
-    dp = t; 
-
-    for (p = t; *p; p++) {
-
-        if (*p == '.') {
-            if (dot) /* Two subsequent dots */
-                return 0;
-
-            if (p - dp > 63)
-                return 0;
-
-            dot = 1;
-            dp = p + 1;
-        } else
-            dot = 0;
-
-    }
-
-    if (p - dp > 63)
-        return 0;
-
-    /* A trailing dot IS allowed */
-    
-    return 1;
-}
-
-int avahi_valid_service_name(const char *t) {
-    assert(t);
-
-    if (*t == 0)
-        return 0;
-
-    if (strlen(t) > 63)
-        return 0;
-
-    return 1;
-}
-
-int avahi_valid_host_name(const char *t) {
-    assert(t);
-
-    if (*t == 0)
-        return 0;
-
-    if (strlen(t) > 63)
-        return 0;
-
-    if (strchr(t, '.'))
-        return 0;
-
-    return 1;
-}
-
-char *avahi_strdown(char *s) {
-    char *c;
-    
-    assert(s);
-
-    for (c = s; *c; c++)
-        *c = (char) tolower(*c);
-
-    return s;
-}
-
-char *avahi_strup(char *s) {
-    char *c;
-    assert(s);
-
-    for (c = s; *c; c++)
-        *c = (char) toupper(*c);
-
-    return s;
-}
-
diff --git a/avahi-common/util.h b/avahi-common/util.h
deleted file mode 100644 (file)
index 65252e3..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#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 <inttypes.h>
-#include <stdarg.h>
-#include <sys/time.h>
-
-#include <avahi-common/cdecl.h>
-
-AVAHI_C_DECL_BEGIN
-
-typedef int64_t AvahiUsec;
-
-char *avahi_normalize_name(const char *s); /* avahi_free() the result! */
-char *avahi_get_host_name(void); /* avahi_free() the result! */
-
-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);
-
-int avahi_set_cloexec(int fd);
-int avahi_set_nonblock(int fd);
-int avahi_wait_for_write(int fd);
-
-int avahi_domain_equal(const char *a, const char *b);
-int avahi_binary_domain_cmp(const char *a, const char *b);
-
-void avahi_hexdump(const void *p, size_t size);
-
-/* Read the first label from the textual domain name *name, unescape
- * it and write it to dest, *name is changed to point to the next label*/
-char *avahi_unescape_label(const char **name, char *dest, size_t size);
-
-/* Escape the domain name in *src and write it to *ret_name */
-char *avahi_escape_label(const uint8_t* src, size_t src_length, char **ret_name, size_t *ret_size);
-
-unsigned avahi_strhash(const char *p);
-unsigned avahi_domain_hash(const char *s);
-
-char *avahi_format_mac_address(const uint8_t* mac, size_t size);
-
-int avahi_valid_service_type(const char *t);
-int avahi_valid_domain_name(const char *t);
-int avahi_valid_service_name(const char *t);
-int avahi_valid_host_name(const char *t);
-
-char *avahi_strdown(char *s);
-char *avahi_strup(char *s);
-
-AVAHI_C_DECL_END
-
-#endif
index 2e436a68e00676ce7a5476241b9cc99d3099f098..e15f295cadad8a35bad8837ebbc2f2b858855f49 100644 (file)
@@ -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
 
index 5d9e8cf0a24a1e47fc83358972254e453e17286b..3787f8fe18f089cdb0103bdf93e081b8a876a1cb 100644 (file)
@@ -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
index 057f3e3bfb4899989706c18295b671b3f593a396..7b29ec610391b2a6145294707ecae0fea4367d4d 100644 (file)
@@ -25,8 +25,8 @@
 
 #include <string.h>
 
+#include <avahi-common/domain.h>
 #include "browse.h"
-#include "util.h"
 #include "log.h"
 #include "rr.h"
 
index de3cb1bfea2bbd7a1ca8ddcc803a48450397a4fd..71bc67f605678790ed252943f1b7bdf92222a222 100644 (file)
@@ -23,8 +23,8 @@
 #include <config.h>
 #endif
 
+#include <avahi-common/domain.h>
 #include "browse.h"
-#include "util.h"
 
 struct AvahiDomainBrowser {
     AvahiServer *server;
index 3534b6fa9d529d238b1d2cd95eed45ebb46c7bb6..e769e91947558412d8d3ee74e47791edce2f6ef0 100644 (file)
@@ -25,8 +25,8 @@
 
 #include <string.h>
 
+#include <avahi-common/domain.h>
 #include "browse.h"
-#include "util.h"
 #include "log.h"
 
 struct AvahiServiceTypeBrowser {
index 34a2536f47903870fcc2ecc3e7ddc01b1f84f133..35fcc5315655411a0b4b3ee2592666c3b9da394e 100644 (file)
@@ -25,8 +25,8 @@
 
 #include <string.h>
 
+#include <avahi-common/domain.h>
 #include "browse.h"
-#include "util.h"
 #include "log.h"
 
 struct AvahiServiceBrowser {
index 42c13da8e6df16ff791537e4cb12df0fee863e26..e2d996e2372d366103efa3391a45133d2bd1d1e7 100644 (file)
@@ -24,7 +24,7 @@
 #endif
 
 #include "browse.h"
-#include "util.h"
+#include "timeval.h"
 #include "log.h"
 
 struct AvahiRecordBrowser {
index 2f3296f618524733fceef4111a0e329650eab550..dddd5eea8b1eae0f9036bcb8e2cd35c5767e8a82 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <string.h>
 
-#include "util.h"
+#include "timeval.h"
 #include "cache.h"
 #include "log.h"
 
index 13704c355950d76d2bd15ce75df46935c1aa3243..7a4c601fbd65abd51412834d92fd5c73d6cc2e29 100644 (file)
@@ -31,7 +31,6 @@
 #include <stdio.h>
 
 #include "core.h"
-#include "util.h"
 #include "alternative.h"
 #include "log.h"
 
index 6b98ef364cbcd88e1a3bb995980cf60ae92ae49c..bf141f5847be9a3c0dd2784bfb8eb0a10ad5e10b 100644 (file)
 #include <config.h>
 #endif
 
+#include <avahi-common/domain.h>
 #include "dns.h"
-#include "util.h"
 #include "log.h"
+#include "util.h"
 
 int main(int argc, char *argv[]) {
     gchar t[256];
index 28013860e4bf1f0cef48e72ce310f681def74e35..9663fc4ff0ff90b9e1f7be61f70dd27f2776c3d8 100644 (file)
@@ -29,8 +29,8 @@
 #include <string.h>
 #include <stdio.h>
 
+#include <avahi-common/domain.h>
 #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 (file)
index 0000000..de7b0cf
--- /dev/null
@@ -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 <config.h>
+#endif
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <assert.h>
+
+#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 (file)
index 0000000..047b9bb
--- /dev/null
@@ -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-common/cdecl.h>
+
+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
index ad23234bf2c14c79421b813d0c68c4a163dbca99..d7f9ca0de36be947d7635aee8696a26f4b415486 100644 (file)
 #include <config.h>
 #endif
 
+#include <avahi-common/domain.h>
+
 #include "probe-sched.h"
-#include "util.h"
+#include "timeval.h"
 #include "log.h"
 
 #define AVAHI_PROBE_HISTORY_MSEC 150
index 129b15e4c653ebd7d32b2be465a12c3db1d19da8..6e9234fa4dd19ac5ea53456e3c9af8271b03a07c 100644 (file)
@@ -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
index c38687575fd57b664904677e871162911164538c..fa50c39742f72d547bac3a896c1915d03e47203c 100644 (file)
@@ -24,7 +24,7 @@
 #endif
 
 #include "browse.h"
-#include "util.h"
+#include "timeval.h"
 
 struct AvahiAddressResolver {
     AvahiServer *server;
index c01c1a4d22f9c4ad383147c54b186c3e95710f03..f50ddb4b154b51ab918a89d9995ed8104bdeaea5 100644 (file)
@@ -23,8 +23,9 @@
 #include <config.h>
 #endif
 
+#include <avahi-common/domain.h>
+#include "timeval.h"
 #include "browse.h"
-#include "util.h"
 
 struct AvahiHostNameResolver {
     AvahiServer *server;
index 135543f8a920be3b799ff2be23de133bd62985e3..bf4f7b94e4f7f06556955124c56a06927d715cec 100644 (file)
@@ -25,8 +25,9 @@
 
 #include <string.h>
 
+#include <avahi-common/domain.h>
 #include "browse.h"
-#include "util.h"
+#include "timeval.h"
 
 struct AvahiServiceResolver {
     AvahiServer *server;
index e1024a63d42f8ee3ba941ac4c6c11a810e3ae956..6027287dae19f68eaa93133c5af966dde337d681 100644 (file)
@@ -24,7 +24,7 @@
 #endif
 
 #include "response-sched.h"
-#include "util.h"
+#include "timeval.h"
 #include "log.h"
 
 #define AVAHI_RESPONSE_HISTORY_MSEC 500
index 1a30146bbe68ddfede2ca83001ec5da5da7d5e54..4ec3c11614dbb5c8b01b71f8f81fe1b83bfbb1d2 100644 (file)
@@ -29,7 +29,7 @@
 #include <sys/socket.h>
 #include <arpa/inet.h>
 
-#include "util.h"
+#include <avahi-common/domain.h>
 #include "rr.h"
 
 AvahiKey *avahi_key_new(const gchar *name, guint16 class, guint16 type) {
index 2bbc1f034b3708ba37a7b81cf07be3acde8086f0..d9137385dd91fcd48b593fb7c8faf56eed8b31f4 100644 (file)
 #include <errno.h>
 #include <stdio.h>
 
+#include <avahi-common/domain.h>
+
 #include "server.h"
-#include "util.h"
+#include "timeval.h"
 #include "iface.h"
 #include "socket.h"
 #include "browse.h"
index 842d09a62f251a3f54bd6526cc65fad4c678bed8..fc312d5ef12d05d303716e6581118c2c672c9b3a 100644 (file)
@@ -37,7 +37,7 @@
 #include <sys/ioctl.h>
 
 #include "dns.h"
-#include "util.h"
+#include "fdutil.h"
 #include "socket.h"
 #include "log.h"
 
index 91eceb684148975559ce728630be032a139c44fb..6ac55b8b1e9572b710073d290d1d5d1cd6a44d6b 100644 (file)
@@ -25,8 +25,8 @@
 
 #include <glib.h>
 
-#include "util.h"
 #include "timeeventq.h"
+#include "timeval.h"
 
 static AvahiTimeEventQueue *q = NULL;
 
index fbdb6d59928660466a4c82c727c92c926b799857..d466cd43f4eeb5e3e989a39a7d5499632e957fd7 100644 (file)
@@ -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 (file)
index 0000000..7dedf41
--- /dev/null
@@ -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 <config.h>
+#endif
+
+#include <stdio.h>
+#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 (file)
index 0000000..e5732cd
--- /dev/null
@@ -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 <config.h>
+#endif
+
+#include <stdlib.h>
+#include <assert.h>
+
+#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 (file)
index 0000000..c046a19
--- /dev/null
@@ -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 <inttypes.h>
+#include <sys/time.h>
+
+#include <avahi-common/cdecl.h>
+
+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 (file)
index 0000000..514f0d9
--- /dev/null
@@ -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 <config.h>
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include <glib.h>
+
+#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 (file)
index 0000000..ec124bc
--- /dev/null
@@ -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 <inttypes.h>
+
+#include <avahi-common/cdecl.h>
+
+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
index e4f7bfdf0188846600cba78670630d30bcab3c63..41cef18f2b3f680d2e4da55c71e724d076332cec 100644 (file)
@@ -599,8 +599,6 @@ static DBusHandlerResult msg_entry_group_impl(DBusConnection *c, DBusMessage *m,
         gint32 interface, protocol;
         gchar *type, *name, *domain, *host;
         guint16 port;
-        gchar **txt = NULL;
-        gint txt_len;
         AvahiStringList *strlst;
         DBusMessageIter iter, sub;
         int j;
index 957c91e6d7ae834e8fd6a3df1f7f1afd095efe86..90cd55c57ea6af5b96622d24c3aaa9e25f7f7a29 100644 (file)
@@ -39,7 +39,6 @@
 
 #include <glib.h>
 
-#include <avahi-common/util.h>
 #include <avahi-common/llist.h>
 
 #include <libdaemon/dfork.h>