Files
qt-migration-legatus/qt5-before/dlbo/Lts/Tools/VapixConfig/httprequesthandler.cpp
T
torstenandCopilot 7173785915 Qt6 Migration: Complete migration with DDS/RTI support and build validation
Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-15 18:20:26 +00:00

151 lines
5.5 KiB
C++

/**
* @RDE_HEADER@
* HTTPRequestHandler sends requests to Axis Cameras initialized in VapixConfig
* $Id$
* $HeadURL$
* $Author$
* Created by Terrell Scharfenberg, SLSE, 2016-05-27
*/
#include "httprequesthandler.h"
#include <QDebug>
#include <QEventLoop>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QRegularExpression>
using namespace VapixConfig;
HTTPRequestHandler::HTTPRequestHandler()
{}
void HTTPRequestHandler::init(const QString &ip, const QString &password, const QString &username)
{
m_ip = ip;
m_userName = username;
m_password = password;
}
QNetworkReply *HTTPRequestHandler::sendRequest(const QUrl &paramUrl, QNetworkAccessManager *qNam)
{
QNetworkRequest request(paramUrl);
QNetworkReply *reply = qNam->get(request);
// TODO
QEventLoop eventLoop;
QObject::connect(qNam, &QNetworkAccessManager::finished,
&eventLoop, &QEventLoop::quit);
eventLoop.exec();
qDebug() << "Request sent";
return reply;
}
// gets all parameter(configuration) from the camera
QVector<QMap<QString, QString>> HTTPRequestHandler::getParams(const QString &groupName, QNetworkAccessManager *qNam)
{
int amount = getAmount(groupName, qNam);
QVector<QMap<QString, QString>> paramList;
const QString prefix = buildHttpPrefix() + QLatin1String("/axis-cgi/admin/param.cgi?action=list&group=");
QString baseUrl;
paramList.reserve(amount);
for (int i = 0; i < amount; ++i)
{
if (groupName == QLatin1String("Event.*.Actions"))
baseUrl = prefix + QLatin1String("Event.E") + QString::number(i) + QLatin1String(".Actions");
else if (groupName == QLatin1String("EventServers"))
baseUrl = prefix + groupName + QLatin1String(".TCP.T") + QString::number(i);
else if (groupName == QLatin1String("Motion"))
baseUrl = prefix + groupName + QLatin1String(".M") + QString::number(i);
else if (groupName == QLatin1String("Event"))
baseUrl = prefix + groupName + QLatin1String(".E") + QString::number(i);
else if (groupName == QLatin1String("Image"))
baseUrl = prefix + groupName + QLatin1String(".I0.Appearance.Resolution");
else
qDebug() << "Error: Groupname does not exist";
QUrl requestUrl(baseUrl);
QNetworkReply *reply = sendRequest(requestUrl, qNam);
QByteArray replyBytes = reply->readAll();
QString replyText = QString::fromUtf8(replyBytes.data(), replyBytes.size());
QRegularExpression re(QLatin1String("(\\w++=[^_]++)"));
const QVector<QStringRef> replyList = replyText.splitRef(QRegExp(QLatin1String("\n|\r\n|\r")));
QMap<QString, QString> paramMap;
for (const QStringRef &string : replyList)
{
QRegularExpressionMatch match = re.match(string, 0, QRegularExpression::PartialPreferCompleteMatch);
if (!match.captured(0).isNull())
{
const QStringList sl = match.captured(0).split(QLatin1Char('='));
paramMap[sl.at(0)] = sl.at(1);
}
}
reply->deleteLater();
paramList.append(paramMap);
paramMap.clear();
}
return paramList;
}
//removes all modified parameter
void HTTPRequestHandler::removeParams(const QString &groupName, QNetworkAccessManager *qNam)
{
const QString prefix = buildHttpPrefix() + QLatin1String("/axis-cgi/admin/param.cgi?action=list&group=");
QUrl requestUrl(prefix + groupName);
QNetworkReply *reply = sendRequest(requestUrl, qNam);
QByteArray replyBytes = reply->readAll();
QString replyText = QString::fromUtf8(replyBytes.data(), replyBytes.size());
QRegularExpression re(QLatin1String("(\\b\\w{2}\\b)"));
const QVector<QStringRef> replyList = replyText.splitRef(QRegExp(QLatin1String("\n|\r\n|\r")));
QStringList tempList;
for (const QStringRef &string : replyList)
{
QRegularExpressionMatch match = re.match(string, 0, QRegularExpression::NormalMatch);
if (match.capturedRef(0).isNull())
continue;
const QString removeUrl = buildHttpPrefix() + QLatin1String("/axis-cgi/admin/param.cgi?action=remove&group=") +
groupName + QLatin1Char('.') + match.captured(0);
tempList.append(removeUrl);
}
tempList.removeDuplicates();
for (const QString &string : qAsConst(tempList))
{
QUrl url;
url.setUrl(string);
sendRequest(url, qNam);
}
reply->deleteLater();
}
//method to get how many parameter are configurated multiple times
int HTTPRequestHandler::getAmount(const QString &groupName, QNetworkAccessManager *qNam)
{
const QString reqStr = buildHttpPrefix() + QLatin1String("/axis-cgi/admin/param.cgi?action=list&group=");
QString baseUrl;
if (groupName == QLatin1String("Event.*.Actions"))
baseUrl = reqStr + groupName + QLatin1String(".*.Protocol");
else if (groupName == QLatin1String("EventServers"))
baseUrl = reqStr + groupName + QLatin1String(".TCP.*.Name");
else if (groupName == QLatin1String("Image"))
baseUrl = reqStr + groupName + QLatin1String(".I0.Appearance.Resolution");
else
baseUrl = reqStr + groupName + QLatin1String(".*.Name");
QUrl requestUrl(baseUrl);
QNetworkReply *reply = sendRequest(requestUrl, qNam);
QByteArray replyBytes = reply->readAll();
QString bytesString = QString::fromUtf8(replyBytes.data(), replyBytes.size());
QString replyText = QVariant(bytesString).toString();
QStringList replyList = replyText.split(QRegExp(QLatin1String("\n|\r\n|\r")));
reply->deleteLater();
return replyList.count() - 1;
}
QString HTTPRequestHandler::buildHttpPrefix() const
{
QString prefix = QLatin1String("http://");
if (!m_userName.isEmpty())
prefix += m_userName + QLatin1Char(':');
if (!m_password.isEmpty())
prefix += m_password + QLatin1Char('@');
prefix += m_ip;
return prefix;
}