summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2008-07-14 16:54:16 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2008-07-14 16:54:16 +0100
commitc731758bd9d5dfcfe2a9e3176596bb43777ea334 (patch)
tree7eb4ee3fb12e74ec4c23a470e7bce2add70ec09d
parent6dcd530f0b6aa158330726d7a5cca9d6dd96eafb (diff)
downloaddbus-python-c731758bd9d5dfcfe2a9e3176596bb43777ea334.tar.gz
Hook DBusServer into the build system.
Based on parts of the patch by Huang Peng <phuang@redhat.com>
-rw-r--r--Makefile.am1
-rw-r--r--_dbus_bindings/Makefile.am1
-rw-r--r--_dbus_bindings/dbus_bindings-internal.h8
-rw-r--r--_dbus_bindings/mainloop.c19
-rw-r--r--_dbus_bindings/module.c2
5 files changed, 31 insertions, 0 deletions
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. <http://www.collabora.co.uk/>
+ * Copyright (C) 2008 Huang Peng <phuang@redhat.com>
*
* 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;