]> git.meshlink.io Git - catta/blob - rr.h
Rename flx_* to avahi_*
[catta] / rr.h
1 #ifndef foorrhfoo
2 #define foorrhfoo
3
4 #include <glib.h>
5
6 #include "strlst.h"
7 #include "address.h"
8
9 enum {
10     AVAHI_DNS_TYPE_A = 0x01,
11     AVAHI_DNS_TYPE_NS = 0x02,
12     AVAHI_DNS_TYPE_CNAME = 0x05,
13     AVAHI_DNS_TYPE_SOA = 0x06,
14     AVAHI_DNS_TYPE_PTR = 0x0C,
15     AVAHI_DNS_TYPE_HINFO = 0x0D,
16     AVAHI_DNS_TYPE_MX = 0x0F,
17     AVAHI_DNS_TYPE_TXT = 0x10,
18     AVAHI_DNS_TYPE_AAAA = 0x1C,
19     AVAHI_DNS_TYPE_SRV = 0x21,
20     AVAHI_DNS_TYPE_ANY = 0xFF
21 };
22
23 enum {
24     AVAHI_DNS_CLASS_IN = 0x01,
25     AVAHI_DNS_CACHE_FLUSH = 0x8000,
26     AVAHI_DNS_UNICAST_RESPONSE = 0x8000
27 };
28
29 #define AVAHI_DEFAULT_TTL (120*60)
30
31 typedef struct {
32     guint ref;
33     gchar *name;
34     guint16 class;
35     guint16 type;
36 } AvahiKey;
37
38 typedef struct  {
39     guint ref;
40     AvahiKey *key;
41     
42     guint32 ttl;
43
44     union {
45         struct {
46             gpointer data;
47             guint16 size;
48         } generic;
49
50         struct {
51             guint16 priority;
52             guint16 weight;
53             guint16 port;
54             gchar *name;
55         } srv;
56
57         struct {
58             gchar *name;
59         } ptr; /* and cname */
60
61         struct {
62             gchar *cpu;
63             gchar *os;
64         } hinfo;
65
66         struct {
67             AvahiStringList *string_list;
68         } txt;
69
70         struct {
71             AvahiIPv4Address address;
72         } a;
73
74         struct {
75             AvahiIPv6Address address;
76         } aaaa;
77
78     } data;
79     
80 } AvahiRecord;
81
82 AvahiKey *avahi_key_new(const gchar *name, guint16 class, guint16 type);
83 AvahiKey *avahi_key_ref(AvahiKey *k);
84 void avahi_key_unref(AvahiKey *k);
85
86 gboolean avahi_key_equal(const AvahiKey *a, const AvahiKey *b);  /* Treat AVAHI_DNS_CLASS_ANY like any other type */
87 gboolean avahi_key_pattern_match(const AvahiKey *pattern, const AvahiKey *k); /* If pattern.type is AVAHI_DNS_CLASS_ANY, k.type is ignored */
88
89 gboolean avahi_key_is_pattern(const AvahiKey *k);
90
91 guint avahi_key_hash(const AvahiKey *k);
92
93 AvahiRecord *avahi_record_new(AvahiKey *k);
94 AvahiRecord *avahi_record_new_full(const gchar *name, guint16 class, guint16 type);
95 AvahiRecord *avahi_record_ref(AvahiRecord *r);
96 void avahi_record_unref(AvahiRecord *r);
97
98 const gchar *avahi_dns_class_to_string(guint16 class);
99 const gchar *avahi_dns_type_to_string(guint16 type);
100
101 gchar *avahi_key_to_string(const AvahiKey *k); /* g_free() the result! */
102 gchar *avahi_record_to_string(const AvahiRecord *r);  /* g_free() the result! */
103
104 gboolean avahi_record_equal_no_ttl(const AvahiRecord *a, const AvahiRecord *b);
105
106 AvahiRecord *avahi_record_copy(AvahiRecord *r);
107
108 /* returns a maximum estimate for the space that is needed to store
109  * this key in a DNS packet */
110 guint avahi_key_get_estimate_size(AvahiKey *k);
111
112 /* ditto */
113 guint avahi_record_get_estimate_size(AvahiRecord *r);
114
115 gint avahi_record_lexicographical_compare(AvahiRecord *a, AvahiRecord *b);
116
117 #endif