]>
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. */
20 static const char *cvsid
= "\n%%% $Id$\n";
37 static SimpleSocket
*cmd
= 0;
38 static char *cmd_host
= 0;
39 static int cmd_port
= 0;
41 static char *last_line
;
44 ftp_line (SimpleSocket
*s
)
47 last_line
= s
->gets ();
48 log (LOG_BABBLE
, "ftp > %s", last_line
);
49 } while (last_line
&& (!isdigit (last_line
[0]) || last_line
[3] != ' '));
50 return atoi (last_line
?: "0");
53 NetIO_FTP::NetIO_FTP (char *Purl
, BOOL allow_ftp_auth
)
54 : NetIO (Purl
, allow_ftp_auth
)
62 if (cmd_host
&& strcmp (host
, cmd_host
) != 0 || port
!= cmd_port
)
65 cmd
->printf ("QUIT\r\n");
74 SimpleSocket
*c
= new SimpleSocket (host
, port
);
79 c
->printf ("USER %s\r\n", net_ftp_user
);
81 c
->printf ("USER anonymous\r\n");
86 c
->printf ("PASS %s\r\n", net_ftp_passwd
);
88 c
->printf ("PASS cygwin-setup@\r\n");
91 if (code
== 530) /* Authentication failed, retry */
94 if (net_ftp_user
&& net_ftp_passwd
)
98 if (code
< 200 || code
>= 300)
105 cmd_host
= _strdup (host
);
108 cmd
->printf ("TYPE I\r\n");
109 code
= ftp_line (cmd
);
112 cmd
->printf ("PASV\r\n");
114 code
= ftp_line (cmd
);
115 } while (code
== 226); /* previous RETR */
119 char *paren
= strchr (last_line
, '(');
123 int i1
, i2
, i3
, i4
, p1
, p2
;
124 sscanf (paren
+1, "%d,%d,%d,%d,%d,%d", &i1
, &i2
, &i3
, &i4
, &p1
, &p2
);
126 sprintf (tmp
, "%d.%d.%d.%d", i1
, i2
, i3
, i4
);
127 s
= new SimpleSocket (tmp
, p1
*256 + p2
);
129 cmd
->printf ("RETR %s\r\n", path
);
130 code
= ftp_line (cmd
);
139 NetIO_FTP::~NetIO_FTP ()
154 NetIO_FTP::read (char *buf
, int nbytes
)
158 return s
->read (buf
, nbytes
);
This page took 0.043109 seconds and 5 git commands to generate.