Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
Executable
+150
@@ -0,0 +1,150 @@
|
||||
/**
|
||||
* @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 ¶mUrl, 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;
|
||||
}
|
||||
Reference in new issue
Block a user