]>
cygwin.com Git - cygwin-apps/setup.git/blob - nio-ftp.cc
2 * Copyright (c) 2000, 2001, Red Hat, Inc.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by DJ Delorie <dj@cygnus.com>
16 /* This file is responsible for implementing all direct FTP protocol
17 channels. It is intentionally simplistic. */
19 static char *cvsid
= "\n%%% $Id$\n";
35 static SimpleSocket
*cmd
= 0;
36 static char *cmd_host
= 0;
37 static int cmd_port
= 0;
39 static char *last_line
;
42 ftp_line (SimpleSocket
*s
)
45 last_line
= s
->gets ();
46 log (LOG_BABBLE
, "ftp > %s", last_line
);
47 } while (last_line
&& (!isdigit (last_line
[0]) || last_line
[3] != ' '));
48 return atoi (last_line
?: "0");
51 NetIO_FTP::NetIO_FTP (char *Purl
, BOOL allow_ftp_auth
)
52 : NetIO (Purl
, allow_ftp_auth
)
60 if (cmd_host
&& strcmp (host
, cmd_host
) != 0 || port
!= cmd_port
)
63 cmd
->printf ("QUIT\r\n");
72 SimpleSocket
*c
= new SimpleSocket (host
, port
);
78 c
->printf ("USER %s\r\n", net_ftp_user
);
80 c
->printf ("USER anonymous\r\n");
85 c
->printf ("PASS %s\r\n", net_ftp_passwd
);
87 c
->printf ("PASS cygwin-setup@\r\n");
90 if (code
== 530) /* Authentication failed, retry */
93 if (net_ftp_user
&& net_ftp_passwd
)
97 if (code
< 200 || code
>= 300)
104 cmd_host
= _strdup (host
);
107 cmd
->printf ("TYPE I\r\n");
108 code
= ftp_line (cmd
);
111 cmd
->printf ("PASV\r\n");
113 code
= ftp_line (cmd
);
114 } while (code
== 226); /* previous RETR */
118 char *paren
= strchr (last_line
, '(');
122 int i1
, i2
, i3
, i4
, p1
, p2
;
123 sscanf (paren
+1, "%d,%d,%d,%d,%d,%d", &i1
, &i2
, &i3
, &i4
, &p1
, &p2
);
125 sprintf (tmp
, "%d.%d.%d.%d", i1
, i2
, i3
, i4
);
126 s
= new SimpleSocket (tmp
, p1
*256 + p2
);
128 cmd
->printf ("RETR %s\r\n", path
);
129 code
= ftp_line (cmd
);
138 NetIO_FTP::~NetIO_FTP ()
153 NetIO_FTP::read (char *buf
, int nbytes
)
157 return s
->read (buf
, nbytes
);
This page took 0.042398 seconds and 5 git commands to generate.