diff options
author | Christopher Baines <mail@cbaines.net> | 2021-03-05 22:56:40 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2021-03-06 00:18:30 +0000 |
commit | a8448da0f4a090818104e64dd79f90b0e50d5e77 (patch) | |
tree | 494c58b4724f12cd9de0db9b0a7096de2b922c0f /guix/ftp-client.scm | |
parent | 4f4b749e75b38b8c08b4f67ef51c2c8740999e28 (diff) | |
parent | a714af38d5d1046081524d859cde4cd8fd12a923 (diff) |
Merge branch 'master' into core-updates
Diffstat (limited to 'guix/ftp-client.scm')
-rw-r--r-- | guix/ftp-client.scm | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/guix/ftp-client.scm b/guix/ftp-client.scm index 8d5adcb8ed..9cc34cc7ec 100644 --- a/guix/ftp-client.scm +++ b/guix/ftp-client.scm @@ -216,6 +216,17 @@ TIMEOUT, an ETIMEDOUT error is raised." (else (throw 'ftp-error conn "PASV" 227 message))))) +(define (ftp-epsv conn) + (let* ((message (%ftp-command "EPSV" 229 (ftp-connection-socket conn)))) + (string->number + (match:substring (string-match "\\(...([0-9]+).\\)" message) 1)))) + +(define (ftp-passive conn) + "Enter passive mode using EPSV or PASV, return a data connection port on +success." + ;; IPv6 only works with EPSV, so try it first. + (or (false-if-exception (ftp-epsv conn)) (ftp-pasv conn))) + (define (address-with-port sa port) "Return a socket-address object based on SA, but with PORT." (let ((fam (sockaddr:fam sa)) @@ -232,7 +243,7 @@ TIMEOUT, an ETIMEDOUT error is raised." (if directory (ftp-chdir conn directory)) - (let* ((port (ftp-pasv conn)) + (let* ((port (ftp-passive conn)) (ai (ftp-connection-addrinfo conn)) (s (socket (addrinfo:fam ai) (addrinfo:socktype ai) (addrinfo:protocol ai)))) @@ -281,7 +292,7 @@ must be closed before CONN can be used for other purposes." ;; Ask for "binary mode". (%ftp-command "TYPE I" 200 (ftp-connection-socket conn)) - (let* ((port (ftp-pasv conn)) + (let* ((port (ftp-passive conn)) (ai (ftp-connection-addrinfo conn)) (s (with-fluids ((%default-port-encoding #f)) (socket (addrinfo:fam ai) (addrinfo:socktype ai) |