Source code for core.plugs.udp
# core/plugs/udp.py
#
#
""" relay txt through a udp port listener. """
__copyright__ = "Copyright 2014 B.H.J Thate"
## IMPORTS
from core.contrib import rijndael
from core.utils import error
from core import kernel, Object
import logging
import core
# basic
import socket
import queue
import time
import re
# VARS SECTION
cfg = Object()
cfg.define('host', "localhost")
cfg.define('port', 5500)
cfg.define('password', "boh")
cfg.define('seed', "blablablablablaz") # needs to be 16 chars wide
crypt = rijndael.rijndael(cfg.seed)
## UDP class
[docs]class UDP(Object):
def __init__(zelf, *args, **kwargs):
Object.__init__(zelf, *args, **kwargs)
zelf._status = Object()
zelf._status.status = "idle"
zelf._state = Object()
zelf._state.boot = time.time()
zelf._state.start = time.time()
zelf._state.output = time.time()
zelf._state.input = time.time()
zelf._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
zelf._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try: zelf._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
except: pass
zelf._sock.setblocking(1)
def _listen(zelf):
zelf._sock.bind((cfg.host, cfg.port))
logging.warn("listen %s/%s" % (cfg.host, cfg.port))
zelf.ready()
while zelf._status.status:
input, addr = zelf._sock.recvfrom(64000)
input = str(input, "utf-8")
data = ""
for i in range(int(len(input)/16)):
txt = input[i*16:i*16+16]
try: data += crypt.decrypt(txt)
except Exception as ex: error() ; break
zelf.output(data, addr)
[docs] def output(zelf, input, addr):
zelf._state.time_out = time.time()
passwd, text = input.split(" ", 1)
import core
if passwd == cfg.password: kernel.announce(text.strip())
[docs]def init(*args, **kwargs):
kernel.services.udp = UDP()
kernel.workers.put(kernel.services.udp._listen)