Skip to content

Commit 07102d4

Browse files
committed
Throw error to report peek type when read data error
1 parent e2d4402 commit 07102d4

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

include/dbus2http/Message2Json.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#pragma once
66

7+
#include <plog/Log.h>
78
#include <sdbus-c++/sdbus-c++.h>
89

910
#include <nlohmann/json.hpp>
@@ -47,9 +48,18 @@ class Message2Json {
4748
}
4849

4950
template <typename T>
50-
static T get_int(sdbus::Message& message) {
51+
static T read(sdbus::Message& message) {
5152
T result;
52-
message >> result;
53+
try {
54+
message >> result;
55+
} catch (const std::exception& e) {
56+
std::stringstream ss;
57+
ss << "Failed to get type from message. peek type: \'"
58+
<< message.peekType().first << "\' \"" << message.peekType().second
59+
<< "\" what: " << e.what();
60+
PLOGE << ss.str();
61+
throw std::runtime_error(ss.str());
62+
}
5363
return result;
5464
}
5565
};

src/Message2Json.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,26 +59,26 @@ nlohmann::json Message2Json::ExtractMessage(sdbus::Message& message,
5959
message >> b;
6060
return b;
6161
case 'y': // byte
62-
return get_int<uint8_t>(message);
62+
return read<uint8_t>(message);
6363
case 'n': // int16
64-
return get_int<int16_t>(message);
64+
return read<int16_t>(message);
6565
case 'q': // uint16
66-
return get_int<uint16_t>(message);
66+
return read<uint16_t>(message);
6767
case 'i': // int32
6868
PLOGD << "extract int32";
69-
return get_int<int32_t>(message);
69+
return read<int32_t>(message);
7070
case 'u': // uint32
7171
PLOGD << "extract uint32";
72-
return get_int<uint32_t>(message);
72+
return read<uint32_t>(message);
7373
case 'x': // int64
74-
return get_int<int64_t>(message);
74+
return read<int64_t>(message);
7575
case 't': // uint64
76-
return get_int<uint64_t>(message);
76+
return read<uint64_t>(message);
7777
case 'd': // double
78-
return get_int<double>(message);
78+
return read<double>(message);
7979
case 's': // string
8080
PLOGD << "extract string";
81-
return get_int<std::string>(message);
81+
return read<std::string>(message);
8282
case 'v': // variant
8383
return ExtractVariant(message);
8484
case '(': // struct
@@ -150,7 +150,7 @@ nlohmann::json Message2Json::ExtractMessage(sdbus::Message& message,
150150
PLOGD << "enter container y";
151151
message.enterContainer("y");
152152
while (true) {
153-
auto y = get_int<uint8_t>(message);
153+
auto y = read<uint8_t>(message);
154154
if (message)
155155
binaries.push_back(y);
156156
else
@@ -187,7 +187,7 @@ nlohmann::json Message2Json::ExtractMessage(sdbus::Message& message,
187187

188188
std::vector<uint8_t> buffer(4096);
189189
ssize_t bytes_read;
190-
while ((bytes_read = read(fd.get(), buffer.data(), buffer.size())) > 0) {
190+
while ((bytes_read = ::read(fd.get(), buffer.data(), buffer.size())) > 0) {
191191
binaries.insert(binaries.end(), buffer.begin(),
192192
buffer.begin() + bytes_read);
193193
if (binaries.size() > config_.max_file_descriptor_size)

src/WebService.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,9 @@ WebService::WebService(DbusCaller& caller) : caller_(caller), ws_port_(10058) {
218218
res.status = 500;
219219
std::string what = e.what();
220220
PLOGE << "exception: " << what;
221-
res.set_content(R"({"message": ")" + what + "\"}", "application/json");
221+
nlohmann::json j;
222+
j["message"] = what;
223+
res.set_content(j.dump(), "application/json");
222224
}
223225
});
224226
server_.Get(R"(/dbus/try/(.*))", [this, try_html](const auto& req,

0 commit comments

Comments
 (0)