aboutsummaryrefslogtreecommitdiffstats
path: root/termcast.py
blob: f94f5c70abf62bbfcf77a470f29a9bd267ec91c4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import re

import vt100

class Handler(object):
    def __init__(self):
        self.buf = b''
        self.vt = vt100.vt100()

    def process(self, data):
        self.buf += data
        self.vt.process(data)

    def get_term(self):
        term = ''
        for i in range(0, 24):
            for j in range(0, 80):
                term += self.vt.cell(i, j).contents()
            term += "\n"

        return term[:-1]

class Connection(object):
    def __init__(self, client, connection_id):
        self.client = client

    def run(self, ssh_connections):
        buf = b''
        while len(buf) < 1024 and b"\n" not in buf:
            buf += self.client.recv(1024)

        pos = buf.find(b"\n")
        if pos == -1:
            print("no authentication found")
            return

        auth = buf[:pos]
        buf = buf[pos+1:]

        auth_re = re.compile(b'^hello ([^ ]+) ([^ ]+)$')
        m = auth_re.match(auth)
        if m is None:
            print("no authentication found (%s)" % auth)
            return

        print(b"got auth: " + auth)
        self.handler = Handler()
        self.client.send(b"hello, " + m.group(1) + b"\n")

        self.handler.process(buf)
        while True:
            buf = self.client.recv(1024)
            if len(buf) > 0:
                self.handler.process(buf)
            else:
                return