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.

91 lines
2.2 KiB

B4J=true
Group=Modules
ModulesStructureVersion=1
Type=StaticCode
Version=8.31
@EndOfDesignText@
' WebUtils Code module
' Version 1.00
Sub Process_Globals
Public bc As ByteConverter
End Sub
Public Sub init
bc.LittleEndian = True
End Sub
#Region Test
Public Sub EscapeHtml(Raw As String) As String
Dim sb As StringBuilder
sb.Initialize
For i = 0 To Raw.Length - 1
Dim C As Char = Raw.CharAt(i)
Select C
Case QUOTE
sb.Append(""")
Case "'"
sb.Append("'")
Case "<"
sb.Append("&lt;")
Case ">"
sb.Append("&gt;")
Case "&"
sb.Append("&amp;")
Case Else
sb.Append(C)
End Select
Next
Return sb.ToString
End Sub
Public Sub ReplaceMap(Base As String, Replacements As Map) As String
Dim pattern As StringBuilder
pattern.Initialize
For Each k As String In Replacements.Keys
If pattern.Length > 0 Then pattern.Append("|")
pattern.Append("\$").Append(k).Append("\$")
Next
Dim m As Matcher = Regex.Matcher(pattern.ToString, Base)
Dim result As StringBuilder
result.Initialize
Dim lastIndex As Int
Do While m.Find
result.Append(Base.SubString2(lastIndex, m.GetStart(0)))
Dim replace As String = Replacements.Get(m.Match.SubString2(1, m.Match.Length - 1))
If m.Match.ToLowerCase.StartsWith("$h_") Then replace = EscapeHtml(replace)
result.Append(replace)
lastIndex = m.GetEnd(0)
Loop
If lastIndex < Base.Length Then result.Append(Base.SubString(lastIndex))
Return result.ToString
End Sub
Public Sub RedirectTo(ws As WebSocket, TargetUrl As String)
ws.Eval("window.location = arguments[0]", Array As Object(TargetUrl))
End Sub
Public Sub ReadString(In As InputStream) As String
Dim len As Int = bc.IntsFromBytes(ReadBytesFromStream(In, 4))(0)
Return BytesToString(ReadBytesFromStream(In, len), 0, len, "UTF8")
End Sub
#End Region
Sub ReadBytesFromStream(In As InputStream, Length As Int) As Byte()
If Length > 5000 Then
Log("Error reading from stream")
Return Null
End If
Dim b(Length) As Byte
Dim count As Int = 0
Do While count < Length
Dim read As Int = In.ReadBytes(b, count, Length - count)
If read <= 0 Then
Log("Error reading from stream.")
Return Null
End If
count = count + read
Loop
Return b
End Sub