예제 #1
0
    def handle_single(self):
        """Handle a single HTTP request"""
        self.raw_requestline = self.rfile.readline(65537)
        if len(self.raw_requestline) > 65536:
            self.requestline = ''
            self.request_version = ''
            self.command = ''
            self.close_connection = 1
            self.send_error(414)
            return

        if not self.parse_request():  # An error code has been sent, just exit
            return

        handler = ServerHandler(self.rfile, self.wfile, self.get_stderr(),
                                self.get_environ())
        handler.http_version = "1.1"
        handler.request_handler = self  # backpointer for logging

        # eNodeB will sometimes close connection to enodebd.
        # The cause of this is unknown, but we can safely ignore the
        # closed connection, and continue as normal otherwise.
        #
        # While this throws a BrokenPipe exception in wsgi server,
        # it also causes an AttributeError to be raised because of a
        # bug in the wsgi server.
        # https://bugs.python.org/issue27682
        try:
            handler.run(self.server.get_app())
        except BrokenPipeError:
            self.log_error(
                "eNodeB has unexpectedly closed the TCP connection.")
예제 #2
0
파일: server.py 프로젝트: sarathbrp/magma
    def handle_single(self):
        """Handle a single HTTP request"""
        self.raw_requestline = self.rfile.readline(65537)
        if len(self.raw_requestline) > 65536:
            self.requestline = ''
            self.request_version = ''
            self.command = ''
            self.close_connection = 1
            self.send_error(414)
            return

        if not self.parse_request():  # An error code has been sent, just exit
            return

        handler = ServerHandler(self.rfile, self.wfile, self.get_stderr(),
                                self.get_environ())
        handler.http_version = "1.1"
        handler.request_handler = self  # backpointer for logging
        handler.run(self.server.get_app())
예제 #3
0
 def handle_write(self):
     self._can_write = False
     handler = ServerHandler(self._input_stream, self.wfile,
                             self.get_stderr(), self.get_environ())
     handler.server_software = self.server_version
     handler.http_version = self.protocol_version[5:]
     handler.request_handler = self  # backpointer for logging
     handler.wsgi_multiprocess = False
     handler.wsgi_multithread = False
     try:
         handler.run(self.server.get_app())
     except Exception:
         self.handle_error()
         return
     if self.close_connection:
         self.handle_close()
     else:
         try:
             self.wfile.flush()
         except socket.error:
             self.handle_error()
         else:
             self._can_read = True