mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-05 00:11:16 -05:00
92 lines
2.5 KiB
C
92 lines
2.5 KiB
C
|
/**
|
||
|
@file
|
||
|
@author Stefan Frings
|
||
|
*/
|
||
|
|
||
|
#ifndef STATICFILECONTROLLER_H
|
||
|
#define STATICFILECONTROLLER_H
|
||
|
|
||
|
#include <QCache>
|
||
|
#include <QMutex>
|
||
|
#include "httpglobal.h"
|
||
|
#include "httprequest.h"
|
||
|
#include "httpresponse.h"
|
||
|
#include "httprequesthandler.h"
|
||
|
|
||
|
namespace stefanfrings {
|
||
|
|
||
|
/**
|
||
|
Delivers static files. It is usually called by the applications main request handler when
|
||
|
the caller requests a path that is mapped to static files.
|
||
|
<p>
|
||
|
The following settings are required in the config file:
|
||
|
<code><pre>
|
||
|
path=../docroot
|
||
|
encoding=UTF-8
|
||
|
maxAge=60000
|
||
|
cacheTime=60000
|
||
|
cacheSize=1000000
|
||
|
maxCachedFileSize=65536
|
||
|
</pre></code>
|
||
|
The path is relative to the directory of the config file. In case of windows, if the
|
||
|
settings are in the registry, the path is relative to the current working directory.
|
||
|
<p>
|
||
|
The encoding is sent to the web browser in case of text and html files.
|
||
|
<p>
|
||
|
The cache improves performance of small files when loaded from a network
|
||
|
drive. Large files are not cached. Files are cached as long as possible,
|
||
|
when cacheTime=0. The maxAge value (in msec!) controls the remote browsers cache.
|
||
|
<p>
|
||
|
Do not instantiate this class in each request, because this would make the file cache
|
||
|
useless. Better create one instance during start-up and call it when the application
|
||
|
received a related HTTP request.
|
||
|
*/
|
||
|
|
||
|
class DECLSPEC StaticFileController : public HttpRequestHandler {
|
||
|
Q_OBJECT
|
||
|
Q_DISABLE_COPY(StaticFileController)
|
||
|
public:
|
||
|
|
||
|
/** Constructor */
|
||
|
StaticFileController(QSettings* settings, QObject* parent = NULL);
|
||
|
|
||
|
/** Generates the response */
|
||
|
void service(HttpRequest& request, HttpResponse& response);
|
||
|
|
||
|
private:
|
||
|
|
||
|
/** Encoding of text files */
|
||
|
QString encoding;
|
||
|
|
||
|
/** Root directory of documents */
|
||
|
QString docroot;
|
||
|
|
||
|
/** Maximum age of files in the browser cache */
|
||
|
int maxAge;
|
||
|
|
||
|
struct CacheEntry {
|
||
|
QByteArray document;
|
||
|
qint64 created;
|
||
|
QByteArray filename;
|
||
|
};
|
||
|
|
||
|
/** Timeout for each cached file */
|
||
|
int cacheTimeout;
|
||
|
|
||
|
/** Maximum size of files in cache, larger files are not cached */
|
||
|
int maxCachedFileSize;
|
||
|
|
||
|
/** Cache storage */
|
||
|
QCache<QString,CacheEntry> cache;
|
||
|
|
||
|
/** Used to synchronize cache access for threads */
|
||
|
QMutex mutex;
|
||
|
|
||
|
/** Set a content-type header in the response depending on the ending of the filename */
|
||
|
void setContentType(QString file, HttpResponse& response) const;
|
||
|
};
|
||
|
|
||
|
} // end of namespace
|
||
|
|
||
|
#endif // STATICFILECONTROLLER_H
|