aboutsummaryrefslogtreecommitdiff
path: root/lib/jobs/basejob.cpp
AgeCommit message (Collapse)Author
2020-12-27Fix use-after-free of QNetworkReply in BaseJobNicolas Fella
Usually QNetworkAccessManager expects the user to delete the replies, but when the QNetworkAccessManager itself is deleted it deletes all pending replies (https://code.woboq.org/qt5/qtbase/src/network/access/qnetworkaccessmanager.cpp.html#529). This can lead to use-after-free crashes when d->reply is accessed. By putting the reply into a QPointer the exiting if(d->reply) checks can work properly.
2020-12-23BaseJob: add [[fallthrough]] as clang-tidy saysKitsune Ral
(cherry picked from commit 1a832ae9b6a0d679b551fd644136e4bc17e7db29)
2020-12-23BaseJob: tolerate unexpected error payloadsKitsune Ral
Proxy servers may return arbitrary HTML, for one example; so don't expect to find a valid JSON object in whatever non-empty payload next to a non-2xx HTTP code. Fixes #421. (cherry picked from commit 9ef83e044ed4f8409156b19d529dfc7e45f565c1)
2020-12-10Fix DELETE jobs with json dataTobias Fella
DeleteDeviceJob requires authentication, but the JSON data is not added for DELETE requests. Since QNetworkAccessManager::deleteResource does not support body data, we need to send a custom request.
2020-08-04BaseJob: go for a retry on IncorrectResponseKitsune Ral
The most frequent occurence of IncorrectResponse so far is a proxy/CDN failure. This is not a grave error; there's a chance that the retry will succeed. In the worst case the job will fail after 3 identical errors (except SyncJob that will try to get through forever - but SyncJob failures should still be indicated in the client's UI in some non-intrusive way).
2020-08-04Cleanup around [BaseJob::]IncorrectResponse[Error]Kitsune Ral
2020-06-26Disable HTTP2; enable pipeliningKitsune Ral
Long run tests over 2+ days kept crashing before this commit but stopped crashing with pipelining on and HTTP2 off.
2020-06-12BaseJob: fail early if the job needs token and there's noneKitsune Ral
2020-06-11BaseJob::prepareError(): be more tolerant to empty error payloadsKitsune Ral
TooManyRequests can come without a payload, apparently.
2020-06-07BaseJob: jsonData() and prepareResult/Error()Kitsune Ral
* JSON response is stored internally in BaseJob, rather than passed around virtual response handlers. This allow to lazily deserialise parts of the JSON response when the client calls for them instead of deserialising upon arrival and storing POD pieces. This is incompatible with the current generated code, so temporarily FTBFS. * BaseJob::loadFromJson() and BaseJob::takeFromJson() have been added to facilitate picking parts of the result as described above in derived job classes. * BaseJob::jsonData(), BaseJob::jsonItems() and (protected) BaseJob::reply() for direct access to the response in its various forms. * To further eliminate boilerplate code in generated job classes, a group of *ExpectedKeys() methods has been added - this allows to reflect the API definition of required response keys in a more "declarative" way, delegating validation to BaseJob. * parseReply() and parseJson() pair turns to singular prepareResult(). Thanks to all the changes above, in most cases it will not need overriding, unlike before. * BaseJob::Private::parseJson() is introduced, to wrap QJsonDocument::parseJson() into something less verbose. This serves a completely different purpose to the former BaseJob::parseJson(). * BaseJob::doCheckReply() takes the place, and the name, of checkReply().
2020-06-01Remove the piece of code introduced too early onKitsune Ral
parseJsonDocument() will come later.
2020-05-31BaseJob: use non-deprecated API for Qt 5.15Kitsune Ral
Qt 5.15 renamed HTTP2AllowedAttribute to Http2AllowedAttribute, deprecating the old spelling.
2020-05-31BaseJob::rawData: overload for (even) quicker accessKitsune Ral
No functional changes either.
2020-05-31Move around and format codeKitsune Ral
No functional changes here.
2020-05-12basejob.cpp: nitpicks from clang-formatKitsune Ral
2020-04-14BaseJob::makeRequestUrl(): even more tolerance to slash separatorsKitsune Ral
The code is really defensive now, making sure there's exactly one slash between the base path and the endpoint. It's still very conservative about the path composition otherwise (no normalisation etc.).
2020-04-07BaseJob: don't finish and re-try at the same timeKitsune Ral
Due to a missing return statement, a retry with auth case led to the job being finished and pending at the same time, with no good consequences.
2020-04-06BaseJob: disable pipeliningKitsune Ral
Longer running on RHEL/CentOS 8 leads to crashes that no more occur with disabled pipelining.
2020-04-06Revert changes accidentally sneaked in with the previous commitKitsune Ral
2020-04-06CMakeLists: install header files to a subdirectoryKitsune Ral
This is a Quotient part of #328 fix; QtOlm part is pending.
2020-03-30BaseJob: check the connection even harderKitsune Ral
2020-03-30BaseJob: shutdown timers on abandoning and destructionKitsune Ral
A part of the fix for #398.
2019-12-12BaseJob::initiate(): fix nullptr dereferencingKitsune Ral
2019-12-12BaseJob: prepare() -> initiate() + refactoring around itKitsune Ral
* BaseJob::initiate() now calls ConnectionData::submit() without relying on Connection to do that * ConnectionData::submit() is now the only site where a job enters Pending state * No more shortcuts to BaseJob::sendRequest(), even retries are sent through the ConnectionData submission queue * Additional validation in BaseJob::initiate() that the request data device is actually open (because QtNetwork API officially requires that, even if you can get away passing a closed QBuffer to it)
2019-11-19BaseJob: Don't send accessToken if not needed; send again on 401Kitsune Ral
The first part closes #358; the second part is a workaround for non-standard cases when endpoints without security by the spec turn out to be secured (in particular, the case of authenticating media servers).
2019-10-02BaseJob::Private: experiment with [[nodiscard]]Kitsune Ral
2019-10-02More fixes for Apple not having deduction guides in stdlibKitsune Ral
2019-09-29BaseJob, urlForLog() -> dumpRequest(): include HTTP verb into log linesKitsune Ral
2019-08-27More compliant 'using' for chrono_literalsKitsune Ral
Compilers warn on using 'using ...::operator""s' because they think we're redefining the reserved suffix.
2019-08-20BaseJob/ConnectionData: connection-wide rate-limitingKitsune Ral
As before, completely transparent for clients, driven by 529 errors from the server (but cases of rate limiting are signalled by BaseJob::rateLimited). That brings changes to BaseJob API: timeouts now use int64_t and also can be handled in std::chrono terms; aboutToStart() -> aboutToSendRequest(); started() -> sentRequest(). Closes #292.
2019-08-20BaseJob: Status/StatusCode tweaks, cleanup, mo' commentsKitsune Ral
Notably, recovered Status::fromHttpCode() that was introduced in 5722ceaf4bd10c29f1091e3dc5a87f5650ea8c71 but fell victim of a careless merge (so much for introducing non-topical changes in feature branches).
2019-08-16BaseJob: support M_USER_DEACTIVATED error codeKitsune Ral
Closes #344.
2019-08-13Support for server notices rooms (MSC1452)Kitsune Ral
Closes #326.
2019-08-09Namespace: QMatrixClient -> Quotient (with back comp alias)Kitsune Ral
2019-08-09Rename zero-impact stringsKitsune Ral
2019-08-02Apply the new brace wrapping to source filesKitsune Ral
2019-08-02Merge branch 'master' into use-clang-formatKitsune Ral
2019-07-12Minor polishKitsune Ral
2019-07-09Merge branch 'master' into use-clang-formatKitsune Ral
2019-07-01Merge branch 'master' into forget-rooms-reallyKitsune Ral
2019-07-01Handle M_UNKNOWN as The Spec says; factor out BaseJob::parseError()Kitsune Ral
2019-06-26BaseJob::Status: fromHttpCodeKitsune Ral
2019-06-24Merge branch 'master' into clang-formatKitsune Ral
# Conflicts: # CMakeLists.txt # lib/avatar.cpp # lib/connection.cpp # lib/connection.h # lib/connectiondata.cpp # lib/csapi/account-data.cpp # lib/csapi/account-data.h # lib/csapi/capabilities.cpp # lib/csapi/capabilities.h # lib/csapi/content-repo.cpp # lib/csapi/create_room.cpp # lib/csapi/filter.cpp # lib/csapi/joining.cpp # lib/csapi/keys.cpp # lib/csapi/list_joined_rooms.cpp # lib/csapi/notifications.cpp # lib/csapi/openid.cpp # lib/csapi/presence.cpp # lib/csapi/pushrules.cpp # lib/csapi/registration.cpp # lib/csapi/room_upgrades.cpp # lib/csapi/room_upgrades.h # lib/csapi/search.cpp # lib/csapi/users.cpp # lib/csapi/versions.cpp # lib/csapi/whoami.cpp # lib/csapi/{{base}}.cpp.mustache # lib/events/accountdataevents.h # lib/events/eventcontent.h # lib/events/roommemberevent.cpp # lib/events/stateevent.cpp # lib/jobs/basejob.cpp # lib/jobs/basejob.h # lib/networkaccessmanager.cpp # lib/networksettings.cpp # lib/room.cpp # lib/room.h # lib/settings.cpp # lib/settings.h # lib/syncdata.cpp # lib/user.cpp # lib/user.h # lib/util.cpp
2019-06-07BaseJob::StatusCode: add Error-less synonyms; officially deprecate ↵Kitsune Ral
JsonParseError
2019-05-31Ignore some errors on leaving rooms, add new error enum. Fixes #307Ville Ranki
2019-04-24BaseJob: preserve the calculated error code if JSON error code is unknownKitsune Ral
Resetting the code to IncorrectRequestError has been a part of the cause for the incorrect Quaternion behaviour on expired tokens.
2019-04-24BaseJob: fix a possible crash upon logoutKitsune Ral
See https://github.com/QMatrixClient/Quaternion/issues/566 for details.
2019-04-06Clean up on clang-tidy/clazy analysisKitsune Ral
2019-03-14Fix read receipts and redactions on v3 roomsKitsune Ral
Previously slashes in eventIds (that come plenty in v3 due to base64 encoding) were not properly encoded - they are now.
2019-03-02style: apply .clang-format to all .cpp and .h filesMarc Deop