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)