mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 10:52:49 +00:00
kio: insert Last-Modified header when serving files from KHTTP
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
b1522a35dd
commit
f6ef1e42f3
1 changed files with 25 additions and 2 deletions
|
@ -26,6 +26,7 @@
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QFileInfo>
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
@ -241,6 +242,14 @@ static QByteArray HTTPStatusToBytes(const ushort httpstatus)
|
||||||
return QByteArray("OK");
|
return QByteArray("OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const QByteArray HTTPDate(const QDateTime &datetime)
|
||||||
|
{
|
||||||
|
Q_ASSERT(datetime.timeSpec() == Qt::UTC);
|
||||||
|
QByteArray httpdate = datetime.toString("ddd, dd MMM yyyy hh:mm:ss").toAscii();
|
||||||
|
httpdate.append(" GMT");
|
||||||
|
return httpdate;
|
||||||
|
}
|
||||||
|
|
||||||
static QByteArray HTTPStatusToContent(const ushort httpstatus)
|
static QByteArray HTTPStatusToContent(const ushort httpstatus)
|
||||||
{
|
{
|
||||||
QByteArray httpdata("<html>\n");
|
QByteArray httpdata("<html>\n");
|
||||||
|
@ -256,8 +265,8 @@ static KHTTPHeaders HTTPHeaders(const QString &serverid, const bool authenticate
|
||||||
const QByteArray httpserver = serverid.toAscii();
|
const QByteArray httpserver = serverid.toAscii();
|
||||||
KHTTPHeaders khttpheaders;
|
KHTTPHeaders khttpheaders;
|
||||||
khttpheaders.insert("Server", httpserver);
|
khttpheaders.insert("Server", httpserver);
|
||||||
const QString httpdate = QDateTime::currentDateTimeUtc().toString("ddd, dd MMM yyyy hh:mm:ss") + QLatin1String(" GMT");
|
const QByteArray httpdate = HTTPDate(QDateTime::currentDateTimeUtc());
|
||||||
khttpheaders.insert("Date", httpdate.toAscii());
|
khttpheaders.insert("Date", httpdate);
|
||||||
// optional for anything but 405, see:
|
// optional for anything but 405, see:
|
||||||
// https://www.rfc-editor.org/rfc/rfc9110.html#section-10.2.1
|
// https://www.rfc-editor.org/rfc/rfc9110.html#section-10.2.1
|
||||||
khttpheaders.insert("Allow", "GET");
|
khttpheaders.insert("Allow", "GET");
|
||||||
|
@ -463,6 +472,20 @@ void KHTTPPrivate::slotNewConnection()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool haslastmodified = false;
|
||||||
|
foreach (const QByteArray &httpkey, khttpheaders.keys()) {
|
||||||
|
if (qstricmp(httpkey.constData(), "Last-Modified") == 0) {
|
||||||
|
haslastmodified = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!haslastmodified) {
|
||||||
|
kDebug(s_khttpdebugarea) << "adding Last-Modified";
|
||||||
|
const QDateTime responsefilelastmodified = QFileInfo(responsefilepath).lastModified();
|
||||||
|
const QByteArray httpfilelastmodified = HTTPDate(responsefilelastmodified.toUTC());
|
||||||
|
khttpheaders.insert("Last-Modified", httpfilelastmodified);
|
||||||
|
}
|
||||||
|
|
||||||
kDebug(s_khttpdebugarea) << "sending file to client" << responsefilepath << khttpheaders;
|
kDebug(s_khttpdebugarea) << "sending file to client" << responsefilepath << khttpheaders;
|
||||||
const QByteArray httpdata = HTTPData(responsestatus, khttpheaders, httpfile.size());
|
const QByteArray httpdata = HTTPData(responsestatus, khttpheaders, httpfile.size());
|
||||||
client->write(httpdata);
|
client->write(httpdata);
|
||||||
|
|
Loading…
Add table
Reference in a new issue