[Telepathy-commits] [telepathy-salut/master] SalutAvahiRoomlistManager: add _find_muc_address
Alban Crequy
alban.crequy at collabora.co.uk
Thu Nov 27 10:07:57 PST 2008
---
src/salut-avahi-roomlist-manager.c | 51 ++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/src/salut-avahi-roomlist-manager.c b/src/salut-avahi-roomlist-manager.c
index b21aeda..0fba2ec 100644
--- a/src/salut-avahi-roomlist-manager.c
+++ b/src/salut-avahi-roomlist-manager.c
@@ -278,6 +278,55 @@ salut_avahi_roomlist_manager_start (SalutRoomlistManager *mgr,
return TRUE;
}
+static gchar *
+_avahi_address_to_string_address (const AvahiAddress *address)
+{
+ gchar str[AVAHI_ADDRESS_STR_MAX];
+
+ if (avahi_address_snprint (str, sizeof (str), address) == NULL)
+ {
+ DEBUG ("Failed to convert AvahiAddress to string");
+ return NULL;
+ }
+ return g_strdup (str);
+}
+
+static gboolean
+salut_avahi_roomlist_manager_find_muc_address (SalutRoomlistManager *mgr,
+ const gchar *name,
+ gchar **address,
+ guint16 *port)
+{
+ SalutAvahiRoomlistManager *self = SALUT_AVAHI_ROOMLIST_MANAGER (mgr);
+ SalutAvahiRoomlistManagerPrivate *priv = SALUT_AVAHI_ROOMLIST_MANAGER_GET_PRIVATE (self);
+ GArray *arr;
+ AvahiAddress avahi_address;
+ guint i;
+
+ arr = g_hash_table_lookup (priv->room_resolvers, name);
+ if (arr == NULL || arr->len == 0)
+ return FALSE;
+
+ for (i = 0; i < arr->len; i++)
+ {
+ GaServiceResolver *resolver;
+ resolver = g_array_index (arr, GaServiceResolver *, i);
+
+ if (!ga_service_resolver_get_address (resolver, &avahi_address, port))
+ {
+ DEBUG ("..._get_address failed: creating a new MUC room instead");
+ return FALSE;
+ }
+ else
+ {
+ *address = _avahi_address_to_string_address (&avahi_address);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
static void
add_room_to_list (const gchar *room,
GaServiceResolver *resolver,
@@ -317,6 +366,8 @@ salut_avahi_roomlist_manager_class_init (
object_class->dispose = salut_avahi_roomlist_manager_dispose;
roomlist_manager_class->start = salut_avahi_roomlist_manager_start;
+ roomlist_manager_class->find_muc_address =
+ salut_avahi_roomlist_manager_find_muc_address;
roomlist_manager_class->get_rooms = salut_avahi_roomlist_manager_get_rooms;
param_spec = g_param_spec_object (
--
1.5.6.5
More information about the Telepathy-commits
mailing list