JDNS
Loading...
Searching...
No Matches
jdns.h File Reference
#include "jdns_export.h"

Go to the source code of this file.

Classes

struct  jdns_object
 
struct  jdns_list
 
struct  jdns_string
 
struct  jdns_stringlist
 
struct  jdns_address
 
struct  jdns_server
 
struct  jdns_nameserver
 
struct  jdns_nameserverlist
 
struct  jdns_dnshost
 
struct  jdns_dnshostlist
 
struct  jdns_dnsparams
 
struct  jdns_rr
 
struct  jdns_response
 
struct  jdns_callbacks
 
struct  jdns_event
 

Macros

#define JDNS_OBJECT
 
#define JDNS_OBJECT_NEW(name)
 
#define JDNS_LIST_DECLARE(name)
 
#define JDNS_UNICAST_PORT   53
 
#define JDNS_MULTICAST_PORT   5353
 
#define JDNS_RTYPE_A   1
 
#define JDNS_RTYPE_AAAA   28
 
#define JDNS_RTYPE_MX   15
 
#define JDNS_RTYPE_SRV   33
 
#define JDNS_RTYPE_CNAME   5
 
#define JDNS_RTYPE_PTR   12
 
#define JDNS_RTYPE_TXT   16
 
#define JDNS_RTYPE_HINFO   13
 
#define JDNS_RTYPE_NS   2
 
#define JDNS_RTYPE_ANY   255
 
#define JDNS_PUBLISH_SHARED   0x0001
 
#define JDNS_PUBLISH_UNIQUE   0x0002
 
#define JDNS_STEP_TIMER   0x0001
 
#define JDNS_STEP_HANDLE   0x0002
 
#define JDNS_EVENT_RESPONSE   0x0001
 
#define JDNS_EVENT_PUBLISH   0x0002
 
#define JDNS_EVENT_SHUTDOWN   0x0003
 
#define JDNS_STATUS_SUCCESS   0x0001
 
#define JDNS_STATUS_NXDOMAIN   0x0002
 
#define JDNS_STATUS_ERROR   0x0003
 
#define JDNS_STATUS_TIMEOUT   0x0004
 
#define JDNS_STATUS_CONFLICT   0x0005
 

Typedefs

typedef void(* jdns_object_dtor_func) (void *)
 
typedef void *(* jdns_object_cctor_func) (const void *)
 
typedef struct jdns_object jdns_object_t
 
typedef struct jdns_list jdns_list_t
 
typedef struct jdns_string jdns_string_t
 
typedef struct jdns_stringlist jdns_stringlist_t
 
typedef struct jdns_address jdns_address_t
 
typedef struct jdns_server jdns_server_t
 
typedef struct jdns_nameserver jdns_nameserver_t
 
typedef struct jdns_nameserverlist jdns_nameserverlist_t
 
typedef struct jdns_dnshost jdns_dnshost_t
 
typedef struct jdns_dnshostlist jdns_dnshostlist_t
 
typedef struct jdns_dnsparams jdns_dnsparams_t
 
typedef struct jdns_rr jdns_rr_t
 
typedef struct jdns_response jdns_response_t
 
typedef struct jdns_session jdns_session_t
 
typedef struct jdns_callbacks jdns_callbacks_t
 
typedef struct jdns_event jdns_event_t
 

Functions

JDNS_EXPORT void * jdns_object_new (int size, void(*dtor)(void *), void *(*cctor)(const void *))
 
JDNS_EXPORT void * jdns_object_copy (const void *a)
 
JDNS_EXPORT void jdns_object_delete (void *a)
 
JDNS_EXPORT void jdns_object_free (void *a)
 
JDNS_EXPORT jdns_list_tjdns_list_new ()
 
JDNS_EXPORT jdns_list_tjdns_list_copy (const jdns_list_t *a)
 
JDNS_EXPORT void jdns_list_delete (jdns_list_t *a)
 
JDNS_EXPORT void jdns_list_clear (jdns_list_t *a)
 
JDNS_EXPORT void jdns_list_insert (jdns_list_t *a, void *item, int pos)
 
JDNS_EXPORT void jdns_list_insert_value (jdns_list_t *a, const void *item, int pos)
 
JDNS_EXPORT void jdns_list_remove (jdns_list_t *a, void *item)
 
JDNS_EXPORT void jdns_list_remove_at (jdns_list_t *a, int pos)
 
JDNS_EXPORT jdns_string_tjdns_string_new ()
 
JDNS_EXPORT jdns_string_tjdns_string_copy (const jdns_string_t *s)
 
JDNS_EXPORT void jdns_string_delete (jdns_string_t *s)
 
JDNS_EXPORT void jdns_string_set (jdns_string_t *s, const unsigned char *str, int str_len)
 
JDNS_EXPORT void jdns_string_set_cstr (jdns_string_t *s, const char *str)
 
JDNS_EXPORT jdns_stringlist_tjdns_stringlist_new ()
 
JDNS_EXPORT jdns_stringlist_tjdns_stringlist_copy (const jdns_stringlist_t *a)
 
JDNS_EXPORT void jdns_stringlist_delete (jdns_stringlist_t *a)
 
JDNS_EXPORT void jdns_stringlist_append (jdns_stringlist_t *a, const jdns_string_t *str)
 
JDNS_EXPORT jdns_address_tjdns_address_new ()
 
JDNS_EXPORT jdns_address_tjdns_address_copy (const jdns_address_t *a)
 
JDNS_EXPORT void jdns_address_delete (jdns_address_t *a)
 
JDNS_EXPORT void jdns_address_set_ipv4 (jdns_address_t *a, unsigned long int ipv4)
 
JDNS_EXPORT void jdns_address_set_ipv6 (jdns_address_t *a, const unsigned char *ipv6)
 
JDNS_EXPORT int jdns_address_set_cstr (jdns_address_t *a, const char *str)
 
JDNS_EXPORT int jdns_address_cmp (const jdns_address_t *a, const jdns_address_t *b)
 
JDNS_EXPORT jdns_address_tjdns_address_multicast4_new ()
 
JDNS_EXPORT jdns_address_tjdns_address_multicast6_new ()
 
JDNS_EXPORT jdns_server_tjdns_server_new ()
 
JDNS_EXPORT jdns_server_tjdns_server_copy (const jdns_server_t *s)
 
JDNS_EXPORT void jdns_server_delete (jdns_server_t *s)
 
JDNS_EXPORT void jdns_server_set_name (jdns_server_t *s, const unsigned char *name)
 
JDNS_EXPORT jdns_nameserver_tjdns_nameserver_new ()
 
JDNS_EXPORT jdns_nameserver_tjdns_nameserver_copy (const jdns_nameserver_t *a)
 
JDNS_EXPORT void jdns_nameserver_delete (jdns_nameserver_t *a)
 
JDNS_EXPORT void jdns_nameserver_set (jdns_nameserver_t *a, const jdns_address_t *addr, int port)
 
JDNS_EXPORT jdns_nameserverlist_tjdns_nameserverlist_new ()
 
JDNS_EXPORT jdns_nameserverlist_tjdns_nameserverlist_copy (const jdns_nameserverlist_t *a)
 
JDNS_EXPORT void jdns_nameserverlist_delete (jdns_nameserverlist_t *a)
 
JDNS_EXPORT void jdns_nameserverlist_append (jdns_nameserverlist_t *a, const jdns_address_t *addr, int port)
 
JDNS_EXPORT jdns_dnsparams_tjdns_dnsparams_new ()
 
JDNS_EXPORT jdns_dnsparams_tjdns_dnsparams_copy (jdns_dnsparams_t *a)
 
JDNS_EXPORT void jdns_dnsparams_delete (jdns_dnsparams_t *a)
 
JDNS_EXPORT void jdns_dnsparams_append_nameserver (jdns_dnsparams_t *a, const jdns_address_t *addr, int port)
 
JDNS_EXPORT void jdns_dnsparams_append_domain (jdns_dnsparams_t *a, const jdns_string_t *domain)
 
JDNS_EXPORT void jdns_dnsparams_append_host (jdns_dnsparams_t *a, const jdns_string_t *name, const jdns_address_t *address)
 
JDNS_EXPORT jdns_rr_tjdns_rr_new ()
 
JDNS_EXPORT jdns_rr_tjdns_rr_copy (const jdns_rr_t *r)
 
JDNS_EXPORT void jdns_rr_delete (jdns_rr_t *r)
 
JDNS_EXPORT void jdns_rr_set_owner (jdns_rr_t *r, const unsigned char *name)
 
JDNS_EXPORT void jdns_rr_set_record (jdns_rr_t *r, int type, const unsigned char *rdata, int rdlength)
 
JDNS_EXPORT void jdns_rr_set_A (jdns_rr_t *r, const jdns_address_t *address)
 
JDNS_EXPORT void jdns_rr_set_AAAA (jdns_rr_t *r, const jdns_address_t *address)
 
JDNS_EXPORT void jdns_rr_set_MX (jdns_rr_t *r, const unsigned char *name, int priority)
 
JDNS_EXPORT void jdns_rr_set_SRV (jdns_rr_t *r, const unsigned char *name, int port, int priority, int weight)
 
JDNS_EXPORT void jdns_rr_set_CNAME (jdns_rr_t *r, const unsigned char *name)
 
JDNS_EXPORT void jdns_rr_set_PTR (jdns_rr_t *r, const unsigned char *name)
 
JDNS_EXPORT void jdns_rr_set_TXT (jdns_rr_t *r, const jdns_stringlist_t *texts)
 
JDNS_EXPORT void jdns_rr_set_HINFO (jdns_rr_t *r, const jdns_string_t *cpu, const jdns_string_t *os)
 
JDNS_EXPORT void jdns_rr_set_NS (jdns_rr_t *r, const unsigned char *name)
 
JDNS_EXPORT int jdns_rr_verify (const jdns_rr_t *r)
 
JDNS_EXPORT jdns_response_tjdns_response_new ()
 
JDNS_EXPORT jdns_response_tjdns_response_copy (const jdns_response_t *r)
 
JDNS_EXPORT void jdns_response_delete (jdns_response_t *r)
 
JDNS_EXPORT void jdns_response_append_answer (jdns_response_t *r, const jdns_rr_t *rr)
 
JDNS_EXPORT void jdns_response_append_authority (jdns_response_t *r, const jdns_rr_t *rr)
 
JDNS_EXPORT void jdns_response_append_additional (jdns_response_t *r, const jdns_rr_t *rr)
 
JDNS_EXPORT void jdns_event_delete (jdns_event_t *e)
 
JDNS_EXPORT jdns_session_t * jdns_session_new (jdns_callbacks_t *callbacks)
 
JDNS_EXPORT void jdns_session_delete (jdns_session_t *s)
 
JDNS_EXPORT int jdns_init_unicast (jdns_session_t *s, const jdns_address_t *addr, int port)
 
JDNS_EXPORT int jdns_init_multicast (jdns_session_t *s, const jdns_address_t *addr, int port, const jdns_address_t *maddr)
 
JDNS_EXPORT void jdns_shutdown (jdns_session_t *s)
 
JDNS_EXPORT void jdns_set_nameservers (jdns_session_t *s, const jdns_nameserverlist_t *nslist)
 
JDNS_EXPORT void jdns_probe (jdns_session_t *s)
 
JDNS_EXPORT int jdns_query (jdns_session_t *s, const unsigned char *name, int rtype)
 
JDNS_EXPORT void jdns_cancel_query (jdns_session_t *s, int id)
 
JDNS_EXPORT int jdns_publish (jdns_session_t *s, int mode, const jdns_rr_t *rec)
 
JDNS_EXPORT void jdns_update_publish (jdns_session_t *s, int id, const jdns_rr_t *rec)
 
JDNS_EXPORT void jdns_cancel_publish (jdns_session_t *s, int id)
 
JDNS_EXPORT int jdns_step (jdns_session_t *s)
 
JDNS_EXPORT int jdns_next_timer (jdns_session_t *s)
 
JDNS_EXPORT void jdns_set_handle_readable (jdns_session_t *s, int handle)
 
JDNS_EXPORT void jdns_set_handle_writable (jdns_session_t *s, int handle)
 
JDNS_EXPORT jdns_event_tjdns_next_event (jdns_session_t *s)
 
JDNS_EXPORT jdns_dnsparams_tjdns_system_dnsparams ()
 
JDNS_EXPORT void jdns_set_hold_ids_enabled (jdns_session_t *s, int enabled)
 

Macro Definition Documentation

◆ JDNS_LIST_DECLARE

#define JDNS_LIST_DECLARE ( name)
Value:
JDNS_OBJECT \
int count; \
name##_t **item;

◆ JDNS_OBJECT

#define JDNS_OBJECT
Value:
jdns_object_dtor_func dtor; \
jdns_object_cctor_func cctor;

◆ JDNS_OBJECT_NEW

#define JDNS_OBJECT_NEW ( name)
Value:
(name##_t *)jdns_object_new(sizeof(name##_t), \
(jdns_object_dtor_func)name##_delete, \
(jdns_object_cctor_func)name##_copy);

Function Documentation

◆ jdns_address_cmp()

JDNS_EXPORT int jdns_address_cmp ( const jdns_address_t * a,
const jdns_address_t * b )
Returns
1 if the same, else 0

◆ jdns_address_set_cstr()

JDNS_EXPORT int jdns_address_set_cstr ( jdns_address_t * a,
const char * str )
Returns
1 if string was ok, else 0. Note: IPv4 addresses only!

◆ jdns_cancel_publish()

JDNS_EXPORT void jdns_cancel_publish ( jdns_session_t * s,
int id )
Parameters
ssession
idthe operation id to cancel

◆ jdns_cancel_query()

JDNS_EXPORT void jdns_cancel_query ( jdns_session_t * s,
int id )
Parameters
ssession
idthe operation id to cancel

◆ jdns_init_multicast()

JDNS_EXPORT int jdns_init_multicast ( jdns_session_t * s,
const jdns_address_t * addr,
int port,
const jdns_address_t * maddr )
Parameters
ssession
addrip address of interface to bind to. NULL for all
portport of interface to bind to. 0 for any
maddrmulticast address to associate with. Can not be NULL
Returns
1 on success, 0 on failure

◆ jdns_init_unicast()

JDNS_EXPORT int jdns_init_unicast ( jdns_session_t * s,
const jdns_address_t * addr,
int port )
Parameters
ssession
addrip address of interface to bind to. NULL for all
portport of interface to bind to. 0 for any
Returns
1 on success, 0 on failure

◆ jdns_next_event()

JDNS_EXPORT jdns_event_t * jdns_next_event ( jdns_session_t * s)
Parameters
ssession
Returns
newly allocated event, or zero if none are ready

◆ jdns_next_timer()

JDNS_EXPORT int jdns_next_timer ( jdns_session_t * s)
Parameters
ssession
Returns
milliseconds until timeout

◆ jdns_probe()

JDNS_EXPORT void jdns_probe ( jdns_session_t * s)
Parameters
ssession

◆ jdns_publish()

JDNS_EXPORT int jdns_publish ( jdns_session_t * s,
int mode,
const jdns_rr_t * rec )
Note
Supported record types: A, AAAA, SRV, CNAME, PTR, TXT, and HINFO. If the published type is not one of these, raw rdata must be set.
Parameters
ssession
modeJDNS_PUBLISH shared or unique
recthe record data
Returns
id of this operation

◆ jdns_query()

JDNS_EXPORT int jdns_query ( jdns_session_t * s,
const unsigned char * name,
int rtype )
Parameters
ssession
namethe name to look up
rtypethe record type
Returns
id of this operation

◆ jdns_session_delete()

JDNS_EXPORT void jdns_session_delete ( jdns_session_t * s)
Parameters
sessionto free

◆ jdns_session_new()

JDNS_EXPORT jdns_session_t * jdns_session_new ( jdns_callbacks_t * callbacks)
Parameters
callbacksthe struct of callbacks
Returns
newly allocated session

◆ jdns_set_handle_readable()

JDNS_EXPORT void jdns_set_handle_readable ( jdns_session_t * s,
int handle )
Parameters
ssession
handlehandle that is now readable

◆ jdns_set_handle_writable()

JDNS_EXPORT void jdns_set_handle_writable ( jdns_session_t * s,
int handle )
Parameters
ssession
handlehandle that is now writable

◆ jdns_set_hold_ids_enabled()

JDNS_EXPORT void jdns_set_hold_ids_enabled ( jdns_session_t * s,
int enabled )

Normally, when a unicast query completes or any kind of query or publish operation results in an error, the operation is automatically "canceled". When id holding is enabled, the operation still stops internally, but the id value used by that operation is "held" until the application explicitly calls jdns_cancel_query() or jdns_cancel_publish() to release it. This allows the application to ensure there is no ambiguity when determining which operation a particular event belongs to. It is disabled be default so as to not introduce memory leaks in existing applications, however new applications really should use it.

Parameters
ssession
enabledwhether to enable id holding. Default is 0 (disabled)

◆ jdns_set_nameservers()

JDNS_EXPORT void jdns_set_nameservers ( jdns_session_t * s,
const jdns_nameserverlist_t * nslist )
Parameters
ssession
nslistlist of nameservers

◆ jdns_shutdown()

JDNS_EXPORT void jdns_shutdown ( jdns_session_t * s)
Parameters
ssession

◆ jdns_step()

JDNS_EXPORT int jdns_step ( jdns_session_t * s)
Parameters
ssession
Returns
JDNS_STEP flags OR'd together

◆ jdns_system_dnsparams()

JDNS_EXPORT jdns_dnsparams_t * jdns_system_dnsparams ( )
Returns
newly allocated dnsparams from the system

◆ jdns_update_publish()

JDNS_EXPORT void jdns_update_publish ( jdns_session_t * s,
int id,
const jdns_rr_t * rec )
Note
update only works on successfully published records, and no event is generated for a successful update.
Parameters
ssession
idthe operation id to update
recthe record data