OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [gnu/] [java/] [net/] [protocol/] [ftp/] [PassiveModeDTP.java] - Blame information for rev 769

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 769 jeremybenn
/* PassiveModeDTP.java --
2
   Copyright (C) 2003, 2004  Free Software Foundation, Inc.
3
 
4
This file is part of GNU Classpath.
5
 
6
GNU Classpath is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2, or (at your option)
9
any later version.
10
 
11
GNU Classpath is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GNU Classpath; see the file COPYING.  If not, write to the
18
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
02110-1301 USA.
20
 
21
Linking this library statically or dynamically with other modules is
22
making a combined work based on this library.  Thus, the terms and
23
conditions of the GNU General Public License cover the whole
24
combination.
25
 
26
As a special exception, the copyright holders of this library give you
27
permission to link this library with independent modules to produce an
28
executable, regardless of the license terms of these independent
29
modules, and to copy and distribute the resulting executable under
30
terms of your choice, provided that you also meet, for each linked
31
independent module, the terms and conditions of the license of that
32
module.  An independent module is a module which is not derived from
33
or based on this library.  If you modify this library, you may extend
34
this exception to your version of the library, but you are not
35
obligated to do so.  If you do not wish to do so, delete this
36
exception statement from your version. */
37
 
38
 
39
package gnu.java.net.protocol.ftp;
40
 
41
import java.io.IOException;
42
import java.io.InputStream;
43
import java.io.OutputStream;
44
import java.net.InetAddress;
45
import java.net.InetSocketAddress;
46
import java.net.Socket;
47
 
48
/**
49
 * A passive mode FTP data transfer process.
50
 * This connects to the host specified and proxies the resulting socket's
51
 * input and output streams.
52
 *
53
 * @author Chris Burdess (dog@gnu.org)
54
 */
55
final class PassiveModeDTP
56
  implements DTP
57
{
58
 
59
  final String address;
60
  final int port;
61
  Socket socket;
62
  DTPInputStream in;
63
  DTPOutputStream out;
64
  boolean completed;
65
  boolean inProgress;
66
  int transferMode;
67
 
68
  PassiveModeDTP(String address, int port, InetAddress localhost,
69
                 int connectionTimeout, int timeout)
70
    throws IOException
71
  {
72
    this.address = address;
73
    this.port = port;
74
    completed = false;
75
    inProgress = false;
76
    socket = new Socket();
77
    InetSocketAddress remote = new InetSocketAddress(address, port);
78
    InetSocketAddress local = new InetSocketAddress(localhost, port + 1);
79
    socket.bind(local);
80
    if (connectionTimeout > 0)
81
      {
82
        socket.connect(remote, connectionTimeout);
83
      }
84
    else
85
      {
86
        socket.connect(remote);
87
      }
88
    if (timeout > 0)
89
      {
90
        socket.setSoTimeout(timeout);
91
      }
92
  }
93
 
94
  /**
95
   * Returns an input stream from which a remote file can be read.
96
   */
97
  public InputStream getInputStream()
98
    throws IOException
99
  {
100
    if (inProgress)
101
      {
102
        throw new IOException("Transfer in progress");
103
      }
104
    switch (transferMode)
105
      {
106
      case FTPConnection.MODE_STREAM:
107
        in = new StreamInputStream(this, socket.getInputStream());
108
        break;
109
      case FTPConnection.MODE_BLOCK:
110
        in = new BlockInputStream(this, socket.getInputStream());
111
        break;
112
      case FTPConnection.MODE_COMPRESSED:
113
        in = new CompressedInputStream(this, socket.getInputStream());
114
        break;
115
      default:
116
        throw new IllegalStateException("Invalid transfer mode");
117
      }
118
    in.setTransferComplete(false);
119
    return in;
120
  }
121
 
122
  /**
123
   * Returns an output stream to which a local file can be written for
124
   * upload.
125
   */
126
  public OutputStream getOutputStream()
127
    throws IOException
128
  {
129
    if (inProgress)
130
      {
131
        throw new IOException("Transfer in progress");
132
      }
133
    switch (transferMode)
134
      {
135
      case FTPConnection.MODE_STREAM:
136
        out = new StreamOutputStream(this, socket.getOutputStream());
137
        break;
138
      case FTPConnection.MODE_BLOCK:
139
        out = new BlockOutputStream(this, socket.getOutputStream());
140
        break;
141
      case FTPConnection.MODE_COMPRESSED:
142
        out = new CompressedOutputStream(this, socket.getOutputStream());
143
        break;
144
      default:
145
        throw new IllegalStateException("Invalid transfer mode");
146
      }
147
    out.setTransferComplete(false);
148
    return out;
149
  }
150
 
151
  public void setTransferMode(int mode)
152
  {
153
    transferMode = mode;
154
  }
155
 
156
  public void complete()
157
  {
158
    completed = true;
159
    if (!inProgress)
160
      {
161
        transferComplete();
162
      }
163
  }
164
 
165
  public boolean abort()
166
  {
167
    completed = true;
168
    transferComplete();
169
    return inProgress;
170
  }
171
 
172
  /*
173
   * Called by DTPInputStream or DTPOutputStream when end of
174
   * stream is reached.
175
   */
176
  public void transferComplete()
177
  {
178
    if (in != null)
179
      {
180
        in.setTransferComplete(true);
181
      }
182
    if (out != null)
183
      {
184
        out.setTransferComplete(true);
185
      }
186
    inProgress = false;
187
    completed = completed ||(transferMode == FTPConnection.MODE_STREAM);
188
    if (completed && socket != null)
189
      {
190
        try
191
          {
192
            socket.close();
193
          }
194
        catch (IOException e)
195
          {
196
          }
197
      }
198
  }
199
 
200
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.