diff options
| -rw-r--r-- | Reaktor/UDP/README | 7 | ||||
| -rw-r--r-- | Reaktor/UDP/config | 15 | ||||
| -rwxr-xr-x | Reaktor/UDP/index | 82 | ||||
| -rwxr-xr-x | Reaktor/commands/licht_resolver | 37 | ||||
| l--------- | Reaktor/udp_commands/licht_resolver | 1 | ||||
| -rwxr-xr-x | crypto/bin/ukrepl | 7 | ||||
| -rw-r--r-- | icecrab/icecast2.conf (renamed from icecrab/icecast2) | 0 | ||||
| -rwxr-xr-x | punani/bin/punani | 3 | 
8 files changed, 114 insertions, 38 deletions
| diff --git a/Reaktor/UDP/README b/Reaktor/UDP/README index ad7117fe..587c8046 100644 --- a/Reaktor/UDP/README +++ b/Reaktor/UDP/README @@ -5,6 +5,7 @@ From 2011-09-16:      {         "port": 1337,         "pattern": "XXYY",  +      "comment" : "does the right thing",        "action" : {           "POST": {            "url" : "xyz", @@ -15,10 +16,9 @@ From 2011-09-16:    ]  ## Head definition    { -    "bind" : "127.0.0.1", +    "bind_addr" : "127.0.0.1",      "port" : 1234,      "pattern" : "XXZZ", -    "terminator" : "\r\n"      "action" : { },    }  bind is an optional entry which lets the user define a bind address for the server. @@ -35,6 +35,7 @@ terminator is optional which lets the user define the EOM terminator.  Process is taken from //hyper/process/test/bc.json - rev:a7fd3f  stdout/stderr are optional and if left away data will be written to real stdout/stderr +in the process in envp => "payload" will be allocated for the given payload from the network    "PROCESS" : {      {                                 @@ -43,7 +44,7 @@ stdout/stderr are optional and if left away data will be written to real stdout/          "bc"        ],        "envp": { -        "was": "geht" +        "was": "geht",        },        "stdout": "uri:///path/to/somewhere",        "stderr": "uri:///path/to/somewhere" diff --git a/Reaktor/UDP/config b/Reaktor/UDP/config new file mode 100644 index 00000000..623c721c --- /dev/null +++ b/Reaktor/UDP/config @@ -0,0 +1,15 @@ +[ +  { +    "comment" : "listener for licht.shack", +    "bind_addr" : "0.0.0.0", +    "port" : 2342, +    "pattern" : "", +    "action" : {  +      "PROCESS" : {  +         "path" : "/krebs/Reaktor/udp_commands/licht_resolver", +         "argv" : [ ], +         "envp" : { } +      } +    } +  } +] diff --git a/Reaktor/UDP/index b/Reaktor/UDP/index index b7a21508..ffe3d6b1 100755 --- a/Reaktor/UDP/index +++ b/Reaktor/UDP/index @@ -1,9 +1,9 @@  #!/usr/bin/python  import asyncore, socket -import logging +import logging,subprocess  import re -import sys +import json  log = logging.getLogger('ubot')  def enable_syslog(logger): @@ -16,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,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() @@ -59,18 +55,40 @@ 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)) -    log.error("not yet implemented") -    sys.exit(23) +    self.start_process() +    self.start_post() + +  def start_process(self): +    try: +      act = self.action["PROCESS"] +      proc = [] +      proc.append(act["path"]) +      proc.extend(act["argv"]) + +      env = act["envp"] +      env["payload"] = json.dumps(self.data) +      log.info("Starting Process: %s (env: %s)" % (proc,env)) +      subprocess.Popen(proc,env=env) +    except Exception as e: +      log.error(e) +  def start_post(self): +    pass + +def load_conf(conf_file): +  return json.load(open(conf_file)) +  if __name__ == "__main__":    import os    #enable_syslog(log) +  HERE = os.path.dirname(os.path.realpath(__file__))    lol = logging.DEBUG if os.environ.get('debug',False) else logging.INFO    logging.basicConfig(level=lol) -  ubot(1337,r'abc',{}) -  asyncore.loop() +  for i in load_conf("%s/config" %HERE): +    reactor.listenMulticast(i["port"], ubot(**i)) +  reactor.run() diff --git a/Reaktor/commands/licht_resolver b/Reaktor/commands/licht_resolver new file mode 100755 index 00000000..5bdb6510 --- /dev/null +++ b/Reaktor/commands/licht_resolver @@ -0,0 +1,37 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +map = { +  'shackspace': { +    'device': { +      0: 'Licht0, Zickenzone; Fenster', +      1: 'Licht1, Sofaecke; Fenster',  +      2: 'Licht2, Zickenzone; Ghetto', +      3: 'Licht3, Sofaecke; Ghetto', +      4: 'Licht4, Richtung Getränkelager', +      5: 'Licht5, Porschekonsole', +      6: 'Licht6, Tomatenecke', +      7: 'Licht7, Ghetto', +      10: 'Hauptschalter' +    }, +    'state': { +      0: 'aus', +      1: 'an', +      2: 'aus in T-10s' +    }, +    '->': 'ist' +  } +} + +from struct import unpack +import json +from os import environ as env + +location = "shackspace" + +map = map[location] +print (env["payload"]+"") +did, sid= unpack('BB', json.loads(env['payload'])) +device,state = map['device'][did], map['state'][sid] +arrow = map['->'] +print ' '.join([device, arrow, state]) diff --git a/Reaktor/udp_commands/licht_resolver b/Reaktor/udp_commands/licht_resolver new file mode 120000 index 00000000..0d8b0956 --- /dev/null +++ b/Reaktor/udp_commands/licht_resolver @@ -0,0 +1 @@ +../commands/licht_resolver
\ No newline at end of file diff --git a/crypto/bin/ukrepl b/crypto/bin/ukrepl index b3b25db9..2dfaabc4 100755 --- a/crypto/bin/ukrepl +++ b/crypto/bin/ukrepl @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2  # -*- coding: utf-8 -*-  import sys @@ -98,4 +98,7 @@ for line in sys.stdin:        else:          print "unknown mode %c" % mode          helpme() -    print char, +    try: +        sys.stdout.write(char) +    except: +        sys.stdout.write(char.encode("utf-8")) diff --git a/icecrab/icecast2 b/icecrab/icecast2.conf index 3a2521ff..3a2521ff 100644 --- a/icecrab/icecast2 +++ b/icecrab/icecast2.conf diff --git a/punani/bin/punani b/punani/bin/punani index 34d5bcbf..954eca43 100755 --- a/punani/bin/punani +++ b/punani/bin/punani @@ -115,7 +115,7 @@ handle_system () {        #  apt-file () { echo $@; }        #  apt-get () { echo $@; }        #fi -      if [ `which apt-file` ]; then  +      if  ! which apt-file; then           echo "installing dependencies: apt-file"          apt-get install --yes apt-file          echo "update the apt-file tool" @@ -133,6 +133,7 @@ handle_system () {          fi        }        punani_Engineer_insert() { +        echo "trying to install $1"          if apt-get install `apt-file search -l -x /$1\$`;then            echo "++ finished"          else | 
