Revision: 440
http://vde.svn.sourceforge.net/vde/?rev=440&view=rev
Author: danielel
Date: 2010-08-13 09:10:00 +0000 (Fri, 13 Aug 2010)
Log Message:
-----------
Added rudimental Python libvdeplug wrapper
Modified Paths:
--------------
trunk/vde-2/configure.ac
trunk/vde-2/src/lib/Makefile.am
Added Paths:
-----------
trunk/vde-2/src/lib/python/
trunk/vde-2/src/lib/python/Makefile
trunk/vde-2/src/lib/python/VdePlug.py
trunk/vde-2/src/lib/python/VdePlug_example.py
trunk/vde-2/src/lib/python/vdeplug_python.c
Modified: trunk/vde-2/configure.ac
===================================================================
--- trunk/vde-2/configure.ac 2010-08-04 14:42:59 UTC (rev 439)
+++ trunk/vde-2/configure.ac 2010-08-13 09:10:00 UTC (rev 440)
@@ -23,6 +23,10 @@
AC_CHECK_LIB([crypto], [EVP_EncryptInit],
[add_cryptcab_support=yes],
[add_cryptcab_support=no ; warn_cryptcab=yes])
+
+PYTHONINCLUDEDIR=`python -c "from distutils.sysconfig import get_python_inc;
print get_python_inc();"`
+AC_CHECK_HEADERS([$PYTHONINCLUDEDIR/Python.h], [add_python_support=yes],
+ [add_python_support=no; warn_python=no])
AC_CHECK_LIB([pcap], [pcap_open_dead],
[add_pcap=yes],
[add_pcap=no ; warn_pcap=yes])
@@ -177,6 +181,7 @@
fi])
AM_CONDITIONAL(ENABLE_CRYPTCAB, test "$add_cryptcab_support" = yes)
+AM_CONDITIONAL(ENABLE_PYTHON, test "$add_python_support" = yes)
AM_CONDITIONAL(ENABLE_PCAP, test "$add_pcap" = yes)
AM_CONDITIONAL(CAN_MAKE_LIBVDETAP, test "$can_make_libvdetap" = yes)
AM_CONDITIONAL(CAN_MAKE_VDETUNCTL, test "$can_make_vdetunctl" = yes)
@@ -223,6 +228,12 @@
echo " - VDE CryptCab............ disabled"
fi
+if test x$add_python_support = "xyes" ; then
+ echo " + Python Libraries........ enabled"
+else
+ echo " - Python Libraries........ disabled"
+fi
+
if test x$warn_tuntap = "xyes" ; then
echo " - TAP support............. disabled"
else
@@ -263,6 +274,14 @@
fi
fi
+if ! test x$add_python_support = "xyes" ; then
+ if test x$warn_python = "xyes" ; then
+ AC_MSG_WARN([Python libraries support has been disabled because
python is
+not installed on your system, or because it could not be
+found. Please install it if you want Python libraries to be compiled and
installed.])
+ fi
+fi
+
if ! test x$add_pcap = "xyes" ; then
if test x$warn_pcap = "xyes" ; then
AC_MSG_WARN([VDE vde_pcapplug and packet dump plugin have been
disabled because
Modified: trunk/vde-2/src/lib/Makefile.am
===================================================================
--- trunk/vde-2/src/lib/Makefile.am 2010-08-04 14:42:59 UTC (rev 439)
+++ trunk/vde-2/src/lib/Makefile.am 2010-08-13 09:10:00 UTC (rev 440)
@@ -27,6 +27,10 @@
libvdehist_la_LIBADD = $(LIBADD)
libvdehist_la_LDFLAGS = $(AM_LDFLAGS) -version-number 0:0:1 -export-dynamic
+if ENABLE_PYTHON
+ SUBDIRS = python
+endif
+
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = vdesnmp.pc vdemgmt.pc vdeplug.pc vdehist.pc
Added: trunk/vde-2/src/lib/python/Makefile
===================================================================
--- trunk/vde-2/src/lib/python/Makefile (rev 0)
+++ trunk/vde-2/src/lib/python/Makefile 2010-08-13 09:10:00 UTC (rev 440)
@@ -0,0 +1,27 @@
+PYTHONINCLUDEDIR=`python -c "from distutils.sysconfig import get_python_inc;
print get_python_inc();"`
+PYTHONLIBDIR=`python -c "from distutils.sysconfig import get_python_lib; print
get_python_lib();"`
+
+
+
+all: vdeplug_python.so
+
+vdeplug_python.o: vdeplug_python.c
+ gcc -c vdeplug_python.c -I /usr/include/python2.5
+
+vdeplug_python.so: vdeplug_python.o
+ gcc -shared vdeplug_python.o /usr/lib/libvdeplug.so -o vdeplug_python.so
+
+distclean: clean
+
+clean:
+ rm -f *.so *.o *.pyc
+
+install:
+ install vdeplug_python.so $(PYTHONLIBDIR)
+ @echo INCLUDES are in $(PYTHONINCLUDEDIR)
+ @echo LIBS are in $(PYTHONLIBDIR)
+ install VdePlug.py $(PYTHONLIBDIR)
+
+uninstall:
+ rm -f $(PREFIX)/lib/vdeplug_python.so
+ rm -f $(PYTHONLIBDIR)/VdePlug.py
Added: trunk/vde-2/src/lib/python/VdePlug.py
===================================================================
--- trunk/vde-2/src/lib/python/VdePlug.py (rev 0)
+++ trunk/vde-2/src/lib/python/VdePlug.py 2010-08-13 09:10:00 UTC (rev
440)
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+'''
+
+ LibVdePlug/python wrapper
+ Copyright 2010 Daniele Lacamera
+
+ Released under the terms of GNU GPL v.2
+
+'''
+
+import vdeplug_python
+import os
+from array import array
+
+
+class VdePlug:
+
+ def __init__(self, sock=None, descr="Python", port=0, group=None,
mode=0):
+ self._magic = vdeplug_python.open(sock, descr)
+
+ self._ctl = os.fdopen(vdeplug_python.ctlfd(self._magic))
+ self._data = os.fdopen(vdeplug_python.datafd(self._magic),
'wb+', os.O_NONBLOCK)
+
+ def ctlfd(self):
+ return self._ctl
+
+ def datafd(self):
+ return self._data
+
+ def send(self, buffer):
+ a = array('B', buffer)
+ r = self._data.write(a)
+ self._data.flush()
+ return r
+
+ def recv(self, size):
+ return os.read(self._data.fileno(), size)
+
+ def close(self):
+ vdeplug_python.close(self._magic)
+ self._magic = None
+
+
+
+
Property changes on: trunk/vde-2/src/lib/python/VdePlug.py
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/vde-2/src/lib/python/VdePlug_example.py
===================================================================
--- trunk/vde-2/src/lib/python/VdePlug_example.py
(rev 0)
+++ trunk/vde-2/src/lib/python/VdePlug_example.py 2010-08-13 09:10:00 UTC
(rev 440)
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+from VdePlug import VdePlug
+from select import poll
+import os, sys, struct
+from select import POLLIN, POLLOUT, POLLHUP, POLLERR, POLLNVAL
+
+
+v = VdePlug(sys.argv[1])
+p = poll()
+p.register(sys.stdin.fileno(), POLLIN)
+p.register(v.datafd().fileno(), POLLIN)
+while(True):
+ pollret = p.poll()
+ for (f,e) in pollret:
+ if f == v.datafd().fileno() and (e & POLLIN):
+ buffer = v.recv(2000)
+ lh = (len(buffer)>>8) & 0xFF
+ ll = len(buffer) & 0xFF
+ a = struct.pack("BB", lh, ll)
+ sys.stdout.write(a)
+ sys.stdout.write(buffer)
+ sys.stdout.flush()
+ elif f == sys.stdin.fileno() and (e & POLLIN):
+ hdr = os.read(f, 2)
+ (toth, totl) = struct.unpack("BB", hdr)
+ tot = (toth << 8) + totl
+ buffer = os.read(f, tot)
+ v.send(buffer)
+
+
Property changes on: trunk/vde-2/src/lib/python/VdePlug_example.py
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/vde-2/src/lib/python/vdeplug_python.c
===================================================================
--- trunk/vde-2/src/lib/python/vdeplug_python.c (rev 0)
+++ trunk/vde-2/src/lib/python/vdeplug_python.c 2010-08-13 09:10:00 UTC (rev
440)
@@ -0,0 +1,103 @@
+/*
+ * LibVdePlug/python wrapper
+ * Copyright © 2010 Daniele Lacamera
+ *
+ * Released under the terms of GNU GPL v.2
+ *
+ */
+#include "Python.h"
+#include <stdio.h>
+#include "libvdeplug.h"
+
+
+static PyObject *vdeplug_open(PyObject *self, PyObject *args)
+{
+ struct vde_open_args vde_args = {0,NULL,0};
+ char *vde_sock = NULL, *vde_descr = NULL;
+ VDECONN *ret;
+ int e;
+
+ if (!PyArg_ParseTuple(args, "ss|isi", &vde_sock, &vde_descr,
&vde_args.port, &vde_args.group, &vde_args.mode))
+ goto failure;
+
+ ret = vde_open_real(vde_sock, vde_descr, 1, &vde_args);
+ e = errno;
+ if (!ret)
+ goto failure;
+ else
+ return PyLong_FromUnsignedLong((unsigned long) ret);
+
+
+failure:
+ return PyErr_SetFromErrno(PyExc_RuntimeError);
+}
+
+static PyObject *vdeplug_ctlfd(PyObject *self, PyObject *args)
+{
+ VDECONN *conn;
+ unsigned long vde_magic = 0;
+
+ if (!PyArg_ParseTuple(args, "k", &vde_magic))
+ goto failure;
+ conn = (VDECONN *) vde_magic;
+
+ if (!conn)
+ goto failure;
+
+ return Py_BuildValue("i", vde_ctlfd(conn));
+
+failure:
+ return PyErr_SetFromErrno(PyExc_RuntimeError);
+}
+
+static PyObject *vdeplug_datafd(PyObject *self, PyObject *args)
+{
+ VDECONN *conn;
+ unsigned long vde_magic = 0;
+
+ if (!PyArg_ParseTuple(args, "k", &vde_magic))
+ goto failure;
+ conn = (VDECONN *) vde_magic;
+
+ if (!conn)
+ goto failure;
+
+ return Py_BuildValue("i", vde_datafd(conn));
+
+failure:
+ return PyErr_SetFromErrno(PyExc_RuntimeError);
+}
+
+static PyObject *vdeplug_close(PyObject *self, PyObject *args)
+{
+ VDECONN *conn;
+ unsigned long vde_magic = 0;
+
+ if (!PyArg_ParseTuple(args, "k", &vde_magic))
+ goto failure;
+ conn = (VDECONN *) vde_magic;
+
+ if (!conn)
+ goto failure;
+
+ return Py_BuildValue("i", vde_close(conn));
+
+failure:
+ return PyErr_SetFromErrno(PyExc_RuntimeError);
+}
+
+
+
+static PyMethodDef vdeplug_methods[] = {
+ {"open", vdeplug_open, METH_VARARGS},
+ {"ctlfd", vdeplug_ctlfd, METH_VARARGS},
+ {"datafd", vdeplug_datafd, METH_VARARGS},
+ {"close", vdeplug_close, METH_VARARGS},
+ {NULL, NULL} /* Sentinel */
+};
+
+void initvdeplug_python(void)
+{
+ (void) Py_InitModule("vdeplug_python", vdeplug_methods);
+// PyErr_SetString(PyExc_RuntimeError,"vdeplug error");
+}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
This SF.net email is sponsored by
Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev
_______________________________________________
vde-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vde-users