[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