]> jfr.im git - erebus.git/blobdiff - modlib.py
start work on sockets module, not ready to use yet
[erebus.git] / modlib.py
index 91e05843dd306a49adc15596806d6d2ed3aa5d51..06276184ef27876a3c338adb94a0d3e2f473db8f 100644 (file)
--- a/modlib.py
+++ b/modlib.py
@@ -170,6 +170,37 @@ class modlib(object):
                        return func
                return realhook
 
+       def bind(self, bindto):
+               """Used as a decorator on a class which implements getdata and parse methods.
+                       See modules/sockets.py for an example.
+                       Takes an arg like:
+                       [unix:]/foo/bar
+                       [udp|tcp:][ip:]port
+               """
+               if len(bindto) == 0:
+                       raise Exception('bindto must have a value')
+               if bindto[0] == '/':
+                       return self._hooksocket(socket.AF_UNIX, socket.SOCK_STREAM, bindto)
+               if len(bindto) > 5 and bindto[0:5] == 'unix:':
+                       return self._hooksocket(socket.AF_UNIX, socket.SOCK_STREAM, bindto[5:])
+               af = socket.AF_INET
+               ty = socket.SOCK_STREAM
+               host = '0.0.0.0'
+               if len(bindto) > 4 and bindto[0:4] == 'udp:':
+                       ty = socket.SOCK_DGRAM
+                       bindto = bindto[4:]
+               if len(bindto) > 4 and bindto[0:4] == 'tcp:':
+                       bindto = bindto[4:]
+               print(repr(bindto), ':' in bindto)
+               if ':' in bindto:
+                       print(bindto)
+                       pieces = bindto.rsplit(':', 1)
+                       host = pieces[0]
+                       bindto = pieces[1]
+                       print(pieces,host,bindto)
+               port = int(bindto)
+               return self._hooksocket(af, ty, (host, port))
+
        def bind_tcp(self, host, port):
                return self._hooksocket(socket.AF_INET, socket.SOCK_STREAM, (host, port))
        def bind_udp(self, host, port):
@@ -196,7 +227,7 @@ class modlib(object):
                self.sockets.append((sock,obj))
                sock.listen(5)
                self.parent.newfd(obj, sock.fileno())
-               self.parent.log(repr(obj), '?', 'Socket ready to accept new connections')
+               self.parent.log(repr(obj), '?', 'Socket ready to accept new connections (%r, %r, %r, %r)' % (af, ty, address, cls))
        def _destroy_socket(self, sock, obj):
                obj.close()