]> git.meshlink.io Git - catta/blob - avahi-core/core.h
* split off lookup.h and publish.h from core.h
[catta] / avahi-core / core.h
1 #ifndef foocorehfoo
2 #define foocorehfoo
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 /** \file core.h The Avahi Multicast DNS and DNS Service Discovery implementation. */
26
27
28 #include <avahi-common/cdecl.h>
29
30 #ifndef DOXYGEN_SHOULD_SKIP_THIS
31 AVAHI_C_DECL_BEGIN
32 #endif
33
34 /** An mDNS responder object */
35 typedef struct AvahiServer AvahiServer;
36
37 #ifndef DOXYGEN_SHOULD_SKIP_THIS
38 AVAHI_C_DECL_END
39 #endif
40
41 #include <avahi-core/rr.h>
42 #include <avahi-common/address.h>
43 #include <avahi-common/defs.h>
44 #include <avahi-common/watch.h>
45
46 #ifndef DOXYGEN_SHOULD_SKIP_THIS
47 AVAHI_C_DECL_BEGIN
48 #endif
49
50 /** Maximum number of defined DNS servers for wide area DNS */
51 #define AVAHI_MAX_WIDE_AREA_SERVERS 4
52
53 /** Flags for server entries */
54 typedef enum {
55     AVAHI_ENTRY_NULL = 0,          /**< No special flags */
56     AVAHI_ENTRY_UNIQUE = 1,        /**< The RRset is intended to be unique */
57     AVAHI_ENTRY_NOPROBE = 2,       /**< Though the RRset is intended to be unique no probes shall be sent */
58     AVAHI_ENTRY_NOANNOUNCE = 4,    /**< Do not announce this RR to other hosts */
59     AVAHI_ENTRY_ALLOWMUTIPLE = 8   /**< Allow multiple local records of this type, even if they are intended to be unique */
60 } AvahiEntryFlags;
61
62 /** Prototype for callback functions which are called whenever the state of an AvahiServer object changes */
63 typedef void (*AvahiServerCallback) (AvahiServer *s, AvahiServerState state, void* userdata);
64
65 /** Stores configuration options for a server instance */
66 typedef struct AvahiServerConfig {
67     char *host_name;                  /**< Default host name. If left empty defaults to the result of gethostname(2) of the libc */
68     char *domain_name;                /**< Default domain name. If left empty defaults to .local */
69     int use_ipv4;                     /**< Enable IPv4 support */
70     int use_ipv6;                     /**< Enable IPv6 support */
71     int publish_hinfo;                /**< Register a HINFO record for the host containing the local OS and CPU type */
72     int publish_addresses;            /**< Register A, AAAA and PTR records for all local IP addresses */
73     int publish_workstation;          /**< Register a _workstation._tcp service */
74     int publish_domain;               /**< Announce the local domain for browsing */
75     int check_response_ttl;           /**< If enabled the server ignores all incoming responses with IP TTL != 255. Newer versions of the RFC do no longer contain this check, so it is disabled by default. */
76     int use_iff_running;              /**< Require IFF_RUNNING on local network interfaces. This is the official way to check for link beat. Unfortunately this doesn't work with all drivers. So bettere leave this off. */
77     int enable_reflector;             /**< Reflect incoming mDNS traffic to all local networks. This allows mDNS based network browsing beyond ethernet borders */
78     int reflect_ipv;                  /**< if enable_reflector is 1, enable/disable reflecting between IPv4 and IPv6 */
79     int add_service_cookie;           /**< Add magic service cookie to all locally generated records implicitly */
80     int enable_wide_area;             /**< Enable wide area support */
81     AvahiAddress wide_area_servers[AVAHI_MAX_WIDE_AREA_SERVERS]; /** Unicast DNS server to use for wide area lookup */
82     unsigned n_wide_area_servers;     /**< Number of servers in wide_area_servers[] */
83 } AvahiServerConfig;
84
85 /** Allocate a new mDNS responder object. */
86 AvahiServer *avahi_server_new(
87     const AvahiPoll *api,          /**< The main loop adapter */
88     const AvahiServerConfig *sc,   /**< If non-NULL a pointer to a configuration structure for the server. The server makes an internal deep copy of this structure, so you may free it using avahi_server_config_done() immediately after calling this function. */
89     AvahiServerCallback callback,  /**< A callback which is called whenever the state of the server changes */
90     void* userdata,                /**< An opaque pointer which is passed to the callback function */
91     int *error);
92
93 /** Free an mDNS responder object */
94 void avahi_server_free(AvahiServer* s);
95
96 /** Fill in default values for a server configuration structure. If you
97  * make use of an AvahiServerConfig structure be sure to initialize
98  * it with this function for the sake of upwards library
99  * compatibility. This call may allocate strings on the heap. To
100  * release this memory make sure to call
101  * avahi_server_config_done(). If you want to replace any strings in
102  * the structure be sure to free the strings filled in by this
103  * function with avahi_free() first and allocate the replacements with
104  * g_malloc() (or g_strdup()).*/
105 AvahiServerConfig* avahi_server_config_init(
106    AvahiServerConfig *c /**< A structure which shall be filled in */ );
107
108 /** Make a deep copy of the configuration structure *c to *ret. */
109 AvahiServerConfig* avahi_server_config_copy(
110     AvahiServerConfig *ret /**< destination */,
111     const AvahiServerConfig *c /**< source */);
112
113 /** Free the data in a server configuration structure. */
114 void avahi_server_config_free(AvahiServerConfig *c);
115
116 /** Return the currently chosen domain name of the server object. The
117  * return value points to an internally allocated string. Be sure to
118  * make a copy of the string before calling any other library
119  * functions. */
120 const char* avahi_server_get_domain_name(AvahiServer *s);
121
122 /** Return the currently chosen host name. The return value points to a internally allocated string. */
123 const char* avahi_server_get_host_name(AvahiServer *s);
124
125 /** Return the currently chosen host name as a FQDN ("fully qualified
126  * domain name", i.e. the concatenation of the host and domain
127  * name). The return value points to a internally allocated string. */
128 const char* avahi_server_get_host_name_fqdn(AvahiServer *s);
129
130 /** Change the host name of a running mDNS responder. This will drop
131 all automicatilly generated RRs and readd them with the new
132 name. Since the responder has to probe for the new RRs this function
133 takes some time to take effect altough it returns immediately. This
134 function is intended to be called when a host name conflict is
135 reported using AvahiServerCallback. The caller should readd all user
136 defined RRs too since they otherwise continue to point to the outdated
137 host name..*/
138 int avahi_server_set_host_name(AvahiServer *s, const char *host_name);
139
140 /** Change the domain name of a running mDNS responder. The same rules
141  * as with avahi_server_set_host_name() apply. */
142 int avahi_server_set_domain_name(AvahiServer *s, const char *domain_name);
143
144 /** Return the opaque user data pointer attached to a server object */
145 void* avahi_server_get_data(AvahiServer *s);
146
147 /** Change the opaque user data pointer attached to a server object */
148 void avahi_server_set_data(AvahiServer *s, void* userdata);
149
150 /** Return the current state of the server object */
151 AvahiServerState avahi_server_get_state(AvahiServer *s);
152
153 /** Callback prototype for avahi_server_dump() */
154 typedef void (*AvahiDumpCallback)(const char *text, void* userdata);
155
156 /** Dump the current server status by calling "callback" for each line.  */
157 int avahi_server_dump(AvahiServer *s, AvahiDumpCallback callback, void* userdata);
158
159 /** Return the last error code */
160 int avahi_server_errno(AvahiServer *s);
161
162 /** Return the local service cookie */
163 uint32_t avahi_server_get_local_service_cookie(AvahiServer *s);
164
165 /** Return 1 if there is a local service with the specified credentials registeresd. Return 0 if not, negative on failure */
166 int avahi_server_is_service_local(AvahiServer *s, AvahiIfIndex, AvahiProtocol protocol, const char *name, const char *type,  const char*domain);
167
168 /** Set the wide area DNS servers */
169 int avahi_server_set_wide_area_servers(AvahiServer *s, const AvahiAddress *a, unsigned n);
170
171 #ifndef DOXYGEN_SHOULD_SKIP_THIS
172 AVAHI_C_DECL_END
173 #endif
174
175 #endif