October 17, 2021, 11:52:38

Author Topic: [bmx] HTTPStream factory+ by JoshK [ 1+ years ago ]  (Read 1425 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] HTTPStream factory+ by JoshK [ 1+ years ago ]
« on: June 29, 2017, 00:28:43 »
Title : HTTPStream factory+
Author : JoshK
Posted : 1+ years ago

Description : HTTPStream factory with optional proxy server and authentication

Code :
Code: BlitzMax
  1. SuperStrict
  2.  
  3. Import brl.FileSystem
  4. Import brl.socketstream
  5. Import bah.base64
  6. Import brl.httpstream
  7.  
  8. Private
  9.  
  10. New THTTPStreamFactoryEx
  11.  
  12. Type THTTPStreamFactoryEx Extends TStreamFactory
  13.        
  14.         Global proxyserver:String
  15.         Global port:Int=80
  16.         Global username:String
  17.         Global password:String  
  18.        
  19.         Method CreateStream:TStream( url:Object,proto$,path$,readable:Int,writeable:Int )
  20.                 If proto="http"
  21.                         Local stream:TStream
  22.                         Local i:Int=path.Find( "/",0 ),server$,file$
  23.                         If i<>-1
  24.                                 server=path[..i]
  25.                                 file=path[i..]
  26.                         Else
  27.                                 server=path
  28.                                 file=""
  29.                         EndIf
  30.                        
  31.                         If proxyserver
  32.                                 Local sock:TSocket=CreateTCPSocket()
  33.                                 ConnectSocket(sock,HostIp(proxyserver),port)
  34.                                 stream=CreateSocketStream(sock,True)
  35.                         Else
  36.                                 stream=TSocketStream.CreateClient(server,port)
  37.                         EndIf
  38.                        
  39.                         If Not stream Return Null
  40.                        
  41.                         stream.WriteLine "GET http://"+path+" HTTP/1.0"
  42.                         stream.WriteLine "Host: "+server
  43.  
  44.                         If username<>"" And password<>""
  45.                                 Local auth:String = username+":"+password
  46.                                 Local c:Byte Ptr=auth.ToCString()
  47.                                 auth=TBase64.Encode(c,auth.length)
  48.                                 MemFree(c)
  49.                                 stream.WriteLine "Authorization: Basic "+auth
  50.                         EndIf
  51.                        
  52.                         If proxyserver
  53.                                 WriteLine stream, "User-Agent: MultiProx"
  54.                         EndIf
  55.                         WriteLine stream, "Connection: Close"
  56.                         WriteLine stream, ""
  57.                        
  58.                         While Not Eof( stream )
  59.                                 If Not stream.ReadLine() Exit
  60.                         Wend
  61.                        
  62.                         Return stream
  63.                 EndIf
  64.         EndMethod
  65.        
  66. EndType
  67.  
  68.  
  69. Public
  70.  
  71. Rem
  72. bbdoc:Sets the proxy server for http streams.
  73. EndRem
  74. Function SetHTTPProxy(server:String)
  75.    THTTPStreamFactoryEx.proxyserver=server
  76. EndFunction
  77.  
  78. Rem
  79. bbdoc:Sets the port for http streams.
  80. EndRem
  81. Function SetHTTPPort(port:Int)
  82.    THTTPStreamFactoryEx.port=port
  83. EndFunction
  84.  
  85. Rem
  86. bbdoc:Sets the authentication info.
  87. EndRem
  88. Function SetHTTPAuthentication(username:String,password:String)
  89.    THTTPStreamFactoryEx.username=username
  90.    THTTPStreamFactoryEx.password=password
  91. EndFunction


Comments :


Brucey(Posted 1+ years ago)

 You have a memory leak here :
Code: [Select]
Local c:Byte Ptr = auth.ToCString()
At some point you need to call :
Code: [Select]
MemFree(c)



JoshK(Posted 1+ years ago)

 Thanks. [/i]

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal