From c731758bd9d5dfcfe2a9e3176596bb43777ea334 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Mon, 14 Jul 2008 16:54:16 +0100 Subject: Hook DBusServer into the build system. Based on parts of the patch by Huang Peng --- Makefile.am | 1 + _dbus_bindings/Makefile.am | 1 + _dbus_bindings/dbus_bindings-internal.h | 8 ++++++++ _dbus_bindings/mainloop.c | 19 +++++++++++++++++++ _dbus_bindings/module.c | 2 ++ 5 files changed, 31 insertions(+) diff --git a/Makefile.am b/Makefile.am index 8f594ad..cd029e8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,6 +34,7 @@ nobase_python_PYTHON = \ dbus/mainloop/__init__.py \ dbus/mainloop/glib.py \ dbus/proxies.py \ + dbus/server.py \ dbus/service.py \ dbus/types.py diff --git a/_dbus_bindings/Makefile.am b/_dbus_bindings/Makefile.am index c2e59c9..e9e2421 100644 --- a/_dbus_bindings/Makefile.am +++ b/_dbus_bindings/Makefile.am @@ -24,6 +24,7 @@ _dbus_bindings_la_SOURCES = \ message-internal.h \ module.c \ pending-call.c \ + server.c \ signature.c \ string.c \ types-internal.h \ diff --git a/_dbus_bindings/dbus_bindings-internal.h b/_dbus_bindings/dbus_bindings-internal.h index 1dfd6b2..6b801c6 100644 --- a/_dbus_bindings/dbus_bindings-internal.h +++ b/_dbus_bindings/dbus_bindings-internal.h @@ -140,11 +140,19 @@ extern dbus_bool_t dbus_py_insert_pending_call(PyObject *this_module); /* mainloop.c */ extern dbus_bool_t dbus_py_set_up_connection(PyObject *conn, PyObject *mainloop); +extern dbus_bool_t dbus_py_set_up_server(PyObject *server, + PyObject *mainloop); extern PyObject *dbus_py_get_default_main_loop(void); extern dbus_bool_t dbus_py_check_mainloop_sanity(PyObject *); extern dbus_bool_t dbus_py_init_mainloop(void); extern dbus_bool_t dbus_py_insert_mainloop_types(PyObject *); +/* server.c */ +extern PyTypeObject DBusPyServer_Type; +DEFINE_CHECK(DBusPyServer) +extern dbus_bool_t dbus_py_init_server_types(void); +extern dbus_bool_t dbus_py_insert_server_types(PyObject *this_module); + /* validation.c */ dbus_bool_t dbus_py_validate_bus_name(const char *name, dbus_bool_t may_be_unique, diff --git a/_dbus_bindings/mainloop.c b/_dbus_bindings/mainloop.c index 3b56ade..1733410 100644 --- a/_dbus_bindings/mainloop.c +++ b/_dbus_bindings/mainloop.c @@ -1,6 +1,7 @@ /* Implementation of main-loop integration for dbus-python. * * Copyright (C) 2006 Collabora Ltd. + * Copyright (C) 2008 Huang Peng * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -131,6 +132,24 @@ dbus_py_set_up_connection(PyObject *conn, PyObject *mainloop) return FALSE; } +dbus_bool_t +dbus_py_set_up_server(PyObject *server, PyObject *mainloop) +{ + if (NativeMainLoop_Check(mainloop)) { + /* Native mainloops are allowed to do arbitrary strange things */ + NativeMainLoop *nml = (NativeMainLoop *)mainloop; + DBusServer *dbs = DBusPyServer_BorrowDBusServer(server); + + if (!dbs) { + return FALSE; + } + return (nml->set_up_server_cb)(dbs, nml->data); + } + PyErr_SetString(PyExc_TypeError, + "A dbus.mainloop.NativeMainLoop instance is required"); + return FALSE; +} + /* C API ============================================================ */ PyObject * diff --git a/_dbus_bindings/module.c b/_dbus_bindings/module.c index ddeb1f0..a7e0820 100644 --- a/_dbus_bindings/module.c +++ b/_dbus_bindings/module.c @@ -268,6 +268,7 @@ init_dbus_bindings(void) if (!dbus_py_init_pending_call()) return; if (!dbus_py_init_mainloop()) return; if (!dbus_py_init_conn_types()) return; + if (!dbus_py_init_server_types()) return; this_module = Py_InitModule3("_dbus_bindings", module_functions, module_doc); if (!this_module) return; @@ -283,6 +284,7 @@ init_dbus_bindings(void) if (!dbus_py_insert_pending_call(this_module)) return; if (!dbus_py_insert_mainloop_types(this_module)) return; if (!dbus_py_insert_conn_types(this_module)) return; + if (!dbus_py_insert_server_types(this_module)) return; if (PyModule_AddStringConstant(this_module, "BUS_DAEMON_NAME", DBUS_SERVICE_DBUS) < 0) return; -- cgit v1.2.1