Remoto - VFS: VFS_httpd Class Reference
Remoto - VFS

Creates httpd server node for VFS. More...

#include <VFS_httpd.h>

Inheritance diagram for VFS_httpd:
VFS_tcp_server VFS_node VFS_httpd_browser

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...
 
- Public Member Functions inherited from VFS_tcp_server
 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...
 
- Public Member Functions inherited from VFS_node
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_nodeappend (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_requestcreateRequest (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_nodefind (QString path)
 Find a node by string path. More...
 
virtual VFS_nodefind (VFS_request *r)
 Find a node using a VFS_request. More...
 
VFS_nodefindChildWithName (QString name)
 Check if a child with a given name exists. More...
 
virtual VFS_nodemount ()
 Mount this node. More...
 
QString uniqueChildName (QString name)
 Generate a unique child name. More...
 
virtual VFS_nodeunmount ()
 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...
 
- Protected Slots inherited from VFS_tcp_server
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...
 
- Protected Member Functions inherited from VFS_tcp_server
virtual VFS_tcp_clientnewClient (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...
 
- Protected Member Functions inherited from VFS_node
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...
 
- Protected Attributes inherited from VFS_tcp_server
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...
 
- Protected Attributes inherited from VFS_node
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

- Public Slots inherited from VFS_tcp_server
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...
 
- Public Slots inherited from VFS_node
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...
 
- Signals inherited from VFS_node
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 Public Member Functions inherited from VFS_node
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...
 

Detailed Description

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().

See also
VFS_tcp_server
VFS_httpd_browser
VFS_httpd_responder

Definition at line 14 of file VFS_httpd.h.

Constructor & Destructor Documentation

◆ VFS_httpd()

VFS_httpd::VFS_httpd ( quint16  port,
QHostAddress  addr = QHostAddress::Any,
bool  ssl = false,
QString  sslCertPath = "",
QString  sslKeyPath = "" 
)

VFS_httpd constructor.

Parameters
portPort to listen on
addrAddresses allowed to connect, or 0.0.0.0 for all.
sslBoolean in ssl mode?
sslCertPaththe ssl cert file path
sslKeyPaththe 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.

◆ ~VFS_httpd()

VFS_httpd::~VFS_httpd ( )
virtual

Definition at line 43 of file VFS_httpd.cpp.

Member Function Documentation

◆ createNewConnection

void VFS_httpd::createNewConnection ( )
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.

◆ handle

void VFS_httpd::handle ( QHttpRequest *  req,
QHttpResponse *  resp 
)
protectedvirtualslot

Handle an incoming http request.

This should be subclassed.

Parameters
reqrequest object
respresponse object

This base implementation does nothing but send an empty response using a VFS_httpd_responder.

See also
VFS_httpd_responder

Definition at line 168 of file VFS_httpd.cpp.

◆ initMimes()

void VFS_httpd::initMimes ( )
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.

◆ isContainer()

bool VFS_httpd::isContainer ( )
virtual

A VFS_httpd node cannot contain children.

Returns
false

Reimplemented from VFS_tcp_server.

Definition at line 52 of file VFS_httpd.cpp.

◆ listen

bool VFS_httpd::listen ( )
protectedvirtualslot

Start listening for incoming connections.

Returns
Success or failure to listen.

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.

Member Data Documentation

◆ _httpd

QHttpServer VFS_httpd::_httpd
protected

QHttpServer instance.

Definition at line 27 of file VFS_httpd.h.

◆ MIME_TYPES

QHash< QString, QString > VFS_httpd::MIME_TYPES
static

The mime type map.

Definition at line 24 of file VFS_httpd.h.


The documentation for this class was generated from the following files: