1/* $Id$ */ 2 3/*** 4 This file is part of avahi. 5 6 avahi is free software; you can redistribute it and/or modify it 7 under the terms of the GNU Lesser General Public License as 8 published by the Free Software Foundation; either version 2.1 of the 9 License, or (at your option) any later version. 10 11 avahi is distributed in the hope that it will be useful, but WITHOUT 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 14 Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with avahi; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 19 USA. 20***/ 21 22#ifdef HAVE_CONFIG_H 23#include <config.h> 24#endif 25 26#include <stdio.h> 27#include <assert.h> 28 29#include <avahi-client/client.h> 30#include <avahi-client/lookup.h> 31#include <avahi-common/error.h> 32#include <avahi-common/simple-watch.h> 33#include <avahi-common/malloc.h> 34 35static void hexdump(const void* p, size_t size) { 36 const uint8_t *c = p; 37 assert(p); 38 39 printf("Dumping %lu bytes from %p:\n", (unsigned long) size, p); 40 41 while (size > 0) { 42 unsigned i; 43 44 for (i = 0; i < 16; i++) { 45 if (i < size) 46 printf("%02x ", c[i]); 47 else 48 printf(" "); 49 } 50 51 for (i = 0; i < 16; i++) { 52 if (i < size) 53 printf("%c", c[i] >= 32 && c[i] < 127 ? c[i] : '.'); 54 else 55 printf(" "); 56 } 57 58 printf("\n"); 59 60 c += 16; 61 62 if (size <= 16) 63 break; 64 65 size -= 16; 66 } 67} 68 69static void callback( 70 AVAHI_GCC_UNUSED AvahiRecordBrowser *r, 71 AVAHI_GCC_UNUSED AvahiIfIndex interface, 72 AVAHI_GCC_UNUSED AvahiProtocol protocol, 73 AvahiBrowserEvent event, 74 const char *name, 75 uint16_t clazz, 76 uint16_t type, 77 const void *rdata, 78 size_t rdata_size, 79 AVAHI_GCC_UNUSED AvahiLookupResultFlags flags, 80 AVAHI_GCC_UNUSED void *userdata) { 81 82 fprintf(stderr, "%i name=%s class=%u type=%u\n", event, name, clazz, type); 83 84 if (rdata) 85 hexdump(rdata, rdata_size); 86} 87 88int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) { 89 90 AvahiSimplePoll *simple_poll; 91 const AvahiPoll *poll_api; 92 AvahiClient *client; 93 AvahiRecordBrowser *r; 94 95 simple_poll = avahi_simple_poll_new(); 96 assert(simple_poll); 97 98 poll_api = avahi_simple_poll_get(simple_poll); 99 assert(poll_api); 100 101 client = avahi_client_new(poll_api, 0, NULL, NULL, NULL); 102 assert(client); 103 104 r = avahi_record_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "ecstasy.local", AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_HINFO, 0, callback, simple_poll); 105 assert(r); 106 107 avahi_simple_poll_loop(simple_poll); 108 109 avahi_client_free(client); 110 avahi_simple_poll_free(simple_poll); 111 112 return 0; 113} 114