1
/* Implementation of D-Bus Message and subclasses (but see message-get-args.h
2
* and message-append.h for unserialization and serialization code).
4
* Copyright (C) 2006 Collabora Ltd. <http://www.collabora.co.uk/>
6
* Permission is hereby granted, free of charge, to any person
7
* obtaining a copy of this software and associated documentation
8
* files (the "Software"), to deal in the Software without
9
* restriction, including without limitation the rights to use, copy,
10
* modify, merge, publish, distribute, sublicense, and/or sell copies
11
* of the Software, and to permit persons to whom the Software is
12
* furnished to do so, subject to the following conditions:
14
* The above copyright notice and this permission notice shall be
15
* included in all copies or substantial portions of the Software.
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
* DEALINGS IN THE SOFTWARE.
27
#include "dbus_bindings-internal.h"
28
#include "message-internal.h"
30
static PyTypeObject MessageType, SignalMessageType, ErrorMessageType;
31
static PyTypeObject MethodReturnMessageType, MethodCallMessageType;
33
static inline int Message_Check(PyObject *o)
35
return (Py_TYPE(o) == &MessageType)
36
|| PyObject_IsInstance(o, (PyObject *)&MessageType);
40
DBusPy_RaiseUnusableMessage(void)
42
DBusPyException_SetString("Message object is uninitialized, or has become "
43
"unusable due to error while appending "
48
PyDoc_STRVAR(Message_tp_doc,
49
"A message to be sent or received over a D-Bus Connection.\n");
51
static void Message_tp_dealloc(Message *self)
54
dbus_message_unref(self->msg);
56
Py_TYPE(self)->tp_free((PyObject *)self);
60
Message_tp_new(PyTypeObject *type,
61
PyObject *args UNUSED,
62
PyObject *kwargs UNUSED)
66
self = (Message *)type->tp_alloc(type, 0);
67
if (!self) return NULL;
69
return (PyObject *)self;
72
PyDoc_STRVAR(MethodCallMessage_tp_doc, "A method-call message.\n"
76
" dbus.lowlevel.MethodCallMessage(destination: str or None, path: str,\n"
77
" interface: str or None, method: str)\n"
79
"``destination`` is the destination bus name, or None to send the\n"
80
"message directly to the peer (usually the bus daemon).\n"
82
"``path`` is the object-path of the object whose method is to be called.\n"
84
"``interface`` is the interface qualifying the method name, or None to omit\n"
85
"the interface from the message header.\n"
87
"``method`` is the method name (member name).\n"
91
MethodCallMessage_tp_init(Message *self, PyObject *args, PyObject *kwargs)
93
const char *destination, *path, *interface, *method;
94
static char *kwlist[] = {"destination", "path", "interface", "method", NULL};
96
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "zszs:__init__", kwlist,
97
&destination, &path, &interface,
101
if (destination && !dbus_py_validate_bus_name(destination, 1, 1)) return -1;
102
if (!dbus_py_validate_object_path(path)) return -1;
103
if (interface && !dbus_py_validate_interface_name(interface)) return -1;
104
if (!dbus_py_validate_member_name(method)) return -1;
106
dbus_message_unref(self->msg);
109
self->msg = dbus_message_new_method_call(destination, path, interface,
118
PyDoc_STRVAR(MethodReturnMessage_tp_doc, "A method-return message.\n\n"
120
" dbus.lowlevel.MethodReturnMessage(method_call: MethodCallMessage)\n");
123
MethodReturnMessage_tp_init(Message *self, PyObject *args, PyObject *kwargs)
126
static char *kwlist[] = {"method_call", NULL};
128
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:__init__", kwlist,
129
&MessageType, &other)) {
133
dbus_message_unref(self->msg);
136
self->msg = dbus_message_new_method_return(other->msg);
144
PyDoc_STRVAR(SignalMessage_tp_doc, "A signal message.\n\n"
146
" dbus.lowlevel.SignalMessage(path: str, interface: str, method: str)\n");
148
SignalMessage_tp_init(Message *self, PyObject *args, PyObject *kwargs)
150
const char *path, *interface, *name;
151
static char *kwlist[] = {"path", "interface", "name", NULL};
153
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "sss:__init__", kwlist,
154
&path, &interface, &name)) {
157
if (!dbus_py_validate_object_path(path)) return -1;
158
if (!dbus_py_validate_interface_name(interface)) return -1;
159
if (!dbus_py_validate_member_name(name)) return -1;
161
dbus_message_unref(self->msg);
164
self->msg = dbus_message_new_signal(path, interface, name);
172
PyDoc_STRVAR(ErrorMessage_tp_doc, "An error message.\n\n"
174
" dbus.lowlevel.ErrorMessage(reply_to: Message, error_name: str,\n"
175
" error_message: str or None)\n");
177
ErrorMessage_tp_init(Message *self, PyObject *args, PyObject *kwargs)
180
const char *error_name, *error_message;
181
static char *kwlist[] = {"reply_to", "error_name", "error_message", NULL};
183
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!sz:__init__", kwlist,
184
&MessageType, &reply_to, &error_name,
188
if (!dbus_py_validate_error_name(error_name)) return -1;
190
dbus_message_unref(self->msg);
193
self->msg = dbus_message_new_error(reply_to->msg, error_name, error_message);
202
DBusPyMessage_BorrowDBusMessage(PyObject *msg)
204
if (!Message_Check(msg)) {
205
PyErr_SetString(PyExc_TypeError,
206
"A dbus.lowlevel.Message instance is required");
209
if (!((Message *)msg)->msg) {
210
DBusPy_RaiseUnusableMessage();
213
return ((Message *)msg)->msg;
217
DBusPyMessage_ConsumeDBusMessage(DBusMessage *msg)
222
switch (dbus_message_get_type(msg)) {
223
case DBUS_MESSAGE_TYPE_METHOD_CALL:
224
type = &MethodCallMessageType;
226
case DBUS_MESSAGE_TYPE_METHOD_RETURN:
227
type = &MethodReturnMessageType;
229
case DBUS_MESSAGE_TYPE_ERROR:
230
type = &ErrorMessageType;
232
case DBUS_MESSAGE_TYPE_SIGNAL:
233
type = &SignalMessageType;
239
self = (Message *)(type->tp_new) (type, dbus_py_empty_tuple, NULL);
241
dbus_message_unref(msg);
245
return (PyObject *)self;
248
PyDoc_STRVAR(Message_copy__doc__,
249
"message.copy() -> Message (or subclass)\n"
250
"Deep-copy the message, resetting the serial number to zero.\n");
252
Message_copy(Message *self, PyObject *args UNUSED)
255
if (!self->msg) return DBusPy_RaiseUnusableMessage();
256
msg = dbus_message_copy(self->msg);
257
if (!msg) return PyErr_NoMemory();
258
return DBusPyMessage_ConsumeDBusMessage(msg);
261
PyDoc_STRVAR(Message_get_auto_start__doc__,
262
"message.get_auto_start() -> bool\n"
263
"Return true if this message will cause an owner for the destination name\n"
264
"to be auto-started.\n");
266
Message_get_auto_start(Message *self, PyObject *unused UNUSED)
268
if (!self->msg) return DBusPy_RaiseUnusableMessage();
269
return PyBool_FromLong(dbus_message_get_auto_start(self->msg));
272
PyDoc_STRVAR(Message_set_auto_start__doc__,
273
"message.set_auto_start(bool) -> None\n"
274
"Set whether this message will cause an owner for the destination name\n"
275
"to be auto-started.\n");
277
Message_set_auto_start(Message *self, PyObject *args)
280
if (!PyArg_ParseTuple(args, "i", &value)) return NULL;
281
if (!self->msg) return DBusPy_RaiseUnusableMessage();
282
dbus_message_set_auto_start(self->msg, value ? TRUE : FALSE);
287
PyDoc_STRVAR(Message_get_no_reply__doc__,
288
"message.get_no_reply() -> bool\n"
289
"Return true if this message need not be replied to.\n");
291
Message_get_no_reply(Message *self, PyObject *unused UNUSED)
293
if (!self->msg) return DBusPy_RaiseUnusableMessage();
294
return PyBool_FromLong(dbus_message_get_no_reply(self->msg));
297
PyDoc_STRVAR(Message_set_no_reply__doc__,
298
"message.set_no_reply(bool) -> None\n"
299
"Set whether no reply to this message is required.\n");
301
Message_set_no_reply(Message *self, PyObject *args)
304
if (!PyArg_ParseTuple(args, "i", &value)) return NULL;
305
if (!self->msg) return DBusPy_RaiseUnusableMessage();
306
dbus_message_set_no_reply(self->msg, value ? TRUE : FALSE);
310
PyDoc_STRVAR(Message_get_reply_serial__doc__,
311
"message.get_reply_serial() -> long\n"
312
"Returns the serial that the message is a reply to or 0 if none.\n");
314
Message_get_reply_serial(Message *self, PyObject *unused UNUSED)
316
if (!self->msg) return DBusPy_RaiseUnusableMessage();
317
return PyLong_FromUnsignedLong(dbus_message_get_reply_serial(self->msg));
320
PyDoc_STRVAR(Message_set_reply_serial__doc__,
321
"message.set_reply_serial(bool) -> None\n"
322
"Set the serial that this message is a reply to.\n");
324
Message_set_reply_serial(Message *self, PyObject *args)
328
if (!PyArg_ParseTuple(args, "k", &value)) return NULL;
329
if (!self->msg) return DBusPy_RaiseUnusableMessage();
330
if (!dbus_message_set_reply_serial(self->msg, value)) {
331
return PyErr_NoMemory();
337
PyDoc_STRVAR(Message_get_type__doc__,
338
"message.get_type() -> int\n\n"
339
"Returns the type of the message.\n");
341
Message_get_type(Message *self, PyObject *unused UNUSED)
343
if (!self->msg) return DBusPy_RaiseUnusableMessage();
344
return PyInt_FromLong(dbus_message_get_type(self->msg));
347
PyDoc_STRVAR(Message_get_serial__doc__,
348
"message.get_serial() -> long\n"
349
"Returns the serial of a message or 0 if none has been specified.\n"
351
"The message's serial number is provided by the application sending the\n"
352
"message and is used to identify replies to this message. All messages\n"
353
"received on a connection will have a serial, but messages you haven't\n"
354
"sent yet may return 0.\n");
356
Message_get_serial(Message *self, PyObject *unused UNUSED)
358
if (!self->msg) return DBusPy_RaiseUnusableMessage();
359
return PyLong_FromUnsignedLong(dbus_message_get_serial(self->msg));
362
PyDoc_STRVAR(Message_is_method_call__doc__,
363
"is_method_call(interface: str, member: str) -> bool");
365
Message_is_method_call(Message *self, PyObject *args)
367
const char *interface, *method;
369
if (!PyArg_ParseTuple(args, "ss:is_method_call", &interface, &method)) {
372
if (!self->msg) return DBusPy_RaiseUnusableMessage();
373
return PyBool_FromLong(dbus_message_is_method_call(self->msg, interface,
377
PyDoc_STRVAR(Message_is_error__doc__,
378
"is_error(error: str) -> bool");
380
Message_is_error(Message *self, PyObject *args)
382
const char *error_name;
384
if (!PyArg_ParseTuple(args, "s:is_error", &error_name)) {
387
if (!self->msg) return DBusPy_RaiseUnusableMessage();
388
return PyBool_FromLong(dbus_message_is_error(self->msg, error_name));
391
PyDoc_STRVAR(Message_is_signal__doc__,
392
"is_signal(interface: str, member: str) -> bool");
394
Message_is_signal(Message *self, PyObject *args)
396
const char *interface, *signal_name;
398
if (!PyArg_ParseTuple(args, "ss:is_signal", &interface, &signal_name)) {
401
if (!self->msg) return DBusPy_RaiseUnusableMessage();
402
return PyBool_FromLong(dbus_message_is_signal(self->msg, interface,
406
PyDoc_STRVAR(Message_get_member__doc__,
407
"get_member() -> str or None");
409
Message_get_member(Message *self, PyObject *unused UNUSED)
413
if (!self->msg) return DBusPy_RaiseUnusableMessage();
414
c_str = dbus_message_get_member(self->msg);
418
return PyString_FromString(c_str);
421
PyDoc_STRVAR(Message_has_member__doc__,
422
"has_member(name: str or None) -> bool");
424
Message_has_member(Message *self, PyObject *args)
428
if (!PyArg_ParseTuple(args, "z:has_member", &name)) {
431
if (!self->msg) return DBusPy_RaiseUnusableMessage();
432
return PyBool_FromLong(dbus_message_has_member(self->msg, name));
435
PyDoc_STRVAR(Message_set_member__doc__,
436
"set_member(unique_name: str or None)");
438
Message_set_member(Message *self, PyObject *args)
442
if (!PyArg_ParseTuple(args, "z:set_member", &name)) {
445
if (!self->msg) return DBusPy_RaiseUnusableMessage();
446
if (!dbus_py_validate_member_name(name)) return NULL;
447
if (!dbus_message_set_member(self->msg, name)) return PyErr_NoMemory();
451
PyDoc_STRVAR(Message_get_path__doc__,
452
"get_path() -> ObjectPath or None\n\n"
453
"Return the message's destination object path (if it's a method call) or\n"
454
"source object path (if it's a method reply or a signal) or None (if it\n"
457
Message_get_path(Message *self, PyObject *unused UNUSED)
461
if (!self->msg) return DBusPy_RaiseUnusableMessage();
462
c_str = dbus_message_get_path(self->msg);
466
return PyObject_CallFunction((PyObject *)&DBusPyObjectPath_Type, "(s)", c_str);
469
PyDoc_STRVAR(Message_get_path_decomposed__doc__,
470
"get_path_decomposed() -> list of str, or None\n\n"
471
"Return a list of path components (e.g. /foo/bar -> ['foo','bar'], / -> [])\n"
472
"or None if the message has no associated path.\n");
474
Message_get_path_decomposed(Message *self, PyObject *unused UNUSED)
477
PyObject *ret = PyList_New(0);
479
if (!ret) return NULL;
482
return DBusPy_RaiseUnusableMessage();
484
if (!dbus_message_get_path_decomposed(self->msg, &paths)) {
486
return PyErr_NoMemory();
492
for (ptr = paths; *ptr; ptr++) {
493
PyObject *str = PyString_FromString(*ptr);
499
if (PyList_Append(ret, str) < 0) {
506
dbus_free_string_array(paths);
510
PyDoc_STRVAR(Message_has_path__doc__,
511
"has_path(name: str or None) -> bool");
513
Message_has_path(Message *self, PyObject *args)
517
if (!PyArg_ParseTuple(args, "z:has_path", &name)) {
520
if (!self->msg) return DBusPy_RaiseUnusableMessage();
521
return PyBool_FromLong(dbus_message_has_path(self->msg, name));
524
PyDoc_STRVAR(Message_set_path__doc__,
525
"set_path(name: str or None)");
527
Message_set_path(Message *self, PyObject *args)
531
if (!PyArg_ParseTuple(args, "z:set_path", &name)) return NULL;
532
if (!self->msg) return DBusPy_RaiseUnusableMessage();
533
if (!dbus_message_has_path(self->msg, name)) return PyErr_NoMemory();
537
PyDoc_STRVAR(Message_get_signature__doc__,
538
"get_signature() -> Signature or None");
540
Message_get_signature(Message *self, PyObject *unused UNUSED)
544
if (!self->msg) return DBusPy_RaiseUnusableMessage();
545
c_str = dbus_message_get_signature(self->msg);
547
return PyObject_CallFunction((PyObject *)&DBusPySignature_Type, "(s)", "");
549
return PyObject_CallFunction((PyObject *)&DBusPySignature_Type, "(s)", c_str);
552
PyDoc_STRVAR(Message_has_signature__doc__,
553
"has_signature(signature: str) -> bool");
555
Message_has_signature(Message *self, PyObject *args)
559
if (!PyArg_ParseTuple(args, "s:has_signature", &name)) {
562
if (!self->msg) return DBusPy_RaiseUnusableMessage();
563
return PyBool_FromLong(dbus_message_has_signature(self->msg, name));
566
PyDoc_STRVAR(Message_get_sender__doc__,
567
"get_sender() -> str or None\n\n"
568
"Return the message's sender unique name, or None if none.\n");
570
Message_get_sender(Message *self, PyObject *unused UNUSED)
574
if (!self->msg) return DBusPy_RaiseUnusableMessage();
575
c_str = dbus_message_get_sender(self->msg);
579
return PyString_FromString(c_str);
582
PyDoc_STRVAR(Message_has_sender__doc__,
583
"has_sender(unique_name: str) -> bool");
585
Message_has_sender(Message *self, PyObject *args)
589
if (!PyArg_ParseTuple(args, "s:has_sender", &name)) {
592
if (!self->msg) return DBusPy_RaiseUnusableMessage();
593
return PyBool_FromLong(dbus_message_has_sender(self->msg, name));
596
PyDoc_STRVAR(Message_set_sender__doc__,
597
"set_sender(unique_name: str or None)");
599
Message_set_sender(Message *self, PyObject *args)
603
if (!PyArg_ParseTuple(args, "z:set_sender", &name)) {
606
if (!self->msg) return DBusPy_RaiseUnusableMessage();
607
if (!dbus_py_validate_bus_name(name, 1, 1)) return NULL;
608
if (!dbus_message_set_sender(self->msg, name)) return PyErr_NoMemory();
612
PyDoc_STRVAR(Message_get_destination__doc__,
613
"get_destination() -> str or None\n\n"
614
"Return the message's destination bus name, or None if none.\n");
616
Message_get_destination(Message *self, PyObject *unused UNUSED)
620
if (!self->msg) return DBusPy_RaiseUnusableMessage();
621
c_str = dbus_message_get_destination(self->msg);
625
return PyString_FromString(c_str);
628
PyDoc_STRVAR(Message_has_destination__doc__,
629
"has_destination(bus_name: str) -> bool");
631
Message_has_destination(Message *self, PyObject *args)
635
if (!PyArg_ParseTuple(args, "s:has_destination", &name)) {
638
if (!self->msg) return DBusPy_RaiseUnusableMessage();
639
return PyBool_FromLong(dbus_message_has_destination(self->msg, name));
642
PyDoc_STRVAR(Message_set_destination__doc__,
643
"set_destination(bus_name: str or None)");
645
Message_set_destination(Message *self, PyObject *args)
649
if (!PyArg_ParseTuple(args, "z:set_destination", &name)) {
652
if (!self->msg) return DBusPy_RaiseUnusableMessage();
653
if (!dbus_py_validate_bus_name(name, 1, 1)) return NULL;
654
if (!dbus_message_set_destination(self->msg, name)) return PyErr_NoMemory();
658
PyDoc_STRVAR(Message_get_interface__doc__,
659
"get_interface() -> str or None");
661
Message_get_interface(Message *self, PyObject *unused UNUSED)
665
if (!self->msg) return DBusPy_RaiseUnusableMessage();
666
c_str = dbus_message_get_interface(self->msg);
670
return PyString_FromString(c_str);
673
PyDoc_STRVAR(Message_has_interface__doc__,
674
"has_interface(interface: str or None) -> bool");
676
Message_has_interface(Message *self, PyObject *args)
680
if (!PyArg_ParseTuple(args, "z:has_interface", &name)) {
683
if (!self->msg) return DBusPy_RaiseUnusableMessage();
684
return PyBool_FromLong(dbus_message_has_interface(self->msg, name));
687
PyDoc_STRVAR(Message_set_interface__doc__,
688
"set_interface(name: str or None)");
690
Message_set_interface(Message *self, PyObject *args)
694
if (!PyArg_ParseTuple(args, "z:set_interface", &name)) {
697
if (!self->msg) return DBusPy_RaiseUnusableMessage();
698
if (!dbus_py_validate_interface_name(name)) return NULL;
699
if (!dbus_message_set_interface(self->msg, name)) return PyErr_NoMemory();
703
PyDoc_STRVAR(Message_get_error_name__doc__,
704
"get_error_name() -> str or None");
706
Message_get_error_name(Message *self, PyObject *unused UNUSED)
710
if (!self->msg) return DBusPy_RaiseUnusableMessage();
711
c_str = dbus_message_get_error_name(self->msg);
715
return PyString_FromString(c_str);
718
PyDoc_STRVAR(Message_set_error_name__doc__,
719
"set_error_name(name: str or None)");
721
Message_set_error_name(Message *self, PyObject *args)
725
if (!PyArg_ParseTuple(args, "z:set_error_name", &name)) {
728
if (!self->msg) return DBusPy_RaiseUnusableMessage();
729
if (!dbus_py_validate_error_name(name)) return NULL;
730
if (!dbus_message_set_error_name(self->msg, name)) return PyErr_NoMemory();
734
static PyMethodDef Message_tp_methods[] = {
735
{"copy", (PyCFunction)Message_copy,
736
METH_NOARGS, Message_copy__doc__},
737
{"is_method_call", (PyCFunction)Message_is_method_call,
738
METH_VARARGS, Message_is_method_call__doc__},
739
{"is_signal", (PyCFunction)Message_is_signal,
740
METH_VARARGS, Message_is_signal__doc__},
741
{"is_error", (PyCFunction)Message_is_error,
742
METH_VARARGS, Message_is_error__doc__},
744
{"get_args_list", (PyCFunction)dbus_py_Message_get_args_list,
745
METH_VARARGS|METH_KEYWORDS, dbus_py_Message_get_args_list__doc__},
746
{"guess_signature", (PyCFunction)dbus_py_Message_guess_signature,
747
METH_VARARGS|METH_STATIC, dbus_py_Message_guess_signature__doc__},
748
{"append", (PyCFunction)dbus_py_Message_append,
749
METH_VARARGS|METH_KEYWORDS, dbus_py_Message_append__doc__},
751
{"get_auto_start", (PyCFunction)Message_get_auto_start,
752
METH_NOARGS, Message_get_auto_start__doc__},
753
{"set_auto_start", (PyCFunction)Message_set_auto_start,
754
METH_VARARGS, Message_set_auto_start__doc__},
755
{"get_destination", (PyCFunction)Message_get_destination,
756
METH_NOARGS, Message_get_destination__doc__},
757
{"set_destination", (PyCFunction)Message_set_destination,
758
METH_VARARGS, Message_set_destination__doc__},
759
{"has_destination", (PyCFunction)Message_has_destination,
760
METH_VARARGS, Message_has_destination__doc__},
761
{"get_error_name", (PyCFunction)Message_get_error_name,
762
METH_NOARGS, Message_get_error_name__doc__},
763
{"set_error_name", (PyCFunction)Message_set_error_name,
764
METH_VARARGS, Message_set_error_name__doc__},
765
{"get_interface", (PyCFunction)Message_get_interface,
766
METH_NOARGS, Message_get_interface__doc__},
767
{"set_interface", (PyCFunction)Message_set_interface,
768
METH_VARARGS, Message_set_interface__doc__},
769
{"has_interface", (PyCFunction)Message_has_interface,
770
METH_VARARGS, Message_has_interface__doc__},
771
{"get_member", (PyCFunction)Message_get_member,
772
METH_NOARGS, Message_get_member__doc__},
773
{"set_member", (PyCFunction)Message_set_member,
774
METH_VARARGS, Message_set_member__doc__},
775
{"has_member", (PyCFunction)Message_has_member,
776
METH_VARARGS, Message_has_member__doc__},
777
{"get_path", (PyCFunction)Message_get_path,
778
METH_NOARGS, Message_get_path__doc__},
779
{"get_path_decomposed", (PyCFunction)Message_get_path_decomposed,
780
METH_NOARGS, Message_get_path_decomposed__doc__},
781
{"set_path", (PyCFunction)Message_set_path,
782
METH_VARARGS, Message_set_path__doc__},
783
{"has_path", (PyCFunction)Message_has_path,
784
METH_VARARGS, Message_has_path__doc__},
785
{"get_no_reply", (PyCFunction)Message_get_no_reply,
786
METH_NOARGS, Message_get_no_reply__doc__},
787
{"set_no_reply", (PyCFunction)Message_set_no_reply,
788
METH_VARARGS, Message_set_no_reply__doc__},
789
{"get_reply_serial", (PyCFunction)Message_get_reply_serial,
790
METH_NOARGS, Message_get_reply_serial__doc__},
791
{"set_reply_serial", (PyCFunction)Message_set_reply_serial,
792
METH_VARARGS, Message_set_reply_serial__doc__},
793
{"get_sender", (PyCFunction)Message_get_sender,
794
METH_NOARGS, Message_get_sender__doc__},
795
{"set_sender", (PyCFunction)Message_set_sender,
796
METH_VARARGS, Message_set_sender__doc__},
797
{"has_sender", (PyCFunction)Message_has_sender,
798
METH_VARARGS, Message_has_sender__doc__},
799
{"get_serial", (PyCFunction)Message_get_serial,
800
METH_NOARGS, Message_get_serial__doc__},
801
{"get_signature", (PyCFunction)Message_get_signature,
802
METH_NOARGS, Message_get_signature__doc__},
803
{"has_signature", (PyCFunction)Message_has_signature,
804
METH_VARARGS, Message_has_signature__doc__},
805
{"get_type", (PyCFunction)Message_get_type,
806
METH_NOARGS, Message_get_type__doc__},
807
{NULL, NULL, 0, NULL}
810
static PyTypeObject MessageType = {
811
PyObject_HEAD_INIT(NULL)
813
"dbus.lowlevel.Message", /*tp_name*/
814
sizeof(Message), /*tp_basicsize*/
816
(destructor)Message_tp_dealloc, /*tp_dealloc*/
823
0, /*tp_as_sequence*/
831
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
832
Message_tp_doc, /* tp_doc */
835
0, /* tp_richcompare */
836
0, /* tp_weaklistoffset */
839
Message_tp_methods, /* tp_methods */
844
0, /* tp_descr_get */
845
0, /* tp_descr_set */
846
0, /* tp_dictoffset */
849
Message_tp_new, /* tp_new */
852
static PyTypeObject MethodCallMessageType = {
853
PyObject_HEAD_INIT(NULL)
855
"dbus.lowlevel.MethodCallMessage", /*tp_name*/
865
0, /*tp_as_sequence*/
873
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
874
MethodCallMessage_tp_doc, /* tp_doc */
877
0, /* tp_richcompare */
878
0, /* tp_weaklistoffset */
884
DEFERRED_ADDRESS(&MessageType), /* tp_base */
886
0, /* tp_descr_get */
887
0, /* tp_descr_set */
888
0, /* tp_dictoffset */
889
(initproc)MethodCallMessage_tp_init, /* tp_init */
894
static PyTypeObject MethodReturnMessageType = {
895
PyObject_HEAD_INIT(NULL)
897
"dbus.lowlevel.MethodReturnMessage", /*tp_name*/
907
0, /*tp_as_sequence*/
915
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
916
MethodReturnMessage_tp_doc, /* tp_doc */
919
0, /* tp_richcompare */
920
0, /* tp_weaklistoffset */
926
DEFERRED_ADDRESS(&MessageType), /* tp_base */
928
0, /* tp_descr_get */
929
0, /* tp_descr_set */
930
0, /* tp_dictoffset */
931
(initproc)MethodReturnMessage_tp_init, /* tp_init */
936
static PyTypeObject SignalMessageType = {
937
PyObject_HEAD_INIT(NULL)
939
"dbus.lowlevel.SignalMessage", /*tp_name*/
949
0, /*tp_as_sequence*/
957
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
958
SignalMessage_tp_doc, /* tp_doc */
961
0, /* tp_richcompare */
962
0, /* tp_weaklistoffset */
968
DEFERRED_ADDRESS(&MessageType), /* tp_base */
970
0, /* tp_descr_get */
971
0, /* tp_descr_set */
972
0, /* tp_dictoffset */
973
(initproc)SignalMessage_tp_init, /* tp_init */
978
static PyTypeObject ErrorMessageType = {
979
PyObject_HEAD_INIT(NULL)
981
"dbus.lowlevel.ErrorMessage", /*tp_name*/
991
0, /*tp_as_sequence*/
999
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
1000
ErrorMessage_tp_doc, /* tp_doc */
1001
0, /* tp_traverse */
1003
0, /* tp_richcompare */
1004
0, /* tp_weaklistoffset */
1006
0, /* tp_iternext */
1010
DEFERRED_ADDRESS(&MessageType), /* tp_base */
1012
0, /* tp_descr_get */
1013
0, /* tp_descr_set */
1014
0, /* tp_dictoffset */
1015
(initproc)ErrorMessage_tp_init, /* tp_init */
1021
dbus_py_init_message_types(void)
1023
if (PyType_Ready(&MessageType) < 0) return 0;
1025
MethodCallMessageType.tp_base = &MessageType;
1026
if (PyType_Ready(&MethodCallMessageType) < 0) return 0;
1028
MethodReturnMessageType.tp_base = &MessageType;
1029
if (PyType_Ready(&MethodReturnMessageType) < 0) return 0;
1031
SignalMessageType.tp_base = &MessageType;
1032
if (PyType_Ready(&SignalMessageType) < 0) return 0;
1034
ErrorMessageType.tp_base = &MessageType;
1035
if (PyType_Ready(&ErrorMessageType) < 0) return 0;
1041
dbus_py_insert_message_types(PyObject *this_module)
1043
/* PyModule_AddObject steals a ref */
1044
Py_INCREF (&MessageType);
1045
Py_INCREF (&MethodCallMessageType);
1046
Py_INCREF (&MethodReturnMessageType);
1047
Py_INCREF (&ErrorMessageType);
1048
Py_INCREF (&SignalMessageType);
1050
if (PyModule_AddObject(this_module, "Message",
1051
(PyObject *)&MessageType) < 0) return 0;
1053
if (PyModule_AddObject(this_module, "MethodCallMessage",
1054
(PyObject *)&MethodCallMessageType) < 0) return 0;
1056
if (PyModule_AddObject(this_module, "MethodReturnMessage",
1057
(PyObject *)&MethodReturnMessageType) < 0) return 0;
1059
if (PyModule_AddObject(this_module, "ErrorMessage",
1060
(PyObject *)&ErrorMessageType) < 0) return 0;
1062
if (PyModule_AddObject(this_module, "SignalMessage",
1063
(PyObject *)&SignalMessageType) < 0) return 0;
1068
/* vim:set ft=c cino< sw=4 sts=4 et: */