]> git.meshlink.io Git - catta/blob - avahi-compat-libdns_sd/txt-test.c
fix avahi_netlink_new to allow multiple netlinks per process
[catta] / avahi-compat-libdns_sd / txt-test.c
1 /***
2   This file is part of avahi.
3
4   avahi is free software; you can redistribute it and/or modify it
5   under the terms of the GNU Lesser General Public License as
6   published by the Free Software Foundation; either version 2.1 of the
7   License, or (at your option) any later version.
8
9   avahi is distributed in the hope that it will be useful, but WITHOUT
10   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
12   Public License for more details.
13
14   You should have received a copy of the GNU Lesser General Public
15   License along with avahi; if not, write to the Free Software
16   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17   USA.
18 ***/
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <sys/types.h>
25 #include <assert.h>
26 #include <stdio.h>
27
28 #include <avahi-common/gccmacro.h>
29 #include <dns_sd.h>
30
31 static void hexdump(const void* p, size_t size) {
32     const uint8_t *c = p;
33     assert(p);
34
35     printf("Dumping %zu bytes from %p:\n", size, p);
36
37     while (size > 0) {
38         unsigned i;
39
40         for (i = 0; i < 16; i++) {
41             if (i < size)
42                 printf("%02x ", c[i]);
43             else
44                 printf("   ");
45         }
46
47         for (i = 0; i < 16; i++) {
48             if (i < size)
49                 printf("%c", c[i] >= 32 && c[i] < 127 ? c[i] : '.');
50             else
51                 printf(" ");
52         }
53
54         printf("\n");
55
56         c += 16;
57
58         if (size <= 16)
59             break;
60
61         size -= 16;
62     }
63 }
64
65
66 int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
67     const char *r;
68     TXTRecordRef ref;
69     uint8_t l;
70     const void *p;
71     char k[256];
72
73     TXTRecordCreate(&ref, 0, NULL);
74
75     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
76
77     TXTRecordSetValue(&ref, "foo", 7, "lennart");
78     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
79
80     TXTRecordSetValue(&ref, "waldo", 5, "rocks");
81     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
82
83     TXTRecordSetValue(&ref, "quux", 9, "the_house");
84     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
85
86     TXTRecordSetValue(&ref, "yeah", 0, NULL);
87     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
88
89     TXTRecordSetValue(&ref, "waldo", 6, "rocked");
90     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
91
92     TXTRecordRemoveValue(&ref, "foo");
93     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
94
95     TXTRecordRemoveValue(&ref, "waldo");
96     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
97
98     TXTRecordSetValue(&ref, "kawumm", 6, "bloerb");
99     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
100
101     TXTRecordSetValue(&ref, "one", 1, "1");
102     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
103
104     TXTRecordSetValue(&ref, "two", 1, "2");
105     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
106
107     TXTRecordSetValue(&ref, "three", 1, "3");
108     hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref));
109
110     assert(TXTRecordContainsKey(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), "two"));
111     assert(!TXTRecordContainsKey(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), "four"));
112
113     r = TXTRecordGetValuePtr(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), "kawumm", &l);
114
115     hexdump(r, l);
116
117     assert(TXTRecordGetCount(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref)) == 6);
118
119     TXTRecordGetItemAtIndex(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), 2, sizeof(k), k, &l, &p);
120
121     fprintf(stderr, "key=<%s>\n", k);
122
123     hexdump(p, l);
124
125     assert(TXTRecordGetItemAtIndex(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), 20, sizeof(k), k, &l, &p) == kDNSServiceErr_Invalid);
126
127     TXTRecordDeallocate(&ref);
128 }