zeroconf/mdnsd.h

154 lines
5.2 KiB
C

/*
* 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 <stdint.h>
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__ */