Skip to content

Commit cde8e2a

Browse files
Add LogContext to NetworkWinHttp (#1572)
Make sure that context values are transferred to network thread. Relates-To: HERESUP-4906 Signed-off-by: Mykhailo Kuchma <[email protected]>
1 parent 94c4b50 commit cde8e2a

File tree

2 files changed

+31
-21
lines changed

2 files changed

+31
-21
lines changed

olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2019-2021 HERE Europe B.V.
2+
* Copyright (C) 2019-2025 HERE Europe B.V.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -619,7 +619,10 @@ void NetworkWinHttp::RequestCallback(HINTERNET, DWORD_PTR context, DWORD status,
619619
return;
620620
}
621621

622-
RequestData* handle = reinterpret_cast<RequestData*>(context);
622+
auto* handle = reinterpret_cast<RequestData*>(context);
623+
624+
logging::ScopedLogContext scope(handle->log_context);
625+
623626
if (!handle->connection_data || !handle->result_data) {
624627
OLP_SDK_LOG_WARNING(kLogTag, "RequestCallback to inactive handle, id="
625628
<< handle->request_id);
@@ -632,8 +635,7 @@ void NetworkWinHttp::RequestCallback(HINTERNET, DWORD_PTR context, DWORD status,
632635

633636
if (status == WINHTTP_CALLBACK_STATUS_REQUEST_ERROR) {
634637
// Error has occurred
635-
WINHTTP_ASYNC_RESULT* result =
636-
reinterpret_cast<WINHTTP_ASYNC_RESULT*>(status_info);
638+
auto* result = reinterpret_cast<WINHTTP_ASYNC_RESULT*>(status_info);
637639
request_result.status = result->dwError;
638640
request_result.error = true;
639641

@@ -1013,14 +1015,16 @@ NetworkWinHttp::RequestData* NetworkWinHttp::GetHandle(
10131015
std::shared_ptr<std::ostream> payload, const NetworkRequest& request) {
10141016
std::unique_lock<std::recursive_mutex> lock_guard(mutex_);
10151017

1016-
auto it =
1017-
std::find_if(http_requests_.begin(), http_requests_.end(),
1018-
[&](const RequestData& request) { return !request.in_use; });
1019-
if (it != http_requests_.end()) {
1020-
*it = std::move(RequestData(this, id, connection, callback, header_callback,
1021-
data_callback, payload, request));
1022-
it->in_use = true;
1023-
return &(*it);
1018+
auto request_data_it = std::find_if(
1019+
http_requests_.begin(), http_requests_.end(),
1020+
[&](const RequestData& request_data) { return !request_data.in_use; });
1021+
if (request_data_it != http_requests_.end()) {
1022+
*request_data_it =
1023+
RequestData(this, id, std::move(connection), std::move(callback),
1024+
std::move(header_callback), std::move(data_callback),
1025+
std::move(payload), request, logging::GetContext());
1026+
request_data_it->in_use = true;
1027+
return &(*request_data_it);
10241028
}
10251029
return nullptr;
10261030
}
@@ -1073,23 +1077,26 @@ NetworkWinHttp::RequestData::RequestData(
10731077
NetworkWinHttp* self, RequestId id,
10741078
std::shared_ptr<ConnectionData> connection, Callback callback,
10751079
HeaderCallback header_callback, DataCallback data_callback,
1076-
std::shared_ptr<std::ostream> payload, const NetworkRequest& request)
1080+
std::shared_ptr<std::ostream> payload, const NetworkRequest& request,
1081+
std::shared_ptr<const logging::LogContext> context)
10771082
: self(self),
10781083
connection_data(std::move(connection)),
1079-
result_data(new ResultData(id, callback, std::move(payload))),
1084+
result_data(std::make_shared<ResultData>(id, std::move(callback),
1085+
std::move(payload))),
10801086
body(request.GetBody()),
10811087
header_callback(std::move(header_callback)),
10821088
data_callback(std::move(data_callback)),
1083-
http_request(NULL),
1089+
http_request(nullptr),
10841090
request_id(id),
10851091
ignore_data(request.GetVerb() == NetworkRequest::HttpVerb::HEAD),
10861092
no_compression(false),
10871093
uncompress(false),
1088-
in_use(false) {}
1094+
in_use(false),
1095+
log_context(std::move(context)) {}
10891096

10901097
NetworkWinHttp::RequestData::RequestData()
10911098
: self(nullptr),
1092-
http_request(NULL),
1099+
http_request(nullptr),
10931100
request_id(static_cast<RequestId>(RequestIdConstants::RequestIdInvalid)),
10941101
ignore_data(),
10951102
no_compression(false),
@@ -1099,7 +1106,7 @@ NetworkWinHttp::RequestData::RequestData()
10991106
NetworkWinHttp::RequestData::~RequestData() {
11001107
if (http_request) {
11011108
WinHttpCloseHandle(http_request);
1102-
http_request = NULL;
1109+
http_request = nullptr;
11031110
}
11041111
}
11051112

olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2019-2021 HERE Europe B.V.
2+
* Copyright (C) 2019-2025 HERE Europe B.V.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -27,6 +27,8 @@
2727
#include <zlib.h>
2828
#endif
2929

30+
#include <olp/core/logging/LogContext.h>
31+
3032
#include <atomic>
3133
#include <memory>
3234
#include <mutex>
@@ -95,7 +97,8 @@ class NetworkWinHttp : public Network {
9597
std::shared_ptr<ConnectionData> connection, Callback callback,
9698
HeaderCallback header_callback, DataCallback data_callback,
9799
std::shared_ptr<std::ostream> payload,
98-
const NetworkRequest& request);
100+
const NetworkRequest& request,
101+
std::shared_ptr<const logging::LogContext> context);
99102
~RequestData();
100103
void Complete();
101104
void FreeHandle();
@@ -115,6 +118,7 @@ class NetworkWinHttp : public Network {
115118
bool no_compression;
116119
bool uncompress;
117120
bool in_use;
121+
std::shared_ptr<const logging::LogContext> log_context;
118122
#ifdef NETWORK_HAS_ZLIB
119123
z_stream strm;
120124
#endif
@@ -151,4 +155,3 @@ class NetworkWinHttp : public Network {
151155

152156
} // namespace http
153157
} // namespace olp
154-

0 commit comments

Comments
 (0)