Redland
view release on metacpan or search on metacpan
redland/examples/redland_dbus.c view on Meta::CPAN
#include <glib.h>
/* with threads*/
#include <glib/gthread.h>
/* D-BUS */
#include <dbus/dbus.h>
/* D-BUS glib */
#include <dbus/dbus-glib.h>
static DBusMessageHandler *disconnect_handler;
static dbus_int32_t handler_slot = -1;
typedef void TestData;
static TestData*
test_message_data_new(void)
{
return NULL;
}
static void
test_message_data_free(TestData *data)
{
}
static DBusHandlerResult
handle_test_message (DBusMessageHandler *handler,
DBusConnection *connection,
DBusMessage *message,
void *user_data)
{
dbus_connection_flush (connection);
return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
}
static DBusHandlerResult
handle_disconnect (DBusMessageHandler *handler,
DBusConnection *connection,
DBusMessage *message,
void *user_data)
{
g_print ("connection disconnected\n");
dbus_connection_unref (connection);
return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
}
static void
new_connection_callback (DBusServer *server,
DBusConnection *new_connection,
void *user_data) {
const char *test_messages[] = { "org.librdf.redland.Test" };
const char *disconnect_messages[] = { "org.freedesktop.Local.Disconnect" };
DBusMessageHandler *test_message_handler;
TestData *data;
g_print ("new_connection_callback\n");
dbus_connection_ref (new_connection);
dbus_connection_setup_with_g_main (new_connection, NULL);
data = test_message_data_new();
test_message_handler =
dbus_message_handler_new (handle_test_message,
data, (DBusFreeFunction)test_message_data_free);
if (!dbus_connection_register_handler (new_connection,
test_message_handler,
test_messages, 1))
goto nomem;
if (!dbus_connection_set_data (new_connection,
handler_slot,
test_message_handler,
(DBusFreeFunction)dbus_message_handler_unref))
goto nomem;
if (!dbus_connection_register_handler (new_connection,
disconnect_handler,
disconnect_messages, 1))
goto nomem;
return;
nomem:
g_error ("Out of memory in setting up new connection");
}
int
main(int argc, char *argv[])
{
librdf_world* world;
GMainLoop *loop;
DBusServer *server;
DBusError error;
char *program=argv[0];
if (argc < 2) {
fprintf (stderr, "%s: USAGE [server address]\n", program);
return 1;
}
world=librdf_new_world();
librdf_world_open(world);
g_thread_init (NULL);
dbus_gthread_init ();
dbus_error_init (&error);
server = dbus_server_listen (argv[1], &error);
if (server == NULL)
( run in 1.030 second using v1.01-cache-2.11-cpan-ceb78f64989 )