1 #ifndef foolookuphfoo
2 #define foolookuphfoo
3 
4 /***
5   This file is part of avahi.
6 
7   avahi is free software; you can redistribute it and/or modify it
8   under the terms of the GNU Lesser General Public License as
9   published by the Free Software Foundation; either version 2.1 of the
10   License, or (at your option) any later version.
11 
12   avahi is distributed in the hope that it will be useful, but WITHOUT
13   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
15   Public License for more details.
16 
17   You should have received a copy of the GNU Lesser General Public
18   License along with avahi; if not, write to the Free Software
19   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20   USA.
21 ***/
22 
23 /** \file avahi-core/lookup.h Functions for browsing/resolving services and other RRs */
24 
25 /** \example core-browse-services.c Example how to browse for DNS-SD
26  * services using an embedded mDNS stack. */
27 
28 /** A browsing object for arbitrary RRs */
29 typedef struct AvahiSRecordBrowser AvahiSRecordBrowser;
30 
31 /** A host name to IP adddress resolver object */
32 typedef struct AvahiSHostNameResolver AvahiSHostNameResolver;
33 
34 /** An IP address to host name resolver object ("reverse lookup") */
35 typedef struct AvahiSAddressResolver AvahiSAddressResolver;
36 
37 /** A local domain browsing object. May be used to enumerate domains used on the local LAN */
38 typedef struct AvahiSDomainBrowser AvahiSDomainBrowser;
39 
40 /** A DNS-SD service type browsing object. May be used to enumerate the service types of all available services on the local LAN */
41 typedef struct AvahiSServiceTypeBrowser AvahiSServiceTypeBrowser;
42 
43 /** A DNS-SD service browser. Use this to enumerate available services of a certain kind on the local LAN. Use AvahiSServiceResolver to get specific service data like address and port for a service. */
44 typedef struct AvahiSServiceBrowser AvahiSServiceBrowser;
45 
46 /** A DNS-SD service resolver.  Use this to retrieve addres, port and TXT data for a DNS-SD service */
47 typedef struct AvahiSServiceResolver AvahiSServiceResolver;
48 
49 #include <avahi-common/cdecl.h>
50 #include <avahi-common/defs.h>
51 #include <avahi-core/core.h>
52 
53 AVAHI_C_DECL_BEGIN
54 
55 /** Callback prototype for AvahiSRecordBrowser events */
56 typedef void (*AvahiSRecordBrowserCallback)(
57     AvahiSRecordBrowser *b,          /**< The AvahiSRecordBrowser object that is emitting this callback */
58     AvahiIfIndex interface,          /**< Logical OS network interface number the record was found on */
59     AvahiProtocol protocol,          /**< Protocol number the record was found. */
60     AvahiBrowserEvent event,         /**< Browsing event, either AVAHI_BROWSER_NEW or AVAHI_BROWSER_REMOVE */
61     AvahiRecord *record,             /**< The record that was found */
62     AvahiLookupResultFlags flags,  /**< Lookup flags */
63     void* userdata                   /**< Arbitrary user data passed to avahi_s_record_browser_new() */ );
64 
65 /** Create a new browsing object for arbitrary RRs */
66 AvahiSRecordBrowser *avahi_s_record_browser_new(
67     AvahiServer *server,                    /**< The server object to which attach this query */
68     AvahiIfIndex interface,                 /**< Logical OS interface number where to look for the records, or AVAHI_IF_UNSPEC to look on interfaces */
69     AvahiProtocol protocol,                 /**< Protocol number to use when looking for the record, or AVAHI_PROTO_UNSPEC to look on all protocols */
70     AvahiKey *key,                          /**< The search key */
71     AvahiLookupFlags flags,                 /**< Lookup flags. Must have set either AVAHI_LOOKUP_FORCE_WIDE_AREA or AVAHI_LOOKUP_FORCE_MULTICAST, since domain based detection is not available here. */
72     AvahiSRecordBrowserCallback callback,   /**< The callback to call on browsing events */
73     void* userdata                          /**< Arbitrary use suppliable data which is passed to the callback */);
74 
75 /** Prepare a new browsing object for arbitrary RRs */
76 AvahiSRecordBrowser *avahi_s_record_browser_prepare(
77     AvahiServer *server,                    /**< The server object to which attach this query */
78     AvahiIfIndex interface,                 /**< Logical OS interface number where to look for the records, or AVAHI_IF_UNSPEC to look on interfaces */
79     AvahiProtocol protocol,                 /**< Protocol number to use when looking for the record, or AVAHI_PROTO_UNSPEC to look on all protocols */
80     AvahiKey *key,                          /**< The search key */
81     AvahiLookupFlags flags,                 /**< Lookup flags. Must have set either AVAHI_LOOKUP_FORCE_WIDE_AREA or AVAHI_LOOKUP_FORCE_MULTICAST, since domain based detection is not available here. */
82     AvahiSRecordBrowserCallback callback,   /**< The callback to call on browsing events */
83     void* userdata                          /**< Arbitrary use suppliable data which is passed to the callback */);
84 
85 /** Free an AvahiSRecordBrowser object */
86 void avahi_s_record_browser_free(AvahiSRecordBrowser *b);
87 
88 /** Start querying on an AvahiSRecordBrowser object */
89 void avahi_s_record_browser_start_query(AvahiSRecordBrowser *b);
90 
91 /** Callback prototype for AvahiSHostNameResolver events */
92 typedef void (*AvahiSHostNameResolverCallback)(
93     AvahiSHostNameResolver *r,
94     AvahiIfIndex interface,
95     AvahiProtocol protocol,
96     AvahiResolverEvent event, /**< Resolving event */
97     const char *host_name,   /**< Host name which should be resolved. May differ in case from the query */
98     const AvahiAddress *a,    /**< The address, or NULL if the host name couldn't be resolved. */
99     AvahiLookupResultFlags flags,  /**< Lookup flags */
100     void* userdata);
101 
102 /** Create an AvahiSHostNameResolver object for resolving a host name to an adddress. See AvahiSRecordBrowser for more info on the paramters. */
103 AvahiSHostNameResolver *avahi_s_host_name_resolver_new(
104     AvahiServer *server,
105     AvahiIfIndex interface,
106     AvahiProtocol protocol,
107     const char *host_name,                  /**< The host name to look for */
108     AvahiProtocol aprotocol,                /**< The address family of the desired address or AVAHI_PROTO_UNSPEC if doesn't matter. */
109     AvahiLookupFlags flags,                 /**< Lookup flags. */
110     AvahiSHostNameResolverCallback calback,
111     void* userdata);
112 
113 /** Prepare an AvahiSHostNameResolver object for resolving a host name to an adddress. See AvahiSRecordBrowser for more info on the paramters. */
114 AvahiSHostNameResolver *avahi_s_host_name_resolver_prepare(
115     AvahiServer *server,
116     AvahiIfIndex interface,
117     AvahiProtocol protocol,
118     const char *host_name,                  /**< The host name to look for */
119     AvahiProtocol aprotocol,                /**< The address family of the desired address or AVAHI_PROTO_UNSPEC if doesn't matter. */
120     AvahiLookupFlags flags,                 /**< Lookup flags. */
121     AvahiSHostNameResolverCallback calback,
122     void* userdata);
123 
124 /** Start querying on an AvahiSHostNameResolver object */
125 void avahi_s_host_name_resolver_start(AvahiSHostNameResolver *r);
126 
127 /** Free a AvahiSHostNameResolver object */
128 void avahi_s_host_name_resolver_free(AvahiSHostNameResolver *r);
129 
130 /** Callback prototype for AvahiSAddressResolver events */
131 typedef void (*AvahiSAddressResolverCallback)(
132     AvahiSAddressResolver *r,
133     AvahiIfIndex interface,
134     AvahiProtocol protocol,
135     AvahiResolverEvent event,
136     const AvahiAddress *a,
137     const char *host_name,   /**< A host name for the specified address, if one was found, i.e. event == AVAHI_RESOLVER_FOUND */
138     AvahiLookupResultFlags flags,  /**< Lookup flags */
139     void* userdata);
140 
141 /** Create an AvahiSAddressResolver object. See AvahiSRecordBrowser for more info on the paramters. */
142 AvahiSAddressResolver *avahi_s_address_resolver_new(
143     AvahiServer *server,
144     AvahiIfIndex interface,
145     AvahiProtocol protocol,
146     const AvahiAddress *address,
147     AvahiLookupFlags flags,                 /**< Lookup flags. */
148     AvahiSAddressResolverCallback calback,
149     void* userdata);
150 
151 /** Prepare an AvahiSAddressResolver object. See AvahiSRecordBrowser for more info on the paramters. */
152 AvahiSAddressResolver *avahi_s_address_resolver_prepare(
153     AvahiServer *server,
154     AvahiIfIndex interface,
155     AvahiProtocol protocol,
156     const AvahiAddress *address,
157     AvahiLookupFlags flags,                 /**< Lookup flags. */
158     AvahiSAddressResolverCallback calback,
159     void* userdata);
160 
161 /** Start querying on an AvahiSAddressResolver object */
162 void avahi_s_address_resolver_start(AvahiSAddressResolver *r);
163 
164 /** Free an AvahiSAddressResolver object */
165 void avahi_s_address_resolver_free(AvahiSAddressResolver *r);
166 
167 /** Callback prototype for AvahiSDomainBrowser events */
168 typedef void (*AvahiSDomainBrowserCallback)(
169     AvahiSDomainBrowser *b,
170     AvahiIfIndex interface,
171     AvahiProtocol protocol,
172     AvahiBrowserEvent event,
173     const char *domain,
174     AvahiLookupResultFlags flags,  /**< Lookup flags */
175     void* userdata);
176 
177 /** Create a new AvahiSDomainBrowser object */
178 AvahiSDomainBrowser *avahi_s_domain_browser_new(
179     AvahiServer *server,
180     AvahiIfIndex interface,
181     AvahiProtocol protocol,
182     const char *domain,
183     AvahiDomainBrowserType type,
184     AvahiLookupFlags flags,                 /**< Lookup flags. */
185     AvahiSDomainBrowserCallback callback,
186     void* userdata);
187 
188 /** Prepare a new AvahiSDomainBrowser object */
189 AvahiSDomainBrowser *avahi_s_domain_browser_prepare(
190     AvahiServer *server,
191     AvahiIfIndex interface,
192     AvahiProtocol protocol,
193     const char *domain,
194     AvahiDomainBrowserType type,
195     AvahiLookupFlags flags,                 /**< Lookup flags. */
196     AvahiSDomainBrowserCallback callback,
197     void* userdata);
198 
199 /** Start querying on an AvahiSDomainBrowser object */
200 void avahi_s_domain_browser_start(AvahiSDomainBrowser *b);
201 
202 /** Free an AvahiSDomainBrowser object */
203 void avahi_s_domain_browser_free(AvahiSDomainBrowser *b);
204 
205 /** Callback prototype for AvahiSServiceTypeBrowser events */
206 typedef void (*AvahiSServiceTypeBrowserCallback)(
207     AvahiSServiceTypeBrowser *b,
208     AvahiIfIndex interface,
209     AvahiProtocol protocol,
210     AvahiBrowserEvent event,
211     const char *type,
212     const char *domain,
213     AvahiLookupResultFlags flags,  /**< Lookup flags */
214     void* userdata);
215 
216 /** Create a new AvahiSServiceTypeBrowser object. */
217 AvahiSServiceTypeBrowser *avahi_s_service_type_browser_new(
218     AvahiServer *server,
219     AvahiIfIndex interface,
220     AvahiProtocol protocol,
221     const char *domain,
222     AvahiLookupFlags flags,                 /**< Lookup flags. */
223     AvahiSServiceTypeBrowserCallback callback,
224     void* userdata);
225 
226 /** Prepare a new AvahiSServiceTypeBrowser object. */
227 AvahiSServiceTypeBrowser *avahi_s_service_type_browser_prepare(
228     AvahiServer *server,
229     AvahiIfIndex interface,
230     AvahiProtocol protocol,
231     const char *domain,
232     AvahiLookupFlags flags,                 /**< Lookup flags. */
233     AvahiSServiceTypeBrowserCallback callback,
234     void* userdata);
235 
236 /** Start querying on an AvahiSServiceTypeBrowser object */
237 void avahi_s_service_type_browser_start(AvahiSServiceTypeBrowser *b);
238 
239 /** Free an AvahiSServiceTypeBrowser object */
240 void avahi_s_service_type_browser_free(AvahiSServiceTypeBrowser *b);
241 
242 /** Callback prototype for AvahiSServiceBrowser events */
243 typedef void (*AvahiSServiceBrowserCallback)(
244     AvahiSServiceBrowser *b,
245     AvahiIfIndex interface,
246     AvahiProtocol protocol,
247     AvahiBrowserEvent event,
248     const char *name     /**< Service name, e.g. "Lennart's Files" */,
249     const char *type     /**< DNS-SD type, e.g. "_http._tcp" */,
250     const char *domain   /**< Domain of this service, e.g. "local" */,
251     AvahiLookupResultFlags flags,  /**< Lookup flags */
252     void* userdata);
253 
254 /** Create a new AvahiSServiceBrowser object. */
255 AvahiSServiceBrowser *avahi_s_service_browser_new(
256     AvahiServer *server,
257     AvahiIfIndex interface,
258     AvahiProtocol protocol,
259     const char *service_type /** DNS-SD service type, e.g. "_http._tcp" */,
260     const char *domain,
261     AvahiLookupFlags flags,                 /**< Lookup flags. */
262     AvahiSServiceBrowserCallback callback,
263     void* userdata);
264 
265 /** Prepare a new AvahiSServiceBrowser object. */
266 AvahiSServiceBrowser *avahi_s_service_browser_prepare(
267     AvahiServer *server,
268     AvahiIfIndex interface,
269     AvahiProtocol protocol,
270     const char *service_type /** DNS-SD service type, e.g. "_http._tcp" */,
271     const char *domain,
272     AvahiLookupFlags flags,                 /**< Lookup flags. */
273     AvahiSServiceBrowserCallback callback,
274     void* userdata);
275 
276 /** Start querying on an AvahiSServiceBrowser object */
277 void avahi_s_service_browser_start(AvahiSServiceBrowser *b);
278 
279 /** Free an AvahiSServiceBrowser object */
280 void avahi_s_service_browser_free(AvahiSServiceBrowser *b);
281 
282 /** Callback prototype for AvahiSServiceResolver events */
283 typedef void (*AvahiSServiceResolverCallback)(
284     AvahiSServiceResolver *r,
285     AvahiIfIndex interface,
286     AvahiProtocol protocol,
287     AvahiResolverEvent event,  /**< Is AVAHI_RESOLVER_FOUND when the service was resolved successfully, and everytime it changes. Is AVAHI_RESOLVER_TIMOUT when the service failed to resolve or disappeared. */
288     const char *name,       /**< Service name */
289     const char *type,       /**< Service Type */
290     const char *domain,
291     const char *host_name,  /**< Host name of the service */
292     const AvahiAddress *a,   /**< The resolved host name */
293     uint16_t port,            /**< Service name */
294     AvahiStringList *txt,    /**< TXT record data */
295     AvahiLookupResultFlags flags,  /**< Lookup flags */
296     void* userdata);
297 
298 /** Create a new AvahiSServiceResolver object. The specified callback function will be called with the resolved service data. */
299 AvahiSServiceResolver *avahi_s_service_resolver_new(
300     AvahiServer *server,
301     AvahiIfIndex interface,
302     AvahiProtocol protocol,
303     const char *name,
304     const char *type,
305     const char *domain,
306     AvahiProtocol aprotocol,    /**< Address family of the desired service address. Use AVAHI_PROTO_UNSPEC if you don't care */
307     AvahiLookupFlags flags,                 /**< Lookup flags. */
308     AvahiSServiceResolverCallback calback,
309     void* userdata);
310 
311 /** Prepare a new AvahiSServiceResolver object. The specified callback function will be called with the resolved service data. */
312 AvahiSServiceResolver *avahi_s_service_resolver_prepare(
313     AvahiServer *server,
314     AvahiIfIndex interface,
315     AvahiProtocol protocol,
316     const char *name,
317     const char *type,
318     const char *domain,
319     AvahiProtocol aprotocol,    /**< Address family of the desired service address. Use AVAHI_PROTO_UNSPEC if you don't care */
320     AvahiLookupFlags flags,                 /**< Lookup flags. */
321     AvahiSServiceResolverCallback calback,
322     void* userdata);
323 
324 /** Start querying on an AvahiSServiceResolver object */
325 void avahi_s_service_resolver_start(AvahiSServiceResolver *r);
326 
327 /** Free an AvahiSServiceResolver object */
328 void avahi_s_service_resolver_free(AvahiSServiceResolver *r);
329 
330 AVAHI_C_DECL_END
331 
332 #endif
333