1/*
2 * ga-entry-group.h - Header for GaEntryGroup
3 * Copyright (C) 2006-2007 Collabora Ltd.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18 */
19
20#ifndef __GA_ENTRY_GROUP_H__
21#define __GA_ENTRY_GROUP_H__
22
23#include <glib-object.h>
24#include <avahi-client/publish.h>
25#include <avahi-client/client.h>
26
27#include "ga-client.h"
28
29G_BEGIN_DECLS
30
31typedef enum {
32    GA_ENTRY_GROUP_STATE_UNCOMMITED = AVAHI_ENTRY_GROUP_UNCOMMITED,
33    GA_ENTRY_GROUP_STATE_REGISTERING = AVAHI_ENTRY_GROUP_REGISTERING,
34    GA_ENTRY_GROUP_STATE_ESTABLISHED = AVAHI_ENTRY_GROUP_ESTABLISHED,
35    GA_ENTRY_GROUP_STATE_COLLISTION = AVAHI_ENTRY_GROUP_COLLISION,
36    GA_ENTRY_GROUP_STATE_FAILURE = AVAHI_ENTRY_GROUP_FAILURE
37} GaEntryGroupState;
38
39typedef struct _GaEntryGroupService GaEntryGroupService;
40typedef struct _GaEntryGroup GaEntryGroup;
41typedef struct _GaEntryGroupClass GaEntryGroupClass;
42
43struct _GaEntryGroupService {
44    AvahiIfIndex interface;
45    AvahiProtocol protocol;
46    AvahiPublishFlags flags;
47    gchar *name;
48    gchar *type;
49    gchar *domain;
50    gchar *host;
51    guint16 port;
52};
53
54struct _GaEntryGroupClass {
55    GObjectClass parent_class;
56};
57
58struct _GaEntryGroup {
59    GObject parent;
60};
61
62GType ga_entry_group_get_type(void);
63
64/* TYPE MACROS */
65#define GA_TYPE_ENTRY_GROUP \
66  (ga_entry_group_get_type())
67#define GA_ENTRY_GROUP(obj) \
68  (G_TYPE_CHECK_INSTANCE_CAST((obj), GA_TYPE_ENTRY_GROUP, GaEntryGroup))
69#define GA_ENTRY_GROUP_CLASS(klass) \
70  (G_TYPE_CHECK_CLASS_CAST((klass), GA_TYPE_ENTRY_GROUP, GaEntryGroupClass))
71#define IS_GA_ENTRY_GROUP(obj) \
72  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GA_TYPE_ENTRY_GROUP))
73#define IS_GA_ENTRY_GROUP_CLASS(klass) \
74  (G_TYPE_CHECK_CLASS_TYPE((klass), GA_TYPE_ENTRY_GROUP))
75#define GA_ENTRY_GROUP_GET_CLASS(obj) \
76  (G_TYPE_INSTANCE_GET_CLASS ((obj), GA_TYPE_ENTRY_GROUP, GaEntryGroupClass))
77
78GaEntryGroup *ga_entry_group_new(void);
79
80gboolean ga_entry_group_attach(GaEntryGroup * group,
81                      GaClient * client, GError ** error);
82
83GaEntryGroupService *ga_entry_group_add_service_strlist(GaEntryGroup * group,
84                                                        const gchar * name,
85                                                        const gchar * type,
86                                                        guint16 port,
87                                                        GError ** error,
88                                                        AvahiStringList *
89                                                        txt);
90
91GaEntryGroupService *ga_entry_group_add_service_full_strlist(GaEntryGroup *
92                                                             group,
93                                                             AvahiIfIndex
94                                                             interface,
95                                                             AvahiProtocol
96                                                             protocol,
97                                                             AvahiPublishFlags
98                                                             flags,
99                                                             const gchar *
100                                                             name,
101                                                             const gchar *
102                                                             type,
103                                                             const gchar *
104                                                             domain,
105                                                             const gchar *
106                                                             host,
107                                                             guint16 port,
108                                                             GError ** error,
109                                                             AvahiStringList *
110                                                             txt);
111GaEntryGroupService *ga_entry_group_add_service(GaEntryGroup * group,
112                                                const gchar * name,
113                                                const gchar * type,
114                                                guint16 port, GError ** error,
115                                                ...);
116
117GaEntryGroupService *ga_entry_group_add_service_full(GaEntryGroup * group,
118                                                     AvahiIfIndex interface,
119                                                     AvahiProtocol protocol,
120                                                     AvahiPublishFlags flags,
121                                                     const gchar * name,
122                                                     const gchar * type,
123                                                     const gchar * domain,
124                                                     const gchar * host,
125                                                     guint16 port,
126                                                     GError ** error, ...);
127
128/* Add raw record */
129gboolean ga_entry_group_add_record(GaEntryGroup * group,
130                          AvahiPublishFlags flags,
131                          const gchar * name,
132                          guint16 type,
133                          guint32 ttl,
134                          const void *rdata, gsize size, GError ** error);
135gboolean ga_entry_group_add_record_full(GaEntryGroup * group,
136                               AvahiIfIndex interface,
137                               AvahiProtocol protocol,
138                               AvahiPublishFlags flags,
139                               const gchar * name,
140                               guint16 clazz,
141                               guint16 type,
142                               guint32 ttl,
143                               const void *rdata,
144                               gsize size, GError ** error);
145
146
147
148void ga_entry_group_service_freeze(GaEntryGroupService * service);
149
150/* Set a key in the service record. If the service isn't frozen it's committed
151 * immediately */
152gboolean ga_entry_group_service_set(GaEntryGroupService * service,
153                           const gchar * key, const gchar * value,
154                           GError ** error);
155
156gboolean ga_entry_group_service_set_arbitrary(GaEntryGroupService * service,
157                                     const gchar * key, const guint8 * value,
158                                     gsize size, GError ** error);
159
160/* Remove one key from the service record */
161gboolean ga_entry_group_service_remove_key(GaEntryGroupService * service,
162                                  const gchar * key, GError ** error);
163
164/* Update the txt record of the frozen service */
165gboolean ga_entry_group_service_thaw(GaEntryGroupService * service, GError ** error);
166
167/* Commit all newly added services */
168gboolean ga_entry_group_commit(GaEntryGroup * group, GError ** error);
169
170/* Invalidated all GaEntryGroupServices */
171gboolean ga_entry_group_reset(GaEntryGroup * group, GError ** error);
172
173G_END_DECLS
174#endif /* #ifndef __GA_ENTRY_GROUP_H__ */
175