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

Method acceptConnection

app/src/API/Server.cpp:1242–1290  ·  view source on GitHub ↗

* @brief Accepts new incoming TCP connections. */

Source from the content-addressed store, hash-verified

1240 * @brief Accepts new incoming TCP connections.
1241 */
1242void API::Server::acceptConnection()
1243{
1244 Q_ASSERT(m_server.isListening());
1245 Q_ASSERT(m_enabled);
1246
1247 auto* socket = m_server.nextPendingConnection();
1248 if (!socket) {
1249 if (enabled())
1250 Misc::Utilities::showMessageBox(
1251 tr("API server"), tr("Invalid pending connection"), QMessageBox::Critical);
1252
1253 return;
1254 }
1255
1256 if (!enabled()) {
1257 socket->close();
1258 socket->deleteLater();
1259 return;
1260 }
1261
1262 if (m_connections.size() >= kMaxApiClients) {
1263 qWarning() << "[API] Max clients limit exceeded:" << socket->peerAddress().toString() << ":"
1264 << socket->peerPort() << "- Current clients:" << m_connections.size()
1265 << "- Limit:" << kMaxApiClients << "- Rejecting connection";
1266
1267 socket->abort();
1268 socket->deleteLater();
1269 return;
1270 }
1271
1272 connect(socket, &QTcpSocket::errorOccurred, this, &Server::onErrorOccurred);
1273
1274 ConnectionState state;
1275 state.sessionId = QString::number(s_nextSessionId.fetchAndAddRelaxed(1));
1276 state.peerAddress = socket->peerAddress().toString();
1277 state.peerPort = socket->peerPort();
1278
1279 state.authenticated = !(m_externalConnections && !socket->peerAddress().isLoopback());
1280 m_connections.insert(socket, state);
1281
1282 qInfo() << "[API] New client connected:" << state.peerAddress << ":" << state.peerPort
1283 << "- Total clients:" << m_connections.size();
1284
1285 socket->setParent(nullptr);
1286 socket->moveToThread(&m_workerThread);
1287
1288 auto* worker = static_cast<ServerWorker*>(m_worker);
1289 QMetaObject::invokeMethod(worker, "addSocket", Qt::QueuedConnection, Q_ARG(QTcpSocket*, socket));
1290}
1291
1292/**
1293 * @brief Handles socket-level errors from connected clients.

Callers

nothing calls this directly

Calls 3

closeMethod · 0.45
sizeMethod · 0.45
abortMethod · 0.45

Tested by

no test coverage detected