mirror of
https://github.com/samba-team/samba.git
synced 2025-07-23 20:59:10 +03:00
pidl/python: Support repr() for python types.
(This used to be commit cf3664594d
)
This commit is contained in:
@ -214,6 +214,7 @@ sub PythonStruct($$$$)
|
||||
$self->pidl(".tp_dealloc = py_talloc_dealloc,");
|
||||
$self->pidl(".tp_getattr = py_$name\_getattr,");
|
||||
$self->pidl(".tp_setattr = py_$name\_setattr,");
|
||||
$self->pidl(".tp_repr = py_talloc_default_repr,");
|
||||
$self->deindent;
|
||||
$self->pidl("};");
|
||||
|
||||
@ -559,6 +560,8 @@ sub ConvertScalarToPython($$$)
|
||||
{
|
||||
my ($self, $ctypename, $cvar) = @_;
|
||||
|
||||
die("expected string for $cvar, not $ctypename") if (ref($ctypename) eq "HASH");
|
||||
|
||||
$ctypename = expandAlias($ctypename);
|
||||
|
||||
if ($ctypename =~ /^(int|long|char|u?int[0-9]+|hyper|dlong|udlong|udlongr|time_t|NTTIME_hyper|NTTIME|NTTIME_1sec)$/) {
|
||||
@ -583,7 +586,7 @@ sub ConvertScalarToPython($$$)
|
||||
|
||||
if ($ctypename eq "string_array") { return "FIXME($cvar)"; }
|
||||
|
||||
if ($$ctypename eq "ipv4address") { return "FIXME($cvar)"; }
|
||||
if ($ctypename eq "ipv4address") { return "FIXME($cvar)"; }
|
||||
if ($ctypename eq "pointer") {
|
||||
return "PyCObject_FromVoidPtr($cvar, talloc_free)";
|
||||
}
|
||||
@ -614,8 +617,15 @@ sub ConvertObjectToPython($$$)
|
||||
$actual_ctype = $ctype->{DATA};
|
||||
}
|
||||
|
||||
if ($actual_ctype->{TYPE} eq "ENUM" or $actual_ctype->{TYPE} eq "BITMAP" or
|
||||
($actual_ctype->{TYPE} eq "SCALAR") {
|
||||
if ($actual_ctype->{TYPE} eq "ENUM") {
|
||||
return $self->ConvertScalarToPython(Parse::Pidl::Typelist::enum_type_fn($actual_ctype), $cvar);
|
||||
}
|
||||
|
||||
if ($actual_ctype->{TYPE} eq "BITMAP") {
|
||||
return $self->ConvertScalarToPython(Parse::Pidl::Typelist::bitmap_type_fn($actual_ctype), $cvar);
|
||||
}
|
||||
|
||||
if ($actual_ctype->{TYPE} eq "SCALAR") {
|
||||
return $self->ConvertScalarToPython($actual_ctype->{NAME}, $cvar);
|
||||
}
|
||||
|
||||
@ -675,18 +685,18 @@ sub Parse($$$$$)
|
||||
$self->indent;
|
||||
$self->pidl("PyObject *m;");
|
||||
$self->pidl("m = Py_InitModule(\"$basename\", $basename\_methods);");
|
||||
foreach (keys %{$self->{constants}}) {
|
||||
foreach my $name (keys %{$self->{constants}}) {
|
||||
my $py_obj;
|
||||
my ($ctype, $cvar) = @{$self->{constants}->{$_}};
|
||||
my ($ctype, $cvar) = @{$self->{constants}->{$name}};
|
||||
if ($cvar =~ /^[0-9]+$/ or $cvar =~ /^0x[0-9a-fA-F]+$/) {
|
||||
$py_obj = "PyInt_FromLong($cvar)";
|
||||
} elsif ($cvar =~ /^".*"$/) {
|
||||
$py_obj = "PyString_FromString($cvar)";
|
||||
} else {
|
||||
$py_obj = $self->ConvertScalarToPython($ctype, $cvar);
|
||||
$py_obj = $self->ConvertObjectToPython($ctype, $cvar);
|
||||
}
|
||||
|
||||
$self->pidl("PyModule_AddObject(m, \"$_\", $py_obj);");
|
||||
$self->pidl("PyModule_AddObject(m, \"$name\", $py_obj);");
|
||||
}
|
||||
$self->deindent;
|
||||
$self->pidl("}");
|
||||
|
818
source4/py_echo.c
Normal file
818
source4/py_echo.c
Normal file
@ -0,0 +1,818 @@
|
||||
|
||||
/* 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));
|
||||
}
|
8
source4/py_echo.h
Normal file
8
source4/py_echo.h
Normal file
@ -0,0 +1,8 @@
|
||||
/* header auto-generated by pidl */
|
||||
|
||||
#ifndef _HEADER_PYTHON_rpcecho
|
||||
#define _HEADER_PYTHON_rpcecho
|
||||
|
||||
|
||||
|
||||
#endif /* _HEADER_NDR_rpcecho */
|
@ -22,7 +22,7 @@
|
||||
void py_talloc_dealloc(PyObject* self)
|
||||
{
|
||||
py_talloc_Object *obj = (py_talloc_Object *)self;
|
||||
talloc_free(obj->object);
|
||||
talloc_free(obj->talloc_ptr);
|
||||
PyObject_Del(self);
|
||||
}
|
||||
|
||||
@ -32,3 +32,11 @@ PyObject *py_talloc_import(PyTypeObject *py_type, void *ptr)
|
||||
ret->talloc_ptr = talloc_reference(NULL, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
PyObject *py_talloc_default_repr(PyObject *py_obj)
|
||||
{
|
||||
py_talloc_Object *obj = (py_talloc_Object *)py_obj;
|
||||
|
||||
return PyString_FromFormat("<talloc: %s>",
|
||||
talloc_get_name(obj->talloc_ptr));
|
||||
}
|
||||
|
@ -40,4 +40,7 @@ void py_talloc_dealloc(PyObject* self);
|
||||
|
||||
PyObject *py_talloc_import(PyTypeObject *py_type, void *ptr);
|
||||
|
||||
/* Sane default implementation of reprfunc. */
|
||||
PyObject *py_talloc_default_repr(PyObject *py_obj);
|
||||
|
||||
#endif /* _PY_TALLOC_H_ */
|
||||
|
Reference in New Issue
Block a user