Commit Graph

948 Commits

Author SHA1 Message Date
7301bf89bb Some refactoring of byte-range parsing 2020-05-26 01:50:29 +04:00
ff23b28e7c Removed unnecessary qualifier 2020-05-26 01:41:37 +04:00
931e95f391 Invalid byte ranges result in 416 responses 2020-05-26 01:40:07 +04:00
f7571b5b69 Content-Range header is set only for partial content 2020-05-25 17:42:18 +04:00
801ad18a89 ByteRange::resolve() 2020-05-25 17:27:35 +04:00
67a347c0c4 Moved byte-range parsing to byte_range.cpp 2020-05-25 17:21:10 +04:00
693905eb68 Default constructed ByteRange is a full range 2020-05-25 17:17:56 +04:00
f3e79c6b4c Introduced src/server/byte_range.cpp 2020-05-25 16:43:44 +04:00
52f207eaa6 Support for single-ended byte ranges 2020-05-25 16:37:01 +04:00
67294217a8 ByteRange::Kind 2020-05-25 16:23:44 +04:00
d111a40ce8 Response::m_byteRange 2020-05-23 20:35:22 +04:00
0c5bb3fcfe Moved ByteRange to a header file of its own 2020-05-23 20:08:53 +04:00
3fba8c20a0 Converted RequestContext::ByteRange to a class
Also renamed the `range_pair` data member of `RequestContext` to `byteRange_`
2020-05-23 19:59:47 +04:00
54db6049b7 Byte-range parsing not exposed in the header file 2020-05-23 18:58:19 +04:00
81c38d6b2b parse_byte_range() without side-effects 2020-05-23 18:53:16 +04:00
e6a86c02ae Got rid of RequestContext::accept_range 2020-05-23 17:15:42 +04:00
a0f7f32570 Re-ordered function definitions 2020-05-23 17:11:26 +04:00
c39fce8839 RequestContext::parse_byte_range() 2020-05-23 17:09:51 +04:00
de37489c53 Range header starts with a unit spec
After this commit valid ranges of the form "bytes=firstbyte-lastbyte" should
be handled correctly.
2020-05-22 17:17:31 +04:00
2a35a86de6 Fixed the size value used creating a response
In case of a partial response the size of the response is different
from the served entry size.
2020-05-22 16:49:35 +04:00
0a30a77c08 Handling of out of bound byte ranges 2020-05-22 16:46:38 +04:00
1a99bacfe3 Byte ranges are inclusive
The second component of a byte range, if present, designates the
index of the last byte to be included in the partial response.
2020-05-22 16:30:43 +04:00
94c2ab4395 Add two OPDS related mime-types to compress for HTTP 2020-05-18 08:19:51 +02:00
0f07cab920 Small HTTP header beautification 2020-05-17 20:19:19 +02:00
5f0a9d0b08 Added a comment clarifying a non-obvious case 2020-05-15 15:17:04 +04:00
54f5dbbd35 Handling of If-None-Match conditional requests 2020-05-14 17:01:22 +04:00
95a5cde359 ETags are set in the response as needed
Also added server-unit tests related to ETags in the response.
2020-05-14 17:01:22 +04:00
3d08ef43f2 HEAD request is not rejected
libmicrohttpd handles HEAD requests by dropping the body of the response
(if any). Hence letting a HEAD request through into the code that
processes GET requests is safe.

Also added server unit-tests related to the handling of HEAD requests.
2020-05-14 17:01:22 +04:00
bfa51c2d87 Refactoring: got rid of duplicate get_mime_type() 2020-04-29 18:33:25 +04:00
81e781133d Refactoring: utilized is_compressible_mime_type() 2020-04-29 18:33:01 +04:00
9ec7757efe Refactoring: smart Response::set_entry()
Response::set_entry() was upgraded from a simple setter to a method
performing certain business logic that was previously taken care of by
InternalServer::handle_content().
2020-04-29 18:22:15 +04:00
7bd7ec4937 Refactoring: preparing to move some code 2020-04-29 18:22:15 +04:00
14d8583c83 Refactoring in InternalServer::handle_content()
Deduplicated common code found in the two branches of the last
if(){}else{} statement in InternalServer::handle_content().
2020-04-29 18:22:15 +04:00
a004d96cd7 Refactoring: extracted get_range_len() 2020-04-29 18:22:15 +04:00
21c6de2f80 Refactoring: split Response::create_mhd_response()
The changes are easier to understand in ignore-white-space mode
(git diff -w, git show -w).
2020-04-29 18:22:15 +04:00
a8e78f27e1 Refactoring: extracted Response::create_mhd_response() 2020-04-29 18:22:15 +04:00
6c7ab6ff54 Refactoring: moved local variable declarations 2020-04-29 18:21:40 +04:00
659ee6ba71 Refactoring: extracted InternalServer::build_redirect() 2020-04-29 16:08:10 +04:00
83ee8dec15 Made InternalServer::get_default_response() const 2020-04-29 16:08:10 +04:00
87cbbed9e3 Refactoring: extracted is_compressible_mime_type() 2020-04-29 16:08:10 +04:00
a058520628 Refactoring: extracted get_mime_type() 2020-04-29 16:08:10 +04:00
1ef5ebfb52 Refactoring: extracted InternalServer::get_reader() 2020-04-29 16:08:10 +04:00
bbc06931ad Refactoring: extracted get_book_name() 2020-04-29 16:08:10 +04:00
2d3bf9b981 Refactoring: extracted InternalServer::homepage_data()
Also typedef'ed kainjow::mustache::data as MustacheData
2020-04-29 16:08:10 +04:00
fd80f2a89f Refactoring: extracted fullURL2LocalURL()
Also dropped RequestContex::valid_url
2020-04-29 16:08:10 +04:00
abb3dec700 Refactoring: extracted str2RequestMethod() 2020-04-29 16:08:10 +04:00
0586ef6d41 fix open external zim
Check if the parameter `pathToSave` is empty before use it otherwise the
book path is empty too, which causes crash on opening external zim files
2020-04-20 15:22:36 +02:00
9d8bf8ddcb Create the dataDirectory before returning its path. 2020-04-15 08:24:55 +02:00
4c8aad0e68 Do not use std::fstream has it doesn't support wchar path.
This is surprising, but C++11 fstream doesn't have a constructor
that take wchar as path.
So, on windows, we cannot open a stream on a path containing non ascii
char. VC++ provide an extension for that, but it is not standard and
g++ mingwin doesn't provide it.

So move all our write/read tools function to the plain old c versions,
using _wopen to open wide path on windows.
2020-04-14 18:13:35 +02:00
eb6f0f710c Correctly detetect the dataDir on windows.
We must use the wide version of the getenv to correctly handle the case
we have accents in the user directory.

This also change the default dataDirectory on windows from $APPDATA to
$APPDATA/kiwix.
2020-04-14 12:12:34 +02:00