37typedef void (*jdns_object_dtor_func)(
void *);
38typedef void *(*jdns_object_cctor_func)(
const void *);
41 jdns_object_dtor_func dtor; \
42 jdns_object_cctor_func cctor;
44#define JDNS_OBJECT_NEW(name) \
45 (name##_t *)jdns_object_new(sizeof(name##_t), \
46 (jdns_object_dtor_func)name##_delete, \
47 (jdns_object_cctor_func)name##_copy);
54JDNS_EXPORT
void *jdns_object_new(
int size,
void (*dtor)(
void *),
55 void *(*cctor)(
const void *));
56JDNS_EXPORT
void *jdns_object_copy(
const void *a);
57JDNS_EXPORT
void jdns_object_delete(
void *a);
58JDNS_EXPORT
void jdns_object_free(
void *a);
60#define JDNS_LIST_DECLARE(name) \
74JDNS_EXPORT jdns_list_t *jdns_list_new();
75JDNS_EXPORT jdns_list_t *jdns_list_copy(
const jdns_list_t *a);
76JDNS_EXPORT
void jdns_list_delete(jdns_list_t *a);
77JDNS_EXPORT
void jdns_list_clear(jdns_list_t *a);
78JDNS_EXPORT
void jdns_list_insert(jdns_list_t *a,
void *item,
int pos);
79JDNS_EXPORT
void jdns_list_insert_value(jdns_list_t *a,
const void *item,
int pos);
80JDNS_EXPORT
void jdns_list_remove(jdns_list_t *a,
void *item);
81JDNS_EXPORT
void jdns_list_remove_at(jdns_list_t *a,
int pos);
90JDNS_EXPORT jdns_string_t *jdns_string_new();
91JDNS_EXPORT jdns_string_t *jdns_string_copy(
const jdns_string_t *s);
92JDNS_EXPORT
void jdns_string_delete(jdns_string_t *s);
93JDNS_EXPORT
void jdns_string_set(jdns_string_t *s,
const unsigned char *str,
95JDNS_EXPORT
void jdns_string_set_cstr(jdns_string_t *s,
const char *str);
102 jdns_string_t **item;
105JDNS_EXPORT jdns_stringlist_t *jdns_stringlist_new();
106JDNS_EXPORT jdns_stringlist_t *jdns_stringlist_copy(
const jdns_stringlist_t *a);
107JDNS_EXPORT
void jdns_stringlist_delete(jdns_stringlist_t *a);
108JDNS_EXPORT
void jdns_stringlist_append(jdns_stringlist_t *a,
const jdns_string_t *str);
115 unsigned long int v4;
121JDNS_EXPORT jdns_address_t *jdns_address_new();
122JDNS_EXPORT jdns_address_t *jdns_address_copy(
const jdns_address_t *a);
123JDNS_EXPORT
void jdns_address_delete(jdns_address_t *a);
124JDNS_EXPORT
void jdns_address_set_ipv4(jdns_address_t *a,
unsigned long int ipv4);
125JDNS_EXPORT
void jdns_address_set_ipv6(jdns_address_t *a,
const unsigned char *ipv6);
138#define JDNS_UNICAST_PORT 53
139#define JDNS_MULTICAST_PORT 5353
140JDNS_EXPORT jdns_address_t *jdns_address_multicast4_new();
141JDNS_EXPORT jdns_address_t *jdns_address_multicast6_new();
158JDNS_EXPORT jdns_server_t *jdns_server_new();
159JDNS_EXPORT jdns_server_t *jdns_server_copy(
const jdns_server_t *s);
160JDNS_EXPORT
void jdns_server_delete(jdns_server_t *s);
161JDNS_EXPORT
void jdns_server_set_name(jdns_server_t *s,
const unsigned char *name);
165 jdns_address_t *address;
169JDNS_EXPORT jdns_nameserver_t *jdns_nameserver_new();
170JDNS_EXPORT jdns_nameserver_t *jdns_nameserver_copy(
const jdns_nameserver_t *a);
171JDNS_EXPORT
void jdns_nameserver_delete(jdns_nameserver_t *a);
172JDNS_EXPORT
void jdns_nameserver_set(jdns_nameserver_t *a,
const jdns_address_t *addr,
178 jdns_nameserver_t **item;
179} jdns_nameserverlist_t;
181JDNS_EXPORT jdns_nameserverlist_t *jdns_nameserverlist_new();
182JDNS_EXPORT jdns_nameserverlist_t *jdns_nameserverlist_copy(
const jdns_nameserverlist_t *a);
183JDNS_EXPORT
void jdns_nameserverlist_delete(jdns_nameserverlist_t *a);
184JDNS_EXPORT
void jdns_nameserverlist_append(jdns_nameserverlist_t *a,
185 const jdns_address_t *addr,
int port);
190 jdns_address_t *address;
196 jdns_dnshost_t **item;
201 jdns_nameserverlist_t *nameservers;
202 jdns_stringlist_t *domains;
203 jdns_dnshostlist_t *hosts;
206JDNS_EXPORT jdns_dnsparams_t *jdns_dnsparams_new();
207JDNS_EXPORT jdns_dnsparams_t *jdns_dnsparams_copy(jdns_dnsparams_t *a);
208JDNS_EXPORT
void jdns_dnsparams_delete(jdns_dnsparams_t *a);
209JDNS_EXPORT
void jdns_dnsparams_append_nameserver(jdns_dnsparams_t *a,
210 const jdns_address_t *addr,
int port);
211JDNS_EXPORT
void jdns_dnsparams_append_domain(jdns_dnsparams_t *a,
212 const jdns_string_t *domain);
213JDNS_EXPORT
void jdns_dnsparams_append_host(jdns_dnsparams_t *a,
214 const jdns_string_t *name,
const jdns_address_t *address);
216#define JDNS_RTYPE_A 1
217#define JDNS_RTYPE_AAAA 28
218#define JDNS_RTYPE_MX 15
219#define JDNS_RTYPE_SRV 33
220#define JDNS_RTYPE_CNAME 5
221#define JDNS_RTYPE_PTR 12
222#define JDNS_RTYPE_TXT 16
223#define JDNS_RTYPE_HINFO 13
224#define JDNS_RTYPE_NS 2
225#define JDNS_RTYPE_ANY 255
229 unsigned char *owner;
234 unsigned char *rdata;
251JDNS_EXPORT jdns_rr_t *jdns_rr_new();
252JDNS_EXPORT jdns_rr_t *jdns_rr_copy(
const jdns_rr_t *r);
253JDNS_EXPORT
void jdns_rr_delete(jdns_rr_t *r);
254JDNS_EXPORT
void jdns_rr_set_owner(jdns_rr_t *r,
const unsigned char *name);
255JDNS_EXPORT
void jdns_rr_set_record(jdns_rr_t *r,
int type,
const unsigned char *rdata,
257JDNS_EXPORT
void jdns_rr_set_A(jdns_rr_t *r,
const jdns_address_t *address);
258JDNS_EXPORT
void jdns_rr_set_AAAA(jdns_rr_t *r,
const jdns_address_t *address);
259JDNS_EXPORT
void jdns_rr_set_MX(jdns_rr_t *r,
const unsigned char *name,
int priority);
260JDNS_EXPORT
void jdns_rr_set_SRV(jdns_rr_t *r,
const unsigned char *name,
int port,
261 int priority,
int weight);
262JDNS_EXPORT
void jdns_rr_set_CNAME(jdns_rr_t *r,
const unsigned char *name);
263JDNS_EXPORT
void jdns_rr_set_PTR(jdns_rr_t *r,
const unsigned char *name);
264JDNS_EXPORT
void jdns_rr_set_TXT(jdns_rr_t *r,
const jdns_stringlist_t *texts);
265JDNS_EXPORT
void jdns_rr_set_HINFO(jdns_rr_t *r,
const jdns_string_t *cpu,
266 const jdns_string_t *os);
267JDNS_EXPORT
void jdns_rr_set_NS(jdns_rr_t *r,
const unsigned char *name);
269JDNS_EXPORT
int jdns_rr_verify(
const jdns_rr_t *r);
274 jdns_rr_t **answerRecords;
276 jdns_rr_t **authorityRecords;
278 jdns_rr_t **additionalRecords;
281JDNS_EXPORT jdns_response_t *jdns_response_new();
282JDNS_EXPORT jdns_response_t *jdns_response_copy(
const jdns_response_t *r);
283JDNS_EXPORT
void jdns_response_delete(jdns_response_t *r);
284JDNS_EXPORT
void jdns_response_append_answer(jdns_response_t *r,
const jdns_rr_t *rr);
285JDNS_EXPORT
void jdns_response_append_authority(jdns_response_t *r,
const jdns_rr_t *rr);
286JDNS_EXPORT
void jdns_response_append_additional(jdns_response_t *r,
287 const jdns_rr_t *rr);
289#define JDNS_PUBLISH_SHARED 0x0001
290#define JDNS_PUBLISH_UNIQUE 0x0002
292#define JDNS_STEP_TIMER 0x0001
293#define JDNS_STEP_HANDLE 0x0002
295#define JDNS_EVENT_RESPONSE 0x0001
296#define JDNS_EVENT_PUBLISH 0x0002
297#define JDNS_EVENT_SHUTDOWN 0x0003
299#define JDNS_STATUS_SUCCESS 0x0001
300#define JDNS_STATUS_NXDOMAIN 0x0002
301#define JDNS_STATUS_ERROR 0x0003
302#define JDNS_STATUS_TIMEOUT 0x0004
303#define JDNS_STATUS_CONFLICT 0x0005
305typedef struct jdns_session jdns_session_t;
349 const jdns_address_t *addr,
int port,
350 const jdns_address_t *maddr);
370 jdns_address_t *addr,
int *port,
unsigned char *buf,
384 const jdns_address_t *addr,
int port,
unsigned char *buf,
412JDNS_EXPORT
void jdns_event_delete(jdns_event_t *e);
440JDNS_EXPORT
int jdns_init_multicast(jdns_session_t *s,
const jdns_address_t *addr,
int port,
const jdns_address_t *maddr);
464JDNS_EXPORT
int jdns_query(jdns_session_t *s,
const unsigned char *name,
int rtype);
481JDNS_EXPORT
int jdns_publish(jdns_session_t *s,
int mode,
const jdns_rr_t *rec);
JDNS_EXPORT int jdns_address_cmp(const jdns_address_t *a, const jdns_address_t *b)
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 jdns_event_t * jdns_next_event(jdns_session_t *s)
JDNS_EXPORT int jdns_next_timer(jdns_session_t *s)
JDNS_EXPORT void jdns_set_hold_ids_enabled(jdns_session_t *s, int enabled)
JDNS_EXPORT void jdns_set_nameservers(jdns_session_t *s, const jdns_nameserverlist_t *nslist)
JDNS_EXPORT int jdns_query(jdns_session_t *s, const unsigned char *name, int rtype)
JDNS_EXPORT void jdns_set_handle_writable(jdns_session_t *s, int handle)
JDNS_EXPORT void jdns_probe(jdns_session_t *s)
JDNS_EXPORT void jdns_update_publish(jdns_session_t *s, int id, const jdns_rr_t *rec)
JDNS_EXPORT jdns_dnsparams_t * jdns_system_dnsparams()
JDNS_EXPORT int jdns_init_unicast(jdns_session_t *s, const jdns_address_t *addr, int port)
JDNS_EXPORT jdns_session_t * jdns_session_new(jdns_callbacks_t *callbacks)
JDNS_EXPORT void jdns_set_handle_readable(jdns_session_t *s, int handle)
JDNS_EXPORT void jdns_cancel_publish(jdns_session_t *s, int id)
JDNS_EXPORT void jdns_session_delete(jdns_session_t *s)
JDNS_EXPORT int jdns_init_multicast(jdns_session_t *s, const jdns_address_t *addr, int port, const jdns_address_t *maddr)
JDNS_EXPORT int jdns_address_set_cstr(jdns_address_t *a, const char *str)
JDNS_EXPORT int jdns_step(jdns_session_t *s)
JDNS_EXPORT void jdns_shutdown(jdns_session_t *s)
Preprocessor magic to allow export of library symbols.
int(* rand_int)(jdns_session_t *s, void *app)
Definition jdns.h:326
void(* debug_line)(jdns_session_t *s, void *app, const char *str)
Definition jdns.h:333
void(* udp_unbind)(jdns_session_t *s, void *app, int handle)
Definition jdns.h:357
int(* udp_write)(jdns_session_t *s, void *app, int handle, const jdns_address_t *addr, int port, unsigned char *buf, int bufsize)
Definition jdns.h:383
int(* time_now)(jdns_session_t *s, void *app)
Definition jdns.h:319
int(* udp_read)(jdns_session_t *s, void *app, int handle, jdns_address_t *addr, int *port, unsigned char *buf, int *bufsize)
Definition jdns.h:369
int(* udp_bind)(jdns_session_t *s, void *app, const jdns_address_t *addr, int port, const jdns_address_t *maddr)
Definition jdns.h:348
void * app
user-supplied context
Definition jdns.h:312
int id
query id or publish id
Definition jdns.h:398
int type
JDNS_EVENT.
Definition jdns.h:393
int status
for query, this can be SUCCESS, NXDOMAIN, ERROR, or TIMEOUT for publish, this can be SUCCESS,...
Definition jdns.h:404
jdns_response_t * response
for query
Definition jdns.h:409
jdns_server_t * server
for MX, SRV
Definition jdns.h:240
jdns_stringlist_t * texts
for TXT
Definition jdns.h:242
jdns_address_t * address
for A, AAAA
Definition jdns.h:239
unsigned char * name
for CNAME, PTR, NS
Definition jdns.h:241
int port
SRV only.
Definition jdns.h:149
int weight
SRV only.
Definition jdns.h:155