diff options
-rwxr-xr-x | Reaktor/UDP/index | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/Reaktor/UDP/index b/Reaktor/UDP/index index 3e0bbd15..ffe3d6b1 100755 --- a/Reaktor/UDP/index +++ b/Reaktor/UDP/index @@ -3,7 +3,6 @@ import asyncore, socket import logging,subprocess import re -import sys import json log = logging.getLogger('ubot') @@ -17,37 +16,33 @@ def enable_syslog(logger): hdlr.setFormatter(formatter) logger.addHandler(hdlr) +from twisted.internet.protocol import DatagramProtocol +from twisted.internet import reactor +from twisted.application.internet import MulticastServer +from socket import SOL_SOCKET,SO_BROADCAST +class ubot(DatagramProtocol): +# def startProtocol(self): +# log.info("Starting Listener for Multicast") +# self.transport.joinGroup("255.255.255.255") -class ubot(asyncore.dispatcher): """ UDP Bot """ - def __init__(self, port,pattern,action,comment="",bind_addr="",): - asyncore.dispatcher.__init__(self) - self.bind_addr = bind_addr - self.port = port + def startProtocol(self): + log.info("starting Protocol at host (%s)" % self.bind_addr) + #self.transport. + if self.bind_addr != "255.255.255.255": + self.transport.joinGroup(self.bind_addr) + else: + self.transport.socket.setsockopt(SOL_SOCKET,SO_BROADCAST,True) + def __init__(self, pattern,action,bind_addr,**kwargs): + #DatagramProtocol.__init__(self) 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") + self.bind_addr = bind_addr - def handle_read(self): - self.data,addr = self.recvfrom(2048) + def datagramReceived(self,datagram,addr): + self.data = datagram log.debug('<< %s' % self.data) - if self.find_pattern(): self.start_action() @@ -60,8 +55,8 @@ class ubot(asyncore.dispatcher): else: log.info("No Match") return ret - - + + def start_action(self): """ runs all the defined actions""" log.debug("Actions: %s" % str(self.action)) @@ -95,5 +90,5 @@ if __name__ == "__main__": lol = logging.DEBUG if os.environ.get('debug',False) else logging.INFO logging.basicConfig(level=lol) for i in load_conf("%s/config" %HERE): - ubot(**i) - asyncore.loop() + reactor.listenMulticast(i["port"], ubot(**i)) + reactor.run() |