s4 librpc rpc pyrpc: Ensure tevent_context deleted last
[bbaumbach/samba-autobuild/.git] / source4 / librpc / rpc / pyrpc.h
index ae622b562c6de5db02a0d3abb7ed2a89e9f21cb3..311ba2d294d88a1a1ddd7b5069dbb444a608ff0e 100644 (file)
 #define _PYRPC_H_
 
 #include "libcli/util/pyerrors.h"
-#include "librpc/rpc/dcerpc.h"
 
-#define PY_CHECK_TYPE(type, var, fail) \
-       if (!PyObject_TypeCheck(var, type)) {\
-               PyErr_Format(PyExc_TypeError, "Expected type %s", (type)->tp_name); \
-               fail; \
+#define PY_CHECK_TYPE(type, var, fail)                                 \
+       if (var == NULL) {                                              \
+               PyErr_Format(PyExc_TypeError,                           \
+                            __location__                               \
+                            ": Expected type '%s' for '%s', got NULL", \
+                            (type)->tp_name, #var);                    \
+               fail;                                                   \
+       } else if (!PyObject_TypeCheck(var, type)) {                    \
+               PyErr_Format(PyExc_TypeError,                           \
+                            __location__                               \
+                            ": Expected type '%s' for '%s' of type '%s'", \
+                            (type)->tp_name, #var, Py_TYPE(var)->tp_name); \
+               fail;                                                   \
        }
 
 #define dom_sid0_Type dom_sid_Type
 #define dom_sid2_Check dom_sid_Check
 #define dom_sid28_Check dom_sid_Check
 
-/* This macro is only provided by Python >= 2.3 */
-#ifndef PyAPI_DATA
-#   define PyAPI_DATA(RTYPE) extern RTYPE
-#endif
-
 typedef struct {
        PyObject_HEAD
+       TALLOC_CTX *mem_ctx;
        struct dcerpc_pipe *pipe;
+       struct dcerpc_binding_handle *binding_handle;
+       struct tevent_context *ev;
 } dcerpc_InterfaceObject;
 
-PyAPI_DATA(PyTypeObject) dcerpc_InterfaceType;
-
-#define PyErr_FromNdrError(err) Py_BuildValue("(is)", err, ndr_map_error2string(err))
-
-#define PyErr_SetNdrError(err) \
-               PyErr_SetObject(PyExc_RuntimeError, PyErr_FromNdrError(err))
-
-void PyErr_SetDCERPCStatus(struct dcerpc_pipe *pipe, NTSTATUS status);
-
-typedef bool (*py_data_pack_fn) (PyObject *args, PyObject *kwargs, void *r);
-typedef PyObject *(*py_data_unpack_fn) (void *r);
-
-struct PyNdrRpcMethodDef {
-       const char *name;
-       const char *doc;
-       dcerpc_call_fn call;
-       py_data_pack_fn pack_in_data;
-       py_data_unpack_fn unpack_out_data;
-       uint32_t opnum;
-       const struct ndr_interface_table *table;
-};
 
-bool PyInterface_AddNdrRpcMethods(PyTypeObject *object, const struct PyNdrRpcMethodDef *mds);
-PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs, const struct ndr_interface_table *table);
+#ifndef NDR_DCERPC_REQUEST_OBJECT_PRESENT
+#define NDR_DCERPC_REQUEST_OBJECT_PRESENT LIBNDR_FLAG_OBJECT_PRESENT
+#endif /* NDR_DCERPC_REQUEST_OBJECT_PRESENT */
 
 #endif /* _PYRPC_H_ */