LiHaSo Webserver Modul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
René Linder 73d7e85542 XML HTTP Status Export for import to next release 3 months ago
build_tools/src XML HTTP Status Export for import to next release 3 months ago
inc If a Headerline has another : don't cut off there #6 3 months ago
lhs_lib@5e8359cdc1 Update lhs_lib 3 months ago
testweb Diverse Testfiles 2 years ago
.gitignore Add log to ignorelist 3 months ago
.gitmodules changed submodule to https 3 months ago
LICENSE Initial commit 2 years ago
README.md Add more parameters to the document 1 year ago
README_DE.md Deutsch Original 1 year ago
TODO.txt Everything on Socket API now 2 years ago
createini.pb Typo createini.pb 12 months ago
lhttpd.ini Rework Max Clients 2 years ago
lhttpd.pb lhttpd and createini updated 1 year ago
lsocket.pbi when a large file Download was stoped the Server exited with SIGPIPE - fixed 3 months ago
ltls.pbi Updated 32bit libraries and typo 3 months ago
lweb.pbi Redirect on Directory to subdirectory with default index file 3 months ago
lweb.pbp Update project file 3 months ago
lweb_header.pbi Cleanup Header all the same with : ending #6 3 months ago
server_example.pb index file should never be with beginning /... and rename startup message 3 months ago

README.md

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_string or lweb::#response_Memory
  • lweb::#cha_R_MemoryAdress = "MemoryAdress" ;Element MemoryAdress, convert to string Str(Adresse) converted back by Val(). After finished the work it will be freed!
  • lweb::#cha_R_MemorySize = "MemorySize" ;Element MemorySize, convert to string Str(Size) converted back by Val().
  • lweb::#cha_R_StringBase64 = "StringBase64" ;Element StringBase64, Base64 encoded string
  • lweb::#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.