X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=compat-bonjour%2Ftxt-test.c;fp=compat-bonjour%2Ftxt-test.c;h=61f1292459d48973c44d4c3929afa4e82c1c8fb5;hb=f7ece52f5ba3633abf2515dcbc467ad6b80a447b;hp=0000000000000000000000000000000000000000;hpb=6c02b38b55f1ead652a63385f4314c9301352951;p=catta diff --git a/compat-bonjour/txt-test.c b/compat-bonjour/txt-test.c new file mode 100644 index 0000000..61f1292 --- /dev/null +++ b/compat-bonjour/txt-test.c @@ -0,0 +1,129 @@ +/* $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 "dns_sd.h" + +static void 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; + } +} + + +int main(int argc, char *argv[]) { + const char *r; + TXTRecordRef ref; + uint8_t l; + const void *p; + char k[256]; + + TXTRecordCreate(&ref, 0, NULL); + + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "foo", 7, "lennart"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "waldo", 5, "rocks"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "quux", 9, "the_house"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "yeah", 0, NULL); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "waldo", 6, "rocked"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordRemoveValue(&ref, "foo"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordRemoveValue(&ref, "waldo"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "kawumm", 6, "bloerb"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "one", 1, "1"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "two", 1, "2"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + TXTRecordSetValue(&ref, "three", 1, "3"); + hexdump(TXTRecordGetBytesPtr(&ref), TXTRecordGetLength(&ref)); + + assert(TXTRecordContainsKey(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), "two")); + assert(!TXTRecordContainsKey(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), "four")); + + r = TXTRecordGetValuePtr(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), "kawumm", &l); + + hexdump(r, l); + + assert(TXTRecordGetCount(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref)) == 6); + + TXTRecordGetItemAtIndex(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), 2, sizeof(k), k, &l, &p); + + fprintf(stderr, "key=<%s>\n", k); + + hexdump(p, l); + + assert(TXTRecordGetItemAtIndex(TXTRecordGetLength(&ref), TXTRecordGetBytesPtr(&ref), 20, sizeof(k), k, &l, &p) == kDNSServiceErr_Invalid); + + TXTRecordDeallocate(&ref); +}