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