1/* 2 * Copyright 2003, 2004, 2004 Porchdog Software. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without modification, 5 * are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * this list of conditions and the following disclaimer in the documentation 11 * and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 17 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 18 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 21 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 22 * OF THE POSSIBILITY OF SUCH DAMAGE. 23 * 24 * The views and conclusions contained in the software and documentation are those 25 * of the authors and should not be interpreted as representing official policies, 26 * either expressed or implied, of Porchdog Software. 27 */ 28 29#include <howl.h> 30#include <salt/debug.h> 31#include <stdio.h> 32 33 34static sw_result HOWL_API 35my_resolver( 36 sw_discovery discovery, 37 sw_discovery_oid oid, 38 sw_uint32 interface_index, 39 sw_const_string name, 40 sw_const_string type, 41 sw_const_string domain, 42 sw_ipv4_address address, 43 sw_port port, 44 sw_octets text_record, 45 sw_uint32 text_record_len, 46 sw_opaque_t extra) 47{ 48 sw_text_record_iterator it; 49 sw_int8 name_buf[16]; 50 sw_int8 key[SW_TEXT_RECORD_MAX_LEN]; 51 sw_int8 sval[SW_TEXT_RECORD_MAX_LEN]; 52 sw_uint8 oval[SW_TEXT_RECORD_MAX_LEN]; 53 sw_uint32 oval_len; 54 sw_result err = SW_OKAY; 55 56 sw_discovery_cancel(discovery, oid); 57 58 fprintf(stderr, "resolve reply: 0x%x %s %s %s %s %d\n", interface_index, name, type, domain, sw_ipv4_address_name(address, name_buf, 16), port); 59 60 if ((text_record_len > 0) && (text_record) && (*text_record != '\0')) 61 { 62 err = sw_text_record_iterator_init(&it, text_record, text_record_len); 63 sw_check_okay(err, exit); 64 65 while (sw_text_record_iterator_next(it, key, oval, &oval_len) == SW_OKAY) 66 { 67 fprintf(stderr, "key = %s, data is %d bytes\n", key, oval_len); 68 } 69 70 err = sw_text_record_iterator_fina(it); 71 sw_check_okay(err, exit); 72 } 73 74exit: 75 76 return err; 77} 78 79 80#if defined(WIN32) 81int __cdecl 82#else 83int 84#endif 85main( 86 int argc, 87 char ** argv) 88{ 89 sw_discovery discovery; 90 sw_discovery_oid oid; 91 sw_result err; 92 93 err = sw_discovery_init(&discovery); 94 sw_check_okay(err, exit); 95 96 if (argc != 3) 97 { 98 fprintf(stderr, "usage: mDNSResolve <name> <type>\n"); 99 return -1; 100 } 101 102 err = sw_discovery_resolve(discovery, 0, argv[1], argv[2], "local.", my_resolver, NULL, &oid); 103 sw_check_okay(err, exit); 104 105 err = sw_discovery_run(discovery); 106 sw_check_okay(err, exit); 107 108exit: 109 110 return err; 111} 112