]> git.meshlink.io Git - catta/blob - avahi-client/client.h
* make all flags parameters UINT32 when marshalling for DBUS
[catta] / avahi-client / client.h
1 #ifndef fooclienthfoo
2 #define fooclienthfoo
3
4 /* $Id$ */
5
6 /***
7   This file is part of avahi.
8  
9   avahi is free software; you can redistribute it and/or modify it
10   under the terms of the GNU Lesser General Public License as
11   published by the Free Software Foundation; either version 2.1 of the
12   License, or (at your option) any later version.
13  
14   avahi is distributed in the hope that it will be useful, but WITHOUT
15   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
17   Public License for more details.
18  
19   You should have received a copy of the GNU Lesser General Public
20   License along with avahi; if not, write to the Free Software
21   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22   USA.
23 ***/
24
25 #include <inttypes.h>
26
27 #include <avahi-common/cdecl.h>
28 #include <avahi-common/address.h>
29 #include <avahi-common/strlst.h>
30 #include <avahi-common/defs.h>
31 #include <avahi-common/watch.h>
32 #include <avahi-common/gccmacro.h>
33
34 /** \file client.h Definitions and functions for the client API over D-Bus */
35
36 /** \example client-publish-service.c Example how to register a DNS-SD
37  * service using the client interface to avahi-daemon. It behaves like a network
38  * printer registering both an IPP and a BSD LPR service. */
39
40 /** \example client-browse-services.c Example how to browse for DNS-SD
41  * services using the client interface to avahi-daemon. */
42
43 /** \example glib-integration.c Example of how to integrate
44  * avahi use with GLIB/GTK applications */
45  
46
47 #ifndef DOXYGEN_SHOULD_SKIP_THIS
48 AVAHI_C_DECL_BEGIN
49 #endif
50
51 /** A connection context */
52 typedef struct AvahiClient AvahiClient;
53
54 /** An entry group object */
55 typedef struct AvahiEntryGroup AvahiEntryGroup;
56
57 /** A domain browser object */
58 typedef struct AvahiDomainBrowser AvahiDomainBrowser;
59
60 /** A service browser object */
61 typedef struct AvahiServiceBrowser AvahiServiceBrowser;
62
63 /** A service type browser object */
64 typedef struct AvahiServiceTypeBrowser AvahiServiceTypeBrowser;
65
66 /** A service resolver object */
67 typedef struct AvahiServiceResolver AvahiServiceResolver;
68
69 /** A service resolver object */
70 typedef struct AvahiHostNameResolver AvahiHostNameResolver;
71
72 /** An address resolver object */
73 typedef struct AvahiAddressResolver AvahiAddressResolver;
74
75 /** States of a client object, a superset of AvahiServerState */
76 typedef enum {
77     AVAHI_CLIENT_S_INVALID = AVAHI_SERVER_INVALID,
78     AVAHI_CLIENT_S_REGISTERING = AVAHI_SERVER_REGISTERING,
79     AVAHI_CLIENT_S_RUNNING = AVAHI_SERVER_RUNNING,
80     AVAHI_CLIENT_S_COLLISION = AVAHI_SERVER_COLLISION,
81     AVAHI_CLIENT_DISCONNECTED = 100 /**< Lost DBUS connection to the Avahi daemon */
82 } AvahiClientState;
83
84 /** The function prototype for the callback of an AvahiClient */
85 typedef void (*AvahiClientCallback) (AvahiClient *s, AvahiClientState state, void* userdata);
86
87 /** The function prototype for the callback of an AvahiEntryGroup */
88 typedef void (*AvahiEntryGroupCallback) (AvahiEntryGroup *g, AvahiEntryGroupState state, void* userdata);
89
90 /** The function prototype for the callback of an AvahiDomainBrowser */
91 typedef void (*AvahiDomainBrowserCallback) (AvahiDomainBrowser *b, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *domain, AvahiLookupResultFlags flags, void *userdata);
92
93 /** The function prototype for the callback of an AvahiServiceBrowser */
94 typedef void (*AvahiServiceBrowserCallback) (AvahiServiceBrowser *b, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags flags, void *userdata);
95
96 /** The function prototype for the callback of an AvahiServiceTypeBrowser */
97 typedef void (*AvahiServiceTypeBrowserCallback) (AvahiServiceTypeBrowser *b, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *type, const char *domain, AvahiLookupResultFlags flags, void *userdata);
98
99 /** The function prototype for the callback of an AvahiServiceResolver */
100 typedef void (*AvahiServiceResolverCallback) (
101     AvahiServiceResolver *r,
102     AvahiIfIndex interface,
103     AvahiProtocol protocol,
104     AvahiResolverEvent event,
105     const char *name,
106     const char *type,
107     const char *domain,
108     const char *host_name,
109     const AvahiAddress *a,
110     uint16_t port,
111     AvahiStringList *txt,
112     AvahiLookupResultFlags flags, 
113     void *userdata);
114
115 /** The function prototype for the callback of an AvahiHostNameResolver */
116 typedef void (*AvahiHostNameResolverCallback) (
117     AvahiHostNameResolver *r,
118     AvahiIfIndex interface,
119     AvahiProtocol protocol,
120     AvahiResolverEvent event,
121     const char *name,
122     const AvahiAddress *a,
123     AvahiLookupResultFlags flags, 
124     void *userdata);
125
126 /** The function prototype for the callback of an AvahiAddressResolver */
127 typedef void (*AvahiAddressResolverCallback) (
128     AvahiAddressResolver *r,
129     AvahiIfIndex interface,
130     AvahiProtocol protocol,
131     AvahiResolverEvent event,
132     AvahiProtocol aprotocol,
133     const AvahiAddress *a,
134     const char *name,
135     AvahiLookupResultFlags flags, 
136     void *userdata);
137
138 /** Creates a new client instance */
139 AvahiClient* avahi_client_new (const AvahiPoll *poll_api, AvahiClientCallback callback, void *userdata, int *error);
140
141 /** Free a client instance */
142 void avahi_client_free(AvahiClient *client);
143
144 /** Get the version of the server */
145 const char* avahi_client_get_version_string (AvahiClient*);
146
147 /** Get host name */
148 const char* avahi_client_get_host_name (AvahiClient*);
149
150 /** Get domain name */
151 const char* avahi_client_get_domain_name (AvahiClient*);
152
153 /** Get FQDN domain name */
154 const char* avahi_client_get_host_name_fqdn (AvahiClient*);
155
156 /** Get state */
157 AvahiClientState avahi_client_get_state(AvahiClient *client); 
158
159 /** Get the last error number */
160 int avahi_client_errno (AvahiClient*);
161
162 /** Create a new AvahiEntryGroup object */
163 AvahiEntryGroup* avahi_entry_group_new (AvahiClient*, AvahiEntryGroupCallback callback, void *userdata);
164
165 /** Clean up and free an AvahiEntryGroup object */
166 int avahi_entry_group_free (AvahiEntryGroup *);
167
168 /** Commit an AvahiEntryGroup */
169 int avahi_entry_group_commit (AvahiEntryGroup*);
170
171 /** Reset an AvahiEntryGroup */
172 int avahi_entry_group_reset (AvahiEntryGroup*);
173
174 /** Get an AvahiEntryGroup's state */
175 int avahi_entry_group_get_state (AvahiEntryGroup*);
176
177 /** Check if an AvahiEntryGroup is empty */
178 int avahi_entry_group_is_empty (AvahiEntryGroup*);
179
180 /** Get an AvahiEntryGroup's owning client instance */
181 AvahiClient* avahi_entry_group_get_client (AvahiEntryGroup*);
182
183 /** Add a service, takes a variable NULL terminated list of text records */
184 int avahi_entry_group_add_service(
185     AvahiEntryGroup *group,
186     AvahiIfIndex interface,
187     AvahiProtocol protocol,
188     AvahiPublishFlags flags,
189     const char *name,
190     const char *type,
191     const char *domain,
192     const char *host,
193     uint16_t port,
194     ...) AVAHI_GCC_SENTINEL;
195
196 /** Add a service, takes an AvahiStringList for text records */
197 int avahi_entry_group_add_service_strlst(
198     AvahiEntryGroup *group,
199     AvahiIfIndex interface,
200     AvahiProtocol protocol,
201     AvahiPublishFlags flags,
202     const char *name,
203     const char *type,
204     const char *domain,
205     const char *host,
206     uint16_t port,
207     AvahiStringList *txt);
208
209 /** Add a service, takes a NULL terminated va_list for text records */
210 int avahi_entry_group_add_service_va(
211     AvahiEntryGroup *group,
212     AvahiIfIndex interface,
213     AvahiProtocol protocol,
214     AvahiPublishFlags flags,
215     const char *name,
216     const char *type,
217     const char *domain,
218     const char *host,
219     uint16_t port,
220     va_list va);
221
222 /** Browse for domains on the local network */
223 AvahiDomainBrowser* avahi_domain_browser_new (
224     AvahiClient *client,
225     AvahiIfIndex interface,
226     AvahiProtocol protocol,
227     const char *domain,
228     AvahiDomainBrowserType btype,
229     AvahiLookupFlags flags,
230     AvahiDomainBrowserCallback callback,
231     void *userdata);
232
233 /** Get the parent client of an AvahiDomainBrowser object */
234 AvahiClient* avahi_domain_browser_get_client (AvahiDomainBrowser *);
235
236 /** Cleans up and frees an AvahiDomainBrowser object */
237 int avahi_domain_browser_free (AvahiDomainBrowser *);
238
239 /** Browse for service types on the local network */
240 AvahiServiceTypeBrowser* avahi_service_type_browser_new (
241     AvahiClient *client,
242     AvahiIfIndex interface,
243     AvahiProtocol protocol,
244     const char *domain,
245     AvahiLookupFlags flags,
246     AvahiServiceTypeBrowserCallback callback,
247     void *userdata);
248
249 /** Get the parent client of an AvahiServiceTypeBrowser object */
250 AvahiClient* avahi_service_type_browser_get_client (AvahiServiceTypeBrowser *);
251
252 /** Cleans up and frees an AvahiServiceTypeBrowser object */
253 int avahi_service_type_browser_free (AvahiServiceTypeBrowser *);
254
255 /** Browse for services of a type on the local network */
256 AvahiServiceBrowser* avahi_service_browser_new (
257     AvahiClient *client,
258     AvahiIfIndex interface,
259     AvahiProtocol protocol,
260     const char *type,
261     const char *domain,
262     AvahiLookupFlags flags,
263     AvahiServiceBrowserCallback callback,
264     void *userdata);
265
266 /** Get the parent client of an AvahiServiceBrowser object */
267 AvahiClient* avahi_service_browser_get_client (AvahiServiceBrowser *);
268
269 /* Cleans up and frees an AvahiServiceBrowser object */
270 int avahi_service_browser_free (AvahiServiceBrowser *);
271
272 /** Create a new service resolver object */
273 AvahiServiceResolver * avahi_service_resolver_new(
274     AvahiClient *client,
275     AvahiIfIndex interface,
276     AvahiProtocol protocol,
277     const char *name,
278     const char *type,
279     const char *domain,
280     AvahiProtocol aprotocol,
281     AvahiLookupFlags flags,
282     AvahiServiceResolverCallback callback,
283     void *userdata);
284
285 /** Get the parent client of an AvahiServiceResolver object */
286 AvahiClient* avahi_service_resolver_get_client (AvahiServiceResolver *);
287
288 /** Free a service resolver object */
289 int avahi_service_resolver_free(AvahiServiceResolver *r);
290
291 /** Create a new hostname resolver object */
292 AvahiHostNameResolver * avahi_host_name_resolver_new(
293     AvahiClient *client,
294     AvahiIfIndex interface,
295     AvahiProtocol protocol,
296     const char *name,
297     AvahiProtocol aprotocol,
298     AvahiLookupFlags flags,
299     AvahiHostNameResolverCallback callback,
300     void *userdata);
301
302 /** Get the parent client of an AvahiHostNameResolver object */
303 AvahiClient* avahi_host_name_resolver_get_client (AvahiHostNameResolver *);
304
305 /** Free a hostname resolver object */
306 int avahi_host_name_resolver_free(AvahiHostNameResolver *r);
307
308 /** Create a new address resolver object from an address string.  Set aprotocol to AF_UNSPEC for protocol detection. */
309 AvahiAddressResolver * avahi_address_resolver_new(
310     AvahiClient *client,
311     AvahiIfIndex interface,
312     AvahiProtocol protocol,
313     const char *address,
314     AvahiLookupFlags flags,
315     AvahiAddressResolverCallback callback,
316     void *userdata);
317
318 /** Create a new address resolver object from an AvahiAddress object */
319 AvahiAddressResolver* avahi_address_resolver_new_a(
320     AvahiClient *client,
321     AvahiIfIndex interface,
322     AvahiProtocol protocol,
323     const AvahiAddress *a,
324     AvahiLookupFlags flags,
325     AvahiAddressResolverCallback callback,
326     void *userdata);
327
328 /** Get the parent client of an AvahiAddressResolver object */
329 AvahiClient* avahi_address_resolver_get_client (AvahiAddressResolver *);
330
331 /** Free a AvahiAddressResolver resolver object */
332 int avahi_address_resolver_free(AvahiAddressResolver *r);
333
334 /** Return the local service cookie. returns AVAHI_SERVICE_COOKIE_INVALID on failure. */
335 uint32_t avahi_client_get_local_service_cookie(AvahiClient *client);
336
337 /** Return 1 if the specified service is a registered locally, negative on failure, 0 otherwise. */
338 int avahi_client_is_service_local(AvahiClient *client, AvahiIfIndex interface, AvahiProtocol protocol, const char *name, const char *type, const char *domain);
339
340 #ifndef DOXYGEN_SHOULD_SKIP_THIS
341 AVAHI_C_DECL_END
342 #endif
343
344 #endif