Beispiel #1
0
    def _accept(self, sock):
        (client, addr) = sock.accept()
        num = client.fileno()
        self.conns[num] = client
        self.requests[num] = Request()
        self.out_buff[num] = []
        Logger.debug_info(f'Connected {addr}')

        client.setblocking(False)
        self.poller.register(client, selectors.EVENT_READ, self._read)
        Logger.debug_info(f'EVENT_READ Registered {addr}')
Beispiel #2
0
    def test_get_res(self):
        line = (b'GET / HTTP/1.1\r\n'
                b'Host: 0.0.0.0:8000\r\n'
                b'Accept: */*\r\n\r\n')

        server = self.make_server()
        req = Request()
        split = Request.split_keep_sep(line, b'\r\n')

        for s in split:
            if req.dynamic_fill(s):
                res = server.handle_req(req)

                self.assertEqual(res.status, 200)
                self.assertEqual(res.reason, 'OK')
                headers_dict = dict(res.headers)
                self.assertTrue(headers_dict.get('Content-Type'))
                self.assertTrue(headers_dict.get('Content-Length'))
Beispiel #3
0
    def _read(self, client):
        try:
            line: bytes = client.recv(self.MAX_LINE)
            if not line:
                self.poller.unregister(client)
                del self.conns[client.fileno()]
                return
            num = client.fileno()
            req_builder: Request = self.requests[num]
            split = Request.split_keep_sep(line, bytes(os.linesep, 'utf-8'))

            for s in split:
                if req_builder.dynamic_fill(s):
                    self.requests[num] = Request()
                    # todo Request() change to req_builder
                    return self.serve_client(client, req_builder)
            print(req_builder)
        except Exception as e:
            Logger.exception('Read from client failed')
            send_error(client, e, self.configurator)