
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_net_protocol_ftp_DTPInputStream__
#define __gnu_java_net_protocol_ftp_DTPInputStream__

#pragma interface

#include <java/io/FilterInputStream.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace net
      {
        namespace protocol
        {
          namespace ftp
          {
              class DTP;
              class DTPInputStream;
          }
        }
      }
    }
  }
}

class gnu::java::net::protocol::ftp::DTPInputStream : public ::java::io::FilterInputStream
{

public: // actually package-private
  DTPInputStream(::gnu::java::net::protocol::ftp::DTP *, ::java::io::InputStream *);
  virtual void setTransferComplete(jboolean);
public:
  virtual void close();
public: // actually package-private
  ::gnu::java::net::protocol::ftp::DTP * __attribute__((aligned(__alignof__( ::java::io::FilterInputStream)))) dtp;
  jboolean transferComplete;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_net_protocol_ftp_DTPInputStream__
