From dcfd676a55de1f167cbe4d3470d08ec7aadab672 Mon Sep 17 00:00:00 2001 From: Ground0 Date: Fri, 21 May 2021 07:45:23 +0200 Subject: [PATCH] Debug change to lhs_log and Empty multiform --- inc/lweb_IP.pbi | 6 +- lhttpd.pb | 4 +- ltls.pbi | 34 +++++++--- lweb.pbi | 156 ++++++++++++++++++++++++++-------------------- lweb.pbp | 6 +- lweb_header.pbi | 2 + server_example.pb | 45 +++++++------ 7 files changed, 149 insertions(+), 104 deletions(-) diff --git a/inc/lweb_IP.pbi b/inc/lweb_IP.pbi index 0d6bd45..c1b6c71 100644 --- a/inc/lweb_IP.pbi +++ b/inc/lweb_IP.pbi @@ -15,15 +15,15 @@ Procedure IsIPStringValid(Adress.s) My_Regex_v6_compress = CreateRegularExpression(#PB_Any, "^(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})?)::(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})?)$") If MatchRegularExpression(My_Regex_v4, Adress) And Valid = 0 - Debug "My_Regex_v4" + lhs_log::Out("My_Regex_v4") Valid = 1 EndIf If MatchRegularExpression(My_Regex_v6_nocompress, Adress) And Valid = 0 - Debug "My_Regex_v6_nocompress" + lhs_log::Out("My_Regex_v6_nocompress") Valid = 1 EndIf If MatchRegularExpression(My_Regex_v6_compress, Adress) And Valid = 0 - Debug "My_Regex_v6_compress" + lhs_log::Out("My_Regex_v6_compress") Valid = 1 EndIf diff --git a/lhttpd.pb b/lhttpd.pb index 3512c9d..b653c9d 100644 --- a/lhttpd.pb +++ b/lhttpd.pb @@ -50,9 +50,9 @@ EndIf ;* If lhs_web::start_server() - Debug "Server gestartet" + lhs_web::get_config(lhs_web::#conf_port) + lhs_log::Out("Server gestartet" + lhs_web::get_config(lhs_web::#conf_port) Else - Debug "Fehlgeschlagen" + lhs_log::Out("Fehlgeschlagen" End EndIf diff --git a/ltls.pbi b/ltls.pbi index b0f5211..372ed08 100644 --- a/ltls.pbi +++ b/ltls.pbi @@ -61,8 +61,22 @@ Module ltls CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib64/libtls.so.20") + If Not IsLibrary(libressl_tls) + Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib64/libtls.so.17") + If Not IsLibrary(libressl_tls) + lhs_log::Out("Library not found: /usr/lib64/libtls.so.20 or .17") + End + EndIf + EndIf CompilerElse Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib/libtls.so.20") + If Not IsLibrary(libressl_tls) + Define libressl_tls = OpenLibrary(#PB_Any, "/usr/lib/libtls.so.17") + If Not IsLibrary(libressl_tls) + lhs_log::Out("Library not found: /usr/lib/libtls.so.20 or .17") + End + EndIf + EndIf CompilerEndIf @@ -85,7 +99,7 @@ Module ltls Define Call_tls_free = GetFunction(libressl_tls, "tls_free") Define Call_tls_config_free = GetFunction(libressl_tls, "tls_config_free") Else - Debug "libtls.so Library Not found" + lhs_log::Out("libtls.so Library Not found") End EndIf @@ -128,32 +142,32 @@ Module ltls Protected mem_ptr.i, length.i, returns.i If tls_init() <> 0 : ProcedureReturn -1 : EndIf tls_cfg = tls_config_new() - Debug "TLS cfg obj:"+Str(tls_cfg) - Debug "CA:"+*Settings\CA + lhs_log::Out("TLS cfg obj:"+Str(tls_cfg)) + lhs_log::Out("CA:"+*Settings\CA) mem_ptr = tls_load_file(*Settings\CA, @length) If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -2 : EndIf tls_config_set_ca_mem(tls_cfg, mem_ptr, length) - Debug "Cert:"+*Settings\Cert + lhs_log::Out("Cert:"+*Settings\Cert) mem_ptr = tls_load_file(*Settings\Cert, @length) If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -3 : EndIf tls_config_set_cert_mem(tls_cfg, mem_ptr, length) If Len(*Settings\Password) > 0 - Debug "Key:"+*Settings\Key + " Password:"+*Settings\Password + lhs_log::Out("Key:"+*Settings\Key + " Password:"+*Settings\Password) mem_ptr = tls_load_file_pw(*Settings\Key, @length, *Settings\Password) If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -4 : EndIf tls_config_set_key_mem(tls_cfg, mem_ptr, length) Else - Debug "Key:"+*Settings\Key + lhs_log::Out("Key:"+*Settings\Key) mem_ptr = tls_load_file(*Settings\Key, @length) If Not mem_ptr : tls_config_free(tls_cfg) : ProcedureReturn -5 : EndIf tls_config_set_key_mem(tls_cfg, mem_ptr, length) EndIf tls_ctx = tls_server() - Debug "TLS Server obj:"+Str(tls_ctx) + lhs_log::Out("TLS Server obj:"+Str(tls_ctx)) If Not tls_ctx : tls_config_free(tls_cfg) : ProcedureReturn -6 : EndIf returns = tls_configure(tls_ctx, tls_cfg) - Debug "Configure Returns:"+Str(returns) - If returns <> 0 :Debug ErrorTLSSrv(): tls_free(tls_ctx) : tls_config_free(tls_cfg) : ProcedureReturn -7 : EndIf + lhs_log::Out("Configure Returns:"+Str(returns)) + If returns <> 0 :lhs_log::Out(ErrorTLSSrv()): tls_free(tls_ctx) : tls_config_free(tls_cfg) : ProcedureReturn -7 : EndIf ProcedureReturn 1 EndProcedure @@ -199,4 +213,4 @@ Module ltls tls_config_free(tls_cfg) EndProcedure -EndModule +EndModule \ No newline at end of file diff --git a/lweb.pbi b/lweb.pbi index 6e61f97..2d9f9de 100644 --- a/lweb.pbi +++ b/lweb.pbi @@ -177,6 +177,7 @@ Module lhs_web Declare call_request(RequestString.s, Info.i=#get_handler_procedure) + Declare.s Work_Post_ToJSON_multipart_form_data(ContentLength.i, MemorSize.i, Memory.i) Declare.s Work_Post_ToJSON_x_www_form_urlencoded(ContentLength.i, MemorSize.i, Memory.i) Declare count_client(Type.i, Countchange.i) @@ -279,7 +280,7 @@ Module lhs_web If tlsresponse > 0 CreateThread(@server_HTTPS(), server_HTTPS_id) Else - Debug "TLS Fehler:"+Str(tlsresponse) + lhs_log::Out("TLS Fehler:"+Str(tlsresponse)) ProcedureReturn #False EndIf @@ -305,13 +306,13 @@ Module lhs_web thread_alive = #True - Debug "HTTPS Server Started." + lhs_log::Out("HTTPS Server Started.") Repeat client_id = ltls::WaitTLSSocket(network_server_id) - Debug "New HTTPS Client:"+Str(client_id) + lhs_log::Out("New HTTPS Client:"+Str(client_id)) If client_id > 0 If m_clients(Str(client_id))\client_id = client_id - Debug "Client Thread for socket already exist :"+Str(client_id) + lhs_log::Out("Client Thread for socket already exist :"+Str(client_id)) Else If count_HTTPS_client < conf_max_HTTPS_clients m_clients(Str(client_id))\client_id = client_id @@ -322,7 +323,7 @@ Module lhs_web m_clients(Str(client_id))\client_thread = CreateThread(@client(), client_id) count_client(#client_HTTPS, #client_add) Else - Debug "Max HTTPS Clients reached..." + lhs_log::Out("Max HTTPS Clients reached...") ltls::CloseTLSSocket(client_id) EndIf EndIf @@ -342,13 +343,13 @@ Module lhs_web thread_alive = #True - Debug "HTTP Server Started." + lhs_log::Out("HTTP Server Started.") Repeat client_id = lsocket::WaitSocket(network_server_id) - Debug "New HTTP Client:"+Str(client_id) + lhs_log::Out("New HTTP Client:"+Str(client_id)) If client_id > 0 If m_clients(Str(client_id))\client_id = client_id - Debug "Client Thread for socket already exist :"+Str(client_id) + lhs_log::Out("Client Thread for socket already exist :"+Str(client_id)) Else If count_HTTP_client < conf_max_HTTP_clients m_clients(Str(client_id))\client_id = client_id @@ -359,7 +360,7 @@ Module lhs_web m_clients(Str(client_id))\client_thread = CreateThread(@client(), client_id) count_client(#client_HTTP, #client_add) Else - Debug "Max HTTP Clients reached..." + lhs_log::Out("Max HTTP Clients reached...") lsocket::CloseSocket(client_id) EndIf EndIf @@ -384,7 +385,7 @@ Module lhs_web Define NewMap Post.s() - Debug "Client Thread Started. ID:" + Str(network_client_id) + lhs_log::Out("Client Thread Started. ID:" + Str(network_client_id)) Repeat ;Prüfen ob der Thread was zu tun hat. ;{ Main Server Triggered Things @@ -399,7 +400,7 @@ Module lhs_web If m_clients(Str(thread_cli_id))\datenbuffer()\Buffer m_clients(Str(thread_cli_id))\datenbuffer()\Initialized = #True Else - Debug "Buffer Initialisierung fehlgeschlagen." + lhs_log::Out("Buffer Initialisierung fehlgeschlagen.") Break EndIf If m_clients(Str(thread_cli_id))\client_type = #client_HTTPS @@ -409,7 +410,7 @@ Module lhs_web EndIf If temp_receivelength = -1 - Debug "Empfangsfehler." + lhs_log::Out("Empfangsfehler.") Break ElseIf temp_receivelength = 65536 m_clients(Str(thread_cli_id))\datenbuffer()\Size = temp_receivelength @@ -420,7 +421,7 @@ Module lhs_web If m_clients(Str(thread_cli_id))\datenbuffer()\Buffer m_clients(Str(thread_cli_id))\datenbuffer()\Initialized = #True Else - Debug "Buffer Initialisierung fehlgeschlagen." + lhs_log::Out("Buffer Initialisierung fehlgeschlagen.") Break 2 EndIf If m_clients(Str(thread_cli_id))\client_type = #client_HTTPS @@ -439,19 +440,19 @@ Module lhs_web m_clients(Str(thread_cli_id))\datenbuffer()\Size = temp_receivelength EndIf ;Alle Daten empfangen. - Debug "Anzahl Buffer:" + Str(ListSize(m_clients(Str(thread_cli_id))\datenbuffer())) + lhs_log::Out("Anzahl Buffer:" + Str(ListSize(m_clients(Str(thread_cli_id))\datenbuffer()))) m_clients(Str(thread_cli_id))\client_do_srv = #SRV_DO_NOP m_clients(Str(thread_cli_id))\client_do_cli = #CLI_DO_DataWorking Case #SRV_DO_ClientDisconnect ;Thread beenden - Debug "#SRV_DO_ClientDisconnect" + lhs_log::Out("#SRV_DO_ClientDisconnect") thread_alive = #False ;* Alles IO Default ;Ressourcen freigeben und Threadzeit reduzieren Delay(1) - Debug "--------------------------------------------------------- FAILING ???" + lhs_log::Out("--------------------------------------------------------- FAILING ???") EndSelect ;} @@ -464,7 +465,7 @@ Module lhs_web ;Change Thread to Work mode. ;{ - Debug "Date received, working..." + lhs_log::Out("Date received, working...") m_clients(Str(thread_cli_id))\client_do_cli = #CLI_DO_DataWorking ;Work on Answer. ResetList(m_clients(Str(thread_cli_id))\datenbuffer()) @@ -493,7 +494,7 @@ Module lhs_web - ;Debug "JSONString:"+ JSONStringToMap + ;lhs_log::Out("JSONString:"+ JSONStringToMap) thread_type = "" Select Header(#http_head_method) Case #http_method_get @@ -502,13 +503,13 @@ Module lhs_web ;* Default GET ;* ;{ - Debug #http_method_get + lhs_log::Out(#http_method_get) If Header(#http_head_request) = "/" thread_requested = conf_defaultfile Else thread_requested = Header(#http_head_request) EndIf - Debug "Requested:"+thread_requested + lhs_log::Out("Requested:"+thread_requested) ToCallType = call_request(thread_requested, #get_handler_prototype) If ToCallType = #handler_proto_universal Or ToCallType = #handler_proto_get ToCall = call_request(thread_requested) @@ -529,7 +530,7 @@ Module lhs_web Handler_Response = ToCallProcedure(Header()) EndSelect - Debug "Main Client Response :"+Handler_Response + lhs_log::Out("Main Client Response :"+Handler_Response) MyThreadJSON = ParseJSON(#PB_Any, Handler_Response) If MyThreadJSON ClearMap(Response()) @@ -537,18 +538,18 @@ Module lhs_web FreeJSON(MyThreadJSON) Else ;WTF ??? - Debug "Fehler Absturz" + lhs_log::Out("Fehler Absturz") Break 2 ; Thread abschiessen EndIf - Debug "Response Content:"+Response(#cha_R_ResponseContentType) + lhs_log::Out("Response Content:"+Response(#cha_R_ResponseContentType)) Select Response(#cha_R_ResponseContentType) Case #response_Memory - Debug "Response Memory" + lhs_log::Out("Response Memory") thread_data_size = Val(Response(#cha_R_MemorySize)) thread_temp_cache_memory = Val(Response(#cha_R_MemoryAdress)) thread_type = Response(#cha_R_ResponseType) Case #response_string - Debug "Response String" + lhs_log::Out("Response String") thread_temp_decode_memory = AllocateMemory(StringByteLength(Response(#cha_R_StringBase64))) thread_data_size = Base64Decoder(Response(#cha_R_StringBase64), thread_temp_decode_memory, StringByteLength(Response(#cha_R_StringBase64))) thread_temp_cache_memory = AllocateMemory(thread_data_size) @@ -558,7 +559,7 @@ Module lhs_web Default ;Solte ja nicht passieren. EndSelect - Debug "Content Finished" + lhs_log::Out("Content Finished") ;} ElseIf conf_cache_enable = 1 @@ -572,7 +573,7 @@ Module lhs_web ;Alles Ok Else thread_file_handle = ReadFile(#PB_Any, conf_basedir + conf_defaultfile,#PB_File_SharedRead) - Debug "FileDir:" + conf_basedir + conf_defaultfile + lhs_log::Out("FileDir:" + conf_basedir + conf_defaultfile) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, "error.html") EndIf @@ -595,7 +596,7 @@ Module lhs_web thread_file_handle = ReadFile(#PB_Any, conf_basedir + thread_requested,#PB_File_SharedRead) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, conf_basedir + conf_defaultfile,#PB_File_SharedRead) - Debug "FileDir:" + conf_basedir + conf_defaultfile + lhs_log::Out("FileDir:" + conf_basedir + conf_defaultfile) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, "error.html") EndIf @@ -615,8 +616,12 @@ Module lhs_web ;* ;* POST ;* - Debug #http_method_post - ;PrintN("POST") + ;* Current Finaly Implementet is only application/x-www-form-urlencoded + ;* Error Handling must be Optimized. + ;* + lhs_log::Out(#http_method_post) + + ;{ POST Content Type Decoder If LCase(Header(#http_head_content_type)) = #http_content_type_application_x_www_form_urlencoded PostMapString = Work_Post_ToJSON_x_www_form_urlencoded(Val(Header(#http_head_content_length)), m_clients(Str(thread_cli_id))\datenbuffer()\Size, m_clients(Str(thread_cli_id))\datenbuffer()\Buffer) MyThreadJSON = ParseJSON(#PB_Any, PostMapString) @@ -626,17 +631,30 @@ Module lhs_web FreeJSON(MyThreadJSON) Else ;Should not be possible. - Debug "Error in thread, JSON Convert didn't Work" + lhs_log::Out("Error in thread, JSON Convert didn't Work") Break 2 ; Kill Thread EndIf + ElseIf Left(LCase(Header(#http_head_content_type)), Len(#http_content_type_multipart_form_data)) = #http_content_type_multipart_form_data + PostMapString = Work_Post_ToJSON_multipart_form_data(Val(Header(#http_head_content_length)), m_clients(Str(thread_cli_id))\datenbuffer()\Size, m_clients(Str(thread_cli_id))\datenbuffer()\Buffer) + MyThreadJSON = ParseJSON(#PB_Any, PostMapString) + If MyThreadJSON + ClearMap(Post()) + ExtractJSONMap(JSONValue(MyThreadJSON), Post()) + FreeJSON(MyThreadJSON) + Else + ;Someting wrong in the POST + lhs_log::Out("Error with Content. JSON Convert didn't Work") + Break 2; Kill Thread + EndIf EndIf + ;} If Header(#http_head_request) = "/" thread_requested = conf_defaultfile Else thread_requested = Header(#http_head_request) EndIf - Debug "Requested:"+thread_requested + lhs_log::Out("Requested:"+thread_requested) ToCallType = call_request(thread_requested, #get_handler_prototype) If ToCallType = #handler_proto_universal Or ToCallType = #handler_proto_post ToCall = call_request(thread_requested) @@ -657,7 +675,7 @@ Module lhs_web Handler_Response = ToCallProcedure(Header(), PostMapString) EndSelect - Debug "Main Client Response :"+Handler_Response + lhs_log::Out("Main Client Response :"+Handler_Response) MyThreadJSON = ParseJSON(#PB_Any, Handler_Response) If MyThreadJSON ClearMap(Response()) @@ -665,10 +683,10 @@ Module lhs_web FreeJSON(MyThreadJSON) Else ;WTF ??? - Debug "Fehler Absturz" + lhs_log::Out("Fehler Absturz") Break 2 ; Thread abschiessen EndIf - Debug "Response Content:"+Response(#cha_R_ResponseContentType) + lhs_log::Out("Response Content:"+Response(#cha_R_ResponseContentType)) Select Response(#cha_R_ResponseContentType) Case #response_Memory thread_data_size = Val(Response(#cha_R_MemorySize)) @@ -684,7 +702,7 @@ Module lhs_web Default ;Solte ja nicht passieren. EndSelect - Debug "Content Finished" + lhs_log::Out("Content Finished") ;} ElseIf conf_cache_enable = 1 @@ -698,7 +716,7 @@ Module lhs_web ;Alles Ok Else thread_file_handle = ReadFile(#PB_Any, conf_basedir + conf_defaultfile,#PB_File_SharedRead) - Debug "FileDir:" + conf_basedir + conf_defaultfile + lhs_log::Out("FileDir:" + conf_basedir + conf_defaultfile) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, "error.html") EndIf @@ -721,7 +739,7 @@ Module lhs_web thread_file_handle = ReadFile(#PB_Any, conf_basedir + thread_requested,#PB_File_SharedRead) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, conf_basedir + conf_defaultfile,#PB_File_SharedRead) - Debug "FileDir:" + conf_basedir + conf_defaultfile + lhs_log::Out("FileDir:" + conf_basedir + conf_defaultfile) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, "error.html") EndIf @@ -744,7 +762,7 @@ Module lhs_web If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, conf_basedir + conf_defaultfile,#PB_File_SharedRead) - Debug "FileDir:" + conf_basedir + thread_requested + lhs_log::Out("FileDir:" + conf_basedir + thread_requested) If Not thread_file_handle thread_file_handle = ReadFile(#PB_Any, "error.html") EndIf @@ -792,25 +810,25 @@ Module lhs_web thread_buffer = AllocateMemory(thread_data_size+StringByteLength(thread_header)+12) thread_buffer_offset = thread_buffer thread_buffer_length = PokeS(thread_buffer_offset, thread_header,-1, #PB_UTF8|#PB_String_NoZero) : thread_buffer_offset + thread_buffer_length - Debug "Header Finished" + lhs_log::Out("Header Finished") EndIf If thread_temp_cache_memory <> 0 And thread_buffer_offset <> 0 And thread_data_size <> 0 CopyMemory(thread_temp_cache_memory, thread_buffer_offset, thread_data_size) - Debug thread_temp_cache_memory + lhs_log::Out(Str(thread_temp_cache_memory)) FreeMemory(thread_temp_cache_memory) thread_temp_cache_memory=0 Else - Debug "File Buffer Troubles." - If thread_temp_cache_memory = 0 : Debug "thread_temp_cache_memory = 0" : EndIf - If thread_buffer_offset = 0 : Debug "thread_buffer_offset = 0" : EndIf - If thread_data_size = 0 : Debug "thread_data_size = 0" : EndIf + lhs_log::Out("File Buffer Troubles.") + If thread_temp_cache_memory = 0 : lhs_log::Out("thread_temp_cache_memory = 0") : EndIf + If thread_buffer_offset = 0 : lhs_log::Out("thread_buffer_offset = 0") : EndIf + If thread_data_size = 0 : lhs_log::Out("thread_data_size = 0") : EndIf thread_alive = #False Break 2 EndIf ; EndIf - Debug "HTTP File Buffer Cleaned." + lhs_log::Out("HTTP File Buffer Cleaned.") ;Löschen des eingang Speichers. If m_clients(Str(thread_cli_id))\datenbuffer()\Buffer > 0 FreeMemory(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer) @@ -826,12 +844,12 @@ Module lhs_web Repeat sent = ltls::WriteTLSSocket(thread_cli_id, sent_buffer_address , sent_length) If sent <> -1 - Debug "HTTPS Sent:"+Str(sent)+" bytes" + lhs_log::Out("HTTPS Sent:"+Str(sent)+" bytes") sent_length - sent sent_buffer_address + sent sent_total + sent Else - Debug "HTTPS Sent error:"+ltls::ErrorTLSCli(thread_cli_id) + lhs_log::Out("HTTPS Sent error:"+ltls::ErrorTLSCli(thread_cli_id)) thread_alive = #False Break 2 EndIf @@ -846,12 +864,12 @@ Module lhs_web Repeat sent = lsocket::WriteSocket(thread_cli_id, thread_buffer , sent_length) If sent <> -1 - Debug "HTTP Sent:"+Str(sent)+" bytes" + lhs_log::Out("HTTP Sent:"+Str(sent)+" bytes") sent_length - sent sent_buffer_address + sent sent_total + sent Else - Debug "HTTP Sent error:"+Str(sent) + lhs_log::Out("HTTP Sent error:"+Str(sent)) thread_alive = #False Break 2 EndIf @@ -862,7 +880,7 @@ Module lhs_web If sent = thread_data_size+(thread_buffer_offset-thread_buffer) ;Ok - ;Debug "Gesendet:" + PeekS(thread_buffer,thread_buffer_length, #PB_Ascii) + ;lhs_log::Out("Gesendet:" + PeekS(thread_buffer,thread_buffer_length, #PB_Ascii)) If thread_buffer > 0 FreeMemory(thread_buffer) EndIf @@ -871,7 +889,7 @@ Module lhs_web m_clients(Str(thread_cli_id))\client_do_srv = #SRV_DO_DataReceive Else ;Fehler beim Senden ... Thread beenden. - Debug "Fehler:" + Str(Sent) + lhs_log::Out("Fehler:" + Str(Sent)) thread_alive = #False EndIf @@ -887,35 +905,35 @@ Module lhs_web ;} Until thread_alive = #False - Debug "Thread should now die..." + lhs_log::Out("Thread should now die...") ResetList(m_clients(Str(thread_cli_id))\datenbuffer()) - Debug "Thread kill all Initialized Memory buffers:" + lhs_log::Out("Thread kill all Initialized Memory buffers:") While NextElement(m_clients(Str(thread_cli_id))\datenbuffer()) If m_clients(Str(thread_cli_id))\datenbuffer()\Initialized - Debug "Kill:"+Str(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer)+ " ..." + lhs_log::Out("Kill:"+Str(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer)+ " ...") FreeMemory(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer) DeleteElement(m_clients(Str(thread_cli_id))\datenbuffer()) - Debug "Freed and removed" + lhs_log::Out("Freed and removed") Else - Debug "Remove element from List with uninitialized Memory ID: "+Str(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer) + lhs_log::Out("Remove element from List with uninitialized Memory ID: "+Str(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer)) DeleteElement(m_clients(Str(thread_cli_id))\datenbuffer()) - Debug "Removed" + lhs_log::Out("Removed") EndIf Wend If m_clients(Str(thread_cli_id))\client_type = #client_HTTPS - Debug "Kill HTTPS Socket:" + Str(thread_cli_id) + lhs_log::Out("Kill HTTPS Socket:" + Str(thread_cli_id)) ;ltls::CloseTLSSocket(thread_cli_id) count_client(#client_HTTPS, #client_remove) - Debug "Killed." + lhs_log::Out("Killed.") Else - Debug "Kill HTTP Socket:" + Str(thread_cli_id) + lhs_log::Out("Kill HTTP Socket:" + Str(thread_cli_id)) lsocket::CloseSocket(thread_cli_id) count_client(#client_HTTP, #client_remove) - Debug "Killed." + lhs_log::Out("Killed.") EndIf - Debug "Remove Client from map..." + lhs_log::Out("Remove Client from map...") DeleteMapElement(m_clients(), Str(thread_cli_id)) - Debug "Removed and thread now died." + lhs_log::Out("Removed and thread now died.") EndProcedure @@ -997,7 +1015,7 @@ Module lhs_web Count = 0 Repeat Posts(StringField(StringField(ContentString, Count + 1, "&"),1,"=")) = StringField(StringField(ContentString, Count + 1, "&"),2,"=") - ;Debug "Worked Count:"+Str(Count)+" of: "+Str(CountParams)+":"+StringField(StringField(ContentString, Count + 1, "&"),1,"=")+" = "+StringField(StringField(ContentString, Count + 1, "&"),2,"=") + ;lhs_log::Out("Worked Count:"+Str(Count)+" of: "+Str(CountParams)+":"+StringField(StringField(ContentString, Count + 1, "&"),1,"=")+" = "+StringField(StringField(ContentString, Count + 1, "&"),2,"=") Count + 1 Until Count > CountParams Else @@ -1022,11 +1040,16 @@ Module lhs_web EndProcedure + Procedure.s Work_Post_ToJSON_multipart_form_data(ContentLength.i, MemorySize.i, Memory.i) + + ProcedureReturn "NA" + EndProcedure + Procedure.s register_client_handler(Route.s, Callback.i, AppPrototype.i = #handler_proto_get, RouteType.i = #handler_sub) m_request(Route)\type = AppPrototype m_request(Route)\call = Callback m_request(Route)\routetype = RouteType - Debug "Handler Registriert:"+Route + lhs_log::Out("Handler Registriert:"+Route) EndProcedure Procedure count_client(Type.i, Countchange.i) @@ -1052,4 +1075,3 @@ EndModule - diff --git a/lweb.pbp b/lweb.pbp index f9b985c..6c927ac 100644 --- a/lweb.pbp +++ b/lweb.pbp @@ -8,7 +8,7 @@
- +
@@ -53,11 +53,11 @@ - + - + diff --git a/lweb_header.pbi b/lweb_header.pbi index eae1b8b..ed7d4d5 100644 --- a/lweb_header.pbi +++ b/lweb_header.pbi @@ -10,6 +10,8 @@ ;* EnableExplicit +XIncludeFile "lhs_lib/SYS/lhs_log.pbi" + CompilerIf #PB_Compiler_Thread = 0 CompilerError "Muss Threadsicher Kompiliert werden" CompilerEndIf diff --git a/server_example.pb b/server_example.pb index 5824084..3c60f80 100644 --- a/server_example.pb +++ b/server_example.pb @@ -2,11 +2,10 @@ ;* ;* Lihaso Web Server ;* +;* HTTP/HTTPS Server Beispiel +;* ;* (c)2015 - 2021 by Linder Hard- und Software ;* -;* V0.1 -;* - Initial Web Server -;* - Modul interface ? ;* EnableExplicit @@ -15,11 +14,19 @@ EnableExplicit ;* Deklaration Variabeln ;* +XIncludeFile "lhs_lib/SYS/lhs_log.pbi" XIncludeFile "lweb_header.pbi" XIncludeFile "lweb.pbi" Define counter, v_lweb_srv_stop +lhs_log::App_Name = "http-s_server_example" +lhs_log::SetLogFile("http-s_server_example.log") +lhs_log::SetMaxSize(32) +lhs_log::SetLogDateFormat("%yyyy.%mm.%dd %hh:%ii:%ss") +lhs_log::SetLogFileDateFormat("%yyyy_%mm_%dd_%hh_%ii_%ss") +lhs_log::Init() + lhs_web::set_config(lhs_web::#conf_HTTP_port, "8081") ;lhs_web::set_config(lhs_web::#conf_binding, "127.0.0.1") lhs_web::set_config(lhs_web::#conf_HTTP_binding, "0.0.0.0") @@ -45,9 +52,9 @@ Procedure.s Sample_Header(Map Header.s()) Define.s Encoded, ZumSenden, TBD, Text NewMap Response.s() If Header("cookie:") <> "" - Debug "A Cookie is set :" + Header("cookie:") + lhs_log::Out("A Cookie is set :" + Header("cookie:")) Else - Debug "No Cookie." + lhs_log::Out("No Cookie.") EndIf TBD="

Header


"+#CRLF$ @@ -60,7 +67,7 @@ Procedure.s Sample_Header(Map Header.s()) *Text = AllocateMemory(StringByteLength(Text)) PokeS(*Text, Text) Encoded = Base64Encoder(*Text, MemorySize(*Text)) - Debug "Encoded: " + Encoded + lhs_log::Out("Encoded: " + Encoded) Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string Response(lhs_web::#cha_R_StringBase64) = Encoded Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") @@ -70,7 +77,7 @@ Procedure.s Sample_Header(Map Header.s()) EndIf ZumSenden = lhs_web::MapToJSONString(Response()) - Debug "ZumSenden: " + ZumSenden + lhs_log::Out("ZumSenden: " + ZumSenden) ProcedureReturn ZumSenden EndProcedure @@ -83,20 +90,20 @@ Procedure.s Formular_Test(Map Header.s(), ContentData.s) While NextMapElement(Header()) TBD = TBD+"
"+MapKey(Header())+" : "+Header()+"

"+#CRLF$ Wend - Debug "TBD:"+TBD - Debug "contentData:"+ContentData + lhs_log::Out("TBD:"+TBD) + lhs_log::Out("contentData:"+ContentData) Text = "
Alle Client Headers
"+TBD+"

ConentJSON


"+ContentData+"" *Text = AllocateMemory(StringByteLength(Text)) PokeS(*Text, Text) - Debug "Unencoded:"+PeekS(*Text, -1 , #PB_UTF8) + lhs_log::Out("Unencoded:"+PeekS(*Text, -1 , #PB_UTF8)) Encoded = Base64Encoder(*Text, MemorySize(*Text)) - Debug "Encoded: " + Encoded + lhs_log::Out("Encoded: " + Encoded) Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string Response(lhs_web::#cha_R_StringBase64) = Encoded Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") Response(lhs_web::#cha_R_http_head_status) = "200 OK" ZumSenden = lhs_web::MapToJSONString(Response()) - Debug "ZumSenden: " + ZumSenden + lhs_log::Out("ZumSenden: " + ZumSenden) ProcedureReturn ZumSenden EndProcedure @@ -107,7 +114,7 @@ Procedure.s Php_Test(Map Header.s(), ContentData.s) NewMap Response.s() Execute = lhs_web::get_config(lhs_web::#conf_basedir) + Header(lhs_web::#http_head_request) - Debug "To Execute:" + Execute + lhs_log::Out("To Execute:" + Execute) Php = RunProgram("php", Execute, "", #PB_Program_Open | #PB_Program_Read) Phpresult = "" If Php @@ -121,15 +128,15 @@ Procedure.s Php_Test(Map Header.s(), ContentData.s) Text = Phpresult *Text = AllocateMemory(StringByteLength(Text)) PokeS(*Text, Text) - Debug "Unencoded:"+PeekS(*Text, -1 , #PB_UTF8) + lhs_log::Out("Unencoded:"+PeekS(*Text, -1 , #PB_UTF8)) Encoded = Base64Encoder(*Text, MemorySize(*Text)) - Debug "Encoded: " + Encoded + lhs_log::Out("Encoded: " + Encoded) Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string Response(lhs_web::#cha_R_StringBase64) = Encoded Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") Response(lhs_web::#cha_R_http_head_status) = "200 OK" ZumSenden = lhs_web::MapToJSONString(Response()) - Debug "ZumSenden: " + ZumSenden + lhs_log::Out("ZumSenden: " + ZumSenden) ProcedureReturn ZumSenden EndProcedure @@ -145,9 +152,9 @@ lhs_web::register_client_handler("php", @Php_Test(),lhs_web::#handler_proto_univ ;* If lhs_web::start_server() - Debug "Server gestartet" + lhs_web::get_config(lhs_web::#conf_HTTP_port) + lhs_log::Out("Server gestartet" + lhs_web::get_config(lhs_web::#conf_HTTP_port)) Else - Debug "Fehlgeschlagen" + lhs_log::Out("Fehlgeschlagen") End EndIf @@ -159,5 +166,5 @@ PrintN("HTTPS an Port:"+lhs_web::get_config(lhs_web::#conf_HTTPS_Port)) PrintN("Press Enter to Exit") Input() PrintN("Finished") - +lhs_log::Close() End