Debug change to lhs_log and Empty multiform

This commit is contained in:
René Linder 2021-05-21 07:45:23 +02:00
parent 07c55b77b6
commit dcfd676a55
7 changed files with 149 additions and 104 deletions

View File

@ -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

View File

@ -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

View File

@ -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

156
lweb.pbi
View File

@ -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

View File

@ -8,7 +8,7 @@
<section name="data">
<explorer view="../../../bin/purebasic/examples/" pattern="0"/>
<log show="1"/>
<lastopen date="2021-03-26 14:53" user="renlin" host="linux-mvsk"/>
<lastopen date="2021-05-18 11:07" user="renlin" host="localhost.localdomain"/>
</section>
<section name="files">
<file name="inc/lweb_file_cache.pbi">
@ -53,11 +53,11 @@
</file>
<file name="ltls.pbi">
<config load="0" scan="1" panel="1" warn="1" lastopen="1" panelstate="+"/>
<fingerprint md5="2039445441451e5efbfb06a5d695d02f"/>
<fingerprint md5="b956381cac547736cc02dc190f3667ef"/>
</file>
<file name="lweb.pbi">
<config load="0" scan="1" panel="1" warn="1" lastopen="1" panelstate="+"/>
<fingerprint md5="046f6480cd2ad72f3b9cb025dca0f810"/>
<fingerprint md5="de8dab8fa9d7a38afdba1b88cc9d7f23"/>
</file>
<file name="lweb_header.pbi">
<config load="0" scan="1" panel="1" warn="1" lastopen="1" panelstate="+"/>

View File

@ -10,6 +10,8 @@
;*
EnableExplicit
XIncludeFile "lhs_lib/SYS/lhs_log.pbi"
CompilerIf #PB_Compiler_Thread = 0
CompilerError "Muss Threadsicher Kompiliert werden"
CompilerEndIf

View File

@ -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="<div><div><h1>Header</h1></div><br/>"+#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+"<div>"+MapKey(Header())+" : "+Header()+" </div><br/>"+#CRLF$
Wend
Debug "TBD:"+TBD
Debug "contentData:"+ContentData
lhs_log::Out("TBD:"+TBD)
lhs_log::Out("contentData:"+ContentData)
Text = "<!DOCTYPE html><html><header><title>Alle Client Headers</title></header><body>"+TBD+"<hr/><br/><h1>ConentJSON</h1><br/>"+ContentData+"</body></html>"
*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