Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. OpenConsole()
  2. If InitNetwork() = 0
  3.   PrintN("Can't initialize the network !")
  4.   End
  5. EndIf
  6. If OpenPreferences("config.cfg")
  7.   BaseDirectory$ = ReadPreferenceString("BaseDirectory", "www/")
  8.   DefaultPage$ = ReadPreferenceString("DefaultPage", "index.html")
  9.   Port = ReadPreferenceLong("ServerPort", 8080)
  10.   PrintN("BaseDirectory is set to: " +BaseDirectory$  )
  11.   PrintN("Serverport is set to: " +Str(Port)  )
  12.   PrintN("DefaultPage is set to: " +DefaultPage$ )
  13.   ClosePreferences()
  14. Else
  15.   PrintN("Can't load config.cfg!")
  16.   End
  17. EndIf
  18. Global EOL$
  19. EOL$ = Chr(13)+Chr(10)
  20. *Buffer = AllocateMemory(10000)
  21. If CreateNetworkServer(0,Port)
  22.   PrintN("Server is Online!")  
  23.   Repeat
  24.     SEvent = NetworkServerEvent()
  25.     If SEvent
  26.       ClientID.l = EventClient()
  27.       Select SEvent
  28.         Case 1
  29.           PrintN("New Connection")
  30.         Case 4
  31.           PrintN("Deconnection")
  32.         Default
  33.           PrintN("Send data to client")
  34.           RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000)
  35.           Gosub ProcessRequest
  36.       EndSelect
  37.     Else
  38.       Delay(20)
  39.     EndIf
  40.   Until Quit = 1
  41.   CloseNetworkServer(0)
  42. Else
  43.   PrintN("Error: can't create the server (is port in use ?).")
  44. EndIf
  45. End
  46. Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$)
  47.   Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length
  48.   Length = PokeS(*Buffer, "Date: 13 jun 2011 15:15:33 GMT"+EOL$) : *Buffer+Length
  49.   Length = PokeS(*Buffer, "Server: Web Server"+EOL$)      : *Buffer+Length
  50.   Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length
  51.   Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length
  52.   Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length
  53.   ProcedureReturn *Buffer
  54. EndProcedure
  55. ProcessRequest:
  56.   a$ = PeekS(*Buffer)
  57.   If Left(a$, 3) = "GET"
  58.     MaxPosition = FindString(a$, Chr(13), 5)
  59.     Position = FindString(a$, " ", 5)
  60.     If Position < MaxPosition
  61.       RequestedFile$ = Mid(a$, 6, Position-5)
  62.       RequestedFile$ = RTrim(RequestedFile$)
  63.     Else
  64.       RequestedFile$ = Mid(a$, 6, MaxPosition-5)
  65.     EndIf
  66.       Structure tmp
  67.         a.b
  68.       EndStructure
  69.       If RequestedFile$ = ""
  70.         RequestedFile$ = DefaultPage$
  71.       Else
  72.         *t.tmp = @RequestedFile$
  73.         While *t\a <> 0
  74.           If *t\a = '/' : *t\a = '\' : EndIf
  75.           *t+1
  76.         Wend
  77.       EndIf
  78.       If ReadFile(0, BaseDirectory$+RequestedFile$)
  79.         FileLength = Lof(0)
  80.         Select Right(RequestedFile$,4)
  81.           Case ".gif"
  82.             ContentType$ = "image/gif"
  83.           Case ".jpg"
  84.             ContentType$ = "image/jpeg"
  85.           Case ".txt"
  86.             ContentType$ = "text/plain"
  87.           Case ".zip"
  88.             ContentType$ = "application/zip"
  89.           Default
  90.             ContentType$ = "text/html"
  91.         EndSelect
  92.         *FileBuffer   = AllocateMemory(FileLength+200)
  93.         *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
  94.         ReadData(0, *BufferOffset, FileLength)
  95.         CloseFile(0)
  96.         SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
  97.         FreeMemory(*FileBuffer)
  98.       Else
  99.         If ReadFile(0, "errorpage/errorpage.html")
  100.           FileLength = Lof(0)
  101.           ContentType$ = "text/html"
  102.           *FileBuffer   = AllocateMemory(FileLength+200)
  103.           *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
  104.           ReadData(0,*BufferOffset, FileLength)
  105.           CloseFile(0)
  106.           SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
  107.           FreeMemory(*FileBuffer)
  108.         EndIf
  109.       EndIf
  110.   EndIf
  111. Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement