Source code for core.service.udp

# core/dutch/udp.py
#
#

""" relay txt through a udp port listener. """

__copyright__ = "Copyright 2015, B.H.J Thate"

## IMPORTS

from core.errors import error
from core.utils.name import name
from core.extra import rijndael
from core.kernel import kernel
from core.cfg import cfg_udp
from core.thing import Thing

import logging
import socket
import time

crypt = rijndael.rijndael(cfg_udp.seed)

## UDP class

[docs]class UDP(Thing): def __init__(zelf, *args, **kwargs): Thing.__init__(zelf, *args, **kwargs) zelf._status = "start" zelf._start = 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)
[docs] def start(zelf): zelf._sock.bind((cfg_udp.host, cfg_udp.port)) logging.warn("# start %s/%s" % (cfg_udp.host, cfg_udp.port)) zelf.ready() zelf._status = "running" while zelf._status: input, addr = zelf._sock.recvfrom(64000) if not zelf._status: break input = str(input.rstrip(), "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 if not data: break zelf.output(data, addr)
[docs] def exit(zelf, *args, **kwargs): logging.warn("# exit %s" % name(zelf)) zelf._status = "exit" zelf._sock.settimeout(1.0) zelf._sock.sendto(bytes("bla", "utf-8"), (cfg_begrip.host, cfg_begrip.port)) #zelf._sock.shutdown(socket.SHUT_WR)
[docs] def output(zelf, input, addr): passwd, text = input.split(" ", 1) text = text.replace("\00", "") if passwd == cfg_udp.password: kernel.announce(text)
[docs]def init(*args, **kwargs): udp = UDP() kernel.put(udp.start)