summaryrefslogtreecommitdiff
path: root/meego/meego-im-connector.c
diff options
context:
space:
mode:
Diffstat (limited to 'meego/meego-im-connector.c')
-rw-r--r--meego/meego-im-connector.c62
1 files changed, 60 insertions, 2 deletions
diff --git a/meego/meego-im-connector.c b/meego/meego-im-connector.c
index d316235..c1ca0de 100644
--- a/meego/meego-im-connector.c
+++ b/meego/meego-im-connector.c
@@ -18,8 +18,18 @@
#include <glib.h>
+#define DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
+#define DBUS_PROPERTIES_GET_METHOD "Get"
+
#define MEEGO_IM_SOCKET_PATH "unix:path=/tmp/meego-im-uiserver/imserver_dbus"
+#define MALIIT_SERVER_ADDRESS_ENV "MALIIT_SERVER_ADDRESS"
+
+#define MALIIT_SERVER_NAME "org.maliit.server"
+#define MALIIT_SERVER_OBJECT_PATH "/org/maliit/server/address"
+#define MALIIT_SERVER_INTERFACE "org.maliit.Server.Address"
+#define MALIIT_SERVER_ADDRESS_PROPERTY "address"
+
MeegoImConnector *meego_im_connector_new();
static gboolean
@@ -39,6 +49,51 @@ connection_dropped(gpointer instance, MeegoImConnector *connector)
try_reconnect(connector);
}
+static char *
+get_dbus_address()
+{
+ const char *overridden_address = g_getenv(MALIIT_SERVER_ADDRESS_ENV);
+
+ if (overridden_address && *overridden_address) {
+ return g_strdup(overridden_address);
+ }
+
+ GValue value = { 0 };
+ GError *error = NULL;
+ DBusGConnection *connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
+
+ if (!connection) {
+ g_warning("%s: %s", __PRETTY_FUNCTION__, error->message);
+ g_error_free(error);
+ return NULL;
+ }
+
+ DBusGProxy *proxy = dbus_g_proxy_new_for_name(connection,
+ MALIIT_SERVER_NAME,
+ MALIIT_SERVER_OBJECT_PATH,
+ DBUS_PROPERTIES_INTERFACE);
+
+ if (!dbus_g_proxy_call(proxy,
+ DBUS_PROPERTIES_GET_METHOD,
+ &error,
+ G_TYPE_STRING, MALIIT_SERVER_INTERFACE,
+ G_TYPE_STRING, MALIIT_SERVER_ADDRESS_PROPERTY,
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
+
+ g_warning("%s: %s", __PRETTY_FUNCTION__, error->message);
+ g_error_free(error);
+ // Let's try PR1.2 address if PR1.3/Maliit was not found.
+ return g_strdup(MEEGO_IM_SOCKET_PATH);
+ }
+
+ gchar *result = g_value_dup_string(&value);
+ g_value_unset(&value);
+ g_object_unref(proxy);
+
+ return result;
+}
+
/**
* MeegoImConnector:
@@ -91,12 +146,15 @@ meego_im_connector_run(MeegoImConnector *self)
{
GError *error = NULL;
DBusGConnection *connection = NULL;
+ gchar *address = get_dbus_address();
g_return_if_fail(self != NULL);
- connection = dbus_g_connection_open(MEEGO_IM_SOCKET_PATH, &error);
+ connection = dbus_g_connection_open(address, &error);
+
+ g_free(address);
- if (error != NULL) {
+ if (!connection) {
g_warning("Couldn't connect to Maliit server. Retrying...");
g_error_free(error);