-const char jcc_rcs[] = "$Id: jcc.c,v 1.176 2008/05/10 11:37:57 fabiankeil Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.180 2008/05/21 15:26:32 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jcc.c,v $
*
* Revisions :
* $Log: jcc.c,v $
+ * Revision 1.180 2008/05/21 15:26:32 fabiankeil
+ * - Mark csp as immutable for send_crunch_response().
+ * - Fix comment spelling.
+ *
+ * Revision 1.179 2008/05/20 20:13:32 fabiankeil
+ * Factor update_server_headers() out of sed(), ditch the
+ * first_run hack and make server_patterns_light static.
+ *
+ * Revision 1.178 2008/05/10 13:23:38 fabiankeil
+ * Don't provide get_header() with the whole client state
+ * structure when it only needs access to csp->iob.
+ *
+ * Revision 1.177 2008/05/10 11:51:12 fabiankeil
+ * Make the "read the rest of the headers" loop a bit more readable.
+ *
* Revision 1.176 2008/05/10 11:37:57 fabiankeil
* - Instead of logging when the IIS5 hack is enabled, log when it fails.
* - Remove useless comment.
static jb_err get_request_destination_elsewhere(struct client_state *csp, struct list *headers);
static jb_err get_server_headers(struct client_state *csp);
static const char *crunch_reason(const struct http_response *rsp);
-static void send_crunch_response(struct client_state *csp, struct http_response *rsp);
+static void send_crunch_response(const struct client_state *csp, struct http_response *rsp);
/*
* static int request_contains_null_bytes(const struct client_state *csp, char *buf, int len);
*/
int continue_hack_in_da_house = 0;
char * header;
- while (((header = get_header(csp)) != NULL) || continue_hack_in_da_house)
+ while (((header = get_header(csp->iob)) != NULL) || continue_hack_in_da_house)
{
if (header == NULL)
{
{
/*
* It's a bodyless continue response, don't
- * stop header parsing after reaching it's end.
+ * stop header parsing after reaching its end.
*
* As a result Privoxy will concatenate the
* next response's head and parse and deliver
* Returns : Nothing.
*
*********************************************************************/
-static void send_crunch_response(struct client_state *csp, struct http_response *rsp)
+static void send_crunch_response(const struct client_state *csp, struct http_response *rsp)
{
const struct http_request *http = csp->http;
char status_code[4];
return;
}
- req = get_header(csp);
+ req = get_header(csp->iob);
} while ((NULL != req) && ('\0' == *req));
init_list(headers);
for (;;)
{
- p = get_header(csp);
+ p = get_header(csp->iob);
if (p == NULL)
{
list_append_list_unique(csp->headers, headers);
destroy_list(headers);
- err = sed(client_patterns, add_client_headers, csp);
+ err = sed(csp, FILTER_CLIENT_HEADERS);
if (JB_ERR_OK != err)
{
assert(err == JB_ERR_PARSE);
csp->content_length = (size_t)(csp->iob->eod - csp->iob->cur);
}
- if (JB_ERR_OK != sed(server_patterns_light, NULL, csp))
+ if (JB_ERR_OK != update_server_headers(csp))
{
- log_error(LOG_LEVEL_FATAL, "Failed to parse server headers.");
+ log_error(LOG_LEVEL_FATAL,
+ "Failed to update server headers. after filtering.");
}
hdr = list_to_text(csp->headers);
log_error(LOG_LEVEL_FATAL, "Out of memory parsing server header");
}
- /*
- * Shouldn't happen because this was the second sed run
- * and tags are only created for the first one.
- */
- assert(!crunch_response_triggered(csp, crunchers_all));
-
if (write_socket(csp->cfd, hdr, strlen(hdr))
|| write_socket(csp->cfd, p != NULL ? p : csp->iob->cur, csp->content_length))
{
return;
}
- /* we have now received the entire header.
+ /*
+ * We have now received the entire server header,
* filter it and send the result to the client
*/
- if (JB_ERR_OK != sed(server_patterns, add_server_headers, csp))
+ if (JB_ERR_OK != sed(csp, FILTER_SERVER_HEADERS))
{
log_error(LOG_LEVEL_FATAL, "Failed to parse server headers.");
}