;******************************** ;* ;* lweb_http.pbi ;* ;* HTTP 1.1 Header ;* Procedure.s http_day(Tag.i) Select DayOfWeek(Date()) Case 0 ProcedureReturn "Sun, " Case 1 ProcedureReturn "Mon, " Case 2 ProcedureReturn "Tue, " Case 3 ProcedureReturn "Wed, " Case 4 ProcedureReturn "Thur, " Case 5 ProcedureReturn "Fri, " Case 6 ProcedureReturn "Sat, " EndSelect EndProcedure Procedure.s http_month(Monat.i) Select Month(Date()) Case 1 ProcedureReturn " Jan " Case 2 ProcedureReturn " Feb " Case 3 ProcedureReturn " Mar " Case 4 ProcedureReturn " Apr " Case 5 ProcedureReturn " May " Case 6 ProcedureReturn " June " Case 7 ProcedureReturn " July " Case 8 ProcedureReturn " Aug " Case 9 ProcedureReturn " Sept " Case 10 ProcedureReturn " Oct " Case 11 ProcedureReturn " Nov " Case 12 ProcedureReturn " Dec " EndSelect EndProcedure Procedure.s http_header_generate(Map Header.s()) Protected.s v_http_header, v_current If Not FindMapElement(Header(), #http_head_status) : Header(#http_head_status) = "400 Bad Request" : EndIf If Not FindMapElement(Header(), #http_head_date) : Header(#http_head_date) = http_day(DayOfWeek(Date())) + Str(Day(Date())) + http_month(Month(Date())) + Str(Year(Date())) + " " + FormatDate("%hh:%ii:%ss GMT+1", Date()) : EndIf If Not FindMapElement(Header(), #http_head_server) : Header(#http_head_server) = configuration\identifikation : EndIf If Not FindMapElement(Header(), #http_head_content_length) : Header(#http_head_content_length) = "0" : EndIf If Not FindMapElement(Header(), #http_head_content_type) : Header(#http_head_content_type) = "text/txt" : EndIf v_http_header = "HTTP/1.1 " + Header(#http_head_status) + #CRLF$ + #http_head_date + " " + Header(#http_head_date) + #CRLF$ + #http_head_server + " " + Header(#http_head_server) + #CRLF$ + #http_head_content_length + " " + Header(#http_head_content_length) + #CRLF$ + #http_head_content_type + " " + Header(#http_head_content_type) + #CRLF$ If MapSize(Header()) > 5 ResetMap(Header()) While NextMapElement(Header()) v_current = MapKey(Header()) If Bool(v_current <> #http_head_status And v_current <> #http_head_date And v_current <> #http_head_server And v_current <> #http_head_content_length And v_current <> #http_head_content_type) v_http_header + v_current + " " + Header(v_current) + #CRLF$ EndIf Wend EndIf v_http_header + #CRLF$ ProcedureReturn v_http_header EndProcedure Procedure.s Work_Header_to_JSONMap(String.s) Protected NewMap Header.s() Define.s JSONString, Working, Working_Line Define CountLines, Lines, JSON If CountString(String,#CRLF$+#CRLF$) Working = StringField(String,1,#CRLF$+#CRLF$) Working = Working + #CRLF$ Else ProcedureReturn #error_string EndIf Lines = CountString(Working,#CRLF$) If Lines Working_Line = StringField(Working,1,#CRLF$) If CountString(Working_Line," ") Header(#http_head_method) = UCase(StringField(Working_Line,1," ")) Header(#http_head_request) = StringField(Working_Line,2," ") Header(#http_head_protocol) = UCase(StringField(Working_Line,3," ")) If CountString(Header(#http_head_request), "?") Header(#http_head_query) = StringField(Header(#http_head_request),2,"?") Header(#http_head_request) = StringField(Header(#http_head_request),1,"?") Else Header(#http_head_query) = "" EndIf For CountLines = 2 To Lines Working_Line = StringField(Working,CountLines,#CRLF$) Header(LCase(Trim(StringField(Working_Line,1,":")))+":") = Trim(Mid(Working_Line, FindString(Working_Line, ":") + 1)) Next Else FreeMap(Header()) ProcedureReturn #error_string EndIf Else FreeMap(Header()) ProcedureReturn #error_string EndIf JSON = CreateJSON(#PB_Any) If JSON InsertJSONMap(JSONValue(JSON), Header()) JSONString = ComposeJSON(JSON) FreeMap(Header()) FreeJSON(JSON) ProcedureReturn JSONString.s Else ProcedureReturn #error_string EndIf EndProcedure