LiHaSo Webserver Modul
 
 
Go to file
René Linder 48ff042e0e Readme.md translated 2021-04-29 10:05:04 +02:00
inc Splittet source up to some includes. 2020-12-01 15:17:48 +01:00
testweb Diverse Testfiles 2020-11-08 23:36:44 +01:00
.gitignore Initial commit 2020-10-28 14:24:53 +01:00
LICENSE Initial commit 2020-10-28 14:24:53 +01:00
README.md Readme.md translated 2021-04-29 10:05:04 +02:00
TODO.txt Everything on Socket API now 2020-11-28 16:49:22 +01:00
createini.pb Rework Max Clients 2020-11-30 10:04:29 +01:00
lhttpd.ini Rework Max Clients 2020-11-30 10:04:29 +01:00
lhttpd.pb Rework Max Clients 2020-11-30 10:04:29 +01:00
lsocket.pbi First english translations 2021-04-29 09:41:41 +02:00
ltls.pbi First english translations 2021-04-29 09:41:41 +02:00
lweb.pbi First english translations 2021-04-29 09:41:41 +02:00
lweb.pbp First english translations 2021-04-29 09:41:41 +02:00
lweb_header.pbi Cookie Handling 2020-12-10 16:37:17 +01:00
server_example.pb First english translations 2021-04-29 09:41:41 +02:00

README.md

lweb

LiHaSo Webserver Modul

Public functions:

Server module configuration:

Parameter List:

lweb::#conf_port            ;Listening Port
lweb::#conf_binding         ;Interface binding e.g. only localhost with "127.0.0.1"
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.