Maemo: Register with libosso and init Glib main loop.
This commit is contained in:
parent
2bce814190
commit
8464e25a0f
|
@ -626,6 +626,9 @@ if test x$android = xtrue; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x$maemo = xtrue; then
|
if test x$maemo = xtrue; then
|
||||||
|
PKG_CHECK_MODULES(maemo, [glib-2.0 gthread-2.0 libosso osso-af-settings])
|
||||||
|
AC_SUBST(maemo_CFLAGS)
|
||||||
|
AC_SUBST(maemo_LIBS)
|
||||||
dbusservicedir="/usr/share/dbus-1/system-services"
|
dbusservicedir="/usr/share/dbus-1/system-services"
|
||||||
AC_SUBST(dbusservicedir)
|
AC_SUBST(dbusservicedir)
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -14,6 +14,7 @@ libstrongswan_maemo_la_SOURCES = \
|
||||||
maemo_plugin.h maemo_plugin.c
|
maemo_plugin.h maemo_plugin.c
|
||||||
|
|
||||||
libstrongswan_maemo_la_LDFLAGS = -module -avoid-version
|
libstrongswan_maemo_la_LDFLAGS = -module -avoid-version
|
||||||
|
libstrongswan_maemo_la_LIBADD = ${maemo_LIBS}
|
||||||
|
|
||||||
dbusservice_DATA = org.strongswan.charon.service
|
dbusservice_DATA = org.strongswan.charon.service
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,18 @@
|
||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <libosso.h>
|
||||||
|
|
||||||
#include "maemo_plugin.h"
|
#include "maemo_plugin.h"
|
||||||
|
|
||||||
#include <daemon.h>
|
#include <daemon.h>
|
||||||
|
#include <processing/jobs/callback_job.h>
|
||||||
|
|
||||||
|
#define OSSO_CHARON_NAME "charon"
|
||||||
|
#define OSSO_CHARON_SERVICE "org.strongswan."OSSO_CHARON_NAME
|
||||||
|
#define OSSO_CHARON_OBJECT "/org/strongswan/"OSSO_CHARON_NAME
|
||||||
|
#define OSSO_CHARON_IFACE "org.strongswan."OSSO_CHARON_NAME
|
||||||
|
|
||||||
typedef struct private_maemo_plugin_t private_maemo_plugin_t;
|
typedef struct private_maemo_plugin_t private_maemo_plugin_t;
|
||||||
|
|
||||||
|
@ -29,11 +38,53 @@ struct private_maemo_plugin_t {
|
||||||
*/
|
*/
|
||||||
maemo_plugin_t public;
|
maemo_plugin_t public;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Glib main loop for a thread, handles DBUS calls
|
||||||
|
*/
|
||||||
|
GMainLoop *loop;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Context for OSSO
|
||||||
|
*/
|
||||||
|
osso_context_t *context;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback for libosso dbus wrapper
|
||||||
|
*/
|
||||||
|
static gint dbus_req_handler(const gchar *interface, const gchar *method,
|
||||||
|
GArray *arguments, private_maemo_plugin_t *this,
|
||||||
|
osso_rpc_t *retval)
|
||||||
|
{
|
||||||
|
return OSSO_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main loop to handle D-BUS messages.
|
||||||
|
*/
|
||||||
|
static job_requeue_t run(private_maemo_plugin_t *this)
|
||||||
|
{
|
||||||
|
this->loop = g_main_loop_new(NULL, FALSE);
|
||||||
|
g_main_loop_run(this->loop);
|
||||||
|
return JOB_REQUEUE_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(plugin_t, destroy, void,
|
METHOD(plugin_t, destroy, void,
|
||||||
private_maemo_plugin_t *this)
|
private_maemo_plugin_t *this)
|
||||||
{
|
{
|
||||||
|
if (this->loop)
|
||||||
|
{
|
||||||
|
if (g_main_loop_is_running(this->loop))
|
||||||
|
{
|
||||||
|
g_main_loop_quit(this->loop);
|
||||||
|
}
|
||||||
|
g_main_loop_unref(this->loop);
|
||||||
|
}
|
||||||
|
if (this->context)
|
||||||
|
{
|
||||||
|
osso_deinitialize(this->context);
|
||||||
|
}
|
||||||
free(this);
|
free(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +93,7 @@ METHOD(plugin_t, destroy, void,
|
||||||
*/
|
*/
|
||||||
plugin_t *maemo_plugin_create()
|
plugin_t *maemo_plugin_create()
|
||||||
{
|
{
|
||||||
|
osso_return_t result;
|
||||||
private_maemo_plugin_t *this;
|
private_maemo_plugin_t *this;
|
||||||
|
|
||||||
INIT(this,
|
INIT(this,
|
||||||
|
@ -50,6 +102,36 @@ plugin_t *maemo_plugin_create()
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this->context = osso_initialize(OSSO_CHARON_SERVICE, "0.0.1", TRUE, NULL);
|
||||||
|
if (!this->context)
|
||||||
|
{
|
||||||
|
DBG1(DBG_CFG, "failed to initialize OSSO context");
|
||||||
|
destroy(this);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = osso_rpc_set_cb_f(this->context,
|
||||||
|
OSSO_CHARON_SERVICE,
|
||||||
|
OSSO_CHARON_OBJECT,
|
||||||
|
OSSO_CHARON_IFACE,
|
||||||
|
(osso_rpc_cb_f*)dbus_req_handler,
|
||||||
|
this);
|
||||||
|
if (result != OSSO_OK)
|
||||||
|
{
|
||||||
|
DBG1(DBG_CFG, "failed to set D-BUS callback (%d)", result);
|
||||||
|
destroy(this);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->loop = NULL;
|
||||||
|
if (!g_thread_supported())
|
||||||
|
{
|
||||||
|
g_thread_init(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
lib->processor->queue_job(lib->processor,
|
||||||
|
(job_t*)callback_job_create((callback_job_cb_t)run, this, NULL, NULL));
|
||||||
|
|
||||||
return &this->public.plugin;
|
return &this->public.plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue