MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / processBufferedJson

Method processBufferedJson

app/src/API/Server.cpp:1051–1115  ·  view source on GitHub ↗

* @brief Attempts to parse buffered data as a complete JSON message. */

Source from the content-addressed store, hash-verified

1049 * @brief Attempts to parse buffered data as a complete JSON message.
1050 */
1051void API::Server::processBufferedJson(QTcpSocket* socket,
1052 ConnectionState& state,
1053 const QByteArray& trimmed)
1054{
1055 Q_ASSERT(socket);
1056 Q_ASSERT(!trimmed.isEmpty());
1057
1058 auto& buffer = state.buffer;
1059
1060 if (trimmed.size() > kMaxApiMessageBytes) {
1061 qWarning() << "[API] Message size limit exceeded:" << state.peerAddress << ":" << state.peerPort
1062 << "- Message size:" << trimmed.size() << "- Limit:" << kMaxApiMessageBytes;
1063
1064 sendResponseToSocket(
1065 socket,
1066 CommandResponse::makeError(
1067 QString(), ErrorCode::ExecutionError, QStringLiteral("API message exceeds size limit"))
1068 .toJsonBytes());
1069 buffer.clear();
1070 return;
1071 }
1072
1073 if (exceedsJsonDepthLimit(trimmed, kMaxApiJsonDepth)) {
1074 qWarning() << "[API] JSON depth limit exceeded (buffered):" << state.peerAddress << ":"
1075 << state.peerPort << "- Max depth:" << kMaxApiJsonDepth;
1076
1077 sendResponseToSocket(
1078 socket,
1079 CommandResponse::makeError(
1080 QString(), ErrorCode::ExecutionError, QStringLiteral("JSON nesting depth exceeds limit"))
1081 .toJsonBytes());
1082 buffer.clear();
1083 return;
1084 }
1085
1086 QString type;
1087 QJsonObject json;
1088 try {
1089 const char firstChar = trimmed.at(0);
1090 const char lastChar = trimmed.back();
1091 const bool complete =
1092 (firstChar == '{' && lastChar == '}') || (firstChar == '[' && lastChar == ']');
1093
1094 if (API::parseMessage(trimmed, type, json) || MCP::isMCPMessage(trimmed)) {
1095 handleJsonMessage(socket, state, trimmed);
1096 buffer.clear();
1097 } else if (complete) {
1098 sendResponseToSocket(
1099 socket,
1100 CommandResponse::makeError(
1101 QString(), ErrorCode::InvalidJson, QStringLiteral("Failed to parse JSON message"))
1102 .toJsonBytes());
1103 buffer.clear();
1104 }
1105 } catch (...) {
1106 qWarning() << "[API] JSON parsing exception (buffered):" << state.peerAddress << ":"
1107 << state.peerPort << "- Buffer size:" << trimmed.size()
1108 << "- Disconnecting client (malformed or too deep JSON)";

Callers

nothing calls this directly

Calls 7

exceedsJsonDepthLimitFunction · 0.85
parseMessageFunction · 0.85
isMCPMessageFunction · 0.85
isEmptyMethod · 0.80
sizeMethod · 0.45
toJsonBytesMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected