#include <Array.au3>
Global $session = 1
Global $listen
Global $sock
TCPStartup()
Global Const $IP = @IPAddress1
Global Const $PORT = 80
Global $header
Global $html
Global $recv
Global $write
Global $lista[255]
ResetNormal()
$listen = TCPListen($IP, $PORT, 100)
If $listen = -1 Then mError('Unable to connect.')
Func ResetNormal()
ResetHeader()
LoadHTML(@ScriptDir & "\index.htm")
EndFunc ;==>ResetNormal
Func ResetHeader($sType = "text/html", $sNum = "200")
$header = 'HTTP/1.0 ' & $sNum & ' OK' & @CRLF & 'Content-Type: ' & $sType & @CRLF & @CRLF
EndFunc ;==>ResetHeader
While 1
$sock = TCPAccept($listen)
If $sock >= 0 Then
$recv = _SockRecv($sock)
If StringLeft($recv, 11) <> "GET / HTTP/" Then _GET($recv)
$send = _SockSend($sock, $header & $html)
TCPCloseSocket($sock)
ResetNormal()
$session += 1
DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
Else
Sleep(10)
EndIf
WEnd
Func URLUnformat($sURL)
Local $sNew = ''
$sURL = StringSplit(StringReplace($sURL, "+", " "), "")
For $i = 1 To $sURL[0]
If $sURL[$i] = "%" Then
$sNew &= Chr('0x' & $sURL[$i + 1] & $sURL[$i + 2])
$i += 2
Else
$sNew &= $sURL[$i]
EndIf
Next
Return $sNew
EndFunc ;==>URLUnformat
Func _GET($sData)
$sData1 = StringSplit($sData, @CRLF, 1)
$sData = StringSplit($sData, @CRLF, 1)
If @error Or Not IsArray($sData) Then
ResetHeader('text/html', '500')
LoadHTML(@ScriptDir & "\404.htm")
Return
EndIf
$sData = StringTrimRight(StringTrimLeft($sData[1], 5), 9)
If $sData == "?" Or $sData == "?=" Then
ResetHeader('text/html', '500')
LoadHTML(@ScriptDir & "\500.htm")
Return
EndIf
$ime1 = StringSplit($sData1[1], " ", 1)
$ime2 = StringSplit($ime1[2], "=", 1)
If $ime2[1] == "/?command" And $ime2[2] > "" Then
Select
Case $ime2[2] = "exit"
Exit
Case $ime2[2] = "result"
WriteHTML('Result:<br>' & ArrayDisplayHTML($sData1))
Case Else
_ArrayAdd($lista, $ime2[2])
WriteHTML('Result at write:<br>' & ArrayDisplayHTML($lista))
EndSelect
ResetHeader()
Return
EndIf
Local $sGetFile = @ScriptDir & "\" & StringReplace(URLUnformat($sData), "/", "\")
If FileExists($sGetFile) And Not StringInStr(FileGetAttrib($sGetFile), "D") Then
Local $sExt = StringSplit($sGetFile, ".")
ResetHeader(IniRead(@ScriptDir & "\nastavitve.ini", "Extentions", $sExt[$sExt[0]], "*/*"))
LoadFILE($sGetFile)
Return
Else
ResetHeader('text/html', '404')
LoadHTML(@ScriptDir & "\404.htm")
Return
EndIf
If $sData == "" Then
ResetNormal()
Return
Else
ResetHeader('text/html', '404')
LoadHTML(@ScriptDir & "\404.htm")
Return
EndIf
EndFunc ;==>_GET
Func LoadHTML($sFile)
$html = FileRead($sFile)
EndFunc ;==>LoadHTML
Func WriteHTML($write)
$html = $write
EndFunc ;==>WriteHTML
Func LoadFILE($sFile)
$html = FileRead($sFile)
EndFunc ;==>LoadFILE
Func mError($sText, $iFatal = 0, $sTitle = 'Error', $iOpt = 0)
Local $ret = MsgBox(48 + 4096 + 262144 + $iOpt, $sTitle, $sText)
If $iFatal Then Exit
Return $ret
EndFunc ;==>mError
Func _SockRecv($iSocket, $iBytes = 2048)
Local $sData = ''
While $sData = ''
$sData = TCPRecv($iSocket, $iBytes)
WEnd
Return $sData
EndFunc ;==>_SockRecv
Func _SockSend($iSocket, $sData)
Return TCPSend($iSocket, $sData)
EndFunc ;==>_SockSend
Func ArrayDisplayHTML(Const ByRef $avArray)
Local $iCounter = 0, $sMsg = ""
If (Not IsArray($avArray)) Then
SetError(1)
Return 0
EndIf
For $iCounter = 0 To UBound($avArray) - 1
$sMsg = $sMsg & StringStripCR($avArray[$iCounter]) & "<and>"
Next
SetError(0)
Return $sMsg
EndFunc ;==>ArrayDisplayHTML
Func OnAutoItExit()
TCPCloseSocket($sock)
TCPCloseSocket($listen)
TCPShutdown()
Exit
EndFunc ;==>OnAutoItExit