Code: Select all
Procedure ProcessRequest()
Protected RequestedFile.s, FileLength, MaxPosition, Position, ContentType.s
; Protected *FileBuffer
; Protected BufferOffset.s, *BufferOffset
Protected *FileBuffer2
Protected BufferOffset2.s
Protected TmpPage.s
Protected *TmpBuffer
If Left(Buffer, 3) = "GET"
;Extract page html from GET /yourpage.html HTTP/1.1
MaxPosition = FindString(Buffer, Chr(13), 5)
Position = FindString(Buffer, " ", 5)
If Position < MaxPosition
RequestedFile = Mid(Buffer, 6, Position-5) ; Automatically remove the leading '/'
RequestedFile = RTrim(RequestedFile)
Else
RequestedFile = Mid(Buffer, 6, MaxPosition-5) ; When a command like 'GET /' is sent..
EndIf
If RequestedFile = ""
RequestedFile = WWWIndex
EndIf
;Mise à jour du log / UPdated log
If GetGadgetState(1) = #PB_Checkbox_Checked
AddGadgetItem(0, -1, "Client IP " + IPString(GetClientIP(ClientID)) + " load " + RequestedFile)
EndIf
;Envoyer la page HTML au client / Send the HTML page to the client
If (ColdBasicPacker::CheckFileExists("Pack","/"+RequestedFile))
;Definition du content-type / Setup content-type
;Ref : https://fr.wikipedia.org/wiki/Type_MIME
Select GetExtensionPart(RequestedFile)
Case "css" : ContentType = "text/css"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+RequestedFile)
Case "js" : ContentType = "application/javascript"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+RequestedFile)
Case "gif" : ContentType = "image/gif"
*TmpBuffer = ColdBasicPacker::GetFileImg("Pack","/"+RequestedFile)
Case "jpg" : ContentType = "image/jpeg"
*TmpBuffer = ColdBasicPacker::GetFileImg("Pack","/"+RequestedFile)
Case "png" : ContentType = "image/png"
*TmpBuffer = ColdBasicPacker::GetFileImg("Pack","/"+RequestedFile)
Case "txt" : ContentType = "text/plain"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+RequestedFile)
Case "zip" : ContentType = "application/zip"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+RequestedFile)
Case "pdf" : ContentType = "application/pdf"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+RequestedFile)
Default
ContentType = "text/html"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+RequestedFile)
EndSelect
Else
;Affichage de la page d'erreur si url inexistant / Display error page if url nonexistent
ContentType = "text/html"
TmpPage = ColdBasicPacker::GetFileText("Pack","/"+WWWError)
EndIf
If *TmpBuffer
BufferOffset2 = BuildRequestHeader2(MemorySize(*TmpBuffer), ContentType)
*FileBuffer2 = AllocateMemory(MemorySize(*TmpBuffer) + StringByteLength(BufferOffset2, #PB_UTF8), #PB_Memory_NoClear)
PokeS(*FileBuffer2, BufferOffset2, -1, #PB_UTF8)
CopyMemory(*TmpBuffer, *FileBuffer2 + StringByteLength(BufferOffset2, #PB_UTF8), MemorySize(*TmpBuffer))
FreeMemory(*TmpBuffer)
Else
BufferOffset2 = BuildRequestHeader2(StringByteLength(TmpPage,#PB_UTF8), ContentType) + TmpPage
*FileBuffer2 = AllocateMemory(StringByteLength(BufferOffset2, #PB_UTF8) + 1)
PokeS(*FileBuffer2, BufferOffset2, -1, #PB_UTF8)
EndIf
SendNetworkData(ClientID, *FileBuffer2, MemorySize(*FileBuffer2))
FreeMemory(*FileBuffer2)
EndIf
EndProcedure
Code: Select all
Procedure.i GetFileImg(PackName.s,FileName$)
Protected *DecipheredFile
If OpenPack(0,PacksList(PackName)\PackPath,#PB_PackerPlugin_BriefLZ) <> 0
*TempFileUncompressed = ReAllocateMemory(*TempFileUncompressed,PreFiles(FileName$)\FileSize)
Debug "meu saco = "+Str(PreFiles(FileName$)\FileSize)
UncompressPackMemory(0, *TempFileUncompressed, PreFiles(FileName$)\FileSize,FileName$)
*DecipheredFile = ReAllocateMemory(*DecipheredFile,PreFiles(FileName$)\FileSize)
AESDecoder(*TempFileUncompressed, *DecipheredFile, PreFiles(FileName$)\FileSize, @Password , 256, 0, #PB_Cipher_ECB)
Debug "Image Size Memory = "+MemorySize(*DecipheredFile)
ClosePack(0)
*TempFileUncompressed = ReAllocateMemory(*TempFileUncompressed,1024)
;*DecipheredFile = ReAllocateMemory(*DecipheredFile,1024)
ProcedureReturn *DecipheredFile
Else
ProcedureReturn #Null
EndIf
EndProcedure
Maybe it is better to return always a pointer and never a string.
You also should remove the fixed 0 for opening something, or you are never allowed to thread the server.
And ... I added no checks for success of something.