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)