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