remm        01/04/18 11:12:38

  Modified:    src/webdav/client/src/org/apache/webdav/lib
                        WebdavClient.java
  Log:
  - Adds support for expectations (tested with IIS 5).
  
  Revision  Changes    Path
  1.37      +58 -6     
jakarta-slide/src/webdav/client/src/org/apache/webdav/lib/WebdavClient.java
  
  Index: WebdavClient.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/client/src/org/apache/webdav/lib/WebdavClient.java,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- WebdavClient.java 2001/04/14 06:49:43     1.36
  +++ WebdavClient.java 2001/04/18 18:12:35     1.37
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-slide/src/webdav/client/src/org/apache/webdav/lib/WebdavClient.java,v
 1.36 2001/04/14 06:49:43 remm Exp $
  - * $Revision: 1.36 $
  - * $Date: 2001/04/14 06:49:43 $
  + * $Header: 
/home/cvs/jakarta-slide/src/webdav/client/src/org/apache/webdav/lib/WebdavClient.java,v
 1.37 2001/04/18 18:12:35 remm Exp $
  + * $Revision: 1.37 $
  + * $Date: 2001/04/18 18:12:35 $
    *
    * ====================================================================
    *
  @@ -333,6 +333,7 @@
           Hashtable responseHeaders = null;
   
           boolean methodProcessed = false;
  +        boolean sentRequestBody = false;
   
           openConnection();
   
  @@ -341,9 +342,16 @@
               try {
   
                   responseHeaders = null;
  +                sentRequestBody = false;
   
  -                sendRequest(method);
  +                // Send the request header except if the 
  +                String query = sendRequestHeader(method);
   
  +                if ((!http11) || (!method.needExpectation())) {
  +                    sendRequestBody(method, query);
  +                    sentRequestBody = true;
  +                }
  +
                   boolean closeOutput = needToCloseOutput();
                   if (closeOutput) {
                       try {
  @@ -368,6 +376,25 @@
                   // Parse headers
                   responseHeaders = parseHeaders(input);
   
  +                while (method.getStatusCode() < 200) {
  +                    
  +                    if (method.getStatusCode() == WebdavStatus.SC_CONTINUE) {
  +                        if (!sentRequestBody) {
  +                            sendRequestBody(method, query);
  +                            sentRequestBody = true;
  +                        }
  +                    }
  +                    
  +                    statusLine = readLine(input);
  +                    if (statusLine == null)
  +                        throw new IOException("Couldn't parse status line");
  +                    parseStatusLine(statusLine, method);
  +                    
  +                    // Parse headers
  +                    responseHeaders = parseHeaders(input);
  +                    
  +                }
  +
                   // Retrieve the authenticate challenge, if any
                   // (needed in case of a digest challenge, for which the
                   // header is not constant)
  @@ -411,7 +438,9 @@
                        && (method.getStatusCode()
                            != WebdavStatus.SC_MOVED_TEMPORARILY)
                        && (method.getStatusCode()
  -                         != WebdavStatus.SC_MOVED_PERMANENTLY) ) {
  +                         != WebdavStatus.SC_MOVED_PERMANENTLY)
  +                     && (method.getStatusCode()
  +                         != WebdavStatus.SC_CONTINUE)) {
                       methodProcessed = true;
                   } else {
                       if (!methodProcessed) {
  @@ -590,7 +619,7 @@
        *
        * @param method WebDAV method to execute
        */
  -    protected void sendRequest(WebdavMethod method)
  +    protected String sendRequestHeader(WebdavMethod method)
           throws IOException, WebdavException {
   
           if (method.hasBeenUsed())
  @@ -654,6 +683,11 @@
   
           }
   
  +        // Send expectation header
  +        if (method.needExpectation()) {
  +            output.write(("Expect: 100-continue\r\n").getBytes());
  +        }
  +
           // Writing HTTP headers
   
           while (headersList.hasMoreElements()) {
  @@ -667,6 +701,19 @@
               System.out.print("\r\n");
           output.write("\r\n".getBytes());
   
  +        return query;
  +
  +    }
  +
  +
  +    /**
  +     * Send a WebDAV request.
  +     *
  +     * @param method WebDAV method to execute
  +     */
  +    protected void sendRequestBody(WebdavMethod method, String query)
  +        throws IOException, WebdavException {
  +
           // Writing request body
   
           RequestOutputStream requestOutputStream = 
  @@ -855,6 +902,11 @@
           if ((connectionHeader != null)
               && (connectionHeader.getValue().equals("close")))
               return true;
  +
  +        if ((method.getStatusCode() < 200) 
  +            || (method.getStatusCode() == WebdavStatus.SC_NO_CONTENT)
  +            || (method.getStatusCode() == WebdavStatus.SC_NOT_MODIFIED))
  +            return false;
   
           Header teHeader = (Header) responseHeaders.get("transfer-encoding");
           boolean chunk = (teHeader != null)
  
  
  

Reply via email to