pymessaging: Pass around the server_id struct to python callbacks rather than the...
authorAndrew Bartlett <abartlet@samba.org>
Fri, 25 Jan 2013 22:09:23 +0000 (09:09 +1100)
committerStefan Metzmacher <metze@samba.org>
Sat, 26 Jan 2013 13:19:57 +0000 (14:19 +0100)
This is not used currently, but may avoid going to and from the python types when we do not need to.

Andrew Bartlett

Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/lib/messaging/pymessaging.c

index f8703b25afeb2a6dd94987704d37922fe8a43646..3901d4d599c11cec262dca8853cbd0b49b613087 100644 (file)
@@ -163,10 +163,20 @@ static void py_msg_callback_wrapper(struct imessaging_context *msg, void *privat
                               uint32_t msg_type, 
                               struct server_id server_id, DATA_BLOB *data)
 {
-       PyObject *callback = (PyObject *)private_data;
+       PyObject *py_server_id, *callback = (PyObject *)private_data;
 
-       PyObject_CallFunction(callback, discard_const_p(char, "i(KII)s#"), msg_type,
-                             server_id.pid, server_id.task_id, server_id.vnn,
+       struct server_id *p_server_id = talloc(NULL, struct server_id);
+       if (!p_server_id) {
+               PyErr_NoMemory();
+               return;
+       }
+       *p_server_id = server_id;
+
+       py_server_id = py_return_ndr_struct("samba.dcerpc.server_id", "server_id", p_server_id, p_server_id);
+       talloc_unlink(NULL, p_server_id);
+
+       PyObject_CallFunction(callback, discard_const_p(char, "i(O)s#"), msg_type,
+                             py_server_id,
                              data->data, data->length);
 }