Commit Graph

51 Commits

Author SHA1 Message Date
Aleric Inglewood
96d302aa42 Be more verbose about internal (curl / timeout) errors.
Translates the CURLE_WRITE_ERROR into what it really means: that the low
speed check failed.
2013-03-09 05:26:52 +01:00
Aleric Inglewood
13e032fb04 Make AICurlThread::wakeup_thread thread-safe. 2013-02-23 23:29:43 +01:00
Aleric Inglewood
803e92020b Renamed AICurlThread::mWakeUpMutex --> AICurlThread::mWakeUpFlagMutex 2013-02-23 23:23:48 +01:00
Aleric Inglewood
83fb898852 Bug fix: Wake up curl thread at exit of viewer. 2013-02-03 17:24:26 +01:00
Aleric Inglewood
fc4b02cee8 Moved HTTPTimeout to it's own files. 2013-01-12 23:00:21 +01:00
Aleric Inglewood
e56f14502e Fill fd_sets AFTER processing command queue. 2013-01-12 02:51:44 +01:00
Aleric Inglewood
741a160913 Fine tune of private (libcwd) assertion.
It turns out that it's possible to receive data before an upload
finished when the server sends HTTP_BAD_REQUEST in the middle of the
upload (this happens to me when I try to upload a 6000x6000 image to my
profile feed, with is a 44MB file). So, in that case the finished upload
detection did not fail and we shouldn't assert.
2013-01-11 01:28:46 +01:00
Aleric Inglewood
63ae33eca7 Fix crash in AICurlPrivate::curlthread::PollSet::next
Introduced in
6dcda3595e
(Add recovery for randomly closed socket desciptors.)

By copying CurlSocketInfo* into mCopiedFileDescriptors, it was possible
that we accessed a deleted CurlSocketInfo for it's filedescriptor,
returning a random value, which, when passed to FD_ISSET could cause a
SIGSEGV.

I reverted this change and now store the literal socket descriptors in
mCopiedFileDescriptors again. It is not a problem when libcurl deletes
the corresponding CurlSocketInfo (through a callback to
MultiHandle::socket_callback) in that case, because the fd_set we test
against isn't updated as a result of that, not until we're down with
mCopiedFileDescriptors (at the re-entry of select()).
2013-01-08 23:43:25 +01:00
Aleric Inglewood
5188693469 Compile fix for last commit and Release 2013-01-08 20:33:29 +01:00
Aleric Inglewood
d8485350e7 Address clang warnings.
* Split off AIThreadSafeBitsPOD, because offsetof may only be used on POD types.
* Added ASSERT_ONLY and ASSERT_ONLY_COMMA
* Removed a few unused class members
* Fixed a bug in AIHTTPReceivedHeaders::equal that more or less only
  compared the length of the headers before :/
2013-01-08 17:50:09 +01:00
Aleric Inglewood
639b264d2d Do not crash upon corrupted HTTP header.
This addresses the reported assertion by luis thibodeaux.
2013-01-03 21:06:20 +01:00
Aleric Inglewood
6dcda3595e Add recovery for randomly closed socket desciptors.
Although it should never happen that a file descriptor is suddenly
closed, it appeared that this happens on linux 64bit when using
FMODex... Not really sure how useful this is, but at least now the
viewer just continues to work, as if -say- the socket was closed
remotely. Before the curl thread would go into a tight loop that it
wouldn't recover from until the watchdog thread terminated the viewer.
2012-12-31 19:24:37 +01:00
Aleric Inglewood
2f3841d7e6 Update of print_diagnostics.
CURLE_COULDNT_CONNECT only happens when we actually get
an error (ie, 'connection refused'). If we time out while the connect
attempt is still running then we get CURLE_OPERATION_TIMEDOUT.
2012-12-30 21:11:10 +01:00
Aleric Inglewood
6a45e68c73 Merge branch 'master' into llwebprofile 2012-12-29 17:03:46 +01:00
Aleric Inglewood
88bf01fe6f Avoid crashing at exit by joining the curl thread. 2012-12-28 16:59:04 +01:00
Aleric Inglewood
fac3fc67b6 Add filtering for curl debug output.
Add CURLTR debug channel for libcurl API calls,
and use CURLIO only for libcurl debug output.
Note: need to set gDebugCurlTerse to true for
filtering to take effect, then pass 'debug_on'
to the LLHttpClient methods that require debugging.
2012-12-24 02:54:36 +01:00
Aleric Inglewood
8095d6c48c Large snapshot update (part 3) 2012-12-22 19:07:08 +01:00
Aleric Inglewood
12171f6cd9 Merge commit '5947769812369a7988a7f1db30df79e6fc0e4787'
Adds important commits from llwebprofile branch
into master which need to go into the next release.
2012-12-05 22:27:21 +01:00
Aleric Inglewood
e788ee5faf Merge branch 'master' into llwebprofile 2012-11-28 18:50:31 +01:00
Aleric Inglewood
165bebda3e Compile error and warning fixes for DEBUG_CURLIO without CWDEBUG. 2012-11-23 03:19:39 +01:00
Aleric Inglewood
2400d146ce Clear the command queue after flushing statemachines
Flushing the state machines can cause remove commands to be added to the
command queue, so clearing it needs to be after.
2012-11-19 04:01:54 +01:00
Aleric Inglewood
f44de434c2 Always use followRedir() to determine if redirections should be followed.
Before every HEAD and GET request allowed redirection by default,
without setting a limit on the number of redirections. This caused
an infinite redirect loop when connecting to marketplace, in combination
with the bug that we did not allow cookies.
2012-11-18 02:07:19 +01:00
Aleric Inglewood
5d1a138c5c Code clean up of code related to previous commit. 2012-11-17 05:16:21 +01:00
Aleric Inglewood
e781870da3 Fix Ratany Residents crash 2012-11-17 04:55:34 +01:00
Aleric Inglewood
e3f30fece9 Fix print_diagnostics for windows. 2012-11-16 16:06:30 +01:00
Aleric Inglewood
324fe06a06 Improved printed info when curl times out. 2012-11-14 02:12:27 +01:00
Aleric Inglewood
04e7dc1270 Collect and print stats about HTTP status code 2012-11-10 02:19:20 +01:00
Aleric Inglewood
68cbf31c8b Add a PerHostRequestQueue object.
Adds a std::map for hostname (or urls) --> PerHostRequestQueue
objects. The latter keeps track of the number of added curl easy
requests and decides if a new request should be throttled or
not, as well as provides the queue to queue throttled requests.

At the moment CurlConcurrentConnectionsPerHost is set to 16,
because things really don't work without LL supporting connection
reuse if we limit it to 2. CurlConcurrentConnectionsPerHost is
also set to non-persistent so that we can easily change it in the future
(once we decide on it's final value it can be set to persistent).
2012-11-07 15:41:50 +01:00
Aleric Inglewood
cb52e82a60 Moved and extended AICurlInterface::Stats
Moved AICurlPrivate::Stats to AICurlInterface::Stats and added several
counters to keep track of the number of existing instances of
respectively AICurlEasyRequest, AICurlEasyRequestStateMachine,
BufferedCurlEasyRequest, ResponderBase and
ThreadSafeBufferedCurlEasyRequest.
2012-11-07 02:15:23 +01:00
Aleric Inglewood
e62f805bcd Fix wrong assertion mAddedEasyRequests.size() >= (size_t)mRunningHandles
Rename check_run_count to check_msg_queue, because the whole 'run count'
approach is flawed anyway (the author of libcurl told me that THE way
to check for finished curl handles is to just call curl_multi_info_read
every time: it's extremely fast. Any test that attempts to avoid that
call is nonsense anyway.

The reason the assertion failed might have been caused by the fact
that we're comparing the current number of easy handles with the
number of running handles of 'a while ago'. It is possible that a
easy handle was removed in the meantime.

In order to check if that hypothesis is right, I moved the assertion
to directly below the call to curl_multi_socket_action where it
should hold. If this new assertion doesn't trigger than the hypothesis
was right and this is fixed.
2012-11-04 17:08:05 +01:00
Aleric Inglewood
72bde5234a Rename CurlResponderBuffer to BufferedCurlEasyRequest and derive it from CurlEasyRequest
Every curl transaction is a AICurlEasyRequestStateMachine which has a
AICurlEasyRequest as member, which is a reference counting pointer to
a ThreadSafeBufferedCurlEasyRequest. And now BufferedCurlEasyRequest is
derived from CurlEasyRequest which is derived from CurlEasyHandle, but
neither are used separatedly.
2012-11-02 18:41:23 +01:00
Aleric Inglewood
1e1f5e8193 Fix windows compile errors/warnings 2012-11-01 03:18:00 +01:00
Aleric Inglewood
6c01b6da9b Merging CurlEasyRequest and CurlResponderBuffer, Step 1 2012-11-01 02:40:08 +01:00
Aleric Inglewood
756aac1f9a Remove AICurlInterface::strerror 2012-11-01 02:04:40 +01:00
Aleric Inglewood
c0ac428179 Code cleanup
* Moved Responder stuff to LLHTTPClient.
* Renamed LLHTTPClient::Responder to LLHTTPClient::ResponderWithResult.
* Deleted LLHTTPClientAdapter and LLHTTPClientInterface.
* Renamed AICurlInterface::TransferInfo to AITransferInfo and moved it
  to llhttpclient.h
* Removed 'CURLcode code' argument from completed_headers.
2012-10-31 23:11:42 +01:00
Aleric Inglewood
7549b471c3 Moved curl stuff from indra/aistatemachine to indra/llmessage. 2012-10-31 18:51:52 +01:00
Aleric Inglewood
cd93aba002 Created aistatemachine library and moved files. 2012-07-29 01:30:10 +02:00
Aleric Inglewood
9e5cbf330f Bug fix for windows code found with previous commit. 2012-07-19 17:28:45 +02:00
Aleric Inglewood
2fa9334090 Debug code to test the windows code path on linux 2012-07-19 17:27:37 +02:00
Aleric Inglewood
fcdf5d377e Move PollSet out of the header file 2012-07-19 17:26:02 +02:00
Aleric Inglewood
706b9c55c2 Moving stuff around a bit... 2012-07-18 01:41:36 +02:00
Shyotl
48ae0d003d Made the Visual Studio compiler a bit more happy with aicurl. 2012-07-17 18:04:48 -05:00
Aleric Inglewood
0204d09a89 If curl thread is already awake, then don't write something to the pipe. 2012-07-17 23:39:44 +02:00
Aleric Inglewood
9deb3e433c LLCurlRequest time out fixes.
Also some more cleanup on exit improvements.
2012-07-16 22:35:04 +02:00
Aleric Inglewood
7416d2aaf1 Timer, time out, and clean up improvements. 2012-07-14 04:29:37 +02:00
Aleric Inglewood
0419f8bee9 Add an AITimer to AICurlEasyRequestStateMachine.
Fixes AIStateMachine to work thread-safe with the timer.
2012-07-10 05:09:08 +02:00
Aleric Inglewood
14276b3cf8 Bug fix 2012-07-04 08:44:22 +02:00
Aleric Inglewood
07e7eeedd1 Added some windows code.
Iterating directly over the elements of fd_set::fd_array in
windows is faster than using FD_ISSET.
2012-07-04 07:32:24 +02:00
Aleric Inglewood
125a10bb44 Code hardening, review, bug fixes, documentation, curl stats and cleanup.
Bug fixes:
AICurlEasyRequestStateMachine didn't delete itself.
curl_multi_socket_action calls were made for potentional removed sockets.
The curl thread wasn't terminated.
2012-07-04 00:10:43 +02:00
Lirusaito
433c7c3f99 Spelling fixes and stuff like that to AICurl* and llproxy.* documentations
Also removes a duplicate include from llares.cpp

Conflicts:
	indra/llmessage/aicurl.cpp
2012-06-28 04:08:25 -04:00