2
* $Id: PassiveModeDTP.java,v 1.2 2003/10/19 16:16:49 dog Exp $
3
* Copyright (C) 2003 The Free Software Foundation
5
* This file is part of GNU inetlib, a library.
7
* GNU inetlib is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
12
* GNU inetlib is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License
18
* along with this library; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
* As a special exception, if you link this library with other files to
22
* produce an executable, this library does not by itself cause the
23
* resulting executable to be covered by the GNU General Public License.
24
* This exception does not however invalidate any other reasons why the
25
* executable file might be covered by the GNU General Public License.
30
import java.io.InputStream;
31
import java.io.IOException;
32
import java.io.OutputStream;
33
import java.net.InetAddress;
34
import java.net.Socket;
37
* A passive mode FTP data transfer process.
38
* This connects to the host specified and proxies the resulting socket's
39
* input and output streams.
41
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
42
* @version $Revision: 1.2 $ $Date: 2003/10/19 16:16:49 $
44
final class PassiveModeDTP implements DTP
56
PassiveModeDTP(String address, int port, InetAddress localhost)
59
this.address = address;
63
socket = new Socket(address, port, localhost, port + 1);
67
* Returns an input stream from which a remote file can be read.
69
public InputStream getInputStream() throws IOException
72
throw new IOException("Transfer in progress");
75
case FTPConnection.MODE_STREAM:
76
in = new StreamInputStream(this, socket.getInputStream());
78
case FTPConnection.MODE_BLOCK:in =
79
new BlockInputStream(this, socket.getInputStream());
81
case FTPConnection.MODE_COMPRESSED:in =
82
new CompressedInputStream(this, socket.getInputStream());
84
default:throw new IllegalStateException("Invalid transfer mode");
86
in.setTransferComplete(false);
91
* Returns an output stream to which a local file can be written for
94
public OutputStream getOutputStream() throws IOException
97
throw new IOException("Transfer in progress");
100
case FTPConnection.MODE_STREAM:
101
out = new StreamOutputStream(this, socket.getOutputStream());
103
case FTPConnection.MODE_BLOCK:out =
104
new BlockOutputStream(this, socket.getOutputStream());
106
case FTPConnection.MODE_COMPRESSED:out =
107
new CompressedOutputStream(this, socket.getOutputStream());
109
default:throw new IllegalStateException("Invalid transfer mode");
111
out.setTransferComplete(false);
115
public void setTransferMode(int mode)
120
public void complete()
127
public boolean abort()
135
* Called by DTPInputStream or DTPOutputStream when end of
138
public void transferComplete()
140
in.setTransferComplete(true);
141
out.setTransferComplete(true);
143
completed = completed || (transferMode == FTPConnection.MODE_STREAM);