1 /* 2 * Copyright 2003, 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 <stdio.h> 31 32 33 static sw_result HOWL_API 34 my_service_reply( 35 sw_discovery discovery, 36 sw_discovery_oid oid, 37 sw_discovery_publish_status status, 38 sw_opaque extra) 39 { 40 static sw_string 41 status_text[] = 42 { 43 "Started", 44 "Stopped", 45 "Name Collision", 46 "Invalid" 47 }; 48 49 fprintf(stderr, "publish reply: %s\n", status_text[status]); 50 return SW_OKAY; 51 } 52 53 54 #if defined(WIN32) 55 int __cdecl 56 #else 57 int 58 #endif 59 main( 60 int argc, 61 char ** argv) 62 { 63 sw_discovery discovery; 64 sw_text_record text_record; 65 sw_result result; 66 sw_discovery_publish_id id; 67 int i; 68 69 if (sw_discovery_init(&discovery) != SW_OKAY) 70 { 71 fprintf(stderr, "sw_discovery_init() failed\n"); 72 return -1; 73 } 74 75 if (argc < 4) 76 { 77 fprintf(stderr, "usage: mDNSPublish <name> <type> <port> [service text 1]...[service text n]\n"); 78 return -1; 79 } 80 81 if (sw_text_record_init(&text_record) != SW_OKAY) 82 { 83 fprintf(stderr, "sw_text_record_init() failed\n"); 84 return -1; 85 } 86 87 for (i = 4; i < argc; i++) 88 { 89 if (sw_text_record_add_string(text_record, argv[i]) != SW_OKAY) 90 { 91 fprintf(stderr, "unable to add service text: %s\n", argv[i]); 92 return -1; 93 } 94 } 95 96 printf("%s %s %d\n", argv[1], argv[2], atoi(argv[3])); 97 98 if ((result = sw_discovery_publish(discovery, 0, argv[1], argv[2], NULL, NULL, atoi(argv[3]), sw_text_record_bytes(text_record), sw_text_record_len(text_record), my_service_reply, NULL, &id)) != SW_OKAY) 99 { 100 fprintf(stderr, "publish failed: %d\n", result); 101 sw_text_record_fina(text_record); 102 return -1; 103 } 104 105 sw_text_record_fina(text_record); 106 107 sw_discovery_run(discovery); 108 109 return 0; 110 } 111