[prev in list] [next in list] [prev in thread] [next in thread]
List: slide-dev
Subject: cvs commit: jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib State.java WebdavClient.java
From: remm () locus ! apache ! org
Date: 2000-06-20 0:22:37
[Download RAW message or body]
remm 00/06/19 17:22:37
Modified: . build.xml
src/clients/webdav/src/org/apache/webdav/lib State.java
WebdavClient.java
Log:
- Added build targets for the DAV client
- Worked on authentication support in the DAV client
Revision Changes Path
1.17 +103 -26 jakarta-slide/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-slide/build.xml,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- build.xml 2000/06/19 18:47:14 1.16
+++ build.xml 2000/06/20 00:22:36 1.17
@@ -1,24 +1,24 @@
<project name="Slide" default="main" basedir=".">
- <property name="name" value="Jakarta-Slide" />
- <property name="year" value="2000" />
- <property name="version" value="0.9dev" />
- <property name="project" value="jakarta-slide" />
- <property name="final.name" value="${project}-${version}" />
- <property name="ant.home" value="../jakarta-ant" />
- <property name="build.compiler" value="classic" />
- <property name="catalina.build" value="../build/catalina" />
- <property name="catalina.dist" value="../dist/catalina" />
+ <property name="name" value="Jakarta-Slide" />
+ <property name="year" value="2000" />
+ <property name="version" value="0.9dev" />
+ <property name="project" value="jakarta-slide" />
+ <property name="final.name" value="${project}-${version}" />
+ <property name="ant.home" value="../jakarta-ant" />
+ <property name="build.compiler" value="classic" />
+ <property name="catalina.build" value="../build/catalina" />
+ <property name="catalina.dist" value="../dist/catalina" />
<property name="servlet.jar"
value="../jakarta-servletapi/lib/servlet.jar" />
- <property name="tomcat.build" value="../build/tomcat" />
- <property name="avalon.dist" value="../dist/avalon" />
- <property name="slide.build" value="../build/slide" />
- <property name="slide.dist" value="../dist/slide" />
- <property name="dav.dist" value="../dist/dav" />
- <property name="webdav.build" value="../build/webdav" />
- <property name="webdav.dist" value="../dist/webdav" />
+ <property name="tomcat.build" value="../build/tomcat" />
+ <property name="avalon.dist" value="../dist/avalon" />
+ <property name="slide.build" value="../build/slide" />
+ <property name="slide.dist" value="../dist/slide" />
+ <property name="dav.dist" value="../dist/dav" />
+ <property name="webdavclient.build" value="../build/webdavclient" />
+ <property name="webdavclient.dist" value="../dist/webdavclient" />
<!-- =================================================================== -->
@@ -71,25 +71,104 @@
<!-- =================================================================== -->
<!-- Prepare WebDAV client -->
<!-- =================================================================== -->
- <target name="prepare-webdav">
- <mkdir dir="${webdav.build}"/>
- <mkdir dir="${webdav.build}/classes"/>
- <mkdir dir="${webdav.build}/conf"/>
- <mkdir dir="${webdav.build}/logs"/>
+ <target name="webdav-client-prepare">
+ <mkdir dir="${webdavclient.build}" />
+ <mkdir dir="${webdavclient.build}/classes" />
+ <mkdir dir="${webdavclient.build}/conf" />
+ <mkdir dir="${webdavclient.build}/logs" />
+ <mkdir dir="${webdavclient.build}/doc" />
</target>
<!-- =================================================================== -->
<!-- Build WebDAV client -->
<!-- =================================================================== -->
- <target name="webdav" depends="prepare-webdav">
- <javac srcdir="src/clients/webdav/src" destdir="${webdav.build}/classes"
+ <target name="webdav-client" depends="webdav-client-prepare">
+ <javac srcdir="src/clients/webdav/src"
+ destdir="${webdavclient.build}/classes"
debug="on" deprecation="on"
excludes="**/CVS/**,**/package.html" />
</target>
<!-- =================================================================== -->
+ <!-- Build WebDAV client (without debug) -->
+ <!-- =================================================================== -->
+ <target name="webdav-client-no-debug" depends="webdav-client-prepare">
+ <javac srcdir="src/clients/webdav/src"
+ destdir="${webdavclient.build}/classes"
+ debug="off" deprecation="off"
+ excludes="**/CVS/**,**/package.html" />
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Clean build and distribution directories of the DAV client -->
+ <!-- =================================================================== -->
+ <target name="webdav-client-clean">
+ <deltree dir="${webdavclient.build}"/>
+ <deltree dir="${webdavclient.dist}"/>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Prepare WebDAV client distribution -->
+ <!-- =================================================================== -->
+ <target name="prepare-webdav-client-dist">
+ <mkdir dir="${webdavclient.dist}" />
+ <mkdir dir="${webdavclient.dist}/lib" />
+ <mkdir dir="${webdavclient.dist}/conf" />
+ <mkdir dir="${webdavclient.dist}/logs" />
+ <mkdir dir="${webdavclient.dist}/doc" />
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Javadoc of the WebDAV client -->
+ <!-- =================================================================== -->
+ <target name="webdav-client-javadoc">
+ <property name="copyright" value="" />
+ <javadoc sourcepath="src/clients/webdav/src"
+ destdir="${webdavclient.build}/doc"
+ dir="." doctitle="Slide WebDAV Client JavaDoc" public="true"
+ noindex="false" author="true"
+ packagenames="org.apache.webdav.lib.*" />
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Build a DAV client distribution -->
+ <!-- =================================================================== -->
+ <target name="webdav-client-dist"
+ depends="webdav-client-no-debug, prepare-webdav-client-dist,
+ webdav-client-javadoc">
+
+ <copyfile src="src/etc/MANIFEST.MF"
+ dest="${webdavclient.build}/classes/MANIFEST.MF" />
+ <replace file="${webdavclient.build}/classes/MANIFEST.MF"
+ token="$$VERSION$$" value="${version}" />
+
+ <echo message="Building DAV Client library JAR file" />
+ <jar jarfile="${webdavclient.dist}/lib/webdavlib.jar"
+ basedir="${webdavclient.build}/classes"
+ manifest="${webdavclient.build}/classes/MANIFEST.MF"
+ includes="LICENSE,README,CHANGELOG,org/apache/webdav/lib/**" />
+
+ <echo message="Building DAV Client JAR" />
+ <jar jarfile="${webdavclient.dist}/lib/webdav.jar"
+ basedir="${webdavclient.build}/classes"
+ manifest="${webdavclient.build}/classes/MANIFEST.MF"
+ includes="LICENSE,README,CHANGELOG,org/apache/webdav/**" />
+
+ <echo message="Building documentation JAR" />
+ <jar jarfile="${webdavclient.dist}/doc/doc.jar"
+ basedir="${webdavclient.build}/doc"
+ manifest="${webdavclient.build}/classes/MANIFEST.MF" />
+
+ </target>
+
+
+ <!-- =================================================================== -->
<!-- Build some examples -->
<!-- =================================================================== -->
<target name="examples" depends="main">
@@ -105,8 +184,6 @@
<deltree dir="${slide.build}"/>
<deltree dir="${slide.dist}"/>
<deltree dir="${dav.dist}"/>
- <deltree dir="${webdav.build}"/>
- <deltree dir="${webdav.dist}"/>
</target>
@@ -169,7 +246,7 @@
</target>
-
+
<!-- =================================================================== -->
<!-- Prepare DAV distribution directories -->
<!-- =================================================================== -->
1.2 +29 -3 \
jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/State.java
Index: State.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/State.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- State.java 2000/06/19 07:31:07 1.1
+++ State.java 2000/06/20 00:22:36 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/State.java,v \
1.1 2000/06/19 07:31:07 remm Exp $
- * $Revision: 1.1 $
- * $Date: 2000/06/19 07:31:07 $
+ * $Header: /home/cvs/jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/State.java,v \
1.2 2000/06/20 00:22:36 remm Exp $ + * $Revision: 1.2 $
+ * $Date: 2000/06/20 00:22:36 $
*
* ====================================================================
*
@@ -83,6 +83,12 @@
protected Hashtable lockTokens = new Hashtable();
+ /**
+ * Authenticate token.
+ */
+ protected String authenticateToken = null;
+
+
// ------------------------------------------------------------- Properties
@@ -144,6 +150,26 @@
result = new Vector();
return result.elements();
+ }
+
+
+ /**
+ * Authenticate token setter.
+ *
+ * @param authenticateToken Authenticate token
+ */
+ public void setAuthenticateToken(String authenticateToken) {
+ this.authenticateToken = authenticateToken;
+ }
+
+
+ /**
+ * Authenticate token accessor.
+ *
+ * @return String authenticate token
+ */
+ public String getAuthenticateToken() {
+ return authenticateToken;
}
1.2 +114 -37 \
jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/WebdavClient.java
Index: WebdavClient.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/WebdavClient.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- WebdavClient.java 2000/06/19 07:31:07 1.1
+++ WebdavClient.java 2000/06/20 00:22:36 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/WebdavClient.java,v \
1.1 2000/06/19 07:31:07 remm Exp $
- * $Revision: 1.1 $
- * $Date: 2000/06/19 07:31:07 $
+ * $Header: /home/cvs/jakarta-slide/src/clients/webdav/src/org/apache/webdav/lib/WebdavClient.java,v \
1.2 2000/06/20 00:22:36 remm Exp $ + * $Revision: 1.2 $
+ * $Date: 2000/06/20 00:22:36 $
*
* ====================================================================
*
@@ -119,6 +119,18 @@
protected Credentials credentials;
+ /**
+ * Socket input stream.
+ */
+ protected InputStream input;
+
+
+ /**
+ * Socket output stream.
+ */
+ protected OutputStream output;
+
+
// ------------------------------------------------------------- Properties
@@ -143,60 +155,65 @@
/**
* Execute a DAV method.
+ *
+ * @param method WebDAV method to execute
*/
public void executeMethod(WebdavMethod method)
throws IOException, WebdavException {
-
- InputStream is = socket.getInputStream();
- OutputStream os = socket.getOutputStream();
- // TODO : Wrap those two !
+ sendRequest(method);
- String requestLine = method.generateRequestLine();
- method.generateHeaders(state);
- Enumeration headersList = method.getHeaders();
- String query = method.generateQuery();
- if (query == null)
- query = new String();
-
- // Sending request line
+ // Parsing response
- os.write(requestLine.getBytes());
- // TEMP CODE : Writing content length
- os.write(("Content-Length: " + query.length() + "\r\n").getBytes());
+ // Parse status line
+ parseStatusLine(readLine(input), method);
- // Writing HTTP headers
+ // Parse headers
+ Hashtable responseHeaders = parseHeaders(input);
- while (headersList.hasMoreElements()) {
- os.write(headersList.nextElement().toString().getBytes());
+ // Retrieve the authenticate challenge, if any (needed in case of a
+ // digest challenge, for which the header is not constant)
+ Header authenticateChallenge =
+ (Header) responseHeaders.get("www-authenticate");
+ if (authenticateChallenge != null) {
+ state.setAuthenticateToken(authenticateChallenge.getValue());
}
-
- os.write("\r\n".getBytes());
-
- // Writing query
-
- os.write(query.getBytes());
- // Parsing response
-
- // Parse status line
- byte[] buffer = new byte[4096];
- String statusLine = readLine(is);
-
- parseStatusLine(statusLine, method);
+ if (method.getStatusCode() == WebdavStatus.SC_UNAUTHORIZED) {
+ if (state.getAuthenticateToken() != null) {
+
+ // Resumit the request
+ System.out.println("Resubmit request using challenge : "
+ + state.getAuthenticateToken());
+
+ // String authenticateResponse =
+ // generateAuthenticateResponse(state.getAuthenticateToken());
+ // sendRequest(method, authenticateResponse);
+ // parseStatusLine(readLine(input), method);
+ // Parse headers
+ // responseHeaders = parseHeaders(input);
+ // authenticateChallenge =
+ // (Header) responseHeaders.get("www-authenticate");
+ // if (authenticateChallenge != null) {
+ // state.setAuthenticateToken(authenticateChallenge.getValue());
+ // }
+
+ } else {
+ throw new WebdavException("Unable to authenticate");
+ }
+ }
- // Parse headers
- Hashtable responseHeaders = parseHeaders(is);
method.processResponseHeaders(responseHeaders.elements());
// Parse response
ResponseInputStream responseInputStream =
- new ResponseInputStream(is, responseHeaders);
+ new ResponseInputStream(input, responseHeaders);
method.parseResponse(responseInputStream);
// TEMP TEST CODE ...
System.out.println("Response : ");
+ byte[] buffer = new byte[4096];
int nb = 0;
while (true) {
nb = responseInputStream.read(buffer);
@@ -227,6 +244,8 @@
state = new State();
socket = new Socket(host, port);
+ input = socket.getInputStream();
+ output = socket.getOutputStream();
}
@@ -239,12 +258,70 @@
state = null;
// Close socket
+ input.close();
+ output.close();
socket.close();
}
// -------------------------------------------------------- Private Methods
+
+
+ /**
+ * Send a WebDAV request.
+ *
+ * @param method WebDAV method to execute
+ */
+ private void sendRequest(WebdavMethod method)
+ throws IOException, WebdavException {
+ sendRequest(method, null);
+ }
+
+
+ /**
+ * Send a WebDAV request.
+ *
+ * @param method WebDAV method to execute
+ * @param authenticateHeader WWW-Authenticate header value
+ */
+ private void sendRequest(WebdavMethod method, String authenticateHeader)
+ throws IOException, WebdavException {
+
+ String requestLine = method.generateRequestLine();
+ method.generateHeaders(state);
+ Enumeration headersList = method.getHeaders();
+ String query = method.generateQuery();
+ if (query == null)
+ query = new String();
+
+ // Sending request line
+
+ output.write(requestLine.getBytes());
+ // TEMP CODE : Writing content length
+ output.write(("Content-Length: "
+ + query.length() + "\r\n").getBytes());
+
+ if (state.getAuthenticateToken() != null) {
+
+ // TODO : Return an appropriate response to the challenge
+ System.out.println("Answer to the challenge");
+
+ }
+
+ // Writing HTTP headers
+
+ while (headersList.hasMoreElements()) {
+ output.write(headersList.nextElement().toString().getBytes());
+ }
+
+ output.write("\r\n".getBytes());
+
+ // Writing query
+
+ output.write(query.getBytes());
+
+ }
/**
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic