Remoto - VFS
|
VFS_remotoserver is a subclass of VFS_websocket_server. More...
#include <VFS_remotoserver.h>
Public Slots | |
virtual void | clientBinaryMessage (QByteArray message) |
The client has received as binary websocket message. More... | |
virtual void | clientTextMessage (QString message) |
The client has received as text websocket message. More... | |
![]() | |
virtual void | clientBinaryMessage (QByteArray message) |
The client has received a binary websocket message. More... | |
virtual void | clientError (QAbstractSocket::SocketError error) |
A socket error has occurred. More... | |
virtual void | clientTextMessage (QString message) |
A client has received a text websocket message. More... | |
virtual bool | listen () |
Start listening on the _socket for incoming connections. More... | |
virtual void | serverError (QWebSocketProtocol::CloseCode closeCode) |
A server socket error has occurred. 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... | |
Public Member Functions | |
Q_INVOKABLE | VFS_remotoserver (quint16 port, QString auth, QString sessions, QHostAddress addr=QHostAddress::Any, QWebSocketServer::SslMode ssl=QWebSocketServer::NonSecureMode, QString sslCertPath="", QString sslKeyPath="") |
virtual | ~VFS_remotoserver () |
virtual QString | reportDetails () |
Report the _port number. More... | |
![]() | |
VFS_websocket_server (quint16 port, QString authPaths, QString sessions, QHostAddress addr=QHostAddress::Any, QWebSocketServer::SslMode ssl=QWebSocketServer::NonSecureMode, QString sslCertPath="", QString sslKeyPath="") | |
VFS_websocket_server constructor. More... | |
virtual | ~VFS_websocket_server () |
VFS_websocket_server destructor. More... | |
virtual bool | authenticate (VFS_websocket_client *client, QJsonObject credentials) |
Authenticate a client based on received credentials. More... | |
virtual void | authorize (VFS_websocket_client *client, QJsonObject authdata) |
Authorize a client and create a session based on type and username. More... | |
virtual bool | isContainer () |
A VFS_websocket_server is always a container; it's children will be the connected clients. 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... | |
Protected Member Functions | |
virtual VFS_websocket_client * | createWebsocketClient (QWebSocket *s) |
Create a VFS_remotoserver_client to host a new connection. 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 | metadata (VFS_request *r) |
Fetch the metadata of this node. More... | |
virtual void | read (VFS_request *r) |
Return the data contents of this node, or if it's a container call ls() 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... | |
Static Private Attributes | |
static int | count = 0 |
The global count of VFS_remotoserver instances, used to create a config.json file if needed. More... | |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
virtual void | closeConnection () |
Close a child client connection, and remove() it from this node's child list. More... | |
virtual void | newConnection () |
A new connection has been requested, and is pending. More... | |
virtual void | sslErrors (const QList< QSslError > &errors) |
One or more ssl errors have occurred. More... | |
![]() | |
QStringList | _authPaths |
The list of auth paths to query when a user request authentication. More... | |
QHostAddress | _listenAddress |
Address to listen on, or 0.0.0.0 for all. More... | |
quint16 | _port |
Port to listen on. More... | |
QString | _sessionsPath |
The path to the sessionManager node. More... | |
QWebSocketServer | _socket |
The QWebSocket server object that will be listening. More... | |
QWebSocketServer::SslMode | _ssl |
Use ssl? More... | |
QString | _sslCertPath |
ssl cert file path 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... | |
VFS_remotoserver is a subclass of VFS_websocket_server.
A VFS_remotoserver can service clients over websocket connections. This can be done with ssl (wss://) or without (ws://).
If wss is being used, https must be used.
When a client connects, it is required to authenticate against one of the auth paths. When it is authenticated, a VFS_remotoserver_client node will be appended as a child to this node.
Definition at line 10 of file VFS_remotoserver.h.
|
explicit |
port | Port to listen on. |
authPaths | A comma-separated list of auth paths. |
sessions | The path to the sessionManager, which will be a "sessions" node. |
addr | Allowed addresses to listen on... use 0.0.0.0 for any. |
ssl | on or off? |
sslCertPath | QString path on real filesystem. |
sslKeyPath | QString path on real filesystem. |
If a VFS_WSCONFIGDIR environment variable is set, the remotoserver will write a config.json file to that folder to tell a javascript client what address, port, and path to connect to.
Generally, the ssl cert/key files will want to match those of apache/nginx.
Definition at line 45 of file VFS_remotoserver.cpp.
|
virtual |
Definition at line 51 of file VFS_remotoserver.cpp.
|
virtualslot |
The client has received as binary websocket message.
message | The message |
The message is immediately sent to VFS_remotoserver_client::receive().
This must be called as the result of a slot, because sender() is dynamically cast to the VFS_remotoserver_client.
Definition at line 66 of file VFS_remotoserver.cpp.
|
virtualslot |
The client has received as text websocket message.
message | The message |
The message is immediately sent to the VFS_remotoserver_client::receive().
This must be called as the result of a slot, because sender() is dynamically cast to the VFS_remotoserver_client.
Definition at line 92 of file VFS_remotoserver.cpp.
|
protectedvirtual |
Create a VFS_remotoserver_client to host a new connection.
s | The socket returned by _socket.nextPendingConnection(). |
Reimplemented from VFS_websocket_server.
Definition at line 112 of file VFS_remotoserver.cpp.
|
virtual |
Report the _port number.
Reimplemented from VFS_node.
Definition at line 122 of file VFS_remotoserver.cpp.
|
staticprivate |
The global count of VFS_remotoserver instances, used to create a config.json file if needed.
Definition at line 30 of file VFS_remotoserver.h.