]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
urn fixes
authorwessels <>
Sun, 7 Dec 1997 09:27:04 +0000 (09:27 +0000)
committerwessels <>
Sun, 7 Dec 1997 09:27:04 +0000 (09:27 +0000)
- object lock/unlock bugs
- request unlock bug
- reply headers weren't being parsed

src/urn.cc

index 07d459d520ae2e552ebb877b6bf11a51ab51bb26..eb42265dc64e381ae601bc950032406bd9fa362e 100644 (file)
@@ -101,20 +101,21 @@ urnStart(request_t *r, StoreEntry *e)
     urnState->entry = e;
     urnState->request = requestLink(r);
     cbdataAdd(urnState);
+    storeLockObject(urnState->entry);
     snprintf(urlres, 4096, "http://%s/uri-res/N2L?%s", r->urlpath, t+1);
     k = storeKeyPublic(urlres, METHOD_GET);
     urlres_r = urlParse(METHOD_GET, urlres);
-    urlres_r->headers = xstrdup("Accept: */*\r\n\r\n");
+    urlres_r->headers = xstrdup("Accept: text/plain\r\n\r\n");
     urlres_r->headers_sz = strlen(urlres_r->headers);
     if ((urlres_e = storeGet(k)) == NULL) {
        urlres_e = storeCreateEntry(urlres, urlres, 0, METHOD_GET);
        storeClientListAdd(urlres_e, urnState);
        protoDispatch(0, urlres_e, urlres_r);
     } else {
+        storeLockObject(urlres_e);
         storeClientListAdd(urlres_e, urnState);
     }
     urnState->urlres_e = urlres_e;
-    storeLockObject(urlres_e);
     storeClientCopy(urlres_e,
        0,
        0,
@@ -219,6 +220,7 @@ urnHandleReply(void *data, char *buf, ssize_t size)
        0,
        squid_curtime);
     storeAppend(e, hdr, strlen(hdr));
+    httpParseReplyHeaders(hdr, e->mem_obj->reply);
     if (min_w) {
        l = snprintf(line, 4096, "Location: %s\r\n", min_w->key);
         storeAppend(e, line, l);
@@ -228,7 +230,11 @@ urnHandleReply(void *data, char *buf, ssize_t size)
     storeComplete(e);
     put_free_4k_page(buf);
     stringFree(S);
+    storeUnregister(urlres_e, urnState);
     storeUnlockObject(urlres_e);
+    storeUnlockObject(urnState->entry);
+    requestUnlink(urnState->request);
+    cbdataFree(urnState);
 }
 
 static wordlist *