--- 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; }