Commit 4aec6c47 by Michael Koch Committed by Michael Koch

ActiveModeDTP.java, [...]: New files.

2005-02-19  Michael Koch  <konqueror@gmx.de>

	* gnu/java/net/protocol/ftp/ActiveModeDTP.java,
	gnu/java/net/protocol/ftp/BlockInputStream.java,
	gnu/java/net/protocol/ftp/BlockOutputStream.java,
	gnu/java/net/protocol/ftp/CompressedInputStream.java,
	gnu/java/net/protocol/ftp/CompressedOutputStream.java,
	gnu/java/net/protocol/ftp/DTPInputStream.java,
	gnu/java/net/protocol/ftp/DTP.java,
	gnu/java/net/protocol/ftp/DTPOutputStream.java,
	gnu/java/net/protocol/ftp/FTPConnection.java,
	gnu/java/net/protocol/ftp/FTPException.java,
	gnu/java/net/protocol/ftp/FTPResponse.java,
	gnu/java/net/protocol/ftp/FTPURLConnection.java,
	gnu/java/net/protocol/ftp/Handler.java,
	gnu/java/net/protocol/ftp/PassiveModeDTP.java,
	gnu/java/net/protocol/ftp/StreamInputStream.java,
	gnu/java/net/protocol/ftp/StreamOutputStream.java,
	gnu/java/net/CRLFInputStream.java,
	gnu/java/net/CRLFOutputStream.java,
	gnu/java/net/GetLocalHostAction.java,
	gnu/java/net/protocol/ftp/package.html: New files.
	* Makefile.am: Added new files.
	* Makefile.in: Regenerated.

From-SVN: r95272
parent fc544c81
2005-02-19 Michael Koch <konqueror@gmx.de>
* gnu/java/net/protocol/ftp/ActiveModeDTP.java,
gnu/java/net/protocol/ftp/BlockInputStream.java,
gnu/java/net/protocol/ftp/BlockOutputStream.java,
gnu/java/net/protocol/ftp/CompressedInputStream.java,
gnu/java/net/protocol/ftp/CompressedOutputStream.java,
gnu/java/net/protocol/ftp/DTPInputStream.java,
gnu/java/net/protocol/ftp/DTP.java,
gnu/java/net/protocol/ftp/DTPOutputStream.java,
gnu/java/net/protocol/ftp/FTPConnection.java,
gnu/java/net/protocol/ftp/FTPException.java,
gnu/java/net/protocol/ftp/FTPResponse.java,
gnu/java/net/protocol/ftp/FTPURLConnection.java,
gnu/java/net/protocol/ftp/Handler.java,
gnu/java/net/protocol/ftp/PassiveModeDTP.java,
gnu/java/net/protocol/ftp/StreamInputStream.java,
gnu/java/net/protocol/ftp/StreamOutputStream.java,
gnu/java/net/CRLFInputStream.java,
gnu/java/net/CRLFOutputStream.java,
gnu/java/net/GetLocalHostAction.java,
gnu/java/net/protocol/ftp/package.html: New files.
* Makefile.am: Added new files.
* Makefile.in: Regenerated.
2005-02-18 Tom Tromey <tromey@redhat.com>
* link.cc (make_vtable): Remove abstract method check.
......
......@@ -3032,8 +3032,11 @@ gnu/java/locale/LocaleInformation_zh_SG.java \
gnu/java/locale/LocaleInformation_zh_TW.java \
gnu/java/math/MPN.java \
gnu/java/net/BASE64.java \
gnu/java/net/CRLFInputStream.java \
gnu/java/net/CRLFOutputStream.java \
gnu/java/net/DefaultContentHandlerFactory.java \
gnu/java/net/EmptyX509TrustManager.java \
gnu/java/net/GetLocalHostAction.java \
gnu/java/net/HeaderFieldHelper.java \
gnu/java/net/LineInputStream.java \
gnu/java/net/PlainDatagramSocketImpl.java \
......@@ -3044,6 +3047,22 @@ gnu/java/net/protocol/core/CoreInputStream.java \
gnu/java/net/protocol/core/Handler.java \
gnu/java/net/protocol/file/Connection.java \
gnu/java/net/protocol/file/Handler.java \
gnu/java/net/protocol/ftp/ActiveModeDTP.java \
gnu/java/net/protocol/ftp/BlockInputStream.java \
gnu/java/net/protocol/ftp/BlockOutputStream.java \
gnu/java/net/protocol/ftp/CompressedInputStream.java \
gnu/java/net/protocol/ftp/CompressedOutputStream.java \
gnu/java/net/protocol/ftp/DTP.java \
gnu/java/net/protocol/ftp/DTPInputStream.java \
gnu/java/net/protocol/ftp/DTPOutputStream.java \
gnu/java/net/protocol/ftp/FTPConnection.java \
gnu/java/net/protocol/ftp/FTPException.java \
gnu/java/net/protocol/ftp/FTPResponse.java \
gnu/java/net/protocol/ftp/FTPURLConnection.java \
gnu/java/net/protocol/ftp/Handler.java \
gnu/java/net/protocol/ftp/PassiveModeDTP.java \
gnu/java/net/protocol/ftp/StreamInputStream.java \
gnu/java/net/protocol/ftp/StreamOutputStream.java \
gnu/java/net/protocol/gcjlib/Connection.java \
gnu/java/net/protocol/gcjlib/Handler.java \
gnu/java/net/protocol/http/Authenticator.java \
......
......@@ -710,8 +710,11 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
gnu/java/locale/LocaleInformation_zh_SG.java \
gnu/java/locale/LocaleInformation_zh_TW.java \
gnu/java/math/MPN.java gnu/java/net/BASE64.java \
gnu/java/net/CRLFInputStream.java \
gnu/java/net/CRLFOutputStream.java \
gnu/java/net/DefaultContentHandlerFactory.java \
gnu/java/net/EmptyX509TrustManager.java \
gnu/java/net/GetLocalHostAction.java \
gnu/java/net/HeaderFieldHelper.java \
gnu/java/net/LineInputStream.java \
gnu/java/net/PlainDatagramSocketImpl.java \
......@@ -722,6 +725,22 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
gnu/java/net/protocol/core/Handler.java \
gnu/java/net/protocol/file/Connection.java \
gnu/java/net/protocol/file/Handler.java \
gnu/java/net/protocol/ftp/ActiveModeDTP.java \
gnu/java/net/protocol/ftp/BlockInputStream.java \
gnu/java/net/protocol/ftp/BlockOutputStream.java \
gnu/java/net/protocol/ftp/CompressedInputStream.java \
gnu/java/net/protocol/ftp/CompressedOutputStream.java \
gnu/java/net/protocol/ftp/DTP.java \
gnu/java/net/protocol/ftp/DTPInputStream.java \
gnu/java/net/protocol/ftp/DTPOutputStream.java \
gnu/java/net/protocol/ftp/FTPConnection.java \
gnu/java/net/protocol/ftp/FTPException.java \
gnu/java/net/protocol/ftp/FTPResponse.java \
gnu/java/net/protocol/ftp/FTPURLConnection.java \
gnu/java/net/protocol/ftp/Handler.java \
gnu/java/net/protocol/ftp/PassiveModeDTP.java \
gnu/java/net/protocol/ftp/StreamInputStream.java \
gnu/java/net/protocol/ftp/StreamOutputStream.java \
gnu/java/net/protocol/gcjlib/Connection.java \
gnu/java/net/protocol/gcjlib/Handler.java \
gnu/java/net/protocol/http/Authenticator.java \
......@@ -4051,8 +4070,11 @@ am__objects_15 = $(am__objects_9) gnu/classpath/ServiceFactory.lo \
gnu/java/locale/LocaleInformation_zh_SG.lo \
gnu/java/locale/LocaleInformation_zh_TW.lo \
gnu/java/math/MPN.lo gnu/java/net/BASE64.lo \
gnu/java/net/CRLFInputStream.lo \
gnu/java/net/CRLFOutputStream.lo \
gnu/java/net/DefaultContentHandlerFactory.lo \
gnu/java/net/EmptyX509TrustManager.lo \
gnu/java/net/GetLocalHostAction.lo \
gnu/java/net/HeaderFieldHelper.lo \
gnu/java/net/LineInputStream.lo \
gnu/java/net/PlainDatagramSocketImpl.lo \
......@@ -4062,6 +4084,22 @@ am__objects_15 = $(am__objects_9) gnu/classpath/ServiceFactory.lo \
gnu/java/net/protocol/core/Handler.lo \
gnu/java/net/protocol/file/Connection.lo \
gnu/java/net/protocol/file/Handler.lo \
gnu/java/net/protocol/ftp/ActiveModeDTP.lo \
gnu/java/net/protocol/ftp/BlockInputStream.lo \
gnu/java/net/protocol/ftp/BlockOutputStream.lo \
gnu/java/net/protocol/ftp/CompressedInputStream.lo \
gnu/java/net/protocol/ftp/CompressedOutputStream.lo \
gnu/java/net/protocol/ftp/DTP.lo \
gnu/java/net/protocol/ftp/DTPInputStream.lo \
gnu/java/net/protocol/ftp/DTPOutputStream.lo \
gnu/java/net/protocol/ftp/FTPConnection.lo \
gnu/java/net/protocol/ftp/FTPException.lo \
gnu/java/net/protocol/ftp/FTPResponse.lo \
gnu/java/net/protocol/ftp/FTPURLConnection.lo \
gnu/java/net/protocol/ftp/Handler.lo \
gnu/java/net/protocol/ftp/PassiveModeDTP.lo \
gnu/java/net/protocol/ftp/StreamInputStream.lo \
gnu/java/net/protocol/ftp/StreamOutputStream.lo \
gnu/java/net/protocol/gcjlib/Connection.lo \
gnu/java/net/protocol/gcjlib/Handler.lo \
gnu/java/net/protocol/http/Authenticator.lo \
......@@ -7306,8 +7344,11 @@ gnu/java/locale/LocaleInformation_zh_SG.java \
gnu/java/locale/LocaleInformation_zh_TW.java \
gnu/java/math/MPN.java \
gnu/java/net/BASE64.java \
gnu/java/net/CRLFInputStream.java \
gnu/java/net/CRLFOutputStream.java \
gnu/java/net/DefaultContentHandlerFactory.java \
gnu/java/net/EmptyX509TrustManager.java \
gnu/java/net/GetLocalHostAction.java \
gnu/java/net/HeaderFieldHelper.java \
gnu/java/net/LineInputStream.java \
gnu/java/net/PlainDatagramSocketImpl.java \
......@@ -7318,6 +7359,22 @@ gnu/java/net/protocol/core/CoreInputStream.java \
gnu/java/net/protocol/core/Handler.java \
gnu/java/net/protocol/file/Connection.java \
gnu/java/net/protocol/file/Handler.java \
gnu/java/net/protocol/ftp/ActiveModeDTP.java \
gnu/java/net/protocol/ftp/BlockInputStream.java \
gnu/java/net/protocol/ftp/BlockOutputStream.java \
gnu/java/net/protocol/ftp/CompressedInputStream.java \
gnu/java/net/protocol/ftp/CompressedOutputStream.java \
gnu/java/net/protocol/ftp/DTP.java \
gnu/java/net/protocol/ftp/DTPInputStream.java \
gnu/java/net/protocol/ftp/DTPOutputStream.java \
gnu/java/net/protocol/ftp/FTPConnection.java \
gnu/java/net/protocol/ftp/FTPException.java \
gnu/java/net/protocol/ftp/FTPResponse.java \
gnu/java/net/protocol/ftp/FTPURLConnection.java \
gnu/java/net/protocol/ftp/Handler.java \
gnu/java/net/protocol/ftp/PassiveModeDTP.java \
gnu/java/net/protocol/ftp/StreamInputStream.java \
gnu/java/net/protocol/ftp/StreamOutputStream.java \
gnu/java/net/protocol/gcjlib/Connection.java \
gnu/java/net/protocol/gcjlib/Handler.java \
gnu/java/net/protocol/http/Authenticator.java \
......@@ -9909,11 +9966,17 @@ gnu/java/math/MPN.lo: gnu/java/math/$(am__dirstamp) \
gnu/java/math/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/BASE64.lo: gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/CRLFInputStream.lo: gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/CRLFOutputStream.lo: gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/DefaultContentHandlerFactory.lo: \
gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/EmptyX509TrustManager.lo: gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/GetLocalHostAction.lo: gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/HeaderFieldHelper.lo: gnu/java/net/$(am__dirstamp) \
gnu/java/net/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/LineInputStream.lo: gnu/java/net/$(am__dirstamp) \
......@@ -9945,6 +10008,60 @@ gnu/java/net/protocol/file/Connection.lo: \
gnu/java/net/protocol/file/Handler.lo: \
gnu/java/net/protocol/file/$(am__dirstamp) \
gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/$(am__dirstamp):
@$(mkdir_p) gnu/java/net/protocol/ftp
@: > gnu/java/net/protocol/ftp/$(am__dirstamp)
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp):
@$(mkdir_p) gnu/java/net/protocol/ftp/$(DEPDIR)
@: > gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/ActiveModeDTP.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/BlockInputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/BlockOutputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/CompressedInputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/CompressedOutputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/DTP.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/DTPInputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/DTPOutputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/FTPConnection.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/FTPException.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/FTPResponse.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/FTPURLConnection.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/Handler.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/PassiveModeDTP.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/StreamInputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/ftp/StreamOutputStream.lo: \
gnu/java/net/protocol/ftp/$(am__dirstamp) \
gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
gnu/java/net/protocol/gcjlib/$(am__dirstamp):
@$(mkdir_p) gnu/java/net/protocol/gcjlib
@: > gnu/java/net/protocol/gcjlib/$(am__dirstamp)
......@@ -16601,10 +16718,16 @@ mostlyclean-compile:
-rm -f gnu/java/math/MPN.lo
-rm -f gnu/java/net/BASE64.$(OBJEXT)
-rm -f gnu/java/net/BASE64.lo
-rm -f gnu/java/net/CRLFInputStream.$(OBJEXT)
-rm -f gnu/java/net/CRLFInputStream.lo
-rm -f gnu/java/net/CRLFOutputStream.$(OBJEXT)
-rm -f gnu/java/net/CRLFOutputStream.lo
-rm -f gnu/java/net/DefaultContentHandlerFactory.$(OBJEXT)
-rm -f gnu/java/net/DefaultContentHandlerFactory.lo
-rm -f gnu/java/net/EmptyX509TrustManager.$(OBJEXT)
-rm -f gnu/java/net/EmptyX509TrustManager.lo
-rm -f gnu/java/net/GetLocalHostAction.$(OBJEXT)
-rm -f gnu/java/net/GetLocalHostAction.lo
-rm -f gnu/java/net/HeaderFieldHelper.$(OBJEXT)
-rm -f gnu/java/net/HeaderFieldHelper.lo
-rm -f gnu/java/net/LineInputStream.$(OBJEXT)
......@@ -16631,6 +16754,38 @@ mostlyclean-compile:
-rm -f gnu/java/net/protocol/file/Connection.lo
-rm -f gnu/java/net/protocol/file/Handler.$(OBJEXT)
-rm -f gnu/java/net/protocol/file/Handler.lo
-rm -f gnu/java/net/protocol/ftp/ActiveModeDTP.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/ActiveModeDTP.lo
-rm -f gnu/java/net/protocol/ftp/BlockInputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/BlockInputStream.lo
-rm -f gnu/java/net/protocol/ftp/BlockOutputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/BlockOutputStream.lo
-rm -f gnu/java/net/protocol/ftp/CompressedInputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/CompressedInputStream.lo
-rm -f gnu/java/net/protocol/ftp/CompressedOutputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/CompressedOutputStream.lo
-rm -f gnu/java/net/protocol/ftp/DTP.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/DTP.lo
-rm -f gnu/java/net/protocol/ftp/DTPInputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/DTPInputStream.lo
-rm -f gnu/java/net/protocol/ftp/DTPOutputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/DTPOutputStream.lo
-rm -f gnu/java/net/protocol/ftp/FTPConnection.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/FTPConnection.lo
-rm -f gnu/java/net/protocol/ftp/FTPException.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/FTPException.lo
-rm -f gnu/java/net/protocol/ftp/FTPResponse.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/FTPResponse.lo
-rm -f gnu/java/net/protocol/ftp/FTPURLConnection.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/FTPURLConnection.lo
-rm -f gnu/java/net/protocol/ftp/Handler.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/Handler.lo
-rm -f gnu/java/net/protocol/ftp/PassiveModeDTP.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/PassiveModeDTP.lo
-rm -f gnu/java/net/protocol/ftp/StreamInputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/StreamInputStream.lo
-rm -f gnu/java/net/protocol/ftp/StreamOutputStream.$(OBJEXT)
-rm -f gnu/java/net/protocol/ftp/StreamOutputStream.lo
-rm -f gnu/java/net/protocol/gcjlib/Connection.$(OBJEXT)
-rm -f gnu/java/net/protocol/gcjlib/Connection.lo
-rm -f gnu/java/net/protocol/gcjlib/Handler.$(OBJEXT)
......@@ -21812,8 +21967,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/locale/$(DEPDIR)/LocaleInformation_zh_TW.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/math/$(DEPDIR)/MPN.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/BASE64.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/CRLFInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/CRLFOutputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/DefaultContentHandlerFactory.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/EmptyX509TrustManager.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/GetLocalHostAction.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/HeaderFieldHelper.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/LineInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/$(DEPDIR)/PlainDatagramSocketImpl.Plo@am__quote@
......@@ -21827,6 +21985,22 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/core/$(DEPDIR)/natCoreInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/file/$(DEPDIR)/Connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/file/$(DEPDIR)/Handler.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/ActiveModeDTP.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/BlockInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/BlockOutputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/CompressedInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/CompressedOutputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/DTP.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/DTPInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/DTPOutputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPConnection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPException.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPResponse.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/FTPURLConnection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/Handler.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/PassiveModeDTP.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/StreamInputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/ftp/$(DEPDIR)/StreamOutputStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/gcjlib/$(DEPDIR)/Connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/gcjlib/$(DEPDIR)/Handler.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/net/protocol/http/$(DEPDIR)/Authenticator.Plo@am__quote@
......@@ -25093,6 +25267,7 @@ clean-libtool:
-rm -rf gnu/java/net/.libs gnu/java/net/_libs
-rm -rf gnu/java/net/protocol/core/.libs gnu/java/net/protocol/core/_libs
-rm -rf gnu/java/net/protocol/file/.libs gnu/java/net/protocol/file/_libs
-rm -rf gnu/java/net/protocol/ftp/.libs gnu/java/net/protocol/ftp/_libs
-rm -rf gnu/java/net/protocol/gcjlib/.libs gnu/java/net/protocol/gcjlib/_libs
-rm -rf gnu/java/net/protocol/http/.libs gnu/java/net/protocol/http/_libs
-rm -rf gnu/java/net/protocol/http/event/.libs gnu/java/net/protocol/http/event/_libs
......@@ -25630,6 +25805,8 @@ distclean-generic:
-rm -f gnu/java/net/protocol/core/$(am__dirstamp)
-rm -f gnu/java/net/protocol/file/$(DEPDIR)/$(am__dirstamp)
-rm -f gnu/java/net/protocol/file/$(am__dirstamp)
-rm -f gnu/java/net/protocol/ftp/$(DEPDIR)/$(am__dirstamp)
-rm -f gnu/java/net/protocol/ftp/$(am__dirstamp)
-rm -f gnu/java/net/protocol/gcjlib/$(DEPDIR)/$(am__dirstamp)
-rm -f gnu/java/net/protocol/gcjlib/$(am__dirstamp)
-rm -f gnu/java/net/protocol/http/$(DEPDIR)/$(am__dirstamp)
......@@ -25914,7 +26091,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/awt/peer/gtk/$(DEPDIR) gnu/java/beans/$(DEPDIR) gnu/java/beans/editors/$(DEPDIR) gnu/java/beans/info/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) gnu/xml/aelfred2/$(DEPDIR) gnu/xml/dom/$(DEPDIR) gnu/xml/dom/ls/$(DEPDIR) gnu/xml/pipeline/$(DEPDIR) gnu/xml/transform/$(DEPDIR) gnu/xml/util/$(DEPDIR) gnu/xml/xpath/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/imageio/$(DEPDIR) javax/imageio/event/$(DEPDIR) javax/imageio/metadata/$(DEPDIR) javax/imageio/spi/$(DEPDIR) javax/imageio/stream/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) javax/xml/$(DEPDIR) javax/xml/datatype/$(DEPDIR) javax/xml/namespace/$(DEPDIR) javax/xml/parsers/$(DEPDIR) javax/xml/transform/$(DEPDIR) javax/xml/transform/dom/$(DEPDIR) javax/xml/transform/sax/$(DEPDIR) javax/xml/transform/stream/$(DEPDIR) javax/xml/validation/$(DEPDIR) javax/xml/xpath/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
-rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/awt/peer/gtk/$(DEPDIR) gnu/java/beans/$(DEPDIR) gnu/java/beans/editors/$(DEPDIR) gnu/java/beans/info/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) gnu/xml/aelfred2/$(DEPDIR) gnu/xml/dom/$(DEPDIR) gnu/xml/dom/ls/$(DEPDIR) gnu/xml/pipeline/$(DEPDIR) gnu/xml/transform/$(DEPDIR) gnu/xml/util/$(DEPDIR) gnu/xml/xpath/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/imageio/$(DEPDIR) javax/imageio/event/$(DEPDIR) javax/imageio/metadata/$(DEPDIR) javax/imageio/spi/$(DEPDIR) javax/imageio/stream/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) javax/xml/$(DEPDIR) javax/xml/datatype/$(DEPDIR) javax/xml/namespace/$(DEPDIR) javax/xml/parsers/$(DEPDIR) javax/xml/transform/$(DEPDIR) javax/xml/transform/dom/$(DEPDIR) javax/xml/transform/sax/$(DEPDIR) javax/xml/transform/stream/$(DEPDIR) javax/xml/validation/$(DEPDIR) javax/xml/xpath/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-local distclean-tags
......@@ -25944,7 +26121,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/awt/peer/gtk/$(DEPDIR) gnu/java/beans/$(DEPDIR) gnu/java/beans/editors/$(DEPDIR) gnu/java/beans/info/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) gnu/xml/aelfred2/$(DEPDIR) gnu/xml/dom/$(DEPDIR) gnu/xml/dom/ls/$(DEPDIR) gnu/xml/pipeline/$(DEPDIR) gnu/xml/transform/$(DEPDIR) gnu/xml/util/$(DEPDIR) gnu/xml/xpath/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/imageio/$(DEPDIR) javax/imageio/event/$(DEPDIR) javax/imageio/metadata/$(DEPDIR) javax/imageio/spi/$(DEPDIR) javax/imageio/stream/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) javax/xml/$(DEPDIR) javax/xml/datatype/$(DEPDIR) javax/xml/namespace/$(DEPDIR) javax/xml/parsers/$(DEPDIR) javax/xml/transform/$(DEPDIR) javax/xml/transform/dom/$(DEPDIR) javax/xml/transform/sax/$(DEPDIR) javax/xml/transform/stream/$(DEPDIR) javax/xml/validation/$(DEPDIR) javax/xml/xpath/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
-rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/awt/peer/gtk/$(DEPDIR) gnu/java/beans/$(DEPDIR) gnu/java/beans/editors/$(DEPDIR) gnu/java/beans/info/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) gnu/xml/aelfred2/$(DEPDIR) gnu/xml/dom/$(DEPDIR) gnu/xml/dom/ls/$(DEPDIR) gnu/xml/pipeline/$(DEPDIR) gnu/xml/transform/$(DEPDIR) gnu/xml/util/$(DEPDIR) gnu/xml/xpath/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/imageio/$(DEPDIR) javax/imageio/event/$(DEPDIR) javax/imageio/metadata/$(DEPDIR) javax/imageio/spi/$(DEPDIR) javax/imageio/stream/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) javax/xml/$(DEPDIR) javax/xml/datatype/$(DEPDIR) javax/xml/namespace/$(DEPDIR) javax/xml/parsers/$(DEPDIR) javax/xml/transform/$(DEPDIR) javax/xml/transform/dom/$(DEPDIR) javax/xml/transform/sax/$(DEPDIR) javax/xml/transform/stream/$(DEPDIR) javax/xml/validation/$(DEPDIR) javax/xml/xpath/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
/* CRLFInputStream.java --
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net;
import java.io.FilterInputStream;
import java.io.InputStream;
import java.io.IOException;
/**
* An input stream that filters out CR/LF pairs into LFs.
*
* @author Chris Burdess (dog@gnu.org)
*/
public class CRLFInputStream
extends FilterInputStream
{
/**
* The CR octet.
*/
public static final int CR = 13;
/**
* The LF octet.
*/
public static final int LF = 10;
/**
* Buffer.
*/
protected int buf = -1;
/**
* Buffer at time of mark.
*/
protected int markBuf = -1;
/**
* Constructs a CR/LF input stream connected to the specified input
* stream.
*/
public CRLFInputStream(InputStream in)
{
super(in);
}
/**
* Reads the next byte of data from this input stream.
* Returns -1 if the end of the stream has been reached.
* @exception IOException if an I/O error occurs
*/
public int read()
throws IOException
{
int c;
if (buf != -1)
{
c = buf;
buf = -1;
return c;
}
else
{
c = super.read();
if (c == CR)
{
buf = super.read();
if (buf == LF)
{
c = buf;
buf = -1;
}
}
}
return c;
}
/**
* Reads up to b.length bytes of data from this input stream into
* an array of bytes.
* Returns -1 if the end of the stream has been reached.
* @exception IOException if an I/O error occurs
*/
public int read(byte[] b)
throws IOException
{
return read(b, 0, b.length);
}
/**
* Reads up to len bytes of data from this input stream into an
* array of bytes, starting at the specified offset.
* Returns -1 if the end of the stream has been reached.
* @exception IOException if an I/O error occurs
*/
public int read(byte[] b, int off, int len)
throws IOException
{
int shift = 0;
if (buf != -1)
{
// Push buf onto start of byte array
b[off] = (byte) buf;
off++;
len--;
buf = -1;
shift++;
}
int l = super.read(b, off, len);
l = removeCRLF(b, off - shift, l);
return l;
}
/**
* Indicates whether this stream supports the mark and reset methods.
*/
public boolean markSupported()
{
return in.markSupported();
}
/**
* Marks the current position in this stream.
*/
public void mark(int readlimit)
{
in.mark(readlimit);
markBuf = buf;
}
/**
* Repositions this stream to the position at the time the mark method was
* called.
*/
public void reset()
throws IOException
{
in.reset();
buf = markBuf;
}
private int removeCRLF(byte[] b, int off, int len)
{
int end = off + len;
for (int i = off; i < end; i++)
{
if (b[i] == CR)
{
if (i + 1 == end)
{
// This is the last byte, impossible to determine whether CRLF
buf = CR;
len--;
}
else if (b[i + 1] == LF)
{
// Shift left
end--;
for (int j = i; j < end; j++)
{
b[j] = b[j + 1];
}
len--;
end = off + len;
}
}
}
return len;
}
}
/* CRLFOutputStream.java --
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
/**
* An output stream that filters LFs into CR/LF pairs.
*
* @author Chris Burdess (dog@gnu.org)
*/
public class CRLFOutputStream
extends FilterOutputStream
{
static final String US_ASCII = "US-ASCII";
/**
* The CR octet.
*/
public static final int CR = 13;
/**
* The LF octet.
*/
public static final int LF = 10;
/**
* The CR/LF pair.
*/
public static final byte[] CRLF = { CR, LF };
/**
* The last byte read.
*/
protected int last;
/**
* Constructs a CR/LF output stream connected to the specified output stream.
*/
public CRLFOutputStream(OutputStream out)
{
super(out);
last = -1;
}
/**
* Writes a character to the underlying stream.
* @exception IOException if an I/O error occurred
*/
public void write(int ch) throws IOException
{
if (ch == CR)
{
out.write(CRLF);
}
else if (ch == LF)
{
if (last != CR)
{
out.write(CRLF);
}
}
else
{
out.write(ch);
}
last = ch;
}
/**
* Writes a byte array to the underlying stream.
* @exception IOException if an I/O error occurred
*/
public void write(byte[] b)
throws IOException
{
write(b, 0, b.length);
}
/**
* Writes a portion of a byte array to the underlying stream.
* @exception IOException if an I/O error occurred
*/
public void write(byte[] b, int off, int len)
throws IOException
{
int d = off;
len += off;
for (int i = off; i < len; i++)
{
switch (b[i])
{
case CR:
out.write (b, d, i - d);
out.write (CRLF, 0, 2);
d = i + 1;
break;
case LF:
if (last != CR)
{
out.write (b, d, i - d);
out.write (CRLF, 0, 2);
}
d = i + 1;
break;
}
last = b[i];
}
if (len - d > 0)
{
out.write (b, d, len - d);
}
}
/**
* Writes the specified ASCII string to the underlying stream.
* @exception IOException if an I/O error occurred
*/
public void write(String text)
throws IOException
{
try
{
byte[] bytes = text.getBytes(US_ASCII);
write(bytes, 0, bytes.length);
}
catch (UnsupportedEncodingException e)
{
throw new IOException("The US-ASCII encoding is not supported " +
"on this system");
}
}
/**
* Writes a newline to the underlying stream.
* @exception IOException if an I/O error occurred
*/
public void writeln()
throws IOException
{
out.write(CRLF, 0, 2);
}
}
/* GetLocalHostAction.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.PrivilegedAction;
/**
* Privileged action to retrieve the local host InetAddress.
*
* @author Chris Burdess (dog@gnu.org)
*/
public class GetLocalHostAction
implements PrivilegedAction
{
public Object run()
{
try
{
return InetAddress.getLocalHost();
}
catch (UnknownHostException e)
{
return null;
}
}
}
/* ActiveModeDTP.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* An active mode FTP data transfer process.
* This starts a server on the specified port listening for a data
* connection. It converts the socket input into a file stream for reading.
*
* @author Chris Burdess (dog@gnu.org)
*/
final class ActiveModeDTP
implements DTP, Runnable
{
ServerSocket server;
Socket socket;
DTPInputStream in;
DTPOutputStream out;
boolean completed;
boolean inProgress;
int transferMode;
IOException exception;
Thread acceptThread;
int connectionTimeout;
ActiveModeDTP(InetAddress localhost, int port,
int connectionTimeout, int timeout)
throws IOException
{
completed = false;
inProgress = false;
server = new ServerSocket(port, 1, localhost);
if (timeout > 0)
{
server.setSoTimeout(timeout);
}
if (connectionTimeout <= 0)
{
connectionTimeout = 20000;
}
this.connectionTimeout = connectionTimeout;
acceptThread = new Thread(this, "ActiveModeDTP");
acceptThread.start();
}
/**
* Start listening.
*/
public void run()
{
try
{
socket = server.accept();
//System.err.println("Accepted connection from "+socket.getInetAddress()+":"+socket.getPort());
}
catch (IOException e)
{
exception = e;
}
}
/**
* Waits until a client has connected.
*/
public void waitFor()
throws IOException
{
try
{
acceptThread.join(connectionTimeout);
}
catch (InterruptedException e)
{
}
if (exception != null)
{
throw exception;
}
if (socket == null)
{
server.close();
throw new IOException("client did not connect before timeout");
}
acceptThread = null;
}
/**
* Returns an input stream from which a remote file can be read.
*/
public InputStream getInputStream()
throws IOException
{
if (inProgress)
{
throw new IOException("Transfer in progress");
}
if (acceptThread != null)
{
waitFor();
}
switch (transferMode)
{
case FTPConnection.MODE_STREAM:
in = new StreamInputStream(this, socket.getInputStream());
break;
case FTPConnection.MODE_BLOCK:
in = new BlockInputStream(this, socket.getInputStream());
break;
case FTPConnection.MODE_COMPRESSED:
in = new CompressedInputStream(this, socket.getInputStream());
break;
default:
throw new IllegalStateException("invalid transfer mode");
}
in.setTransferComplete(false);
return in;
}
/**
* Returns an output stream to which a local file can be written for
* upload.
*/
public OutputStream getOutputStream() throws IOException
{
if (inProgress)
{
throw new IOException("Transfer in progress");
}
if (acceptThread != null)
{
waitFor();
}
switch (transferMode)
{
case FTPConnection.MODE_STREAM:
out = new StreamOutputStream(this, socket.getOutputStream());
break;
case FTPConnection.MODE_BLOCK:
out = new BlockOutputStream(this, socket.getOutputStream());
break;
case FTPConnection.MODE_COMPRESSED:
out = new CompressedOutputStream(this, socket.getOutputStream());
break;
default:
throw new IllegalStateException("invalid transfer mode");
}
out.setTransferComplete(false);
return out;
}
public void setTransferMode(int mode)
{
transferMode = mode;
}
public void complete()
{
completed = true;
if (!inProgress)
{
transferComplete();
}
}
public boolean abort()
{
completed = true;
transferComplete();
return inProgress;
}
public void transferComplete()
{
if (socket == null)
{
return;
}
if (in != null)
{
in.setTransferComplete(true);
}
if (out != null)
{
out.setTransferComplete(true);
}
completed = completed || (transferMode == FTPConnection.MODE_STREAM);
if (completed && socket != null)
{
try
{
socket.close();
}
catch (IOException e)
{
}
try
{
server.close();
}
catch (IOException e)
{
}
}
}
}
/* BlockInputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.InputStream;
import java.io.IOException;
/**
* A DTP input stream that implements the FTP block transfer mode.
*
* @author Chris Burdess (dog@gnu.org)
*/
class BlockInputStream
extends DTPInputStream
{
static final int EOF = 64;
int descriptor;
int max = -1;
int count = -1;
BlockInputStream(DTP dtp, InputStream in)
{
super(dtp, in);
}
public int read()
throws IOException
{
if (transferComplete)
{
return -1;
}
if (count == -1)
{
readHeader();
}
if (max < 1)
{
close();
return -1;
}
int c = in.read();
if (c == -1)
{
dtp.transferComplete();
}
count++;
if (count >= max)
{
count = -1;
if (descriptor == EOF)
{
close();
}
}
return c;
}
public int read(byte[] buf)
throws IOException
{
return read(buf, 0, buf.length);
}
public int read(byte[] buf, int off, int len)
throws IOException
{
if (transferComplete)
{
return -1;
}
if (count == -1)
{
readHeader();
}
if (max < 1)
{
close();
return -1;
}
int l = in.read(buf, off, len);
if (l == -1)
{
dtp.transferComplete();
}
count += l;
if (count >= max)
{
count = -1;
if (descriptor == EOF)
{
close();
}
}
return l;
}
/**
* Reads the block header.
*/
void readHeader()
throws IOException
{
descriptor = in.read();
int max_hi = in.read();
int max_lo = in.read();
max = (max_hi << 8) | max_lo;
count = 0;
}
}
/* BlockOutputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.IOException;
import java.io.OutputStream;
/**
* A DTP output stream that implements the FTP block transfer mode.
*
* @author Chris Burdess (dog@gnu.org)
*/
class BlockOutputStream
extends DTPOutputStream
{
static final byte RECORD = -128; // 0x80
static final byte EOF = 64; // 0x40
BlockOutputStream(DTP dtp, OutputStream out)
{
super(dtp, out);
}
public void write(int c)
throws IOException
{
if (transferComplete)
{
return;
}
byte[] buf = new byte[]
{
RECORD, /* record descriptor */
0x00, 0x01, /* one byte */
(byte) c /* the byte */
};
out.write(buf, 0, 4);
}
public void write(byte[] b)
throws IOException
{
write(b, 0, b.length);
}
public void write(byte[] b, int off, int len)
throws IOException
{
if (transferComplete)
{
return;
}
byte[] buf = new byte[len + 3];
buf[0] = RECORD; /* record descriptor */
buf[1] = (byte) ((len & 0x00ff) >> 8); /* high byte of bytecount */
buf[2] = (byte) (len & 0xff00); /* low byte of bytecount */
System.arraycopy(b, off, buf, 3, len);
out.write(buf, 0, len);
}
public void close()
throws IOException
{
byte[] buf = new byte[]
{
EOF, /* eof descriptor */
0x00, 0x00 /* no bytes */
};
out.write(buf, 0, 3);
super.close();
}
}
/* CompressedInputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.InputStream;
import java.io.IOException;
import java.net.ProtocolException;
/**
* A DTP input stream that implements the FTP compressed transfer mode.
*
* @author Chris Burdess (dog@gnu.org)
*/
class CompressedInputStream
extends DTPInputStream
{
static final int EOF = 64;
static final int RAW = 0x00;
static final int COMPRESSED = 0x80;
static final int FILLER = 0xc0;
int descriptor;
int max = -1;
int count = -1;
int state = RAW; // RAW | STATE | FILLER
int rep; // the compressed byte
int n = 0; // the number of compressed or raw bytes
CompressedInputStream(DTP dtp, InputStream in)
{
super(dtp, in);
}
public int read()
throws IOException
{
if (transferComplete)
{
return -1;
}
if (count == -1)
{
readHeader();
}
if (max < 1)
{
close();
return -1;
}
if (n > 0 && (state == COMPRESSED || state == FILLER))
{
n--;
return rep;
}
int c = in.read();
if (c == -1)
{
close();
}
count++;
if (count >= max)
{
count = -1;
if (descriptor == EOF)
{
close();
}
}
if (c == -1)
{
return c;
}
while (n == 0) // read code header
{
state = (c & 0xc0);
n = (c & 0x3f);
c = in.read();
if (c == -1)
{
return -1;
}
}
switch (state)
{
case RAW:
break;
case COMPRESSED:
case FILLER:
rep = c;
break;
default:
throw new ProtocolException("Illegal state: " + state);
}
n--;
return c;
}
public int read(byte[] buf)
throws IOException
{
return read(buf, 0, buf.length);
}
public int read(byte[] buf, int off, int len)
throws IOException
{
if (transferComplete)
{
return -1;
}
if (count == -1)
{
readHeader();
}
if (max < 1)
{
close();
return -1;
}
// TODO improve performance
for (int i = off; i < len; i++)
{
int c = read();
if (c == -1)
{
close();
return i;
}
buf[i] = (byte) c;
}
return len;
/*
int l = in.read (buf, off, len);
if (l==-1)
{
close ();
}
count += l;
if (count>=max)
{
count = -1;
if (descriptor==EOF)
{
close ();
}
}
return l;
*/
}
/**
* Reads the block header.
*/
void readHeader()
throws IOException
{
descriptor = in.read();
int max_hi = in.read();
int max_lo = in.read();
max = (max_hi << 8) | max_lo;
count = 0;
}
/**
* Reads the code header.
*/
void readCodeHeader()
throws IOException
{
int code = in.read();
state = (code & 0xc0);
n = (code & 0x3f);
}
}
/* CompressedOutputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.IOException;
import java.io.OutputStream;
/**
* A DTP output stream that implements the FTP compressed transfer mode.
*
* @author Chris Burdess (dog@gnu.org)
*/
class CompressedOutputStream
extends DTPOutputStream
{
static final byte RECORD = -128; // 0x80
static final byte EOF = 64; // 0x40
CompressedOutputStream(DTP dtp, OutputStream out)
{
super(dtp, out);
}
/**
* Just one byte cannot be compressed.
* It takes 5 bytes to transmit - hardly very compressed!
*/
public void write(int c)
throws IOException
{
if (transferComplete)
{
return;
}
byte[] buf = new byte[]
{
RECORD, /* record descriptor */
0x00, 0x01, /* one byte */
0x01, /* one uncompressed byte */
(byte) c /* the byte */
};
out.write(buf, 0, 5);
}
public void write(byte[] b)
throws IOException
{
write(b, 0, b.length);
}
/**
* The larger len is, the better.
*/
public void write(byte[] b, int off, int len)
throws IOException
{
if (transferComplete)
{
return;
}
byte[] buf = compress(b, off, len);
len = buf.length;
buf[0] = RECORD; /* record descriptor */
buf[1] = (byte) ((len & 0x00ff) >> 8); /* high byte of bytecount */
buf[2] = (byte) (len & 0xff00); /* low byte of bytecount */
out.write(buf, 0, len);
}
/**
* Returns the compressed form of the given byte array.
* The first 3 bytes are left free for header information.
*/
byte[] compress(byte[] b, int off, int len)
{
byte[] buf = new byte[len];
byte last = 0;
int pos = 0, raw_count = 0, rep_count = 1;
for (int i = off; i < len; i++)
{
byte c = b[i];
if (i > off && c == last) // compress
{
if (raw_count > 0) // flush raw bytes to buf
{
// need to add raw_count+1 bytes
if (pos + (raw_count + 1) > buf.length)
{
buf = realloc(buf, len);
}
pos = flush_raw(buf, pos, b, (i - raw_count) - 1,
raw_count);
raw_count = 0;
}
rep_count++; // keep looking for same byte
}
else
{
if (rep_count > 1) // flush compressed bytes to buf
{
// need to add 2 bytes
if (pos + 2 > buf.length)
{
buf = realloc(buf, len);
}
pos = flush_compressed(buf, pos, rep_count, last);
rep_count = 1;
}
raw_count++; // keep looking for raw bytes
}
if (rep_count == 127) // flush compressed bytes
{
// need to add 2 bytes
if (pos + 2 > buf.length)
{
buf = realloc(buf, len);
}
pos = flush_compressed(buf, pos, rep_count, last);
rep_count = 1;
}
if (raw_count == 127) // flush raw bytes
{
// need to add raw_count+1 bytes
if (pos + (raw_count + 1) > buf.length)
{
buf = realloc(buf, len);
}
pos = flush_raw(buf, pos, b, (i - raw_count), raw_count);
raw_count = 0;
}
last = c;
}
if (rep_count > 1) // flush compressed bytes
{
// need to add 2 bytes
if (pos + 2 > buf.length)
{
buf = realloc(buf, len);
}
pos = flush_compressed(buf, pos, rep_count, last);
rep_count = 1;
}
if (raw_count > 0) // flush raw bytes
{
// need to add raw_count+1 bytes
if (pos + (raw_count + 1) > buf.length)
{
buf = realloc(buf, len);
}
pos = flush_raw(buf, pos, b, (len - raw_count), raw_count);
raw_count = 0;
}
byte[] ret = new byte[pos + 3];
System.arraycopy(buf, 0, ret, 3, pos);
return ret;
}
int flush_compressed(byte[] buf, int pos, int count, byte c)
{
buf[pos++] = (byte) (0x80 | count);
buf[pos++] = c;
return pos;
}
int flush_raw(byte[] buf, int pos, byte[] src, int off, int len)
{
buf[pos++] = (byte) len;
System.arraycopy(src, off, buf, pos, len);
return pos + len;
}
byte[] realloc(byte[] buf, int len)
{
byte[] ret = new byte[buf.length + len];
System.arraycopy(buf, 0, ret, 0, buf.length);
return ret;
}
public void close()
throws IOException
{
byte[] buf = new byte[]
{
EOF, /* eof descriptor */
0x00, 0x00 /* no bytes */
};
out.write(buf, 0, 3);
out.close();
}
}
/* DTP.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* An FTP data transfer process.
*
* @author Chris Burdess (dog@gnu.org)
*/
interface DTP
{
/**
* Returns an input stream from which a remote file can be read.
*/
InputStream getInputStream()
throws IOException;
/**
* Returns an output stream to which a local file can be written for
* upload.
*/
OutputStream getOutputStream()
throws IOException;
/**
* Sets the transfer mode to be used with this DTP.
*/
void setTransferMode(int mode);
/**
* Marks this DTP completed.
* When the current transfer has finished, any resources will be released.
*/
void complete();
/**
* Aborts any current transfer and releases all resources held by this
* DTP.
* @return true if a transfer was interrupted, false otherwise
*/
boolean abort();
/**
* Used to notify the DTP that its current transfer is complete.
* This occurs either when end-of-stream is reached or a 226 response is
* received.
*/
void transferComplete();
}
/* DTPInputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.FilterInputStream;
import java.io.InputStream;
import java.io.IOException;
/**
* An input stream that notifies a DTP on completion.
*
* @author Chris Burdess (dog@gnu.org)
*/
abstract class DTPInputStream
extends FilterInputStream
{
DTP dtp;
boolean transferComplete;
/**
* Constructor.
* @param dtp the controlling data transfer process
* @param in the underlying socket stream
*/
DTPInputStream (DTP dtp, InputStream in)
{
super(in);
this.dtp = dtp;
transferComplete = false;
}
/**
* Marks this input stream complete.
* This is called by the DTP.
*/
void setTransferComplete(boolean flag)
{
transferComplete = flag;
}
/**
* Notifies the controlling DTP that this stream has completed transfer.
*/
public void close()
throws IOException
{
dtp.transferComplete();
}
}
/* DTPOutputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* An output stream that notifies a DTP on end of stream.
*
* @author Chris Burdess (dog@gnu.org)
*/
abstract class DTPOutputStream extends FilterOutputStream
{
DTP dtp;
boolean transferComplete;
/**
* Constructor.
* @param dtp the controlling data transfer process
* @param out the socket output stream
*/
DTPOutputStream (DTP dtp, OutputStream out)
{
super (out);
this.dtp = dtp;
transferComplete = false;
}
/**
* Tells this stream whether transfer has completed or not.
* @param flag true if the process has completed, false otherwise
*/
void setTransferComplete (boolean flag)
{
transferComplete = flag;
}
/**
* Notifies the controlling DTP that this stream has been terminated.
*/
public void close () throws IOException
{
dtp.transferComplete ();
}
}
/* FTPConnection.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import gnu.java.net.CRLFInputStream;
import gnu.java.net.CRLFOutputStream;
import gnu.java.net.EmptyX509TrustManager;
import gnu.java.net.LineInputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.BindException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ProtocolException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
/**
* An FTP client connection, or PI.
* This implements RFC 959, with the following exceptions:
* <ul>
* <li>STAT, HELP, SITE, SMNT, and ACCT commands are not supported.</li>
* <li>the TYPE command does not allow alternatives to the default bytesize
* (Non-print), and local bytesize is not supported.</li>
* </ul>
*
* @author Chris Burdess (dog@gnu.org)
*/
public class FTPConnection
{
/**
* The default FTP transmission control port.
*/
public static final int FTP_PORT = 21;
/**
* The FTP data port.
*/
public static final int FTP_DATA_PORT = 20;
// -- FTP vocabulary --
protected static final String USER = "USER";
protected static final String PASS = "PASS";
protected static final String ACCT = "ACCT";
protected static final String CWD = "CWD";
protected static final String CDUP = "CDUP";
protected static final String SMNT = "SMNT";
protected static final String REIN = "REIN";
protected static final String QUIT = "QUIT";
protected static final String PORT = "PORT";
protected static final String PASV = "PASV";
protected static final String TYPE = "TYPE";
protected static final String STRU = "STRU";
protected static final String MODE = "MODE";
protected static final String RETR = "RETR";
protected static final String STOR = "STOR";
protected static final String STOU = "STOU";
protected static final String APPE = "APPE";
protected static final String ALLO = "ALLO";
protected static final String REST = "REST";
protected static final String RNFR = "RNFR";
protected static final String RNTO = "RNTO";
protected static final String ABOR = "ABOR";
protected static final String DELE = "DELE";
protected static final String RMD = "RMD";
protected static final String MKD = "MKD";
protected static final String PWD = "PWD";
protected static final String LIST = "LIST";
protected static final String NLST = "NLST";
protected static final String SITE = "SITE";
protected static final String SYST = "SYST";
protected static final String STAT = "STAT";
protected static final String HELP = "HELP";
protected static final String NOOP = "NOOP";
protected static final String AUTH = "AUTH";
protected static final String PBSZ = "PBSZ";
protected static final String PROT = "PROT";
protected static final String CCC = "CCC";
protected static final String TLS = "TLS";
public static final int TYPE_ASCII = 1;
public static final int TYPE_EBCDIC = 2;
public static final int TYPE_BINARY = 3;
public static final int STRUCTURE_FILE = 1;
public static final int STRUCTURE_RECORD = 2;
public static final int STRUCTURE_PAGE = 3;
public static final int MODE_STREAM = 1;
public static final int MODE_BLOCK = 2;
public static final int MODE_COMPRESSED = 3;
// -- Telnet constants --
private static final String US_ASCII = "US-ASCII";
/**
* The socket used to communicate with the server.
*/
protected Socket socket;
/**
* The socket input stream.
*/
protected LineInputStream in;
/**
* The socket output stream.
*/
protected CRLFOutputStream out;
/**
* The timeout when attempting to connect a socket.
*/
protected int connectionTimeout;
/**
* The read timeout on sockets.
*/
protected int timeout;
/**
* If true, print debugging information.
*/
protected boolean debug;
/**
* The current data transfer process in use by this connection.
*/
protected DTP dtp;
/**
* The current representation type.
*/
protected int representationType = TYPE_ASCII;
/**
* The current file structure type.
*/
protected int fileStructure = STRUCTURE_FILE;
/**
* The current transfer mode.
*/
protected int transferMode = MODE_STREAM;
/**
* If true, use passive mode.
*/
protected boolean passive = false;
/**
* Creates a new connection to the server using the default port.
* @param hostname the hostname of the server to connect to
*/
public FTPConnection(String hostname)
throws UnknownHostException, IOException
{
this(hostname, -1, 0, 0, false);
}
/**
* Creates a new connection to the server.
* @param hostname the hostname of the server to connect to
* @param port the port to connect to(if &lt;=0, use default port)
*/
public FTPConnection(String hostname, int port)
throws UnknownHostException, IOException
{
this(hostname, port, 0, 0, false);
}
/**
* Creates a new connection to the server.
* @param hostname the hostname of the server to connect to
* @param port the port to connect to(if &lt;=0, use default port)
* @param connectionTimeout the connection timeout, in milliseconds
* @param timeout the I/O timeout, in milliseconds
* @param debug print debugging information
*/
public FTPConnection(String hostname, int port,
int connectionTimeout, int timeout, boolean debug)
throws UnknownHostException, IOException
{
this.connectionTimeout = connectionTimeout;
this.timeout = timeout;
this.debug = debug;
if (port <= 0)
{
port = FTP_PORT;
}
// Set up socket
socket = new Socket();
InetSocketAddress address = new InetSocketAddress(hostname, port);
if (connectionTimeout > 0)
{
socket.connect(address, connectionTimeout);
}
else
{
socket.connect(address);
}
if (timeout > 0)
{
socket.setSoTimeout(timeout);
}
InputStream in = socket.getInputStream();
in = new BufferedInputStream(in);
in = new CRLFInputStream(in);
this.in = new LineInputStream(in);
OutputStream out = socket.getOutputStream();
out = new BufferedOutputStream(out);
this.out = new CRLFOutputStream(out);
// Read greeting
FTPResponse response = getResponse();
switch (response.getCode())
{
case 220: // hello
break;
default:
throw new FTPException(response);
}
}
/**
* Authenticate using the specified username and password.
* If the username suffices for the server, the password will not be used
* and may be null.
* @param username the username
* @param password the optional password
* @return true on success, false otherwise
*/
public boolean authenticate(String username, String password)
throws IOException
{
String cmd = USER + ' ' + username;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 230: // User logged in
return true;
case 331: // User name okay, need password
break;
case 332: // Need account for login
case 530: // No such user
return false;
default:
throw new FTPException(response);
}
cmd = PASS + ' ' + password;
send(cmd);
response = getResponse();
switch (response.getCode())
{
case 230: // User logged in
case 202: // Superfluous
return true;
case 332: // Need account for login
case 530: // Bad password
return false;
default:
throw new FTPException(response);
}
}
/**
* Negotiates TLS over the current connection.
* See IETF draft-murray-auth-ftp-ssl-15.txt for details.
* @param confidential whether to provide confidentiality for the
* connection
*/
public boolean starttls(boolean confidential)
throws IOException
{
return starttls(confidential, new EmptyX509TrustManager());
}
/**
* Negotiates TLS over the current connection.
* See IETF draft-murray-auth-ftp-ssl-15.txt for details.
* @param confidential whether to provide confidentiality for the
* connection
* @param tm the trust manager used to validate the server certificate.
*/
public boolean starttls(boolean confidential, TrustManager tm)
throws IOException
{
try
{
// Use SSLSocketFactory to negotiate a TLS session and wrap the
// current socket.
SSLContext context = SSLContext.getInstance("TLS");
// We don't require strong validation of the server certificate
TrustManager[] trust = new TrustManager[] { tm };
context.init(null, trust, null);
SSLSocketFactory factory = context.getSocketFactory();
send(AUTH + ' ' + TLS);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 500:
case 502:
case 504:
case 534:
case 431:
return false;
case 234:
break;
default:
throw new FTPException(response);
}
String hostname = socket.getInetAddress().getHostName();
int port = socket.getPort();
SSLSocket ss =
(SSLSocket) factory.createSocket(socket, hostname, port, true);
String[] protocols = { "TLSv1", "SSLv3" };
ss.setEnabledProtocols(protocols);
ss.setUseClientMode(true);
ss.startHandshake();
// PBSZ:PROT sequence
send(PBSZ + ' ' + Integer.MAX_VALUE);
response = getResponse();
switch (response.getCode())
{
case 501: // syntax error
case 503: // not authenticated
return false;
case 200:
break;
default:
throw new FTPException(response);
}
send(PROT + ' ' +(confidential ? 'P' : 'C'));
response = getResponse();
switch (response.getCode())
{
case 503: // not authenticated
case 504: // invalid level
case 536: // level not supported
return false;
case 200:
break;
default:
throw new FTPException(response);
}
if (confidential)
{
// Set up streams
InputStream in = ss.getInputStream();
in = new BufferedInputStream(in);
in = new CRLFInputStream(in);
this.in = new LineInputStream(in);
OutputStream out = ss.getOutputStream();
out = new BufferedOutputStream(out);
this.out = new CRLFOutputStream(out);
}
return true;
}
catch (GeneralSecurityException e)
{
return false;
}
}
/**
* Changes directory to the specified path.
* @param path an absolute or relative pathname
* @return true on success, false if the specified path does not exist
*/
public boolean changeWorkingDirectory(String path)
throws IOException
{
String cmd = CWD + ' ' + path;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 250:
return true;
case 550:
return false;
default:
throw new FTPException(response);
}
}
/**
* Changes directory to the parent of the current working directory.
* @return true on success, false otherwise
*/
public boolean changeToParentDirectory()
throws IOException
{
send(CDUP);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 250:
return true;
case 550:
return false;
default:
throw new FTPException(response);
}
}
/**
* Terminates an authenticated login.
* If file transfer is in progress, it remains active for result response
* only.
*/
public void reinitialize()
throws IOException
{
send(REIN);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 220:
if (dtp != null)
{
dtp.complete();
dtp = null;
}
break;
default:
throw new FTPException(response);
}
}
/**
* Terminates the control connection.
* The file transfer connection remains open for result response only.
* This connection is invalid and no further commands may be issued.
*/
public void logout()
throws IOException
{
send(QUIT);
try
{
getResponse(); // not required
}
catch (IOException e)
{
}
if (dtp != null)
{
dtp.complete();
dtp = null;
}
try
{
socket.close();
}
catch (IOException e)
{
}
}
/**
* Initialise the data transfer process.
*/
protected void initialiseDTP()
throws IOException
{
if (dtp != null)
{
dtp.complete();
dtp = null;
}
InetAddress localhost = socket.getLocalAddress();
if (passive)
{
send(PASV);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 227:
String message = response.getMessage();
try
{
int start = message.indexOf(',');
char c = message.charAt(start - 1);
while (c >= 0x30 && c <= 0x39)
{
c = message.charAt((--start) - 1);
}
int mid1 = start;
for (int i = 0; i < 4; i++)
{
mid1 = message.indexOf(',', mid1 + 1);
}
int mid2 = message.indexOf(',', mid1 + 1);
if (mid1 == -1 || mid2 < mid1)
{
throw new ProtocolException("Malformed 227: " +
message);
}
int end = mid2;
c = message.charAt(end + 1);
while (c >= 0x30 && c <= 0x39)
{
c = message.charAt((++end) + 1);
}
String address =
message.substring(start, mid1).replace(',', '.');
int port_hi =
Integer.parseInt(message.substring(mid1 + 1, mid2));
int port_lo =
Integer.parseInt(message.substring(mid2 + 1, end + 1));
int port = (port_hi << 8) | port_lo;
/*System.out.println("Entering passive mode: " + address +
":" + port);*/
dtp = new PassiveModeDTP(address, port, localhost,
connectionTimeout, timeout);
break;
}
catch (ArrayIndexOutOfBoundsException e)
{
throw new ProtocolException(e.getMessage() + ": " +
message);
}
catch (NumberFormatException e)
{
throw new ProtocolException(e.getMessage() + ": " +
message);
}
default:
throw new FTPException(response);
}
}
else
{
// Get the local port
int port = socket.getLocalPort() + 1;
int tries = 0;
// Bind the active mode DTP
while (dtp == null)
{
try
{
dtp = new ActiveModeDTP(localhost, port,
connectionTimeout, timeout);
/*System.out.println("Listening on: " + port);*/
}
catch (BindException e)
{
port++;
tries++;
if (tries > 9)
{
throw e;
}
}
}
// Send PORT command
StringBuffer buf = new StringBuffer(PORT);
buf.append(' ');
// Construct the address/port string form
byte[] address = localhost.getAddress();
for (int i = 0; i < address.length; i++)
{
int a =(int) address[i];
if (a < 0)
{
a += 0x100;
}
buf.append(a);
buf.append(',');
}
int port_hi =(port & 0xff00) >> 8;
int port_lo =(port & 0x00ff);
buf.append(port_hi);
buf.append(',');
buf.append(port_lo);
send(buf.toString());
// Get response
FTPResponse response = getResponse();
switch (response.getCode())
{
case 200: // OK
break;
default:
dtp.abort();
dtp = null;
throw new FTPException(response);
}
}
dtp.setTransferMode(transferMode);
}
/**
* Set passive mode.
* @param flag true if we should use passive mode, false otherwise
*/
public void setPassive(boolean flag)
throws IOException
{
if (passive != flag)
{
passive = flag;
initialiseDTP();
}
}
/**
* Returns the current representation type of the transfer data.
* @return TYPE_ASCII, TYPE_EBCDIC, or TYPE_BINARY
*/
public int getRepresentationType()
{
return representationType;
}
/**
* Sets the desired representation type of the transfer data.
* @param type TYPE_ASCII, TYPE_EBCDIC, or TYPE_BINARY
*/
public void setRepresentationType(int type)
throws IOException
{
StringBuffer buf = new StringBuffer(TYPE);
buf.append(' ');
switch (type)
{
case TYPE_ASCII:
buf.append('A');
break;
case TYPE_EBCDIC:
buf.append('E');
break;
case TYPE_BINARY:
buf.append('I');
break;
default:
throw new IllegalArgumentException(Integer.toString(type));
}
//buf.append(' ');
//buf.append('N');
send(buf.toString());
FTPResponse response = getResponse();
switch (response.getCode())
{
case 200:
representationType = type;
break;
default:
throw new FTPException(response);
}
}
/**
* Returns the current file structure type.
* @return STRUCTURE_FILE, STRUCTURE_RECORD, or STRUCTURE_PAGE
*/
public int getFileStructure()
{
return fileStructure;
}
/**
* Sets the desired file structure type.
* @param structure STRUCTURE_FILE, STRUCTURE_RECORD, or STRUCTURE_PAGE
*/
public void setFileStructure(int structure)
throws IOException
{
StringBuffer buf = new StringBuffer(STRU);
buf.append(' ');
switch (structure)
{
case STRUCTURE_FILE:
buf.append('F');
break;
case STRUCTURE_RECORD:
buf.append('R');
break;
case STRUCTURE_PAGE:
buf.append('P');
break;
default:
throw new IllegalArgumentException(Integer.toString(structure));
}
send(buf.toString());
FTPResponse response = getResponse();
switch (response.getCode())
{
case 200:
fileStructure = structure;
break;
default:
throw new FTPException(response);
}
}
/**
* Returns the current transfer mode.
* @return MODE_STREAM, MODE_BLOCK, or MODE_COMPRESSED
*/
public int getTransferMode()
{
return transferMode;
}
/**
* Sets the desired transfer mode.
* @param mode MODE_STREAM, MODE_BLOCK, or MODE_COMPRESSED
*/
public void setTransferMode(int mode)
throws IOException
{
StringBuffer buf = new StringBuffer(MODE);
buf.append(' ');
switch (mode)
{
case MODE_STREAM:
buf.append('S');
break;
case MODE_BLOCK:
buf.append('B');
break;
case MODE_COMPRESSED:
buf.append('C');
break;
default:
throw new IllegalArgumentException(Integer.toString(mode));
}
send(buf.toString());
FTPResponse response = getResponse();
switch (response.getCode())
{
case 200:
transferMode = mode;
if (dtp != null)
{
dtp.setTransferMode(mode);
}
break;
default:
throw new FTPException(response);
}
}
/**
* Retrieves the specified file.
* @param filename the filename of the file to retrieve
* @return an InputStream containing the file content
*/
public InputStream retrieve(String filename)
throws IOException
{
if (dtp == null || transferMode == MODE_STREAM)
{
initialiseDTP();
}
/*
int size = -1;
String cmd = SIZE + ' ' + filename;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 213:
size = Integer.parseInt(response.getMessage());
break;
case 550: // File not found
default:
throw new FTPException(response);
}
*/
String cmd = RETR + ' ' + filename;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 125: // Data connection already open; transfer starting
case 150: // File status okay; about to open data connection
return dtp.getInputStream();
default:
throw new FTPException(response);
}
}
/**
* Returns a stream for uploading a file.
* If a file with the same filename already exists on the server, it will
* be overwritten.
* @param filename the name of the file to save the content as
* @return an OutputStream to write the file data to
*/
public OutputStream store(String filename)
throws IOException
{
if (dtp == null || transferMode == MODE_STREAM)
{
initialiseDTP();
}
String cmd = STOR + ' ' + filename;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 125: // Data connection already open; transfer starting
case 150: // File status okay; about to open data connection
return dtp.getOutputStream();
default:
throw new FTPException(response);
}
}
/**
* Returns a stream for uploading a file.
* If a file with the same filename already exists on the server, the
* content specified will be appended to the existing file.
* @param filename the name of the file to save the content as
* @return an OutputStream to write the file data to
*/
public OutputStream append(String filename)
throws IOException
{
if (dtp == null || transferMode == MODE_STREAM)
{
initialiseDTP();
}
String cmd = APPE + ' ' + filename;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 125: // Data connection already open; transfer starting
case 150: // File status okay; about to open data connection
return dtp.getOutputStream();
default:
throw new FTPException(response);
}
}
/**
* This command may be required by some servers to reserve sufficient
* storage to accommodate the new file to be transferred.
* It should be immediately followed by a <code>store</code> or
* <code>append</code>.
* @param size the number of bytes of storage to allocate
*/
public void allocate(long size)
throws IOException
{
String cmd = ALLO + ' ' + size;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 200: // OK
case 202: // Superfluous
break;
default:
throw new FTPException(response);
}
}
/**
* Renames a file.
* @param oldName the current name of the file
* @param newName the new name
* @return true if successful, false otherwise
*/
public boolean rename(String oldName, String newName)
throws IOException
{
String cmd = RNFR + ' ' + oldName;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 450: // File unavailable
case 550: // File not found
return false;
case 350: // Pending
break;
default:
throw new FTPException(response);
}
cmd = RNTO + ' ' + newName;
send(cmd);
response = getResponse();
switch (response.getCode())
{
case 250: // OK
return true;
case 450:
case 550:
return false;
default:
throw new FTPException(response);
}
}
/**
* Aborts the transfer in progress.
* @return true if a transfer was in progress, false otherwise
*/
public boolean abort()
throws IOException
{
send(ABOR);
FTPResponse response = getResponse();
// Abort client DTP
if (dtp != null)
{
dtp.abort();
}
switch (response.getCode())
{
case 226: // successful abort
return false;
case 426: // interrupted
response = getResponse();
if (response.getCode() == 226)
{
return true;
}
// Otherwise fall through to throw exception
default:
throw new FTPException(response);
}
}
/**
* Causes the file specified to be deleted at the server site.
* @param filename the file to delete
*/
public boolean delete(String filename)
throws IOException
{
String cmd = DELE + ' ' + filename;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 250: // OK
return true;
case 450: // File unavailable
case 550: // File not found
return false;
default:
throw new FTPException(response);
}
}
/**
* Causes the directory specified to be deleted.
* This may be an absolute or relative pathname.
* @param pathname the directory to delete
*/
public boolean removeDirectory(String pathname)
throws IOException
{
String cmd = RMD + ' ' + pathname;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 250: // OK
return true;
case 550: // File not found
return false;
default:
throw new FTPException(response);
}
}
/**
* Causes the directory specified to be created at the server site.
* This may be an absolute or relative pathname.
* @param pathname the directory to create
*/
public boolean makeDirectory(String pathname)
throws IOException
{
String cmd = MKD + ' ' + pathname;
send(cmd);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 257: // Directory created
return true;
case 550: // File not found
return false;
default:
throw new FTPException(response);
}
}
/**
* Returns the current working directory.
*/
public String getWorkingDirectory()
throws IOException
{
send(PWD);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 257:
String message = response.getMessage();
if (message.charAt(0) == '"')
{
int end = message.indexOf('"', 1);
if (end == -1)
{
throw new ProtocolException(message);
}
return message.substring(1, end);
}
else
{
int end = message.indexOf(' ');
if (end == -1)
{
return message;
}
else
{
return message.substring(0, end);
}
}
default:
throw new FTPException(response);
}
}
/**
* Returns a listing of information about the specified pathname.
* If the pathname specifies a directory or other group of files, the
* server should transfer a list of files in the specified directory.
* If the pathname specifies a file then the server should send current
* information on the file. A null argument implies the user's
* current working or default directory.
* @param pathname the context pathname, or null
*/
public InputStream list(String pathname)
throws IOException
{
if (dtp == null || transferMode == MODE_STREAM)
{
initialiseDTP();
}
if (pathname == null)
{
send(LIST);
}
else
{
String cmd = LIST + ' ' + pathname;
send(cmd);
}
FTPResponse response = getResponse();
switch (response.getCode())
{
case 125: // Data connection already open; transfer starting
case 150: // File status okay; about to open data connection
return dtp.getInputStream();
default:
throw new FTPException(response);
}
}
/**
* Returns a directory listing. The pathname should specify a
* directory or other system-specific file group descriptor; a null
* argument implies the user's current working or default directory.
* @param pathname the directory pathname, or null
* @return a list of filenames(strings)
*/
public List nameList(String pathname)
throws IOException
{
if (dtp == null || transferMode == MODE_STREAM)
{
initialiseDTP();
}
if (pathname == null)
{
send(NLST);
}
else
{
String cmd = NLST + ' ' + pathname;
send(cmd);
}
FTPResponse response = getResponse();
switch (response.getCode())
{
case 125: // Data connection already open; transfer starting
case 150: // File status okay; about to open data connection
InputStream in = dtp.getInputStream();
in = new BufferedInputStream(in);
in = new CRLFInputStream(in); // TODO ensure that TYPE is correct
LineInputStream li = new LineInputStream(in);
List ret = new ArrayList();
for (String line = li.readLine();
line != null;
line = li.readLine())
{
ret.add(line);
}
li.close();
return ret;
default:
throw new FTPException(response);
}
}
/**
* Returns the type of operating system at the server.
*/
public String system()
throws IOException
{
send(SYST);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 215:
String message = response.getMessage();
int end = message.indexOf(' ');
if (end == -1)
{
return message;
}
else
{
return message.substring(0, end);
}
default:
throw new FTPException(response);
}
}
/**
* Does nothing.
* This method can be used to ensure that the connection does not time
* out.
*/
public void noop()
throws IOException
{
send(NOOP);
FTPResponse response = getResponse();
switch (response.getCode())
{
case 200:
break;
default:
throw new FTPException(response);
}
}
// -- I/O --
/**
* Sends the specified command line to the server.
* The CRLF sequence is automatically appended.
* @param cmd the command line to send
*/
protected void send(String cmd)
throws IOException
{
byte[] data = cmd.getBytes(US_ASCII);
out.write(data);
out.writeln();
out.flush();
}
/**
* Reads the next response from the server.
* If the server sends the "transfer complete" code, this is handled here,
* and the next response is passed to the caller.
*/
protected FTPResponse getResponse()
throws IOException
{
FTPResponse response = readResponse();
if (response.getCode() == 226)
{
if (dtp != null)
{
dtp.transferComplete();
}
response = readResponse();
}
return response;
}
/**
* Reads and parses the next response from the server.
*/
protected FTPResponse readResponse()
throws IOException
{
String line = in.readLine();
if (line == null)
{
throw new ProtocolException( "EOF");
}
if (line.length() < 4)
{
throw new ProtocolException(line);
}
int code = parseCode(line);
if (code == -1)
{
throw new ProtocolException(line);
}
char c = line.charAt(3);
if (c == ' ')
{
return new FTPResponse(code, line.substring(4));
}
else if (c == '-')
{
StringBuffer buf = new StringBuffer(line.substring(4));
buf.append('\n');
while(true)
{
line = in.readLine();
if (line == null)
{
throw new ProtocolException("EOF");
}
if (line.length() >= 4 &&
line.charAt(3) == ' ' &&
parseCode(line) == code)
{
return new FTPResponse(code, line.substring(4),
buf.toString());
}
else
{
buf.append(line);
buf.append('\n');
}
}
}
else
{
throw new ProtocolException(line);
}
}
/*
* Parses the 3-digit numeric code at the beginning of the given line.
* Returns -1 on failure.
*/
static final int parseCode(String line)
{
char[] c = { line.charAt(0), line.charAt(1), line.charAt(2) };
int ret = 0;
for (int i = 0; i < 3; i++)
{
int digit =((int) c[i]) - 0x30;
if (digit < 0 || digit > 9)
{
return -1;
}
// Computing integer powers is way too expensive in Java!
switch (i)
{
case 0:
ret +=(100 * digit);
break;
case 1:
ret +=(10 * digit);
break;
case 2:
ret += digit;
break;
}
}
return ret;
}
}
/* FTPException.java --
Copyright (C) 2003. 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.IOException;
/**
* An FTP control exception.
*
* @author Chris Burdess (dog@gnu.org)
*/
public class FTPException
extends IOException
{
/**
* The response that provoked this exception.
*/
protected final FTPResponse response;
/**
* Constructs a new FTP exception.
* @param response the response that provoked this exception
*/
public FTPException(FTPResponse response)
{
super(response.getMessage());
this.response = response;
}
/**
* Returns the response that provoked this exception.
*/
public FTPResponse getResponse()
{
return response;
}
}
/* FTPResponse.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
/**
* An FTP control response.
*
* @author Chris Burdess (dog@gnu.org)
*/
public final class FTPResponse
{
/**
* The 3-digit status code.
*/
protected final int code;
/**
* The human-readable message.
*/
protected final String message;
/**
* Multiline data, if present.
*/
protected final String data;
/**
* Constructs a new FTP response.
* @param code the status code
* @param message the message
*/
public FTPResponse(int code, String message)
{
this(code, message, null);
}
/**
* Constructs a new multiline FTP response.
* @param code the status code
* @param message the message
* @param data multiline data
*/
public FTPResponse(int code, String message, String data)
{
this.code = code;
this.message = message;
this.data = data;
}
/**
* Returns the 3-digit status code.
*/
public int getCode()
{
return code;
}
/**
* Returns the human-readable message.
*/
public String getMessage()
{
return message;
}
/**
* Returns the multiline data, or null if there was no such data.
*/
public String getData()
{
return data;
}
}
/* FTPURLConnection.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import gnu.java.net.GetLocalHostAction;
import gnu.java.security.action.GetPropertyAction;
import java.io.FileNotFoundException;
import java.io.FilterInputStream;
import java.io.FilterOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.HashMap;
import java.util.Map;
/**
* An FTP URL connection.
*
* @author Chris Burdess (dog@gnu.org)
*/
public class FTPURLConnection
extends URLConnection
{
/**
* The connection managing the protocol exchange.
*/
protected FTPConnection connection;
protected boolean passive;
protected int representationType;
protected int fileStructure;
protected int transferMode;
/**
* Constructs an FTP connection to the specified URL.
* @param url the URL
*/
public FTPURLConnection(URL url)
{
super(url);
passive = true;
representationType = FTPConnection.TYPE_BINARY;
fileStructure = -1;
transferMode = -1;
}
/**
* Establishes the connection.
*/
public void connect()
throws IOException
{
if (connected)
{
return;
}
String host = url.getHost();
int port = url.getPort();
String username = url.getUserInfo();
String password = null;
if (username != null)
{
int ci = username.indexOf(':');
if (ci != -1)
{
password = username.substring(ci + 1);
username = username.substring(0, ci);
}
}
else
{
username = "anonymous";
PrivilegedAction a = new GetPropertyAction("user.name");
String systemUsername =(String) AccessController.doPrivileged(a);
a = new GetLocalHostAction();
InetAddress localhost =(InetAddress) AccessController.doPrivileged(a);
password = systemUsername + "@" +
((localhost == null) ? "localhost" : localhost.getHostName());
}
connection = new FTPConnection(host, port);
if (!connection.authenticate(username, password))
{
throw new SecurityException("Authentication failed");
}
connection.setPassive(passive);
if (representationType != -1)
{
connection.setRepresentationType(representationType);
}
if (fileStructure != -1)
{
connection.setFileStructure(fileStructure);
}
if (transferMode != -1)
{
connection.setTransferMode(transferMode);
}
}
/**
* This connection supports doInput.
*/
public void setDoInput(boolean doinput)
{
doInput = doinput;
}
/**
* This connection supports doOutput.
*/
public void setDoOutput(boolean dooutput)
{
doOutput = dooutput;
}
/**
* Returns an input stream that reads from this open connection.
*/
public InputStream getInputStream()
throws IOException
{
if (!connected)
{
connect();
}
String path = url.getPath();
String filename = null;
int lsi = path.lastIndexOf('/');
if (lsi != -1)
{
filename = path.substring(lsi + 1);
path = path.substring(0, lsi);
if (!connection.changeWorkingDirectory(path))
{
throw new FileNotFoundException(path);
}
}
if (filename != null && filename.length() > 0)
{
return this.new ClosingInputStream(connection.retrieve(filename));
}
else
{
return this.new ClosingInputStream(connection.list(null));
}
}
/**
* Returns an output stream that writes to this connection.
*/
public OutputStream getOutputStream()
throws IOException
{
if (!connected)
{
connect();
}
String dir = url.getPath();
String filename = url.getFile();
if (!connection.changeWorkingDirectory(dir))
{
throw new FileNotFoundException(dir);
}
if (filename != null)
{
return this.new ClosingOutputStream(connection.store(filename));
}
else
{
throw new FileNotFoundException(filename);
}
}
public String getRequestProperty(String key)
{
if ("passive".equals(key))
{
return Boolean.toString(passive);
}
else if ("representationType".equals(key))
{
switch (representationType)
{
case FTPConnection.TYPE_ASCII:
return "ASCII";
case FTPConnection.TYPE_EBCDIC:
return "EBCDIC";
case FTPConnection.TYPE_BINARY:
return "BINARY";
}
}
else if ("fileStructure".equals(key))
{
switch (fileStructure)
{
case FTPConnection.STRUCTURE_FILE:
return "FILE";
case FTPConnection.STRUCTURE_RECORD:
return "RECORD";
case FTPConnection.STRUCTURE_PAGE:
return "PAGE";
}
}
else if ("transferMode".equals(key))
{
switch (transferMode)
{
case FTPConnection.MODE_STREAM:
return "STREAM";
case FTPConnection.MODE_BLOCK:
return "BLOCK";
case FTPConnection.MODE_COMPRESSED:
return "COMPRESSED";
}
}
return null;
}
public Map getRequestProperties()
{
Map map = new HashMap();
addRequestPropertyValue(map, "passive");
addRequestPropertyValue(map, "representationType");
addRequestPropertyValue(map, "fileStructure");
addRequestPropertyValue(map, "transferMode");
return map;
}
private void addRequestPropertyValue(Map map, String key)
{
String value = getRequestProperty(key);
map.put(key, value);
}
public void setRequestProperty(String key, String value)
{
if (connected)
{
throw new IllegalStateException();
}
if ("passive".equals(key))
{
passive = Boolean.valueOf(value).booleanValue();
}
else if ("representationType".equals(key))
{
if ("A".equalsIgnoreCase(value) ||
"ASCII".equalsIgnoreCase(value))
{
representationType = FTPConnection.TYPE_ASCII;
}
else if ("E".equalsIgnoreCase(value) ||
"EBCDIC".equalsIgnoreCase(value))
{
representationType = FTPConnection.TYPE_EBCDIC;
}
else if ("I".equalsIgnoreCase(value) ||
"BINARY".equalsIgnoreCase(value))
{
representationType = FTPConnection.TYPE_BINARY;
}
else
{
throw new IllegalArgumentException(value);
}
}
else if ("fileStructure".equals(key))
{
if ("F".equalsIgnoreCase(value) ||
"FILE".equalsIgnoreCase(value))
{
fileStructure = FTPConnection.STRUCTURE_FILE;
}
else if ("R".equalsIgnoreCase(value) ||
"RECORD".equalsIgnoreCase(value))
{
fileStructure = FTPConnection.STRUCTURE_RECORD;
}
else if ("P".equalsIgnoreCase(value) ||
"PAGE".equalsIgnoreCase(value))
{
fileStructure = FTPConnection.STRUCTURE_PAGE;
}
else
{
throw new IllegalArgumentException(value);
}
}
else if ("transferMode".equals(key))
{
if ("S".equalsIgnoreCase(value) ||
"STREAM".equalsIgnoreCase(value))
{
transferMode = FTPConnection.MODE_STREAM;
}
else if ("B".equalsIgnoreCase(value) ||
"BLOCK".equalsIgnoreCase(value))
{
transferMode = FTPConnection.MODE_BLOCK;
}
else if ("C".equalsIgnoreCase(value) ||
"COMPRESSED".equalsIgnoreCase(value))
{
transferMode = FTPConnection.MODE_COMPRESSED;
}
else
{
throw new IllegalArgumentException(value);
}
}
}
public void addRequestProperty(String key, String value)
{
setRequestProperty(key, value);
}
class ClosingInputStream
extends FilterInputStream
{
ClosingInputStream(InputStream in)
{
super(in);
}
public void close()
throws IOException
{
super.close();
connection.logout();
}
}
class ClosingOutputStream
extends FilterOutputStream
{
ClosingOutputStream(OutputStream out)
{
super(out);
}
public void close()
throws IOException
{
super.close();
connection.logout();
}
}
}
/* Handler.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
/**
* An FTP URL stream handler.
*
* @author Chris Burdess (dog@gnu.org)
*/
public class Handler
extends URLStreamHandler
{
protected int getDefaultPort()
{
return FTPConnection.FTP_PORT;
}
/**
* Returns an FTPURLConnection for the given URL.
*/
public URLConnection openConnection(URL url)
throws IOException
{
return new FTPURLConnection(url);
}
}
/* PassiveModeDTP.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* A passive mode FTP data transfer process.
* This connects to the host specified and proxies the resulting socket's
* input and output streams.
*
* @author Chris Burdess (dog@gnu.org)
*/
final class PassiveModeDTP
implements DTP
{
final String address;
final int port;
Socket socket;
DTPInputStream in;
DTPOutputStream out;
boolean completed;
boolean inProgress;
int transferMode;
PassiveModeDTP(String address, int port, InetAddress localhost,
int connectionTimeout, int timeout)
throws IOException
{
this.address = address;
this.port = port;
completed = false;
inProgress = false;
socket = new Socket();
InetSocketAddress remote = new InetSocketAddress(address, port);
InetSocketAddress local = new InetSocketAddress(localhost, port + 1);
socket.bind(local);
if (connectionTimeout > 0)
{
socket.connect(remote, connectionTimeout);
}
else
{
socket.connect(remote);
}
if (timeout > 0)
{
socket.setSoTimeout(timeout);
}
}
/**
* Returns an input stream from which a remote file can be read.
*/
public InputStream getInputStream()
throws IOException
{
if (inProgress)
{
throw new IOException("Transfer in progress");
}
switch (transferMode)
{
case FTPConnection.MODE_STREAM:
in = new StreamInputStream(this, socket.getInputStream());
break;
case FTPConnection.MODE_BLOCK:
in = new BlockInputStream(this, socket.getInputStream());
break;
case FTPConnection.MODE_COMPRESSED:
in = new CompressedInputStream(this, socket.getInputStream());
break;
default:
throw new IllegalStateException("Invalid transfer mode");
}
in.setTransferComplete(false);
return in;
}
/**
* Returns an output stream to which a local file can be written for
* upload.
*/
public OutputStream getOutputStream()
throws IOException
{
if (inProgress)
{
throw new IOException("Transfer in progress");
}
switch (transferMode)
{
case FTPConnection.MODE_STREAM:
out = new StreamOutputStream(this, socket.getOutputStream());
break;
case FTPConnection.MODE_BLOCK:
out = new BlockOutputStream(this, socket.getOutputStream());
break;
case FTPConnection.MODE_COMPRESSED:
out = new CompressedOutputStream(this, socket.getOutputStream());
break;
default:
throw new IllegalStateException("Invalid transfer mode");
}
out.setTransferComplete(false);
return out;
}
public void setTransferMode(int mode)
{
transferMode = mode;
}
public void complete()
{
completed = true;
if (!inProgress)
{
transferComplete();
}
}
public boolean abort()
{
completed = true;
transferComplete();
return inProgress;
}
/*
* Called by DTPInputStream or DTPOutputStream when end of
* stream is reached.
*/
public void transferComplete()
{
if (in != null)
{
in.setTransferComplete(true);
}
if (out != null)
{
out.setTransferComplete(true);
}
inProgress = false;
completed = completed ||(transferMode == FTPConnection.MODE_STREAM);
if (completed && socket != null)
{
try
{
socket.close();
}
catch (IOException e)
{
}
}
}
}
/* StreamInputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.InputStream;
import java.io.IOException;
/**
* A DTP input stream that implements the FTP stream data transfer mode.
*
* @author Chris Burdess (dog@gnu.org)
*/
class StreamInputStream
extends DTPInputStream
{
StreamInputStream(DTP dtp, InputStream in)
{
super(dtp, in);
}
public int read()
throws IOException
{
if (transferComplete)
{
return -1;
}
int c = in.read();
if (c == -1)
{
close();
}
return c;
}
public int read(byte[] buf)
throws IOException
{
return read(buf, 0, buf.length);
}
public int read(byte[] buf, int off, int len)
throws IOException
{
if (transferComplete)
{
return -1;
}
int l = in.read(buf, off, len);
if (l == -1)
{
close();
}
return l;
}
}
/* StreamOutputStream.java --
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.net.protocol.ftp;
import java.io.IOException;
import java.io.OutputStream;
/**
* A DTP output stream that implements the FTP stream transfer mode.
*
* @author Chris Burdess (dog@gnu.org)
*/
class StreamOutputStream
extends DTPOutputStream
{
StreamOutputStream(DTP dtp, OutputStream out)
{
super(dtp, out);
}
public void write(int c)
throws IOException
{
if (transferComplete)
{
return;
}
out.write(c);
}
public void write(byte[] b)
throws IOException
{
write(b, 0, b.length);
}
public void write(byte[] b, int off, int len)
throws IOException
{
if (transferComplete)
{
return;
}
out.write(b, off, len);
}
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!-- package.html - describes classes in gnu.java.net.protocol.ftp package.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. -->
<html>
<head><title>GNU Classpath - gnu.java.net.protocol.ftp</title></head>
<body>
<p>
This package contains an FTP client. It can handle both active and passive
mode connections and the various transfer modes and representation types.
</p>
<p>
Interaction with the server is via a simple stream interface. Only one
concurrent stream (input or output) is supported.
</p>
<p>
The control connection to the server can be protected using TLS
(the starttls method).
</p>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment