Revision: 442
          http://vde.svn.sourceforge.net/vde/?rev=442&view=rev
Author:   danielel
Date:     2010-08-14 15:38:50 +0000 (Sat, 14 Aug 2010)

Log Message:
-----------
* Python VdePlug library now has its own stream implementation.
* Added another python vde_plug clone as example for class VdeStream 

Modified Paths:
--------------
    trunk/vde-2/src/lib/python/VdePlug.py

Added Paths:
-----------
    trunk/vde-2/src/lib/python/VdeStream_example.py

Modified: trunk/vde-2/src/lib/python/VdePlug.py
===================================================================
--- trunk/vde-2/src/lib/python/VdePlug.py       2010-08-13 13:44:44 UTC (rev 
441)
+++ trunk/vde-2/src/lib/python/VdePlug.py       2010-08-14 15:38:50 UTC (rev 
442)
@@ -9,18 +9,54 @@
 
 '''
 
-import vdeplug_python
-import os
+import vdeplug_python, os, sys, struct
 from array import array
 
 
+class VdeStream:
+       def __init__(self, parent, outf, frecv = None, ferr = None):
+               self.conn = parent
+               self.outf = outf
+               self.frecv = frecv
+               self.ferr = ferr
+               self.conn._streams.append(self)
+               if (self.frecv == None):
+                       self.frecv=self.conn.send
+               
+       def recv(self, buf):
+               (toth, totl) = struct.unpack("BB", buf[0:2])
+               tot = (toth << 8) + totl
+               buffer = buf[2:]
+               if (len(buffer) < tot):
+                       sys.stderr.write("stream recv: wrong size %d, pkt is 
%d\n" % (tot, len(buffer)))
+                       return -1
+               elif (len(buffer) > tot):
+                       self.frecv(buffer[0:tot])
+                       return self.recv(buffer[tot:]) # Recursion for 
remaining data
+               elif (self.frecv(buffer) < 0):
+                       return -1
+               
+       def send(self, buf):
+               if self.outf is None:
+                       return -1 
+               lh = (len(buf)>>8) & 0xFF 
+               ll = len(buf) & 0xFF
+               a = struct.pack("BB", lh, ll)
+               self.outf.write(a)
+               self.outf.write(buf)
+               self.outf.flush()
+       
+       
+       
+
+
 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)
+               self._streams = []
 
        def ctlfd(self):
                return self._ctl
@@ -36,11 +72,17 @@
 
        def recv(self, size):
                return os.read(self._data.fileno(), size)
-       
+
+       def recvfrom_streams(self, buf):
+               for s in self._streams:
+                       s.recv(buf)
+
+       def sendto_streams(self, buf):
+               for s in self._streams:
+                       s.send(buf)
+
        def close(self):
                vdeplug_python.close(self._magic)
                self._magic = None
                
-               
-       
 

Added: trunk/vde-2/src/lib/python/VdeStream_example.py
===================================================================
--- trunk/vde-2/src/lib/python/VdeStream_example.py                             
(rev 0)
+++ trunk/vde-2/src/lib/python/VdeStream_example.py     2010-08-14 15:38:50 UTC 
(rev 442)
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+from VdePlug import VdePlug, VdeStream
+from select import poll
+import os, sys
+from select import POLLIN, POLLOUT, POLLHUP, POLLERR, POLLNVAL
+
+
+v = VdePlug(sys.argv[1])
+s = VdeStream(v, sys.stdout)
+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)
+                       v.sendto_streams(buffer)
+               elif f == sys.stdin.fileno() and (e & POLLIN):
+                       buffer = os.read(f, 2000)
+                       v.recvfrom_streams(buffer)


Property changes on: trunk/vde-2/src/lib/python/VdeStream_example.py
___________________________________________________________________
Added: svn:executable
   + *


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
vde-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vde-users

Reply via email to