Proxy Server
Posted: Sun Mar 20, 2005 3:35 pm
Upon the advice of some people I've started writing a proxy server. I;ve been testing it with my browser and it hasn't been going very well to be perfectly honest. the program gets the request from a browser, connects to the right site, downloads the information then sends it back to the browser. I've had almost no success although some text has been set in the browswer (it looks a bit like a http header).
Can anyone help?
Can anyone help?
Code: Select all
;\\------------------------------
;\\-Title------------------------
;\\------------------------------
InitNetwork()
;\\-Notes--
; Started:
; Completed:
; Version:
; Authors: Peter Marsh
; Type: Program
;
; COPYRIGHT ZERO POINT FIVE AND A HALF 2005
;\\--------
;\\-Constants--------------------
;\\Version
#Version="Beta"
;\\Buffer
#Buffer=10000
;\\------------------------------
;\\-Structures-------------------
;\\------------------------------
;\\-Variables--------------------
;\\Server
Global Port
Port=6000
;\\Buffers
*Buffer=AllocateMemory(#Buffer)
;\\------------------------------
;\\-Includes---------------------
;\\------------------------------
;\\-Declares---------------------
;\\Misc
Declare Error()
OnErrorGosub(@Error())
;\\Parse
Declare Parse(ID,*Buffer)
;\\------------------------------
;\\-Main-------------------------
If CreateNetworkServer(Port)
Else
MessageRequester("Alert","Could not create server on port: "+Str(Port)+".")
End
EndIf
Repeat
Select NetworkServerEvent()
Case 1 ;Connection
Case 2 ;Data
ID=NetworkClientID()
ReceiveNetworkData(ID,*Buffer,#Buffer)
Parse(ID,*Buffer)
FreeMemory(*Buffer)
*Buffer=AllocateMemory(*Buffer)
Case 4 ;Disconnection
EndSelect
Delay(10)
Until EndLoop=1
;\\------------------------------
;\\-Procedures-------------------
;\\Parse
Procedure Parse(ID,*Buffer)
Request.s=PeekS(*Buffer)
If Mid(Request,1,3)="GET" : Command.s="GET" : ElseIf Mid(Request,1,4)="POST" : Command.s="POST" : EndIf
URL.s=Mid(Request,Len(Command)+9,FindString(Request," HTTP/1.0",1)-12)
If Right(URL,1)="/" : URL=Mid(URL,1,Len(URL)-1) : EndIf
Select Command
Case "GET"
Connection=OpenNetworkConnection(URL,80)
If Connection<>0
Debug 1
SendNetworkData(Connection,*Buffer,Len(Request))
Repeat
Select NetworkClientEvent(Connection)
Case 2
*SubBuffer=AllocateMemory(#Buffer)
Result=ReceiveNetworkData(Connection,*SubBuffer,#Buffer)
If Result<#Buffer
BuffLen+Result
*Total+*SubBuffer
Endit=1
Else
BuffLen+Result
*Total+*SubBuffer
EndIf
FreeMemory(*SubBuffer)
EndSelect
Until Endit=1
CloseNetworkConnection(Connection)
SendNetworkData(ID,*Total,BuffLen+1)
Debug BuffLen
Else
EndIf
Case "POST"
EndSelect
EndProcedure
;\\Error
Procedure Error()
MessageRequester("Error",GetErrorDescription())
End
EndProcedure
;\\------------------------------
End
;\\-End--------------------------