Example #1
0
    def __init__(self,server,sock,client_address):
        self.server = server
        self.client_address = client_address
        self.sock = sock
        self.keep_alive = True

        # buffer for incoming data (HTTP request + post data)
        self.incoming = cStringIO.StringIO()
        self.writable = False # set to True when processing is done
        self.request_complete = False

        self.init_info()
        # default values
        self.config = k_config.get_host_conf(None)
        self.protocol = ""
Example #2
0
    def process_request(self):
        import k_target

        # initialise namespace
        self.ns = {
            "REQUEST_HANDLER": self,
            "SCRIPT_END": SCRIPT_END,
            "HTTP_REDIRECTION": HTTP_REDIRECTION,
            "Session": self.Session,
            "Role": self.get_log_level,
            "PRINT": self._print,
            "STDOUT": self._sys_stdout,
            "LOG": self._log,
        }

        self.output = cStringIO.StringIO()
        info = self.info

        # defaults
        # nedd add by B.Z, 2010.05.23
        ##########################################
        reload(sys)
        sys.setdefaultencoding("utf8")
        ##########################################

        self.output_encoding = sys.getdefaultencoding()
        self.resp_headers = email.message_from_string("")
        self.cookies = {}

        # keep connection alive after this request ?
        conn_header = self.headers.get("connection", "")
        self.keep_alive = (self.protocol == "HTTP/1.1") and (conn_header.lower().startswith("keep-alive"))

        # set host-specific configuration
        self.host = self.headers.get("host", None)
        # hook "host_filter"
        try:
            self.hook("host_filter")
            self.config = k_config.get_host_conf(self.host)
        except HTTP_REDIRECTION, url:
            self.redirect(url)
            self._log(info, 302, url)
            return
Example #3
0
    def read_request(self):
        # read request lines
        # set default values
        self.protocol = ""
        self.resp_headers = {}
        self.cookies = {}
        self.header_text = ""
        self.config = k_config.get_host_conf(None)
        # initialize log info
        info = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S - ")
        info += str(self.client_address[0]) + (" - ")
        info += self.request_line.strip()
        self.info = info

        # read headers
        while True:
            line = self.rfile.readline(size=8192)
            if len(line) == 8192:
                return False  # too long line = attack
            self.header_text += line
            if not line.strip():
                break
        return self.parse_request()