Split out FTP-LIBRARY from FTPD; it contains data-shuffling procedures
which are useful for the client as well.
This commit is contained in:
		
							parent
							
								
									f0448cb34f
								
							
						
					
					
						commit
						3be94a89e4
					
				|  | @ -1208,8 +1208,6 @@ | |||
| 		thunk | ||||
| 		maybe-close-data-connection)) | ||||
|    | ||||
| (define *window-size* 51200) | ||||
| 
 | ||||
| (define (ensure-data-connection) | ||||
|   (if (and (not (the-session-data-socket))  | ||||
| 	   (not (the-session-passive-socket))) | ||||
|  | @ -1353,40 +1351,3 @@ | |||
| 	(cons message (the-session-reverse-replies))) | ||||
|   (set-the-session-reply-code! code)) | ||||
| 
 | ||||
| (define (copy-port->port-binary input-port output-port) | ||||
|   (let ((buffer (make-string *window-size*))) | ||||
|     (let loop () | ||||
|       (cond | ||||
|        ((read-string! buffer input-port) | ||||
| 	=> (lambda (length) | ||||
| 	     (write-string buffer output-port 0 length) | ||||
| 	     (loop)))))) | ||||
|   (force-output output-port)) | ||||
| 
 | ||||
| (define (copy-port->port-ascii input-port output-port) | ||||
|   (let loop () | ||||
|     (let ((line (read-line input-port 'concat))) | ||||
|       (if (not (eof-object? line)) | ||||
| 	  (let ((length (string-length line))) | ||||
| 	    (cond | ||||
| 	     ((zero? length) | ||||
| 	      'fick-dich-ins-knie) | ||||
| 	     ((char=? #\newline (string-ref line (- length 1))) | ||||
| 	      (write-string line output-port 0 (- length 1)) | ||||
| 	      (write-crlf output-port)) | ||||
| 	     (else | ||||
| 	      (write-string line output-port))) | ||||
| 	    (loop))))) | ||||
|   (force-output output-port)) | ||||
| 
 | ||||
| (define (copy-ascii-port->port input-port output-port) | ||||
|   (let loop () | ||||
|     (let* ((line (read-crlf-line input-port | ||||
| 				 #f)) | ||||
| 	   (length (string-length line))) | ||||
|       (if (not (eof-object? line)) | ||||
| 	  (begin | ||||
| 	    (write-string line output-port 0 length) | ||||
| 	    (newline output-port) | ||||
| 	    (loop))))) | ||||
|   (force-output output-port)) | ||||
|  |  | |||
|  | @ -0,0 +1,47 @@ | |||
| ; Utility library for FTP clients and servers | ||||
| 
 | ||||
| ;;; This file is part of the Scheme Untergrund Networking package. | ||||
| 
 | ||||
| ;;; Copyright (c) 1998-2002 by Mike Sperber <sperber@informatik.uni-tuebingen.de> | ||||
| ;;; For copyright information, see the file COPYING which comes with | ||||
| ;;; the distribution. | ||||
| 
 | ||||
| (define *window-size* 4096) | ||||
| 
 | ||||
| (define (copy-port->port-binary input-port output-port) | ||||
|   (let ((buffer (make-string *window-size*))) | ||||
|     (let loop () | ||||
|       (cond | ||||
|        ((read-string! buffer input-port) | ||||
| 	=> (lambda (length) | ||||
| 	     (write-string buffer output-port 0 length) | ||||
| 	     (loop)))))) | ||||
|   (force-output output-port)) | ||||
| 
 | ||||
| (define (copy-port->port-ascii input-port output-port) | ||||
|   (let loop () | ||||
|     (let ((line (read-line input-port 'concat))) | ||||
|       (if (not (eof-object? line)) | ||||
| 	  (let ((length (string-length line))) | ||||
| 	    (cond | ||||
| 	     ((zero? length) | ||||
| 	      'fick-dich-ins-knie) | ||||
| 	     ((char=? #\newline (string-ref line (- length 1))) | ||||
| 	      (write-string line output-port 0 (- length 1)) | ||||
| 	      (write-crlf output-port)) | ||||
| 	     (else | ||||
| 	      (write-string line output-port))) | ||||
| 	    (loop))))) | ||||
|   (force-output output-port)) | ||||
| 
 | ||||
| (define (copy-ascii-port->port input-port output-port) | ||||
|   (let loop () | ||||
|     (let* ((line (read-crlf-line input-port | ||||
| 				 #f)) | ||||
| 	   (length (string-length line))) | ||||
|       (if (not (eof-object? line)) | ||||
| 	  (begin | ||||
| 	    (write-string line output-port 0 length) | ||||
| 	    (newline output-port) | ||||
| 	    (loop))))) | ||||
|   (force-output output-port)) | ||||
|  | @ -83,6 +83,11 @@ | |||
| 	  parse-http-url-string | ||||
| 	  http-url->string)) | ||||
| 
 | ||||
| (define-interface ftp-library-interface | ||||
|   (export copy-port->port-binary | ||||
| 	  copy-port->port-ascii | ||||
| 	  copy-ascii-port->port)) | ||||
| 
 | ||||
| (define-interface ftp-interface | ||||
|   (export ftp-connect | ||||
|           ftp-login | ||||
|  | @ -401,6 +406,11 @@ | |||
| 	httpd-error) | ||||
|   (files (lib url))) | ||||
| 
 | ||||
| (define-structure ftp-library ftp-library-interface | ||||
|   (open scheme-with-scsh | ||||
| 	crlf-io) | ||||
|   (files (lib ftp-library))) | ||||
| 
 | ||||
| (define-structure ftp ftp-interface | ||||
|   (open scheme-with-scsh | ||||
| 	netrc | ||||
|  | @ -524,6 +534,7 @@ | |||
| 	(subset srfi-1 (any partition)) | ||||
| 	crlf-io | ||||
| 	ls | ||||
| 	ftp-library | ||||
| 	dns | ||||
| 	sunet-version | ||||
| 	sunet-utilities | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 sperber
						sperber