be more precise about encoding HTTP bodies

This commit is contained in:
Christian Grothoff 2017-09-14 21:07:43 +02:00
parent f346e89ceb
commit 1c3e787243
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 15 additions and 5 deletions

View File

@ -1496,10 +1496,11 @@ TEH_KS_handler_keys (struct TEH_RequestHandler *rh,
MHD_add_response_header (response,
MHD_HTTP_HEADER_CONTENT_TYPE,
rh->mime_type));
if (MHD_YES !=
MHD_add_response_header (response,
MHD_HTTP_HEADER_CONTENT_ENCODING,
"deflate"))
if ( (MHD_YES == comp) &&
(MHD_YES !=
MHD_add_response_header (response,
MHD_HTTP_HEADER_CONTENT_ENCODING,
"deflate")) )
{
GNUNET_break (0);
MHD_destroy_response (response);

View File

@ -53,6 +53,11 @@ TEH_RESPONSE_add_global_headers (struct MHD_Response *response)
*
* @param connection connection to check
* @return #MHD_YES if 'deflate' compression is allowed
*
* Note that right now we're ignoring q-values, which is technically
* not correct, and also do not support "*" anywhere but in a line by
* itself. This should eventually be fixed, see also
* https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
*/
int
TEH_RESPONSE_can_compress (struct MHD_Connection *connection)
@ -69,11 +74,15 @@ TEH_RESPONSE_can_compress (struct MHD_Connection *connection)
"deflate");
if (NULL == de)
return MHD_NO;
if (0 == strcmp (de,
"*"))
return MHD_YES;
if ( ( (de == ae) ||
( de[-1] == ',') ||
(de[-1] == ' ') ) &&
( (de[strlen ("deflate")] == '\0') ||
(de[strlen ("deflate")] == ',') ) )
(de[strlen ("deflate")] == ',') ||
(de[strlen ("deflate")] == ';') ) )
return MHD_YES;
return MHD_NO;
}