~zulcss/samba/server-dailies-3.4

« back to all changes in this revision

Viewing changes to source4/librpc/rpc/pyrpc.h

  • Committer: Chuck Short
  • Date: 2010-09-28 20:38:39 UTC
  • Revision ID: zulcss@ubuntu.com-20100928203839-pgjulytsi9ue63x1
Initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* 
 
2
   Unix SMB/CIFS implementation.
 
3
   Samba utility functions
 
4
   Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
 
5
   
 
6
   This program is free software; you can redistribute it and/or modify
 
7
   it under the terms of the GNU General Public License as published by
 
8
   the Free Software Foundation; either version 3 of the License, or
 
9
   (at your option) any later version.
 
10
   
 
11
   This program is distributed in the hope that it will be useful,
 
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
   GNU General Public License for more details.
 
15
   
 
16
   You should have received a copy of the GNU General Public License
 
17
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
*/
 
19
 
 
20
#ifndef _PYRPC_H_
 
21
#define _PYRPC_H_
 
22
 
 
23
#include "libcli/util/pyerrors.h"
 
24
#include "librpc/rpc/dcerpc.h"
 
25
 
 
26
#define PY_CHECK_TYPE(type, var, fail) \
 
27
        if (!PyObject_TypeCheck(var, type)) {\
 
28
                PyErr_Format(PyExc_TypeError, "Expected type %s", (type)->tp_name); \
 
29
                fail; \
 
30
        }
 
31
 
 
32
#define dom_sid0_Type dom_sid_Type
 
33
#define dom_sid2_Type dom_sid_Type
 
34
#define dom_sid28_Type dom_sid_Type
 
35
#define dom_sid0_Check dom_sid_Check
 
36
#define dom_sid2_Check dom_sid_Check
 
37
#define dom_sid28_Check dom_sid_Check
 
38
 
 
39
/* This macro is only provided by Python >= 2.3 */
 
40
#ifndef PyAPI_DATA
 
41
#   define PyAPI_DATA(RTYPE) extern RTYPE
 
42
#endif
 
43
 
 
44
typedef struct {
 
45
        PyObject_HEAD
 
46
        struct dcerpc_pipe *pipe;
 
47
} dcerpc_InterfaceObject;
 
48
 
 
49
PyAPI_DATA(PyTypeObject) dcerpc_InterfaceType;
 
50
 
 
51
#define PyErr_FromNdrError(err) Py_BuildValue("(is)", err, ndr_map_error2string(err))
 
52
 
 
53
#define PyErr_SetNdrError(err) \
 
54
                PyErr_SetObject(PyExc_RuntimeError, PyErr_FromNdrError(err))
 
55
 
 
56
void PyErr_SetDCERPCStatus(struct dcerpc_pipe *pipe, NTSTATUS status);
 
57
 
 
58
typedef bool (*py_data_pack_fn) (PyObject *args, PyObject *kwargs, void *r);
 
59
typedef PyObject *(*py_data_unpack_fn) (void *r);
 
60
 
 
61
struct PyNdrRpcMethodDef {
 
62
        const char *name;
 
63
        const char *doc;
 
64
        dcerpc_call_fn call;
 
65
        py_data_pack_fn pack_in_data;
 
66
        py_data_unpack_fn unpack_out_data;
 
67
        uint32_t opnum;
 
68
        const struct ndr_interface_table *table;
 
69
};
 
70
 
 
71
bool PyInterface_AddNdrRpcMethods(PyTypeObject *object, const struct PyNdrRpcMethodDef *mds);
 
72
PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs, const struct ndr_interface_table *table);
 
73
 
 
74
#endif /* _PYRPC_H_ */