http_remove_hop_headers
"Nikos Balkanas" <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <003301c9872b$31c5a630$02b2a8c0@tardis> |
Hi,
This code appears in gwlib/http.c and is called by return_reply as part of resetting headers for returning them to the mobile. It seems to me that the first part is a needless loop, for something that follows, http_header_remove_all(headers, "Connection"). I would welcome if you could shed some light on why this is done so. The bold part creates and deatroys lists and seems to me that the only thing it does is to destroy the "Connection:" headers, which are destroyed anyway in the next call. Can it be removed safely, or am I missing something obvious?
Thanx,
Nikos
void http_remove_hop_headers(List *headers)
{
Octstr *h;
List *connection_headers;
gwlib_assert_init();
gw_assert(headers != NULL);
/*
* The hop-by-hop headers are a standard list, plus those named
* in the Connection header(s).
*/
connection_headers = http_header_find_all(headers, "Connection");
while ((h = gwlist_consume(connection_headers))) {
List *hop_headers;
Octstr *e;
octstr_delete(h, 0, strlen("Connection:"));
hop_headers = http_header_split_value(h);
octstr_destroy(h);
while ((e = gwlist_consume(hop_headers))) {
http_header_remove_all(headers, octstr_get_cstr(e));
octstr_destroy(e);
}
gwlist_destroy(hop_headers, NULL);
}
gwlist_destroy(connection_headers, NULL);
http_header_remove_all(headers, "Connection");
http_header_remove_all(headers, "Keep-Alive");
http_header_remove_all(headers, "Proxy-Authenticate");
http_header_remove_all(headers, "Proxy-Authorization");
http_header_remove_all(headers, "TE");
http_header_remove_all(headers, "Trailers");
http_header_remove_all(headers, "Transfer-Encoding");
http_header_remove_all(headers, "Upgrade");
}