--- gforth/proxy.fs 2000/11/19 22:45:38 1.2 +++ gforth/proxy.fs 2007/12/31 19:02:24 1.13 @@ -1,12 +1,12 @@ \ a http proxy -\ Copyright (C) 2000 Free Software Foundation, Inc. +\ Copyright (C) 2000,2002,2003,2006,2007 Free Software Foundation, Inc. \ This file is part of Gforth. \ Gforth is free software; you can redistribute it and/or \ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation; either version 2 +\ as published by the Free Software Foundation, either version 3 \ of the License, or (at your option) any later version. \ This program is distributed in the hope that it will be useful, @@ -15,8 +15,7 @@ \ GNU General Public License for more details. \ You should have received a copy of the GNU General Public License -\ along with this program; if not, write to the Free Software -\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. +\ along with this program. If not, see http://www.gnu.org/licenses/. require unix/socket.fs @@ -27,10 +26,8 @@ Create crlf #cr c, #lf c, : request ( host u request u proxy-host u port -- fid ) open-socket >r - 2dup type ." HTTP/1.1" cr r@ write-file throw s" HTTP/1.1" r@ writeln s" Host: " r@ write-file throw r@ writeln - ." Connection: close" cr s" Connection: close" r@ writeln s" User-Agent: " r@ write-file throw User-Agent @ IF @@ -38,14 +35,14 @@ Create crlf #cr c, #lf c, ELSE s" Gforth Proxy 0.1" THEN r@ writeln s" " r@ writeln r> ; -Variable proxy s" localhost" proxy $! -Variable proxy-port 3128 proxy-port ! +Variable proxy \ s" proxy" proxy $! \ replace that with your proxy host +Variable proxy-port \ 8080 proxy-port ! \ replace that with your proxy port -: proxy-open ( host u request u -- fid ) - proxy $@ proxy-port @ request ; +\ set proxy to your local proxy, and proxy-port to your local proxy port +\ if you need any. : http-open ( host u request u -- fid ) - 2over 80 request ; + proxy @ 0= IF 2over 80 ELSE proxy $@ proxy-port @ THEN request ; wordlist Constant response wordlist Constant response-values @@ -69,6 +66,7 @@ Forth definitions response: Allow: response: Age: +response: Accept-Ranges: response: Cache-Control: response: Connection: response: Proxy-Connection: @@ -83,10 +81,11 @@ response: Content-Type: response: Date: response: ETag: response: Expires: -response: Last-modified: +response: Last-Modified: response: Location: response: Mime-Version: response: Proxy-Authenticate: +response: Proxy-Connection: response: Public: response: Retry-After: response: Server: @@ -132,7 +131,7 @@ Variable data-buffer Content-Length @ IF Content-Length $@ s>number drop r> read-sized EXIT THEN Transfer-Encoding @ IF - Transfer-Encoding $@ s" chunked" compare 0= IF + Transfer-Encoding $@ s" chunked" str= 0= IF r> read-chunked EXIT THEN THEN r> read-to-end ; @@ -158,14 +157,7 @@ Variable data-buffer \ handle proxy request -: proxy-request ( host u request u -- ) - proxy-open - dup >r get-response throw - r@ read-data r> close-file throw - convert-data write-response write-data ; - -: http-request ( host u request u -- ) - http-open +: handle-request ( fid -- ) dup >r get-response throw r@ read-data r> close-file throw convert-data write-response write-data ; @@ -191,12 +183,12 @@ DOES> ( -- addr u ) : (redirect?) ( addr u -- addr' u' t / f ) htmldir $! htmldir $@ bounds ?DO I c@ '/ = IF #lf I c! THEN LOOP - redirects 1 set-order + redirects 1 set-order redir$ $off htmldir $@ ['] evaluate catch - IF 2drop false ELSE true THEN ; + IF 2drop false ELSE redir$ @ 0<> THEN ; -: (redirect) ( addr u -- ) - host$ $@ 2swap proxy-request maxnum off ; +: (redirect) ( -- ) + host$ $@ redir$ $@ http-open handle-request maxnum off ; ' (redirect?) IS redirect? ' (redirect) IS redirect @@ -207,9 +199,14 @@ redirects set-current get-order redirects swap 1+ set-order Vocabulary systems +Vocabulary humor also systems definitions -redirect: bigforth www.jwdt.com"http://www.jwdt.com/~paysan/" +redirect: bigforth bigforth.sourceforge.net"/" + +humor definitions + +redirect: bush www.jwdt.com"/~paysan/bush/" previous previous definitions