Remoto - VFS
|
Creates httpd server node for VFS. More...
#include <VFS_httpd.h>
Public Member Functions | |
VFS_httpd (quint16 port, QHostAddress addr=QHostAddress::Any, bool ssl=false, QString sslCertPath="", QString sslKeyPath="") | |
VFS_httpd constructor. More... | |
virtual | ~VFS_httpd () |
virtual bool | isContainer () |
A VFS_httpd node cannot contain children. More... | |
![]() | |
VFS_tcp_server (quint16 port=0, QHostAddress address=QHostAddress::Any, bool ssl=false, QString sslCertPath="", QString sslKeyPath="") | |
Create a VFS_tcp_server node. More... | |
virtual | ~VFS_tcp_server () |
virtual QString | reportDetails () |
Report details of this node. More... | |
![]() | |
Q_INVOKABLE | VFS_node () |
The VFS_node constructor will add its instance to the VFS_node::__allNodes global node registry, observing thread safety rules. More... | |
virtual | ~VFS_node () |
VFS_node destructor. More... | |
virtual VFS_node * | append (QString name, VFS_node *node, bool containerCheck=true, QString user="server") |
Append a VFS_node as a child of this node. More... | |
QString | className () |
Return the class name of a node. More... | |
virtual VFS_request * | createRequest (VFS_request::requestType type, QString path, QString user="unknown", QJsonDocument data=QJsonDocument(), QJsonObject metadata=QJsonObject(), bool dontDelete=false) |
Create a new VFS_request with this object as _origin. More... | |
VFS_node * | find (QString path) |
Find a node by string path. More... | |
virtual VFS_node * | find (VFS_request *r) |
Find a node using a VFS_request. More... | |
VFS_node * | findChildWithName (QString name) |
Check if a child with a given name exists. More... | |
virtual VFS_node * | mount () |
Mount this node. More... | |
QString | uniqueChildName (QString name) |
Generate a unique child name. More... | |
virtual VFS_node * | unmount () |
Unmount this node. More... | |
virtual bool | validChildName (QString name) |
Check if a node name is valid. More... | |
Static Public Attributes | |
static QHash< QString, QString > | MIME_TYPES |
The mime type map. More... | |
Protected Slots | |
virtual void | createNewConnection () |
The server has received a new http connection request. More... | |
virtual void | handle (QHttpRequest *req, QHttpResponse *resp) |
Handle an incoming http request. More... | |
virtual bool | listen () |
Start listening for incoming connections. More... | |
![]() | |
virtual void | closeConnection () |
Close a socket connection. More... | |
virtual void | createNewConnection () |
The server has received a new connection request. More... | |
Protected Member Functions | |
void | initMimes () |
Initialize the mime map. More... | |
![]() | |
virtual VFS_tcp_client * | newClient (QTcpSocket *socket, bool ssl=false, QSslConfiguration sslConfiguration=QSslConfiguration()) |
Create a new VFS_tcp_client with the new socket. More... | |
virtual void | newConnection (VFS_tcp_client *c) |
Attach the clientMessage handler. More... | |
![]() | |
virtual void | aclDefaults (VFS_request *r) |
Return default values and features associated wth this node. More... | |
void | addACLDefault (QJsonObject &acl, bool value, QString description="") |
Add a default value to the acl object. More... | |
void | addACLFeature (QJsonObject &acl, QString feature, bool value, QString description="") |
Add a feature to the acl object. More... | |
void | addACLFeatureGroup (QJsonObject &acl, QString feature, QString group, bool value) |
Add a feature group to the acl object. More... | |
void | addACLFeatureUser (QJsonObject &acl, QString feature, QString user, bool value) |
Add a feature user to the acl object. More... | |
void | addACLGroup (QJsonObject &acl, QString group, bool value) |
Add a group to the acl object. More... | |
void | addACLUser (QJsonObject &acl, QString user, bool value) |
Add a user to the acl object. More... | |
virtual QByteArray | icon () |
Fetch the icon for a node. More... | |
virtual void | issueRequest (VFS_node *target, VFS_request *t) |
Issue a VFS_request to its target. More... | |
virtual void | issueRequest (VFS_request *t) |
A convenience function. More... | |
virtual void | issueResponse (VFS_request *t) |
Once a request has been completed, issue a response. More... | |
virtual void | ls (VFS_request *r) |
List the contents of this node. More... | |
virtual void | releaseLock (VFS_request *r) |
Release a lock on this node. More... | |
virtual void | report (VFS_request *r) |
Report debugging information about the current state of this node. More... | |
virtual void | requestLock (VFS_request *r) |
Request a lock on this node. More... | |
virtual void | rm (VFS_request *r) |
Remove a child entry from a node, or the node itself. More... | |
virtual void | submit (VFS_request *r) |
Submit a diff to a node. More... | |
virtual void | subscribe (VFS_request *r) |
Add an entry to this node's _subscription list. More... | |
virtual void | unsubscribe (VFS_request *r) |
Remove an entry from this node's _subscription list. More... | |
virtual void | unsubscribePath (QString path) |
Unsubscribe all references to a subpath. More... | |
virtual void | write (VFS_request *r) |
Write data to this node. More... | |
Protected Attributes | |
QHttpServer | _httpd |
QHttpServer instance. More... | |
![]() | |
QHostAddress | _listenAddress |
Address(es) allowed to connect, or 0.0.0.0 if all are allowed. More... | |
quint16 | _port |
TCP port to listen on, or 0 to find an available one. More... | |
VFSQTcpServer | _socket |
TCP socket used for connections. More... | |
bool | _ssl |
Use ssl? More... | |
QString | _sslCertPath |
ssl cert file path More... | |
QSslConfiguration | _sslConfiguration |
ssl config built up from below paths More... | |
QString | _sslKeyPath |
ssl key file path More... | |
![]() | |
VFS_children | _children |
This node's children. More... | |
QMutex | _lock |
A recursive mutex that is local to this node. More... | |
VFS_subscriptionType | _subscribers |
This node's subscribers. These subscribers will receive diff notifications. More... | |
Additional Inherited Members | |
![]() | |
virtual void | clientError (QAbstractSocket::SocketError error) |
A socket error has occurred. More... | |
virtual void | clientMessage (QByteArray message) |
A message has been received. More... | |
virtual bool | listen () |
Open the server socket and listen for new connections. More... | |
![]() | |
virtual void | applyDiff (VFS_request *r) |
Apply a diff received via subscription. More... | |
virtual void | executeRequest (VFS_request *t) |
Based on the VFS_request::requestType, execute the function associated with an operation. More... | |
void | notifySubscribers (VFS_node *origin, VFS_request *t) |
Propagate a diff to subscribers. More... | |
virtual void | receiveResponse (VFS_request *t) |
Once a VFS_request has been completed, a response will be issued back to its _origin. More... | |
void | remove (bool andDelete) |
Remove a child node. More... | |
virtual void | remove (VFS_node *node=nullptr, QString *name=nullptr, QString user="server") |
Remove a child node from this node. More... | |
virtual void | subtreeRequest (VFS_request *t) |
find() the target of a VFS_request, and execute the request More... | |
virtual void | unsubscribeAll (VFS_node *n) |
Remove all references to a subscriber from this node. More... | |
![]() | |
void | diff (VFS_node *origin, VFS_request *t) |
Emit a diff, which will trigger notifySubscribers() for a mounted node. More... | |
void | finished (bool andDelete=false) |
Emitted if a thread fails to create its node, or a node is rm()'d, or any other reason a node has completed its lifecycle. It is deleted if andDelete==true . More... | |
void | mounted () |
Emitted when a node is mount()ed. More... | |
void | unmounted (VFS_node *self) |
Emitted when a node is unmount()ed. More... | |
![]() | |
static bool | __isNode (VFS_node *) |
Check to see if a node is in the global registry. More... | |
static QString | code (QString nodename, QString libname, QString &error) |
Fetch code or any other resource from a node. More... | |
Creates httpd server node for VFS.
Uses https://github.com/nikhilm/qhttpserver
This class doesn't do anything directly... it will need to be subclassed to be useful. Note that it is a subclass of VFS_tcp_server, which will connect listen() to VFS::initialized().
Definition at line 14 of file VFS_httpd.h.
VFS_httpd::VFS_httpd | ( | quint16 | port, |
QHostAddress | addr = QHostAddress::Any , |
||
bool | ssl = false , |
||
QString | sslCertPath = "" , |
||
QString | sslKeyPath = "" |
||
) |
VFS_httpd constructor.
port | Port to listen on |
addr | Addresses allowed to connect, or 0.0.0.0 for all. |
ssl | Boolean in ssl mode? |
sslCertPath | the ssl cert file path |
sslKeyPath | the ssl key file path |
The httpd server will start listening when mount()ed.
This will initialize the mime map.
Definition at line 33 of file VFS_httpd.cpp.
|
virtual |
Definition at line 43 of file VFS_httpd.cpp.
|
protectedvirtualslot |
The server has received a new http connection request.
Do what QHttpServer does with new connections. We create a QHttpConnection and attach the same signals as QHttpServer. But we do it here because we know that the socket coming in will (or will not) have ssl already established.
Unlike VFS_tcp_server, we don't mount every connection as a child because most connections will be short lived.
Definition at line 136 of file VFS_httpd.cpp.
|
protectedvirtualslot |
Handle an incoming http request.
This should be subclassed.
req | request object |
resp | response object |
This base implementation does nothing but send an empty response using a VFS_httpd_responder.
Definition at line 168 of file VFS_httpd.cpp.
|
protected |
Initialize the mime map.
Supported mimes based on file extension:
Extension | Mime |
---|---|
html | text/html |
rhtml | text/html |
js | text/javascript |
json | application/json |
css | text/css |
ico | image/ico |
png | image/png |
jpg | image/jpg |
jpeg | image/jpeg |
gif | image/gif |
eot | application/vnd.ms-fontobject |
svg | image/svg+xml |
ttf | application/x-font-ttf |
woff | text/plain |
Definition at line 80 of file VFS_httpd.cpp.
|
virtual |
A VFS_httpd node cannot contain children.
Reimplemented from VFS_tcp_server.
Definition at line 52 of file VFS_httpd.cpp.
|
protectedvirtualslot |
Start listening for incoming connections.
This will also create a connection between _httpd->newRequest() and handle().
If already listening, this will return false.
Definition at line 109 of file VFS_httpd.cpp.
|
protected |
QHttpServer instance.
Definition at line 27 of file VFS_httpd.h.
|
static |
The mime type map.
Definition at line 24 of file VFS_httpd.h.