src/server/daemon/http.c

changeset 104
a8acbb12f27c
parent 102
136a76e293b5
child 118
38bf6dd8f4e7
--- a/src/server/daemon/http.c	Sat Oct 17 23:05:23 2015 +0200
+++ b/src/server/daemon/http.c	Fri Oct 23 17:28:09 2015 +0200
@@ -138,12 +138,10 @@
     header = pblock_findkeyval(pb_key_if_unmodified_since, rq->headers);
     if (header) {
         if (mtm && !util_later_than(mtm, header)) {
-            //PRTime temptime;
-            //PRStatus status = PR_ParseTimeString(header, PR_TRUE, &temptime);
-            //if (status == PR_SUCCESS) {
-            //    http_status(sn, rq, PROTOCOL_PRECONDITION_FAIL, NULL);
-            //    return REQ_ABORTED;
-            //}
+            if(util_isdate(header)) {
+                protocol_status(sn, rq, PROTOCOL_PRECONDITION_FAIL, NULL);
+                return REQ_ABORTED;
+            }
         }
     }
 
@@ -173,6 +171,26 @@
             return REQ_ABORTED;
         }
     }
+    
+    /* If-range */
+    header = pblock_findkeyval(pb_key_if_range, rq->headers);
+    char *range = pblock_findkeyval(pb_key_range, rq->headers);
+    if (range && header) {
+        int rmir = PR_FALSE;
+        if (util_isdate(header)) {
+            if (mtm && !util_later_than(mtm, header)) {
+                rmir = PR_TRUE;
+            }
+        } else {
+            if (!http_match_etag(header, etag, PR_TRUE)) {
+                rmir = PR_TRUE;
+            }
+        }
+        
+        if(rmir) {
+            pblock_removekey(pb_key_range, rq->headers);
+        }
+    }
 
     return REQ_PROCEED;
 }

mercurial