Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- OpenConsole()
- If InitNetwork() = 0
- PrintN("Can't initialize the network !")
- End
- EndIf
- If OpenPreferences("config.cfg")
- BaseDirectory$ = ReadPreferenceString("BaseDirectory", "www/")
- DefaultPage$ = ReadPreferenceString("DefaultPage", "index.html")
- Port = ReadPreferenceLong("ServerPort", 8080)
- PrintN("BaseDirectory is set to: " +BaseDirectory$ )
- PrintN("Serverport is set to: " +Str(Port) )
- PrintN("DefaultPage is set to: " +DefaultPage$ )
- ClosePreferences()
- Else
- PrintN("Can't load config.cfg!")
- End
- EndIf
- Global EOL$
- EOL$ = Chr(13)+Chr(10)
- *Buffer = AllocateMemory(10000)
- If CreateNetworkServer(0,Port)
- PrintN("Server is Online!")
- Repeat
- SEvent = NetworkServerEvent()
- If SEvent
- ClientID.l = EventClient()
- Select SEvent
- Case 1
- PrintN("New Connection")
- Case 4
- PrintN("Deconnection")
- Default
- PrintN("Send data to client")
- RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000)
- Gosub ProcessRequest
- EndSelect
- Else
- Delay(20)
- EndIf
- Until Quit = 1
- CloseNetworkServer(0)
- Else
- PrintN("Error: can't create the server (is port in use ?).")
- EndIf
- End
- Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$)
- Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$) : *Buffer+Length
- Length = PokeS(*Buffer, "Date: 13 jun 2011 15:15:33 GMT"+EOL$) : *Buffer+Length
- Length = PokeS(*Buffer, "Server: Web Server"+EOL$) : *Buffer+Length
- Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$) : *Buffer+Length
- Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$) : *Buffer+Length
- Length = PokeS(*Buffer, EOL$) : *Buffer+Length
- ProcedureReturn *Buffer
- EndProcedure
- ProcessRequest:
- a$ = PeekS(*Buffer)
- If Left(a$, 3) = "GET"
- MaxPosition = FindString(a$, Chr(13), 5)
- Position = FindString(a$, " ", 5)
- If Position < MaxPosition
- RequestedFile$ = Mid(a$, 6, Position-5)
- RequestedFile$ = RTrim(RequestedFile$)
- Else
- RequestedFile$ = Mid(a$, 6, MaxPosition-5)
- EndIf
- Structure tmp
- a.b
- EndStructure
- If RequestedFile$ = ""
- RequestedFile$ = DefaultPage$
- Else
- *t.tmp = @RequestedFile$
- While *t\a <> 0
- If *t\a = '/' : *t\a = '\' : EndIf
- *t+1
- Wend
- EndIf
- If ReadFile(0, BaseDirectory$+RequestedFile$)
- FileLength = Lof(0)
- Select Right(RequestedFile$,4)
- Case ".gif"
- ContentType$ = "image/gif"
- Case ".jpg"
- ContentType$ = "image/jpeg"
- Case ".txt"
- ContentType$ = "text/plain"
- Case ".zip"
- ContentType$ = "application/zip"
- Default
- ContentType$ = "text/html"
- EndSelect
- *FileBuffer = AllocateMemory(FileLength+200)
- *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
- ReadData(0, *BufferOffset, FileLength)
- CloseFile(0)
- SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
- FreeMemory(*FileBuffer)
- Else
- If ReadFile(0, "errorpage/errorpage.html")
- FileLength = Lof(0)
- ContentType$ = "text/html"
- *FileBuffer = AllocateMemory(FileLength+200)
- *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
- ReadData(0,*BufferOffset, FileLength)
- CloseFile(0)
- SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
- FreeMemory(*FileBuffer)
- EndIf
- EndIf
- EndIf
- Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement