diff --git a/request/get_request_handler.e b/request/get_request_handler.e index 86f17f57..bf1b1f2d 100644 --- a/request/get_request_handler.e +++ b/request/get_request_handler.e @@ -1,112 +1,145 @@ -class GET_REQUEST_HANDLER - -inherit - - SHARED_DOCUMENT_ROOT - - SHARED_URI_CONTENTS_TYPES - - HTTP_REQUEST_HANDLER - - HTTP_CONSTANTS - -feature - - process - -- process the request and create an answer - local - fname: STRING - f: RAW_FILE - ctype, extension: STRING - do - create answer.make - if request_uri.is_equal ("/") then - process_default - answer.set_content_type ("text/html") - else - fname := document_root_cell.item.twin - fname.append (request_uri) - debug - print ("URI name: " + fname ) - end - create f.make (fname) - create answer.make - if f.exists then - extension := ct_table.extension (request_uri) - ctype := ct_table.content_types.item (extension) - if ctype = Void then - process_raw_file (f) - answer.set_content_type ("text/html") - else - if ctype.is_equal ("text/html") then - process_text_file (f) - else - process_raw_file (f) - end - answer.set_content_type (ctype) - end - else - answer.set_status_code (not_found) - answer.set_reason_phrase (not_found_message) - answer.set_reply_text ("Not found on this server") - end - end - answer.set_content_length (answer.reply_text.count.out) - end - - process_default - -- Return a defaul response - local - html : STRING - do - answer.set_reply_text ("") - html := " NINO HTTPD " + - " " + - " " + - "

Welcome to NINO HTTPD!

"+ - "

Default page " + - - "

" + - " " + - " " - answer.append_reply_text (html) - end - - - process_text_file (f: FILE) - -- send a text file reply - require - valid_f: f /= Void - do - f.open_read - from - answer.set_reply_text ("") - f.read_line - until f.end_of_file - loop - answer.append_reply_text (f.last_string) - answer.append_reply_text (crlf) - f.read_line - end - f.close - end - - process_raw_file (f: FILE) - -- send a raw file reply - require - valid_f: f /= Void - do - -- this is not quite right.... - f.open_read - from - answer.set_reply_text ("") - until f.end_of_file - loop - f.read_stream_thread_aware (1024) - answer.append_reply_text (f.last_string) - end - f.close - end - - -end +class + GET_REQUEST_HANDLER + +inherit + SHARED_DOCUMENT_ROOT + + SHARED_URI_CONTENTS_TYPES + + HTTP_REQUEST_HANDLER + + HTTP_CONSTANTS + +create + default_create + +feature + + process + -- process the request and create an answer + local + fname: STRING_8 + f: RAW_FILE + ctype, extension: STRING_8 + do + create answer.make + if request_uri.is_equal ("/") then + process_default + answer.set_content_type ("text/html") + else + fname := Document_root_cell.item.twin + fname.append (request_uri) + debug + print ("URI name: " + fname) + end + create f.make (fname) + create answer.make + if f.exists then + extension := Ct_table.extension (request_uri) + ctype := Ct_table.content_types.item (extension) + if f.is_directory then + process_directory (f) + else + if ctype = Void then + process_raw_file (f) + answer.set_content_type ("text/html") + else + if ctype.is_equal ("text/html") then + process_text_file (f) + else + process_raw_file (f) + end + answer.set_content_type (ctype) + end + end + else + answer.set_status_code (Not_found) + answer.set_reason_phrase (Not_found_message) + answer.set_reply_text ("Not found on this server") + end + end + answer.set_content_length (answer.reply_text.count.out) + end + + process_default + -- Return a defaul response + local + html: STRING_8 + do + answer.set_reply_text ("") + html := " NINO HTTPD " + " " + " " + "

Welcome to NINO HTTPD!

" + "

Default page " + "

" + " " + " " + answer.append_reply_text (html) + end + + process_text_file (f: FILE) + -- send a text file reply + require + valid_f: f /= Void + do + f.open_read + from + answer.set_reply_text ("") + f.read_line + until + f.end_of_file + loop + answer.append_reply_text (f.last_string) + answer.append_reply_text (Crlf) + f.read_line + end + f.close + end + + process_raw_file (f: FILE) + -- send a raw file reply + require + valid_f: f /= Void + do + f.open_read + from + answer.set_reply_text ("") + until + f.end_of_file + loop + f.read_stream_thread_aware (1024) + answer.append_reply_text (f.last_string) + end + f.close + end + + process_directory (f: FILE) + --read the directory + require + is_directory: f.is_directory + local + l_dir: DIRECTORY + files: ARRAYED_LIST [STRING_8] + html1: STRING_8 + html2: STRING_8 + htmldir: STRING_8 + path: STRING_8 + index: INTEGER_32 + do + answer.set_reply_text ("") + html1 := " NINO HTTPD " + " " + " " + "

Welcome to NINO HTTPD!

" + "

Default page " + html2 := "

" + " " + " " + path := f.name.twin + index := path.last_index_of ('/', path.count) + path.remove_substring (1, index) + create l_dir.make_open_read (f.name) + files := l_dir.linear_representation + from + files.start + htmldir := "" + answer.append_reply_text (html1 + htmldir + html2) + end + +end -- class GET_REQUEST_HANDLER +