Draft: Create async HTTP client based on libcurl
Changes
- Let CURL handle DNS request (uses a DNS cache @arora)
- (possible) made HTTP client library thread safe -> to be tested with unit tests and multiple concurrent threads
- Remove curl_multi and use curl_simple as API
- Create own asynchronous functions to call (synchronous) curl simple
- 1 handler per remote host, thus all requests to one remote host are synchronous
- To increase performance, we could create e.g. 10 (configurable) parallel TCP requests
- We keep the connection so that CURL is able to reuse existing TCP connection
- With HTTP/2 streams, we should not have this issue anymore
Tests
Manually tested scenarios on SMF, also tested what happens when existing connections are removed (e.g. NRF crash), also tested that timeout of 10 seconds works. No threads stayed hanging so far.