summaryrefslogtreecommitdiffstats
path: root/Reaktor/UDP/index
diff options
context:
space:
mode:
Diffstat (limited to 'Reaktor/UDP/index')
-rwxr-xr-xReaktor/UDP/index76
1 files changed, 76 insertions, 0 deletions
diff --git a/Reaktor/UDP/index b/Reaktor/UDP/index
new file mode 100755
index 00000000..b7a21508
--- /dev/null
+++ b/Reaktor/UDP/index
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+
+import asyncore, socket
+import logging
+import re
+import sys
+log = logging.getLogger('ubot')
+
+def enable_syslog(logger):
+ import logging.handlers as handlers
+ from logging import Formatter
+ hdlr = handlers.SysLogHandler(
+ facility=handlers.SysLogHandler.LOG_DAEMON)
+ formatter = Formatter(
+ '%(filename)s: %(levelname)s: %(message)s')
+ hdlr.setFormatter(formatter)
+ logger.addHandler(hdlr)
+
+
+class ubot(asyncore.dispatcher):
+ """ UDP Bot """
+ def __init__(self, port,pattern,action,bind_addr="",):
+ asyncore.dispatcher.__init__(self)
+ self.bind_addr = bind_addr
+ self.port = port
+ self.data = ''
+ self.pattern = pattern
+ self.action = action
+ self.bind_socket()
+
+ def bind_socket(self):
+ """
+ if the socket is already bound we want to reuse this socket anyway
+ """
+ self.create_socket(socket.AF_INET,socket.SOCK_DGRAM)
+ self.set_reuse_addr()
+ self.socket.setsockopt(
+ socket.SOL_SOCKET,socket.SO_BROADCAST,1)
+ log.info("Binding Socket at %s:%d"
+ %(self.bind_addr,self.port))
+ self.bind( (self.bind_addr,self.port) )
+
+ def handle_connect(self):
+ log.info("Server Started")
+
+ def handle_read(self):
+ self.data,addr = self.recvfrom(2048)
+ log.debug('<< %s' % self.data)
+
+ if self.find_pattern():
+ self.start_action()
+
+ def find_pattern(self):
+ """ returns true if own pattern is found"""
+ log.debug("Pattern is %s" %self.pattern)
+ ret = re.search(self.pattern,self.data)
+ if ret:
+ log.info("Match \"%s\" with pattern \"%s\"" % ((ret.string.strip()),self.pattern))
+ else:
+ log.info("No Match")
+ return ret
+
+
+ def start_action(self):
+ """ runs all the defined actions"""
+ log.debug("Actions: %s" % str(self.action))
+ log.error("not yet implemented")
+ sys.exit(23)
+
+if __name__ == "__main__":
+ import os
+ #enable_syslog(log)
+ lol = logging.DEBUG if os.environ.get('debug',False) else logging.INFO
+ logging.basicConfig(level=lol)
+ ubot(1337,r'abc',{})
+ asyncore.loop()