]> git.meshlink.io Git - catta/blob - avahi-compat-howl/samples/publish.c
931e78624ee1df7ac1afaf9934e5080cab544804
[catta] / avahi-compat-howl / samples / publish.c
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 }