File syn_dnssd.h¶
File List > net > syn_dnssd.h
Go to the documentation of this file
#ifndef SYN_DNSSD_H
#define SYN_DNSSD_H
#include "../common/syn_defs.h"
#include "../port/syn_port_socket.h"
#include "../pt/syn_pt.h"
#include "../sched/syn_task.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SYN_DNSSD_MAX_SERVICES 4U
#define SYN_DNSSD_MAX_TXT_RECORDS 8U
#define SYN_DNSSD_PORT 5353U
typedef struct {
const char *instance_name;
const char *service_type;
const char *hostname;
uint16_t port;
uint8_t ip[4];
const char *txt_records[SYN_DNSSD_MAX_TXT_RECORDS];
size_t txt_count;
} SYN_DnsSd_Service;
typedef struct {
SYN_DnsSd_Service services[SYN_DNSSD_MAX_SERVICES];
size_t service_count;
SYN_Socket sock;
} SYN_DnsSd;
typedef struct {
char instance_name[64];
char service_type[64];
char hostname[64];
uint16_t port;
uint8_t ip[4];
char txt[128];
} SYN_DnsSd_Discovered;
SYN_Status syn_dnssd_init(SYN_DnsSd *sd);
SYN_Status syn_dnssd_register(SYN_DnsSd *sd, const SYN_DnsSd_Service *svc);
SYN_Status syn_dnssd_process_query(const SYN_DnsSd *sd, const uint8_t *query_buf, size_t query_len,
uint8_t *resp_buf, size_t max_resp_len, size_t *resp_len);
SYN_Status syn_dnssd_announce(const SYN_DnsSd *sd, size_t service_index, uint8_t *resp_buf,
size_t max_resp_len, size_t *resp_len);
SYN_Status syn_dnssd_build_query(const char *service_type, uint8_t *query_buf, size_t max_len,
size_t *query_len);
SYN_Status syn_dnssd_parse_response(const uint8_t *resp_buf, size_t resp_len,
SYN_DnsSd_Discovered *out_disc);
SYN_Status syn_dnssd_discover(const SYN_DnsSd *sd, const char *service_type);
typedef void (*SYN_DnsSd_DiscoverCallback)(const SYN_DnsSd_Discovered *service, void *user_data);
typedef struct {
const SYN_DnsSd *sd;
const char *service_type;
SYN_DnsSd_DiscoverCallback callback;
void *user_data;
uint32_t timeout_ms;
uint32_t start_time;
uint32_t discovered_count;
bool active;
} SYN_DnsSd_Browser;
SYN_Status syn_dnssd_browser_init(SYN_DnsSd_Browser *browser, const SYN_DnsSd *sd,
const char *service_type, SYN_DnsSd_DiscoverCallback cb,
void *user_data, uint32_t timeout_ms);
SYN_PT_Status syn_dnssd_browse_task(SYN_PT *pt, SYN_Task *task);
SYN_PT_Status syn_dnssd_task(SYN_PT *pt, SYN_Task *task);
#ifdef __cplusplus
}
#endif
#endif /* SYN_DNSSD_H */