summaryrefslogtreecommitdiffstats
path: root/avahi-client
diff options
context:
space:
mode:
authorTrent Lloyd <lathiat@bur.st>2005-10-17 20:07:43 +0000
committerTrent Lloyd <lathiat@bur.st>2005-10-17 20:07:43 +0000
commit3adbda2cd5be48b7c630325f0f92e315d7eb2cfb (patch)
treefa98de69267ed3e7f1a3e915b2632afebe8ddb38 /avahi-client
parentc1c236e751d126f3aeffe3ccf5da889dbf853b2f (diff)
* Add custom user-specific configure flags to bootstrap.sh
* Add new constant AVAHI_ADDRESS_STR_MAX for use with avahi_address_snprint arr ays * Update all our code to use AVAHI_ADDRESS_STR_MAX * Add avahi_client_add_address to avahi-client * Add avahi_client_add_address test to avahi-client git-svn-id: file:///home/lennart/svn/public/avahi/trunk@800 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-client')
-rw-r--r--avahi-client/client-test.c24
-rw-r--r--avahi-client/entrygroup.c86
-rw-r--r--avahi-client/publish.h9
-rw-r--r--avahi-client/resolver.c2
4 files changed, 119 insertions, 2 deletions
diff --git a/avahi-client/client-test.c b/avahi-client/client-test.c
index 14b9e84..076fb3b 100644
--- a/avahi-client/client-test.c
+++ b/avahi-client/client-test.c
@@ -45,6 +45,11 @@ static void avahi_entry_group_callback (AvahiEntryGroup *g, AvahiEntryGroupState
printf ("ENTRY-GROUP: Callback on %p, state -> %d, data -> %s\n", (void*) g, state, (char*)userdata);
}
+static void avahi_entry_group2_callback (AvahiEntryGroup *g, AvahiEntryGroupState state, void *userdata) {
+ printf ("ENTRY-GROUP2: Callback on %p, state -> %d, data -> %s\n", (void*) g, state, (char*)userdata);
+}
+
+
static void avahi_domain_browser_callback(
AvahiDomainBrowser *b,
AvahiIfIndex interface,
@@ -209,11 +214,12 @@ static void terminate(AvahiTimeout *timeout, void *userdata) {
int main (int argc, char *argv[]) {
AvahiClient *avahi;
- AvahiEntryGroup *group;
+ AvahiEntryGroup *group, *group2;
AvahiDomainBrowser *domain;
AvahiServiceBrowser *sb;
AvahiServiceTypeBrowser *st;
AvahiHostNameResolver *hnr;
+ AvahiAddress *aar;
const char *ret;
int error;
uint32_t cookie;
@@ -280,6 +286,22 @@ int main (int argc, char *argv[]) {
else
printf ("Successfully created hostname resolver object\n");
+ aar = avahi_address_parse ("224.0.0.251", AF_UNSPEC, aar);
+ if (aar == NULL) {
+ printf ("failed to create address object\n");
+ } else {
+ group2 = avahi_entry_group_new (avahi, avahi_entry_group2_callback, "omghai222");
+ if ((error = avahi_entry_group_add_address (group2, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "test-mdns.local.", aar)) < 0)
+ {
+ printf ("*** failed to add address to entry group: %s\n", avahi_strerror (ret));
+ avahi_entry_group_free (group2);
+ } else {
+ printf ("*** success, added address\n");
+ avahi_entry_group_commit (group2);
+ }
+
+ }
+
avahi_elapse_time(&tv, 8000, 0);
poll_api->timeout_new(poll_api, &tv, test_entry_group_reset, group);
diff --git a/avahi-client/entrygroup.c b/avahi-client/entrygroup.c
index 2d882e6..0b7d217 100644
--- a/avahi-client/entrygroup.c
+++ b/avahi-client/entrygroup.c
@@ -728,3 +728,89 @@ fail:
}
+/** Add a host/address pair */
+int avahi_entry_group_add_address(
+ AvahiEntryGroup *group,
+ AvahiIfIndex interface,
+ AvahiProtocol protocol,
+ AvahiPublishFlags flags,
+ const char *name,
+ const AvahiAddress *a) {
+
+ DBusMessage *message = NULL, *reply = NULL;
+ int r = AVAHI_OK;
+ DBusError error;
+ AvahiClient *client;
+ int32_t i_interface, i_protocol;
+ uint32_t u_flags;
+ char s_address[AVAHI_ADDRESS_STR_MAX];
+ char *p_address = s_address;
+
+ assert(name);
+
+ client = group->client;
+
+ if (!group->path || group->client->state == AVAHI_CLIENT_DISCONNECTED)
+ return avahi_client_set_errno(group->client, AVAHI_ERR_BAD_STATE);
+
+ dbus_error_init(&error);
+
+ if (!(message = dbus_message_new_method_call (AVAHI_DBUS_NAME, group->path, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "AddAddress"))) {
+ r = avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY);
+ goto fail;
+ }
+
+ i_interface = (int32_t) interface;
+ i_protocol = (int32_t) protocol;
+ u_flags = (uint32_t) flags;
+
+ if (!avahi_address_snprint (s_address, sizeof (s_address), a))
+ {
+ r = avahi_client_set_errno(client, AVAHI_ERR_INVALID_ADDRESS);
+ goto fail;
+ }
+
+ if (!dbus_message_append_args(
+ message,
+ DBUS_TYPE_INT32, &i_interface,
+ DBUS_TYPE_INT32, &i_protocol,
+ DBUS_TYPE_UINT32, &u_flags,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_STRING, &p_address,
+ DBUS_TYPE_INVALID)) {
+ r = avahi_client_set_errno(group->client, AVAHI_ERR_NO_MEMORY);
+ goto fail;
+ }
+
+ if (!(reply = dbus_connection_send_with_reply_and_block(client->bus, message, -1, &error)) ||
+ dbus_error_is_set (&error)) {
+ r = avahi_client_set_errno(client, AVAHI_ERR_DBUS_ERROR);
+ goto fail;
+ }
+
+ if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INVALID) ||
+ dbus_error_is_set (&error)) {
+ r = avahi_client_set_errno(client, AVAHI_ERR_DBUS_ERROR);
+ goto fail;
+ }
+
+ dbus_message_unref(message);
+ dbus_message_unref(reply);
+
+ return AVAHI_OK;
+
+fail:
+
+ if (dbus_error_is_set(&error)) {
+ r = avahi_client_set_dbus_error(client, &error);
+ dbus_error_free(&error);
+ }
+
+ if (message)
+ dbus_message_unref(message);
+
+ if (reply)
+ dbus_message_unref(reply);
+
+ return r;
+}
diff --git a/avahi-client/publish.h b/avahi-client/publish.h
index 7c678a9..cdce887 100644
--- a/avahi-client/publish.h
+++ b/avahi-client/publish.h
@@ -153,6 +153,15 @@ int avahi_entry_group_update_service_txt_va(
const char *domain,
va_list va);
+/** Add a host/address pair */
+int avahi_entry_group_add_address(
+ AvahiEntryGroup *group,
+ AvahiIfIndex interface,
+ AvahiProtocol protocol,
+ AvahiPublishFlags flags,
+ const char *name,
+ const AvahiAddress *a);
+
#ifndef DOXYGEN_SHOULD_SKIP_THIS
AVAHI_C_DECL_END
#endif
diff --git a/avahi-client/resolver.c b/avahi-client/resolver.c
index 37965ce..14d6aca 100644
--- a/avahi-client/resolver.c
+++ b/avahi-client/resolver.c
@@ -618,7 +618,7 @@ AvahiAddressResolver * avahi_address_resolver_new_a(
AvahiAddressResolverCallback callback,
void *userdata) {
- char addr[64];
+ char addr[AVAHI_ADDRESS_STR_MAX];
assert (a);