UNSCRIBE
> From: [EMAIL PROTECTED]
> Organization: Dataheaven
> Reply-To: [EMAIL PROTECTED]
> Date: Tue, 26 Sep 2000 21:55:35 +0200
> To: [EMAIL PROTECTED]
> Subject: [REBOL] Solution: Proxy-Authentication Bug in REBOL/View-Panel
>
> I earlier posted a quick-hack to allow to use the REB-Access
> through Proxies/Firewalls.
> But there was another Bug in the patched read-net function
> that prevents read-net to work through Proxies that want a
> username and a password for authentication.
>
> This is another quick hack to solve this:
>
> read-net: func [
> {Read a file from the net (web). Update progress bar. Allow abort.}
> host-name
> path
> /progress callfunc port-hand
> /local port buffer hdr-brk get-data body time data errc size wholepath
> ][
> if error? try [
> port: open/direct/binary/no-wait
> [scheme: 'tcp
> host:
> system/schemes/default/proxy/host
> port-id:
> system/schemes/default/proxy/port-id]
> wholepath: rejoin ["http://" host-name path]
> ] [return none]
> insert port rejoin [
> "GET " wholepath " HTTP/1.0" crlf
> "User-Agent: REBOL/View " system/version crlf
> "Accept: */*" crlf
> "Host: " host-name crlf
> "Proxy-Authorization: " join "Basic " enbase
> join system/schemes/default/proxy/user
> [#":" system/schemes/default/proxy/pass]
> crlf
> "Connection: close" crlf
> crlf
> ]
> buffer: make binary! 4000
> hdr-brk: rejoin [crlf crlf]
> size: none
> errc: 900
> get-data: func [port] [
> if none? data: copy port [close port return 'break]
> append buffer data
> if all [not size body: find/tail buffer hdr-brk] [
> parse buffer [
> "HTTP" thru " " copy errc [to " " | to newline]
> (errc: load/all errc)
> thru "Content-length:" copy size to newline]
> if errc > 299 [close port return 'break]
> size: either size [to-integer trim size] [10000]
> remove/part buffer body
> buffer: make binary! size + 32
> append buffer head body
> ]
> if all [size progress] [callfunc size length? buffer]
> ]
> dispatch append copy any [port-hand []] [
> port :get-data
> 30 [print "TIMEOUT***********" close port 'break]
> ]
> if errc < 300 [return buffer]
> ]
>
> IMPORTANT:
> If you want to use this function you have to set your default-proxy "host" ,
> "port-id", "user" and "pass" parameters.
> If you do not need proxy-authentication you have to use the function of my
> earlier post.
>
> Experienced readers will easily find the lines I've changed in comparison
> to the old function.
> But let's face it - this is an ugly hack, that makes that read-net doesn't
> work without a proxy (and now authentication) anymore.
> What someone (at RT?) should do now is to ad the proper tests if
> a Proxy should be used and then does the connection and request either
> the old direct way or the new "proxied" way.
>
> Heres an outline:
>
> 1) Test if a default-proxy is set
> 2) Test if requested hostname is in he "bypass" default-proxy settings
> 3) if 1) is false or 2) is true use the old code
> otherwise use the default-proxy for connection, the whole url in the
> request and obviously the username and password for proxy-authorization
>
> I've think I'll send a feedback to RT and hope they will finally fix this in
> a nice way.
>
> Jochen
>
>