Skip to content

File syn_dnssd.h

FileList > net > syn_dnssd.h

Go to the source code of this file

DNS-Based Service Discovery (DNS-SD - RFC 6763 / RFC 6762). More...

  • #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>

Classes

Type Name
struct SYN_DnsSd
DNS-SD Daemon Context.
struct SYN_DnsSd_Browser
DNS-SD Service Discovery Browser Context.
struct SYN_DnsSd_Discovered
Discovered Service Information received from mDNS response.
struct SYN_DnsSd_Service
DNS-SD Service Definition.

Public Types

Type Name
typedef void(* SYN_DnsSd_DiscoverCallback
Callback invoked when a remote service is discovered via DNS-SD.

Public Functions

Type Name
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)
Format and send gratuitous multicast DNS-SD announcement (RFC 6762 §8.3).
SYN_PT_Status syn_dnssd_browse_task (SYN_PT * pt, SYN_Task * task)
Cooperative protothread coroutine for background DNS-SD browsing.
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)
Initialize and start a DNS-SD service browsing session.
SYN_Status syn_dnssd_build_query (const char * service_type, uint8_t * query_buf, size_t max_len, size_t * query_len)
Build an mDNS service discovery query (RFC 6762 / RFC 6763).
SYN_Status syn_dnssd_discover (const SYN_DnsSd * sd, const char * service_type)
Send an mDNS discovery query for a specific service type on multicast UDP.
SYN_Status syn_dnssd_init (SYN_DnsSd * sd)
Initialize DNS-SD daemon context.
SYN_Status syn_dnssd_parse_response (const uint8_t * resp_buf, size_t resp_len, SYN_DnsSd_Discovered * out_disc)
Parse an incoming mDNS response packet into a discovered service structure.
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)
Process an incoming mDNS / DNS-SD query packet and format response.
SYN_Status syn_dnssd_register (SYN_DnsSd * sd, const SYN_DnsSd_Service * svc)
Register a service for DNS-SD broadcast/discovery.
SYN_PT_Status syn_dnssd_task (SYN_PT * pt, SYN_Task * task)
Cooperative protothread task for responding to DNS-SD discovery queries.

Macros

Type Name
define SYN_DNSSD_MAX_SERVICES 4U
Maximum registered services per DNS-SD instance.
define SYN_DNSSD_MAX_TXT_RECORDS 8U
Maximum TXT key-value attributes per service.
define SYN_DNSSD_PORT 5353U
Standard mDNS / DNS-SD Multicast Port.

Detailed Description

Provides zero-allocation, cleanroom multicast DNS-SD service announcement and query responding for embedded devices (PTR, SRV, TXT, and A records).

Public Types Documentation

typedef SYN_DnsSd_DiscoverCallback

Callback invoked when a remote service is discovered via DNS-SD.

typedef void(* SYN_DnsSd_DiscoverCallback) (const SYN_DnsSd_Discovered *service, void *user_data);

Parameters:

  • service Pointer to the discovered service attributes.
  • user_data User context pointer passed to syn_dnssd_browser_init().

Public Functions Documentation

function syn_dnssd_announce

Format and send gratuitous multicast DNS-SD announcement (RFC 6762 §8.3).

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
) 

Parameters:

  • sd DNS-SD context.
  • service_index Index of service to announce.
  • resp_buf [out] Buffer to receive formatted response packet.
  • max_resp_len Capacity of resp_buf.
  • resp_len [out] Number of bytes written to resp_buf.

Returns:

SYN_OK on success, SYN_ERROR on invalid parameters or send failure.


function syn_dnssd_browse_task

Cooperative protothread coroutine for background DNS-SD browsing.

SYN_PT_Status syn_dnssd_browse_task (
    SYN_PT * pt,
    SYN_Task * task
) 

Yields until responses arrive or timeout expires. Parses incoming packets and invokes the discovery callback.

Parameters:

  • pt Protothread pointer.
  • task Task descriptor with user_data pointing to SYN_DnsSd_Browser.

Returns:

PT_WAITING while running, PT_EXITED when discovery timeout elapses.


function syn_dnssd_browser_init

Initialize and start a DNS-SD service browsing session.

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
) 

Transmits the initial multicast PTR query and arms the browser context.

Parameters:

  • browser Browser context instance.
  • sd Initialized DNS-SD daemon instance (provides socket).
  • service_type Service type to search for (e.g. "_http._tcp", "_coap._udp").
  • cb Callback invoked whenever a valid response is received.
  • user_data Optional user context pointer.
  • timeout_ms Maximum time in ms to listen for discovery responses.

Returns:

SYN_OK on success, SYN_ERROR on invalid parameters.


function syn_dnssd_build_query

Build an mDNS service discovery query (RFC 6762 / RFC 6763).

SYN_Status syn_dnssd_build_query (
    const char * service_type,
    uint8_t * query_buf,
    size_t max_len,
    size_t * query_len
) 

Formats a standard PTR query for _service._proto.local.

Parameters:

  • service_type Service type to search for (e.g. "_http._tcp", "_coap._udp").
  • query_buf [out] Output buffer for DNS query packet.
  • max_len Capacity of query_buf.
  • query_len [out] Written length of query packet.

Returns:

SYN_OK on success, SYN_ERROR on buffer overflow or invalid arguments.


function syn_dnssd_discover

Send an mDNS discovery query for a specific service type on multicast UDP.

SYN_Status syn_dnssd_discover (
    const SYN_DnsSd * sd,
    const char * service_type
) 

Parameters:

  • sd DNS-SD context containing open multicast socket.
  • service_type Service type to query for (e.g. "_http._tcp").

Returns:

SYN_OK on successful multicast transmit, SYN_ERROR otherwise.


function syn_dnssd_init

Initialize DNS-SD daemon context.

SYN_Status syn_dnssd_init (
    SYN_DnsSd * sd
) 

Parameters:

  • sd DNS-SD instance.

Returns:

SYN_OK on success, SYN_ERROR on socket/multicast error.


function syn_dnssd_parse_response

Parse an incoming mDNS response packet into a discovered service structure.

SYN_Status syn_dnssd_parse_response (
    const uint8_t * resp_buf,
    size_t resp_len,
    SYN_DnsSd_Discovered * out_disc
) 

Parameters:

  • resp_buf Buffer containing raw DNS response.
  • resp_len Length of raw DNS response.
  • out_disc [out] Structure to receive parsed service attributes.

Returns:

SYN_OK if successfully parsed, SYN_ERROR otherwise.


function syn_dnssd_process_query

Process an incoming mDNS / DNS-SD query packet and format response.

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
) 

Parameters:

  • sd DNS-SD context containing registered services.
  • query_buf Incoming raw DNS packet.
  • query_len Query packet byte length.
  • resp_buf [out] Buffer to receive formatted response packet.
  • max_resp_len Capacity of resp_buf.
  • resp_len [out] Number of bytes written to resp_buf.

Returns:

SYN_OK if query matched and response generated, SYN_ERROR/SYN_NOT_FOUND otherwise.


function syn_dnssd_register

Register a service for DNS-SD broadcast/discovery.

SYN_Status syn_dnssd_register (
    SYN_DnsSd * sd,
    const SYN_DnsSd_Service * svc
) 

Parameters:

  • sd DNS-SD instance.
  • svc Service configuration to register.

Returns:

SYN_OK on success, SYN_ERROR if table is full or invalid parameters.


function syn_dnssd_task

Cooperative protothread task for responding to DNS-SD discovery queries.

SYN_PT_Status syn_dnssd_task (
    SYN_PT * pt,
    SYN_Task * task
) 

Parameters:

  • pt Protothread pointer.
  • task Task structure with user_data pointing to SYN_DnsSd instance.

Returns:

PT_WAITING while running, PT_EXITED when done.


Macro Definition Documentation

define SYN_DNSSD_MAX_SERVICES

Maximum registered services per DNS-SD instance.

#define SYN_DNSSD_MAX_SERVICES `4U`


define SYN_DNSSD_MAX_TXT_RECORDS

Maximum TXT key-value attributes per service.

#define SYN_DNSSD_MAX_TXT_RECORDS `8U`


define SYN_DNSSD_PORT

Standard mDNS / DNS-SD Multicast Port.

#define SYN_DNSSD_PORT `5353U`



The documentation for this class was generated from the following file src/syntropic/net/syn_dnssd.h