def _make_one(self, allow_pause=True, *args, **kwargs):
     out = streams.FlowControlStreamReader(self.protocol,
                                           limit=1,
                                           loop=self.loop,
                                           *args,
                                           **kwargs)
     out._allow_pause = allow_pause
     return out
Exemplo n.º 2
0
 def function959(self, arg455=True, *args, **kwargs):
     var3944 = streams.FlowControlStreamReader(self.attribute2260,
                                               *args,
                                               buffer_limit=1,
                                               loop=self.attribute2182,
                                               None=kwargs)
     var3944._allow_pause = arg455
     return var3944
Exemplo n.º 3
0
    def start(self):
        """Start processing of incoming requests.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        """
        reader = self.reader
        self.writer.set_tcp_nodelay(True)

        try:
            while not self._closing:
                message = None
                self._keepalive = False
                self._request_count += 1
                self._reading_request = False

                payload = None

                # slow request timer
                with Timeout(max(self._slow_request_timeout,
                                 self._keepalive_timeout),
                             loop=self._loop):
                    # read request headers
                    httpstream = reader.set_parser(self._request_parser)
                    message = yield from httpstream.read()

                # request may not have payload
                try:
                    content_length = int(
                        message.headers.get(hdrs.CONTENT_LENGTH, 0))
                except ValueError:
                    raise errors.InvalidHeader(hdrs.CONTENT_LENGTH) from None

                if (content_length > 0 or message.method == hdrs.METH_CONNECT
                        or hdrs.SEC_WEBSOCKET_KEY1 in message.headers
                        or 'chunked' in message.headers.get(
                            hdrs.TRANSFER_ENCODING, '')):
                    payload = streams.FlowControlStreamReader(reader,
                                                              loop=self._loop)
                    reader.set_parser(aiohttp.HttpPayloadParser(message),
                                      payload)
                else:
                    payload = EMPTY_PAYLOAD

                yield from self.handle_request(message, payload)

                if payload and not payload.is_eof():
                    self.log_debug('Uncompleted request.')
                    self._closing = True
                else:
                    reader.unset_parser()
                    if not self._keepalive or not self._keepalive_timeout:
                        self._closing = True

        except asyncio.CancelledError:
            self.log_debug('Request handler cancelled.')
            return
        except asyncio.TimeoutError:
            self.log_debug('Request handler timed out.')
            return
        except errors.ClientDisconnectedError:
            self.log_debug('Ignored premature client disconnection #1.')
            return
        except errors.HttpProcessingError as exc:
            yield from self.handle_error(exc.code, message, None, exc,
                                         exc.headers, exc.message)
        except Exception as exc:
            yield from self.handle_error(500, message, None, exc)
        finally:
            self._request_handler = None
            if self.transport is None:
                self.log_debug('Ignored premature client disconnection #2.')
            else:
                self.transport.close()
Exemplo n.º 4
0
    def start(self):
        """Start processing of incoming requests.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        """
        reader = self.reader

        while True:
            message = None
            self._keep_alive = False
            self._request_count += 1
            self._reading_request = False

            payload = None
            try:
                # start slow request timer
                if self._timeout and self._timeout_handle is None:
                    self._timeout_handle = self._loop.call_later(
                        self._timeout, self.cancel_slow_request)

                # read request headers
                httpstream = reader.set_parser(self._request_parser)
                message = yield from httpstream.read()

                # cancel slow request timer
                if self._timeout_handle is not None:
                    self._timeout_handle.cancel()
                    self._timeout_handle = None

                # request may not have payload
                if (message.headers.get(hdrs.CONTENT_LENGTH, 0)
                        or hdrs.SEC_WEBSOCKET_KEY1 in message.headers
                        or 'chunked' in message.headers.get(
                            hdrs.TRANSFER_ENCODING, '')):
                    payload = streams.FlowControlStreamReader(reader,
                                                              loop=self._loop)
                    reader.set_parser(aiohttp.HttpPayloadParser(message),
                                      payload)
                else:
                    payload = EMPTY_PAYLOAD

                yield from self.handle_request(message, payload)

            except (asyncio.CancelledError, errors.ClientDisconnectedError):
                if self.debug:
                    self.log_exception(
                        'Ignored premature client disconnection.')
                break
            except errors.HttpProcessingError as exc:
                if self.transport is not None:
                    yield from self.handle_error(exc.code, message, None, exc,
                                                 exc.headers)
            except Exception as exc:
                yield from self.handle_error(500, message, None, exc)
            finally:
                if self.transport is None:
                    self.log_debug('Ignored premature client disconnection.')
                    break

                if payload and not payload.is_eof():
                    self.log_debug('Uncompleted request.')
                    self._request_handler = None
                    self.transport.close()
                    break
                else:
                    reader.unset_parser()

                if self._request_handler:
                    if self._keep_alive and self._keep_alive_period:
                        self.log_debug('Start keep-alive timer for %s sec.',
                                       self._keep_alive_period)
                        self._keep_alive_handle = self._loop.call_later(
                            self._keep_alive_period, self.transport.close)
                    elif self._keep_alive and self._keep_alive_on:
                        # do nothing, rely on kernel or upstream server
                        pass
                    else:
                        self.log_debug('Close client connection.')
                        self._request_handler = None
                        self.transport.close()
                        break
                else:
                    # connection is closed
                    break
Exemplo n.º 5
0
    def start(self):
        """Start processing of incoming requests.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        """
        reader = self.reader

        while True:
            message = None
            self._keep_alive = False
            self._request_count += 1
            self._reading_request = False

            payload = None
            try:
                prefix = reader.set_parser(self._request_prefix)
                yield from prefix.read()
                self._reading_request = True

                # stop keep-alive timer
                if self._keep_alive_handle is not None:
                    self._keep_alive_handle.cancel()
                    self._keep_alive_handle = None

                # start slow request timer
                if self._timeout and self._timeout_handle is None:
                    self._timeout_handle = self._loop.call_later(
                        self._timeout, self.cancel_slow_request)

                # read request headers
                httpstream = reader.set_parser(self._request_parser)
                message = yield from httpstream.read()

                # cancel slow request timer
                if self._timeout_handle is not None:
                    self._timeout_handle.cancel()
                    self._timeout_handle = None

                payload = streams.FlowControlStreamReader(reader,
                                                          loop=self._loop)
                reader.set_parser(aiohttp.HttpPayloadParser(message), payload)

                handler = self.handle_request(message, payload)
                if (asyncio.iscoroutine(handler)
                        or isinstance(handler, asyncio.Future)):
                    yield from handler

            except (asyncio.CancelledError, errors.ClientDisconnectedError):
                self.log_debug('Ignored premature client disconnection.')
                break
            except errors.HttpProcessingError as exc:
                if self.transport is not None:
                    yield from self.handle_error(exc.code, message, None, exc,
                                                 exc.headers)
            except Exception as exc:
                yield from self.handle_error(500, message, None, exc)
            finally:
                if self.transport is None:
                    self.log_debug('Ignored premature client disconnection.')
                    break

                if payload and not payload.is_eof():
                    self.log_debug('Uncompleted request.')
                    self._request_handler = None
                    self.transport.close()
                    break
                else:
                    reader.unset_parser()

                if self._request_handler:
                    if self._keep_alive and self._keep_alive_period:
                        self.log_debug('Start keep-alive timer for %s sec.',
                                       self._keep_alive_period)
                        self._keep_alive_handle = self._loop.call_later(
                            self._keep_alive_period, self.transport.close)
                    else:
                        self.log_debug('Close client connection.')
                        self._request_handler = None
                        self.transport.close()
                        break
                else:
                    break
Exemplo n.º 6
0
 def _make_one(self, *args, **kwargs):
     return streams.FlowControlStreamReader(
         self.stream, loop=self.loop, *args, **kwargs)