--- /dev/null
+
+/* Python wrapper functions auto-generated by pidl */
+#include "includes.h"
+#include <Python.h>
+#include "librpc/rpc/dcerpc.h"
+#include "scripting/python/pytalloc.h"
+#include "./ndr_echo.h"
+#include "./ndr_echo_c.h"
+#include "./py_echo.h"
+
+
+staticforward PyTypeObject echo_info1_ObjectType;
+
+static PyObject *py_echo_info1_getattr(PyObject *obj, char *name)
+{
+ struct echo_info1 *object = py_talloc_get_type(obj, struct echo_info1);
+ if (!strcmp(name, "v")) {
+ return PyInt_FromLong(object->v);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info1_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info1 *object = py_talloc_get_type(py_obj, struct echo_info1);
+ if (!strcmp(name, "v")) {
+ /* FIXME: talloc_free(object->v) if necessary */
+ object->v = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info1_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info1",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info1_getattr,
+ .tp_setattr = py_echo_info1_setattr,
+};
+
+static PyObject *py_echo_info1(PyObject *self, PyObject *args)
+{
+ struct echo_info1 *ret = talloc_zero(NULL, struct echo_info1);
+ return py_talloc_import(&echo_info1_ObjectType, ret);
+}
+
+staticforward PyTypeObject echo_info2_ObjectType;
+
+static PyObject *py_echo_info2_getattr(PyObject *obj, char *name)
+{
+ struct echo_info2 *object = py_talloc_get_type(obj, struct echo_info2);
+ if (!strcmp(name, "v")) {
+ return PyInt_FromLong(object->v);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info2_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info2 *object = py_talloc_get_type(py_obj, struct echo_info2);
+ if (!strcmp(name, "v")) {
+ /* FIXME: talloc_free(object->v) if necessary */
+ object->v = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info2_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info2",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info2_getattr,
+ .tp_setattr = py_echo_info2_setattr,
+};
+
+static PyObject *py_echo_info2(PyObject *self, PyObject *args)
+{
+ struct echo_info2 *ret = talloc_zero(NULL, struct echo_info2);
+ return py_talloc_import(&echo_info2_ObjectType, ret);
+}
+
+staticforward PyTypeObject echo_info3_ObjectType;
+
+static PyObject *py_echo_info3_getattr(PyObject *obj, char *name)
+{
+ struct echo_info3 *object = py_talloc_get_type(obj, struct echo_info3);
+ if (!strcmp(name, "v")) {
+ return PyInt_FromLong(object->v);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info3_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info3 *object = py_talloc_get_type(py_obj, struct echo_info3);
+ if (!strcmp(name, "v")) {
+ /* FIXME: talloc_free(object->v) if necessary */
+ object->v = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info3_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info3",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info3_getattr,
+ .tp_setattr = py_echo_info3_setattr,
+};
+
+static PyObject *py_echo_info3(PyObject *self, PyObject *args)
+{
+ struct echo_info3 *ret = talloc_zero(NULL, struct echo_info3);
+ return py_talloc_import(&echo_info3_ObjectType, ret);
+}
+
+staticforward PyTypeObject echo_info4_ObjectType;
+
+static PyObject *py_echo_info4_getattr(PyObject *obj, char *name)
+{
+ struct echo_info4 *object = py_talloc_get_type(obj, struct echo_info4);
+ if (!strcmp(name, "v")) {
+ return PyInt_FromLong(object->v);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info4_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info4 *object = py_talloc_get_type(py_obj, struct echo_info4);
+ if (!strcmp(name, "v")) {
+ /* FIXME: talloc_free(object->v) if necessary */
+ object->v = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info4_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info4",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info4_getattr,
+ .tp_setattr = py_echo_info4_setattr,
+};
+
+static PyObject *py_echo_info4(PyObject *self, PyObject *args)
+{
+ struct echo_info4 *ret = talloc_zero(NULL, struct echo_info4);
+ return py_talloc_import(&echo_info4_ObjectType, ret);
+}
+
+staticforward PyTypeObject echo_info5_ObjectType;
+
+static PyObject *py_echo_info5_getattr(PyObject *obj, char *name)
+{
+ struct echo_info5 *object = py_talloc_get_type(obj, struct echo_info5);
+ if (!strcmp(name, "v1")) {
+ return PyInt_FromLong(object->v1);
+ }
+ if (!strcmp(name, "v2")) {
+ return PyInt_FromLong(object->v2);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info5_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info5 *object = py_talloc_get_type(py_obj, struct echo_info5);
+ if (!strcmp(name, "v1")) {
+ /* FIXME: talloc_free(object->v1) if necessary */
+ object->v1 = PyInt_AsLong(value);
+ return 0;
+ }
+ if (!strcmp(name, "v2")) {
+ /* FIXME: talloc_free(object->v2) if necessary */
+ object->v2 = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info5_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info5",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info5_getattr,
+ .tp_setattr = py_echo_info5_setattr,
+};
+
+static PyObject *py_echo_info5(PyObject *self, PyObject *args)
+{
+ struct echo_info5 *ret = talloc_zero(NULL, struct echo_info5);
+ return py_talloc_import(&echo_info5_ObjectType, ret);
+}
+
+staticforward PyTypeObject echo_info6_ObjectType;
+
+static PyObject *py_echo_info6_getattr(PyObject *obj, char *name)
+{
+ struct echo_info6 *object = py_talloc_get_type(obj, struct echo_info6);
+ if (!strcmp(name, "v1")) {
+ return PyInt_FromLong(object->v1);
+ }
+ if (!strcmp(name, "info1")) {
+ return py_talloc_import(&echo_info1_ObjectType, object->info1);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info6_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info6 *object = py_talloc_get_type(py_obj, struct echo_info6);
+ if (!strcmp(name, "v1")) {
+ /* FIXME: talloc_free(object->v1) if necessary */
+ object->v1 = PyInt_AsLong(value);
+ return 0;
+ }
+ if (!strcmp(name, "info1")) {
+ /* FIXME: talloc_free(object->info1) if necessary */
+ object->info1 = py_talloc_get_type(value, struct echo_info1);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info6_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info6",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info6_getattr,
+ .tp_setattr = py_echo_info6_setattr,
+};
+
+static PyObject *py_echo_info6(PyObject *self, PyObject *args)
+{
+ struct echo_info6 *ret = talloc_zero(NULL, struct echo_info6);
+ return py_talloc_import(&echo_info6_ObjectType, ret);
+}
+
+staticforward PyTypeObject echo_info7_ObjectType;
+
+static PyObject *py_echo_info7_getattr(PyObject *obj, char *name)
+{
+ struct echo_info7 *object = py_talloc_get_type(obj, struct echo_info7);
+ if (!strcmp(name, "v1")) {
+ return PyInt_FromLong(object->v1);
+ }
+ if (!strcmp(name, "info4")) {
+ return py_talloc_import(&echo_info4_ObjectType, object->info4);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_info7_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_info7 *object = py_talloc_get_type(py_obj, struct echo_info7);
+ if (!strcmp(name, "v1")) {
+ /* FIXME: talloc_free(object->v1) if necessary */
+ object->v1 = PyInt_AsLong(value);
+ return 0;
+ }
+ if (!strcmp(name, "info4")) {
+ /* FIXME: talloc_free(object->info4) if necessary */
+ object->info4 = py_talloc_get_type(value, struct echo_info4);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_info7_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_info7",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_info7_getattr,
+ .tp_setattr = py_echo_info7_setattr,
+};
+
+static PyObject *py_echo_info7(PyObject *self, PyObject *args)
+{
+ struct echo_info7 *ret = talloc_zero(NULL, struct echo_info7);
+ return py_talloc_import(&echo_info7_ObjectType, ret);
+}
+
+PyObject *py_import_echo_Info(int level, union echo_Info *in)
+{
+ switch (level) {
+ case 1: return py_talloc_import(&echo_info1_ObjectType, in->info1);
+ case 2: return py_talloc_import(&echo_info2_ObjectType, in->info2);
+ case 3: return py_talloc_import(&echo_info3_ObjectType, in->info3);
+ case 4: return py_talloc_import(&echo_info4_ObjectType, in->info4);
+ case 5: return py_talloc_import(&echo_info5_ObjectType, in->info5);
+ case 6: return py_talloc_import(&echo_info6_ObjectType, in->info6);
+ case 7: return py_talloc_import(&echo_info7_ObjectType, in->info7);
+ }
+ PyErr_SetString(PyExc_TypeError, "unknown union level");
+ return NULL;
+}
+
+union echo_Info *py_export_echo_Info(TALLOC_CTX *mem_ctx, int level, PyObject *in)
+{
+ union echo_Info *ret = talloc_zero(mem_ctx, union echo_Info);
+ switch (level) {
+ case 1:
+ ret->info1 = py_talloc_get_type(in, struct echo_info1);
+ break;
+
+ case 2:
+ ret->info2 = py_talloc_get_type(in, struct echo_info2);
+ break;
+
+ case 3:
+ ret->info3 = py_talloc_get_type(in, struct echo_info3);
+ break;
+
+ case 4:
+ ret->info4 = py_talloc_get_type(in, struct echo_info4);
+ break;
+
+ case 5:
+ ret->info5 = py_talloc_get_type(in, struct echo_info5);
+ break;
+
+ case 6:
+ ret->info6 = py_talloc_get_type(in, struct echo_info6);
+ break;
+
+ case 7:
+ ret->info7 = py_talloc_get_type(in, struct echo_info7);
+ break;
+
+ default:
+ PyErr_SetString(PyExc_TypeError, "invalid union level value");
+ talloc_free(ret);
+ ret = NULL;
+ }
+
+ return ret;
+}
+
+staticforward PyTypeObject echo_Enum2_ObjectType;
+
+static PyObject *py_echo_Enum2_getattr(PyObject *obj, char *name)
+{
+ struct echo_Enum2 *object = py_talloc_get_type(obj, struct echo_Enum2);
+ if (!strcmp(name, "e1")) {
+ return PyInt_FromLong(object->e1);
+ }
+ if (!strcmp(name, "e2")) {
+ return PyInt_FromLong(object->e2);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_Enum2_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_Enum2 *object = py_talloc_get_type(py_obj, struct echo_Enum2);
+ if (!strcmp(name, "e1")) {
+ /* FIXME: talloc_free(object->e1) if necessary */
+ object->e1 = PyInt_AsLong(value);
+ return 0;
+ }
+ if (!strcmp(name, "e2")) {
+ /* FIXME: talloc_free(object->e2) if necessary */
+ object->e2 = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_Enum2_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_Enum2",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_Enum2_getattr,
+ .tp_setattr = py_echo_Enum2_setattr,
+};
+
+static PyObject *py_echo_Enum2(PyObject *self, PyObject *args)
+{
+ struct echo_Enum2 *ret = talloc_zero(NULL, struct echo_Enum2);
+ return py_talloc_import(&echo_Enum2_ObjectType, ret);
+}
+
+PyObject *py_import_echo_Enum3(int level, union echo_Enum3 *in)
+{
+ switch (level) {
+ case ECHO_ENUM1: return PyInt_FromLong(in->e1);
+ case ECHO_ENUM2: return py_talloc_import(&echo_Enum2_ObjectType, in->e2);
+ }
+ PyErr_SetString(PyExc_TypeError, "unknown union level");
+ return NULL;
+}
+
+union echo_Enum3 *py_export_echo_Enum3(TALLOC_CTX *mem_ctx, int level, PyObject *in)
+{
+ union echo_Enum3 *ret = talloc_zero(mem_ctx, union echo_Enum3);
+ switch (level) {
+ case ECHO_ENUM1:
+ ret->e1 = PyInt_AsLong(in);
+ break;
+
+ case ECHO_ENUM2:
+ ret->e2 = py_talloc_get_type(in, struct echo_Enum2);
+ break;
+
+ default:
+ PyErr_SetString(PyExc_TypeError, "invalid union level value");
+ talloc_free(ret);
+ ret = NULL;
+ }
+
+ return ret;
+}
+
+staticforward PyTypeObject echo_Surrounding_ObjectType;
+
+static PyObject *py_echo_Surrounding_getattr(PyObject *obj, char *name)
+{
+ struct echo_Surrounding *object = py_talloc_get_type(obj, struct echo_Surrounding);
+ if (!strcmp(name, "x")) {
+ return PyInt_FromLong(object->x);
+ }
+ if (!strcmp(name, "surrounding")) {
+ return PyInt_FromLong(object->surrounding);
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return NULL;
+}
+
+static int py_echo_Surrounding_setattr(PyObject *py_obj, char *name, PyObject *value)
+{
+ struct echo_Surrounding *object = py_talloc_get_type(py_obj, struct echo_Surrounding);
+ if (!strcmp(name, "x")) {
+ /* FIXME: talloc_free(object->x) if necessary */
+ object->x = PyInt_AsLong(value);
+ return 0;
+ }
+ if (!strcmp(name, "surrounding")) {
+ /* FIXME: talloc_free(object->surrounding) if necessary */
+ object->surrounding = PyInt_AsLong(value);
+ return 0;
+ }
+ PyErr_SetString(PyExc_AttributeError, "no such attribute");
+ return -1;
+}
+
+static PyTypeObject echo_Surrounding_ObjectType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "echo_Surrounding",
+ .tp_basicsize = sizeof(py_talloc_Object),
+ .tp_dealloc = py_talloc_dealloc,
+ .tp_getattr = py_echo_Surrounding_getattr,
+ .tp_setattr = py_echo_Surrounding_setattr,
+};
+
+static PyObject *py_echo_Surrounding(PyObject *self, PyObject *args)
+{
+ struct echo_Surrounding *ret = talloc_zero(NULL, struct echo_Surrounding);
+ return py_talloc_import(&echo_Surrounding_ObjectType, ret);
+}
+
+staticforward PyTypeObject rpcecho_InterfaceType;
+typedef struct {
+ PyObject_HEAD
+ struct dcerpc_pipe *pipe;
+} rpcecho_InterfaceObject;
+
+static PyObject *py_echo_AddOne(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_AddOne r;
+ PyObject *result;
+ PyObject *py_in_data;
+
+ ZERO_STRUCT(r.out);
+ r.in.in_data = PyInt_AsLong(py_in_data);
+ status = dcerpc_echo_AddOne(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.out_data));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_EchoData(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_EchoData r;
+ PyObject *result;
+ PyObject *py_len;
+ PyObject *py_in_data;
+
+ ZERO_STRUCT(r.out);
+ r.in.len = PyInt_AsLong(py_len);
+ r.in.in_data = PyInt_AsLong(py_in_data);
+ status = dcerpc_echo_EchoData(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.out_data));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_SinkData(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_SinkData r;
+ PyObject *result;
+ PyObject *py_len;
+ PyObject *py_data;
+ r.in.len = PyInt_AsLong(py_len);
+ r.in.data = PyInt_AsLong(py_data);
+ status = dcerpc_echo_SinkData(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(0);
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_SourceData(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_SourceData r;
+ PyObject *result;
+ PyObject *py_len;
+
+ ZERO_STRUCT(r.out);
+ r.in.len = PyInt_AsLong(py_len);
+ status = dcerpc_echo_SourceData(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.data));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_TestCall(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_TestCall r;
+ PyObject *result;
+ PyObject *py_s1;
+
+ ZERO_STRUCT(r.out);
+ r.in.s1 = PyInt_AsLong(py_s1);
+ status = dcerpc_echo_TestCall(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.s2));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_TestCall2(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_TestCall2 r;
+ PyObject *result;
+ PyObject *py_level;
+
+ ZERO_STRUCT(r.out);
+ r.in.level = PyInt_AsLong(py_level);
+ status = dcerpc_echo_TestCall2(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(2);
+ PyTuple_SetItem(result, 0, py_import_echo_Info(r.out.info));
+ PyTuple_SetItem(result, 1, PyInt_FromLong(NT_STATUS_V(r.out.result)));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_TestSleep(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_TestSleep r;
+ PyObject *result;
+ PyObject *py_seconds;
+ r.in.seconds = PyInt_AsLong(py_seconds);
+ status = dcerpc_echo_TestSleep(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.result));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_TestEnum(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_TestEnum r;
+ PyObject *result;
+ PyObject *py_foo1;
+ PyObject *py_foo2;
+ PyObject *py_foo3;
+
+ ZERO_STRUCT(r.out);
+ r.in.foo1 = PyInt_AsLong(py_foo1);
+ r.in.foo2 = py_talloc_get_type(py_foo2, struct echo_Enum2);
+ r.in.foo3 = py_export_echo_Enum3(py_foo3);
+ status = dcerpc_echo_TestEnum(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(3);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.foo1));
+ PyTuple_SetItem(result, 1, py_talloc_import(&echo_Enum2_ObjectType, r.out.foo2));
+ PyTuple_SetItem(result, 2, py_import_echo_Enum3(r.out.foo3));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_TestSurrounding(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_TestSurrounding r;
+ PyObject *result;
+ PyObject *py_data;
+
+ ZERO_STRUCT(r.out);
+ r.in.data = py_talloc_get_type(py_data, struct echo_Surrounding);
+ status = dcerpc_echo_TestSurrounding(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, py_talloc_import(&echo_Surrounding_ObjectType, r.out.data));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyObject *py_echo_TestDoublePointer(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *iface = (rpcecho_InterfaceObject *)self;
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ struct echo_TestDoublePointer r;
+ PyObject *result;
+ PyObject *py_data;
+ r.in.data = PyInt_AsLong(py_data);
+ status = dcerpc_echo_TestDoublePointer(iface->pipe, mem_ctx, &r);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ result = PyTuple_New(1);
+ PyTuple_SetItem(result, 0, PyInt_FromLong(r.out.result));
+ talloc_free(mem_ctx);
+ return result;
+}
+
+static PyMethodDef interface_rpcecho_methods[] = {
+ { "echo_AddOne", (PyCFunction)py_echo_AddOne, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_EchoData", (PyCFunction)py_echo_EchoData, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_SinkData", (PyCFunction)py_echo_SinkData, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_SourceData", (PyCFunction)py_echo_SourceData, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_TestCall", (PyCFunction)py_echo_TestCall, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_TestCall2", (PyCFunction)py_echo_TestCall2, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_TestSleep", (PyCFunction)py_echo_TestSleep, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_TestEnum", (PyCFunction)py_echo_TestEnum, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_TestSurrounding", (PyCFunction)py_echo_TestSurrounding, METH_VARARGS|METH_KEYWORDS, NULL },
+ { "echo_TestDoublePointer", (PyCFunction)py_echo_TestDoublePointer, METH_VARARGS|METH_KEYWORDS, NULL },
+ { NULL, NULL, 0, NULL }
+};
+
+static void interface_rpcecho_dealloc(PyObject* self)
+{
+ rpcecho_InterfaceObject *interface = (rpcecho_InterfaceObject *)self;
+ talloc_free(interface->pipe);
+ PyObject_Del(self);
+}
+
+static PyObject *interface_rpcecho_getattr(PyObject *obj, char *name)
+{
+ return Py_FindMethod(interface_rpcecho_methods, obj, name);
+}
+
+static PyTypeObject rpcecho_InterfaceType = {
+ PyObject_HEAD_INIT(NULL) 0,
+ .tp_name = "rpcecho",
+ .tp_basicsize = sizeof(rpcecho_InterfaceObject),
+ .tp_dealloc = (destructor)interface_rpcecho_dealloc,
+ .tp_getattr = (getattrfunc)interface_rpcecho_getattr,
+};
+
+static PyObject *interface_rpcecho(PyObject *self, PyObject *args)
+{
+ rpcecho_InterfaceObject *ret;
+ const char *binding_string;
+ struct cli_credentials *credentials;
+ struct loadparm_context *lp_ctx;
+ TALLOC_CTX *mem_ctx = NULL;
+ NTSTATUS status;
+
+ ret = PyObject_New(rpcecho_InterfaceObject, &rpcecho_InterfaceType);
+
+ status = dcerpc_pipe_connect(NULL, &ret->pipe, binding_string,
+ &ndr_table_rpcecho, credentials, NULL, lp_ctx);
+ if (NT_STATUS_IS_ERR(status)) {
+ PyErr_SetString(PyExc_RuntimeError, nt_errstr(status));
+ talloc_free(mem_ctx);
+ return NULL;
+ }
+
+ return (PyObject *)ret;
+}
+
+static PyMethodDef echo_methods[] = {
+ { "info1", (PyCFunction)py_echo_info1, METH_NOARGS, NULL },
+ { "info2", (PyCFunction)py_echo_info2, METH_NOARGS, NULL },
+ { "info3", (PyCFunction)py_echo_info3, METH_NOARGS, NULL },
+ { "info4", (PyCFunction)py_echo_info4, METH_NOARGS, NULL },
+ { "info5", (PyCFunction)py_echo_info5, METH_NOARGS, NULL },
+ { "info6", (PyCFunction)py_echo_info6, METH_NOARGS, NULL },
+ { "info7", (PyCFunction)py_echo_info7, METH_NOARGS, NULL },
+ { "Enum2", (PyCFunction)py_echo_Enum2, METH_NOARGS, NULL },
+ { "Surrounding", (PyCFunction)py_echo_Surrounding, METH_NOARGS, NULL },
+ { "rpcecho", (PyCFunction)interface_rpcecho, METH_VARARGS|METH_KEYWORDS, NULL },
+ { NULL, NULL, 0, NULL }
+};
+
+void initecho(void)
+{
+ PyObject *m;
+ m = Py_InitModule("echo", echo_methods);
+ PyModule_AddObject(m, "ECHO_ENUM1", PyInt_FromLong(ECHO_ENUM1));
+ PyModule_AddObject(m, "ECHO_ENUM2_32", PyInt_FromLong(ECHO_ENUM2_32));
+ PyModule_AddObject(m, "ECHO_ENUM2", PyInt_FromLong(ECHO_ENUM2));
+ PyModule_AddObject(m, "ECHO_ENUM1_32", PyInt_FromLong(ECHO_ENUM1_32));
+}