/* * tinysvcmdns - a tiny MDNS implementation for publishing services * Copyright (C) 2011 Darell Tan * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* APIs for Multicast DNS */ #ifndef __MDNSD_H__ #define __MDNSD_H__ #include struct mdnsd; struct mdns_service; #define MAX_NUMBER_OF_SERVICE_DISCOVERY_RESULT 10 #define MAX_SERVICE_DISCOVERY_TIME_MS (60 * 1000) #define MDNS_HOSTNAME_RESOLVER_TIMEOUT_MSEC (3 * 1000) #define MDNS_HOSTNAME_RESOLVER_MAX_TRY_COUNT 5 #define MDNS_HOSTNAME_RESOLVER_WAIT_TIME_MSEC 250 #define MDNS_SERVICE_DISCOVERY_MAX_TRY_COUNT 5 #define MDNS_SERVICE_DISCOVERY_WAIT_TIME_MSEC 250 /* Structure of MDNS service information */ struct mdns_service_info { char *type; char *instance_name; char *hostname; unsigned int ipaddr; /* ipv4 */ unsigned int port; }; #ifdef __cplusplus #define EXTERN extern "C" extern "C" { #else #define EXTERN extern #endif #ifndef MDNS_NO_RESPONDER_SUPPORT /** * starts the MDNS daemon. * * [in] desired_hostname the desired host name as string type; if same name is in the network, an alternative name will be set as hostname. * [in] netif_name network interface name as string type * On success, 0 is returned. On failure, a negative value is returned. * */ int mdnsd_start(const char *desired_hostname, const char *netif_name); /** * mdnsd_stop() stops the MDNS daemon. * * On success, 0 is returned. On failure, a negative value is returned. * */ int mdnsd_stop(void); /** * mdnsd_get_hostname() gets the current host name as MDNS type. * * [out] hostname_result 32-bytes string buffer for the host name result * On success, 0 is returned. On failure, a negative value is returned. * */ int mdnsd_get_hostname(char *hostname_result); /** * mdnsd_register_service() register a service to expose through mDNS-SD. * * [in] instance instance name to expose * [in] type type of service. e.g. _http._tcp.local * [in] port port to which the service is reachable * [in] hostname if NULL, use the hostname configured when starting the daemon, * or use this parameter otherwise * [in] txt text records to add to the service announcement. Can be NULL. * On success, 0 is returned. On failure, a negative errno value is returned. * */ int mdnsd_register_service(const char *instance, const char *type, uint16_t port, const char *hostname, const char *txt[]); // sets the hostname for the given MDNS responder instance void mdnsd_set_hostname(struct mdnsd *svr, const char *hostname, uint32_t ip); // adds an additional RR void mdnsd_add_rr(struct mdnsd *svr, struct rr_entry *rr); // registers a service with the MDNS responder instance //struct mdns_service *mdnsd_register_svc(struct mdnsd *svr, const char *instance_name, // const char *type, uint16_t port, const char *hostname, const char *txt[]); // destroys the mdns_service struct returned by mdnsd_register_svc() //void mdns_service_destroy(struct mdns_service *srv); #endif /* !defined MDNS_NO_RESPONDER_SUPPORT */ /** * mdnsd_resolve_hostname() gets ip address with the given hostname. * * [in] hostname host name as string type * [out] ipaddr the pointer of ip address result * On success, 0 is returned. On failure, a negative value is returned. * */ int mdnsd_resolve_hostname(char *hostname, uint32_t *ipaddr); /** * mdnsd_discover_service() discovers services with the given service type string * * [in] service_type mdns service type string * [in] discover_time_msec time in milliseconds for discovering service * [out] service_list the array of service list * [out] num_of_services number of services * On success, 0 is returned. On failure, a negative value is returned. * */ int mdnsd_discover_service(char *service_type, int discover_time_msec, struct mdns_service_info **service_list, int *num_of_services); #undef EXTERN #ifdef __cplusplus } #endif #endif /*!__MDNSD_H__ */