Commit Graph

464 Commits

Author SHA1 Message Date
Wang Gao
812cb5bc3d
fix get value function (#509) 2020-06-02 19:05:04 -04:00
yhirose
aea60feb85 Code cleanup 2020-06-01 13:22:02 -04:00
yhirose
b3a4045300 Fix #503 2020-05-28 19:19:18 -04:00
yhirose
d9fe3fa020 Fix #504 2020-05-28 17:08:05 -04:00
yhirose
d8612ac02d Fixed build error... 2020-05-28 12:51:52 -04:00
yhirose
83ee6007da Fix #500 2020-05-28 12:06:11 -04:00
yhirose
3eaa769a2d Fix #481, #483, #487 2020-05-26 18:34:32 -04:00
yhirose
b91540514d Fix #494 2020-05-25 10:50:24 -04:00
yhirose
ab563ff52c Fix #496 2020-05-25 10:38:47 -04:00
yhirose
be7962f140 Fix #489 2020-05-24 15:18:34 -04:00
yhirose
630f3465a9 Deprecated set_timeout_sec, added set_connection_timeout. 2020-05-23 18:00:24 -04:00
yhirose
9af1a4a08f Fixed problem with stop on windows 2020-05-23 13:49:49 -04:00
yhirose
0654e5dab4 Changed CPPHTTPLIB_IDLE_INTERVAL_USECOND to 0 2020-05-23 08:44:03 -04:00
yhirose
62e036f253 Fixed #488 again 2020-05-22 18:24:01 -04:00
yhirose
f0adfb2e0c Fix #488 2020-05-22 12:18:07 -04:00
yhirose
139c816c16 Fixed the location of Client2 2020-05-19 21:02:58 -04:00
yhirose
29fd136afd Code cleanup and format 2020-05-16 17:35:04 -04:00
yhirose
f5598237b2 Fixed many redirects problem on Proxy 2020-05-16 17:34:03 -04:00
Daniel Ottiger
01058659ab
make write timeout configurable (like the read timeout already is) (#477)
In case we want to send a lot of data,
and the receiver is slower than the sender.

This will first fill up the receivers queues and after this
eventually also the senders queues,
until the socket is temporarily unable to accept more data to send.

select_write is done with an timeout of zero,
which makes the select call used always return immediately:
(see http://man7.org/linux/man-pages/man2/select.2.html)

This means that every marginal unavailability will make it return false
for is_writable and therefore httplib will immediately abort the transfer.

Therefore make this values configurable in the same way
as the read timeout already is.

Set the default write timeout to 5 seconds,
the same default value used for the read timeout.
2020-05-16 17:31:46 -04:00
yhirose
b9a9df4d73 Fixed problem with writing large data 2020-05-15 22:21:58 -04:00
yhirose
25aa3ca982 Added std::ostream os in DataSink. 2020-05-15 21:26:13 -04:00
yhirose
f4c5d94d74 Updated version in the User Agent string 2020-05-14 18:07:02 -04:00
yhirose
63a96aeb20 Improved Client2 interface 2020-05-14 12:51:34 -04:00
yhirose
bbb83d12c1 Removed default parameter values in Client and SSLClient constructors 2020-05-14 08:51:32 -04:00
yhirose
2d4b42b70b Removed url 2020-05-14 01:43:06 -04:00
yhirose
1919d08f71 Added Client2 2020-05-14 01:36:56 -04:00
yhirose
824c02fcd3 Code cleanup 2020-05-14 01:08:36 -04:00
yhirose
2c0613f211 Fix #472 2020-05-13 21:48:14 -04:00
Saika Fatih
803ebe1e20
Typos fixed (#474) 2020-05-12 13:18:58 -04:00
yhirose
ba685dbe48 Fixed potential infinite loop with content receiver 2020-05-10 20:45:57 -04:00
yhirose
49c4c2f9c1 Fix #459 2020-05-10 20:39:16 -04:00
yhirose
58909f5917 Fix #466 2020-05-10 15:58:53 -04:00
yhirose
5982b5c360 Fix #471 2020-05-10 14:18:03 -04:00
PixlRainbow
5bb4c12c6b
Fix #465 (#467)
update digest header username to use username parameter instead of "hello" test value
2020-05-09 08:29:08 -04:00
Daniel Ottiger
d043b18097
keepalive: support multiple post using content provider (#461) 2020-05-07 08:31:14 -04:00
yhirose
8728db7477 Apply IPV6_V6ONLY only when socket is AF_INET6 2020-05-04 22:16:43 -04:00
Daniel Ottiger
b2203bb05a
server: support dual-stack server socket (#450)
According to RFC 3493 the socket option IPV6_V6ONLY
should be off by default, see
https://tools.ietf.org/html/rfc3493#page-22 (chapter 5.3).

However this does not seem to be the case on all systems.
For instance on any Windows OS, the option is on by default.

Therefore clear this option in order to allow
an server socket which can support IPv6 and IPv4 at the same time.
2020-05-04 22:13:12 -04:00
yhirose
d45250fd88 Appled HANDLE_EINTR to send and select system calls 2020-05-01 21:38:23 -04:00
yhirose
528cacdc0d Changed CPPHTTPLIB_THREAD_POOL_COUNT back to 8. (#454) 2020-05-01 21:23:02 -04:00
Matthew DeVore
ed1b6afa10
Fix crash caused by header field regex complexity (#457) 2020-05-01 12:44:13 -04:00
yhirose
08fc7085e5 Fixed #456 2020-04-30 19:40:23 -04:00
yhirose
8333340e2c Chagned to use inline function instead of macro 2020-04-27 12:36:39 -04:00
Jan Lukavsky
b0a189e50e Sketch handling EINTR errors 2020-04-27 17:36:44 +02:00
yhirose
776b3ffbf9 Code format 2020-04-25 18:01:48 -04:00
yhirose
d359e3a5f7 Renave queue_adjust to on_idle (#442) 2020-04-25 17:56:55 -04:00
evg82
5928e0af1a
TaskQueue method to internal size adjust (#442)
I use a custom TaskQueue, with variable number of workers, adding workers on demand is an easy task when new connection arrive (in enqueue function) however i need another funtion to be called even (or better) went no new connections arrives to reduce workers count. I only added a new virtual method in TaskQueue class to allow custom class to adjust workers size over time. Even if this methods is called frequenlty custom class can keep a "last_update" counter to check if need to adjust worker count or any other internal task. Without this function i need an external thread to make this adjust task.
2020-04-25 17:55:20 -04:00
yhirose
a5005789ff
Fixed Visual Studio compiler warnings with x64 platform (Resolve #440 and #446) (#448) 2020-04-25 17:13:14 -04:00
Hoa Thiên Vũ
2feea0c9ab
Fixed error: ‘ULONG_MAX’ was not declared in this scope on line 1921 (#445)
* Fixed error:
ULONG_MAX is defined in the limits.h header file. Putting #include <climits>
```
httplib.h: In function ‘bool httplib::detail::read_content_chunked(httplib::Stream&, httplib::ContentReceiver)’:
httplib.h:1921:22: error: ‘ULONG_MAX’ was not declared in this scope
     if (chunk_len == ULONG_MAX) { return false; }
                      ^~~~~~~~~
httplib.h:1921:22: note: suggested alternative: ‘_SC_ULONG_MAX’
     if (chunk_len == ULONG_MAX) { return false; }
                      ^~~~~~~~~
                      _SC_ULONG_MAX
```

* Move #include <climits> to after #include <cassert>
2020-04-24 12:02:19 -04:00
yhirose
a2e4af54b7 Fix #399 2020-04-23 23:09:04 -04:00
yhirose
d0b123be26 Support remote_addr and remote_port REMOTE_PORT header in client Request (#433) 2020-04-23 22:12:12 -04:00
Matthew DeVore
df138366e4
Fail to read a chunk if its length is >= ULONG_MAX (#444)
We cannot trivially support such large chunks, and the maximum value
std::strtoul can parse accurately is ULONG_MAX-1. Error out early if the
length is longer than that.
2020-04-23 10:59:15 -04:00
Matthew DeVore
c49441ae64
Do not throw exceptions when parsing request chunks (#441)
detail::read_content_chunked was using std::stoul to parse the
hexadecimal chunk lengths for "Transfer-Encoding: chunked" requests.
This throws an exception if the string does not begin with any valid
digits. read_content_chunked is not called in the context of a try block
so this caused the process to terminate.

Rather than use exceptions, I opted for std::stroul, which is similar to
std::stoul but does not throw exceptions. Since malformed user input is
not particularly exceptional, and some projects are compiled without
exception support, this approach seems both more portable and more
correct.
2020-04-23 09:05:45 -04:00
yhirose
ad9fd3bd93 Fix #436 2020-04-22 21:42:58 -04:00
yhirose
da26b517a3 Added url::Get interface 2020-04-21 23:00:39 -04:00
yhirose
240cc85ccb Fixed regex problem for recirect location 2020-04-21 21:18:29 -04:00
yhirose
129e2f00b8 Removed unnecessary noexcept 2020-04-20 19:42:05 -04:00
Daniel Ottiger
da746c6e67
SSLClient::set_ca_cert_store: mark as inline (#435) 2020-04-20 12:53:39 -04:00
yhirose
3451da940d Code format 2020-04-19 22:05:04 -04:00
yhirose
38a6b3e69f Fixed warning 2020-04-19 22:04:29 -04:00
Daniel Ottiger
2ece5f116b
Pass certs and keys from memory (#432)
* SSLServer: add constructor to pass ssl-certificates and key from memory

* SSLClient: add constructor to pass ssl-certificates and key from memory

* add TestCase for passing certificates from memory to SSLClient/SSLServer
2020-04-18 16:26:06 -04:00
yhirose
c2b6e4ac04 Fix #431 2020-04-17 21:48:16 -04:00
yhirose
85327e19ae Fix #425 2020-04-12 15:33:08 -04:00
Alexandre Taillefer
ed8efea98b
Added support for DELETE request body (#418)
* Added support for DELETE request body

* Fixed DELETE request body test case typo

Co-authored-by: Alexandre Taillefer <alexandre.taillefer@pwc.ca>
2020-04-07 15:51:52 -04:00
Max
1ccddd1b0b
SSL_shutdown() only if not already closed by remote (#413) 2020-04-06 10:30:21 -04:00
yhirose
992f3dc690 Code cleanup 2020-04-03 09:33:29 -04:00
yhirose
402d47e2cd Fix #407 2020-03-31 19:42:53 -04:00
yhirose
171fc2e353 Fix #403. Added more status codes based on MDN document 2020-03-26 20:50:40 -04:00
SoenkeHeeren
ced4160d05
add http status code 201 to show the right status message in return headers (#402) 2020-03-26 12:20:32 -04:00
Igor [hyperxor]
dc13cde820
Minor improvements in httplib classes (#395) 2020-03-23 06:54:13 -04:00
Andrew Gasparovic
914c8860e8 Accept content by value to allow moving
Previously, calling set_content always resulted in 's' being copied. With this change, there will still be the same number of copies made (1) when doing `set_content(my_value, ...)`, but there will be no copies if a caller elects to do `set_content(std::move(value), ...)` or `set_content(some_function_that_returns_a_temporary(), ...)` instead.
2020-03-21 00:39:07 -04:00
yhirose
685533ba50 Fixed warnings on Windows due to max/min macro 2020-03-16 13:58:09 -04:00
yhirose
e1acb949e7 Fix #382 2020-03-13 18:43:29 -04:00
Oleg Vorobiov
7b3cea5317
Prevent an implicit capture of 'this' via '[=]' (#381) 2020-03-12 12:31:22 -04:00
yhirose
26deffe0c6 Not to send 'EXCEPTION_WHAT' header to client 2020-03-10 17:44:36 -04:00
Rafael Leira
e07c5fec01 simplest way to catch handler exceptions 2020-03-10 17:44:36 -04:00
miketsts
6e473a7c5c
Fix conversion to ‘int’ from ‘long int’ warning (#377)
Co-authored-by: Michael Tseitlin <michael.tseitlin@concertio.com>
2020-03-10 14:48:14 -04:00
yhirose
c74129a1c2
Fix #372 (#374) 2020-03-09 23:59:00 -04:00
yhirose
18e750b4e7 Code cleanup 2020-03-09 19:47:28 -04:00
Matthew DeVore
bf7700d192
Fix exception that occurs with libc++ regex engine (#368)
The regex that parses header lines potentially causes an unlimited
amount of backtracking, which can cause an exception in the libc++ regex
engine.

The exception that occurs looks like this and is identical to the
message of the exception fixed in
https://github.com/yhirose/cpp-httplib/pull/280:

	libc++abi.dylib: terminating with uncaught exception of type
	std::__1::regex_error: The complexity of an attempted match
	against a regular expression exceeded a pre-set level.

This commit eliminates the problematic backtracking.
2020-02-28 06:31:39 -05:00
yhirose
4c3b119dde Code format 2020-02-24 21:17:02 -05:00
hyperxor
ccc9a9b3f4 Remove code duplication in converting params to query 2020-02-25 02:30:34 +03:00
rymis
f2bb9c45d6
Support for deflate compression (#360) 2020-02-24 11:48:00 -05:00
yhirose
d0d744d520 Fixed compiler warning with Visual C++. Close #358 2020-02-20 17:30:04 -05:00
yhirose
fce8e6fefd
Merge pull request #356 from samhocevar/fix-shadow-declarations
Fix a few shadowed variable compilation warnings.
2020-02-17 09:01:47 -05:00
Sam Hocevar
180aa32ebf Fix a few shadowed variable compilation warnings. 2020-02-17 06:58:30 +01:00
yhirose
064cc6810e Fix #352 2020-02-13 17:40:06 -05:00
yhirose
464cc89b77 Fix #351 2020-02-12 22:35:52 -05:00
yhirose
ca5a50d2c9 Fix #349 2020-02-11 00:26:15 -05:00
yhirose
851edaf77f Code format 2020-02-02 20:02:16 -05:00
yhirose
ac7742bb32 Changed the order of parameters of set_mounting_point. 2020-02-01 09:18:24 -05:00
yhirose
8801e51138 Fix #341 2020-01-31 20:35:20 -05:00
Vitaly Takmazov
5e43680486 HEAD support for static file server 2020-01-28 12:00:27 +03:00
yhirose
79df842cc5 Updated README 2020-01-26 18:34:50 -05:00
yhirose
2e360f9dd6 Improved Stream interface 2020-01-16 23:28:11 -05:00
Valentin Vanelslande
126f1d177e
Add status message: 503 Service Unavailable 2020-01-16 00:59:24 -05:00
yhirose
b557ac9328 Code format 2020-01-14 17:04:51 -05:00
yhirose
f6db19959f
Merge pull request #333 from stupedama/master
std:🧵:hardware_concurrency
2020-01-14 17:04:17 -05:00
yhirose
6b4df41b30 Fix #330 2020-01-14 17:02:25 -05:00
yhirose
0d81e20129 Fix #332 2020-01-14 14:59:20 -05:00
Fredrik Fjeldvær
26cb83ed6c if std:🧵:hardware_concurrency() is 0 use 2 threads. also -1 thread because we already have one thread from the main function 2020-01-14 17:48:51 +01:00