aboutsummaryrefslogtreecommitdiff
path: root/host/matelight/listeners.py
blob: bb0ce72250541c1d139029a2f1338eecf6aae62c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from socketserver import *
import zlib
import struct

class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass

class MateLightUDPHandler(BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        if len(data) != FRAME_SIZE+4:
            raise ValueError('Invalid frame size: Expected {}, got {}'.format(FRAME_SIZE+4, len(frame)))
        frame = data[:-4]
        crc1, = struct.unpack('!I', data[-4:])
        crc2 = zlib.crc32(frame),
        if crc1 != crc2:
            raise ValueError('Invalid frame CRC checksum: Expected {}, got {}'.format(crc2, crc1))
        socket.sendto(b'ACK', self.client_address)