| build_tools | ||
| cfg | ||
| inc | ||
| lhs_lib@7be5b7e21c | ||
| testweb | ||
| .gitignore | ||
| .gitmodules | ||
| createini.pb | ||
| default_http_status_codes.xml | ||
| lhttpd.ini | ||
| lhttpd.pb | ||
| LICENSE | ||
| lweb.pbi | ||
| lweb.pbp | ||
| lweb_header.pbi | ||
| README.md | ||
| README_DE.md | ||
| server_example.pb | ||
| server_example_function.pbi | ||
| server_example_function_library.pb | ||
| TODO.txt | ||
lweb
LiHaSo Webserver Modul
Public functions:
Server module configuration:
Parameter List:
HTTP Server Configuration:
lweb::#conf_HTTP_port            ; Listening Port
lweb::#conf_HTTP_binding         ; Interface binding e.g. only localhost with "127.0.0.1"
lweb::#conf_max_HTTP_clients     ; Max connected Clients to the HTTP Server
HTTPS Server Configuration:
lweb::#conf_HTTPS_Port           ; Listening Port
lweb::#conf_HTTPS_Binding        ; Interface binding e.g. only localhost with "127.0.0.1"
lweb::#conf_HTTPS_CA             ; eg. "fullchain.pem"
lweb::#conf_HTTPS_Cert           ; eg. "cert.pem"
lweb::#conf_HTTPS_Key            ; eg. "privkey.pem"
lweb::#conf_HTTPS_Key_Pass       ; eg. "Passw0rd"
lweb::#conf_max_HTTPS_clients    ; Max connected Clients to the HTTPS Server
lweb::#conf_HTTPS_Enable         ; It enable the https server (0 disabled and 1 enabled.)
Other Server Configuration:
lweb::#conf_defaultfile          ;Default file wen no file is selected(With extension!) e.g. "index.php"
lweb::#conf_basedir              ;Default directory e.g. "/srv/www/htdocs/"
lweb::#conf_error400             ;TBD:error400
lweb::#conf_max_clients          ;Max clients connected at the same time. (Watch memory limits!)
lweb::#conf_server_type          ;Currently no function.(e.g. HTTPS, HTTP/2)
lweb::#conf_cache_enable         ;It enable the cache mode (0 disabled and 1 enabled.) Currently with debugger unstable.
Functions
lweb::set_config(parameter.i=#conf_defaultfile, setting.s="index.html")
Setting must be a string.
Response is #True or #False.
lweb::get_config(parameter.i=#conf_defaultfile)
Responste is everytime a string.
Server start
lweb::start_server()
Response is #True or #False.
Different way to register a handler:
lweb::register_client_handler(Route.s, Callback.i, AppPrototype.i = #handler_proto_get, RouteType.i = #handler_sub)
Response is a JSONString!
AppPrototype parameter:
lweb::#handler_proto_universal      ;Works with HTTP POST and GET requests and takes optional a string.
lweb::#handler_proto_post           ;Works only with HTTP POST and needs a string.
lweb::#handler_proto_get            ;Works only with HTTP GET withouth a string.
RouteType parameter:
lweb::#handler_only         ;React only on a explicit Url (e.g. /rest/v1/test but not /rest/v1/test/sub)
lweb::#handler_sub          ;React on a full sub url. (e.g. /rest/v1/test and also /rest/v1/test/sub)
lweb::#handler_type         ;React on called file type (e.g. *.php = "php")
Response is a simple Stringmap:
NewMap Response.s()
Following values must be set in a stringmap:
lweb::#cha_R_ResponseType = "ResponseType";Element ResponseType,Mimetype set e.g.lweb::mimetype("html").lweb::#cha_R_ResponseContentType = "ResponseContentType";Element ResponseContentType,lweb::#response_stringorlweb::#response_Memorylweb::#cha_R_MemoryAdress = "MemoryAdress";Element MemoryAdress, convert to stringStr(Adresse)converted back byVal(). After finished the work it will be freed!lweb::#cha_R_MemorySize = "MemorySize";Element MemorySize, convert to stringStr(Size)converted back byVal().lweb::#cha_R_StringBase64 = "StringBase64";Element StringBase64, Base64 encoded stringlweb::#cha_R_http_head_status = "HeaderStatus";"200 OK","300 Error","500 Server Error"etc.
It's only allowed to response a base64 encoded string or a memoryblock.
Complete example:
Procedure.s Sample_Header(Map Header.s())
  Define *Text
  Define.s Encoded, ToSend, TBD
  NewMap Response.s()
  TBD="<div><div><h1>Header</h1></div><br/>"+#CRLF$
  ResetMap(Header())
  While NextMapElement(Header())
    TBD = TBD+"<div>"+MapKey(Header())+" : "+Header()+" </div><br/>"+#CRLF$
  Wend
  
  *Text = UTF8("<!DOCTYPE html><html><header><title>Alle Client Headers</title></header><body>"+TBD+"</body></html>")
  Encoded = Base64Encoder(*Text, MemorySize(*Text))
  Debug "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"
  ToSend = lhs_web::MapToJSONString(Response())
  Debug "ToSend: " + ToSend
  ProcedureReturn ToSend
EndProcedure
lhs_web::register_client_handler("/server/show_client_headers", @Sample_Header(),lhs_web::#handler_proto_get, lhs_web::#handler_sub)
HTML mimetype of a file extension:
lweb::mimetype(file.s)
Response is a string.
Converts e.g. lweb::mimetype("html") to "text/html"
Convert a map to a JSONString. Interaction for example with a SpiderBasic app.
lweb::MapToJSONString(Map ConvertMap.s())
Response is a string.
Example:
  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"
  ToSend = lhs_web::MapToJSONString(Response())
The converted map would be possible to converted back by the main worker procedure (Client thread from lweb.pbi).
Verification if it is a valid IP Address (IPv6 and IPv4)
lweb::IsIPStringValid(Adress.s)
Example:
setting = "192.168.256.12"
If lweb::IsIPStringValid(setting)
    conf_binding = setting
Else
    ; failed
    conf_binding = "127.0.0.1"
EndIf
Validation will be failed because 256 is not valid.
Response is #True or #False.