Remoto - VFS: VFS_remotoserver Class Reference
Remoto - VFS

VFS_remotoserver is a subclass of VFS_websocket_server. More...

#include <VFS_remotoserver.h>

Inheritance diagram for VFS_remotoserver:
VFS_websocket_server VFS_node

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...
 
- Public Slots inherited from VFS_websocket_server
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...
 
- 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...
 

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...
 
- Public Member Functions inherited from VFS_websocket_server
 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...
 
- 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...
 

Protected Member Functions

virtual VFS_websocket_clientcreateWebsocketClient (QWebSocket *s)
 Create a VFS_remotoserver_client to host a new connection. 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 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

- 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...
 
- Protected Slots inherited from VFS_websocket_server
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...
 
- Protected Attributes inherited from VFS_websocket_server
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...
 
- 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...
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ VFS_remotoserver()

VFS_remotoserver::VFS_remotoserver ( quint16  port,
QString  authPaths,
QString  sessions,
QHostAddress  addr = QHostAddress::Any,
QWebSocketServer::SslMode  ssl = QWebSocketServer::NonSecureMode,
QString  sslCertPath = "",
QString  sslKeyPath = "" 
)
explicit
Parameters
portPort to listen on.
authPathsA comma-separated list of auth paths.
sessionsThe path to the sessionManager, which will be a "sessions" node.
addrAllowed addresses to listen on... use 0.0.0.0 for any.
sslon or off?
sslCertPathQString path on real filesystem.
sslKeyPathQString 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.

See also
The Javascript Client

Definition at line 45 of file VFS_remotoserver.cpp.

◆ ~VFS_remotoserver()

VFS_remotoserver::~VFS_remotoserver ( )
virtual

Definition at line 51 of file VFS_remotoserver.cpp.

Member Function Documentation

◆ clientBinaryMessage

void VFS_remotoserver::clientBinaryMessage ( QByteArray  message)
virtualslot

The client has received as binary websocket message.

Parameters
messageThe 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.

See also
VFS_websocket_server::clientBinaryMessage()

Definition at line 66 of file VFS_remotoserver.cpp.

◆ clientTextMessage

void VFS_remotoserver::clientTextMessage ( QString  message)
virtualslot

The client has received as text websocket message.

Parameters
messageThe 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.

See also
VFS_websocket_server::clientBinaryMessage()

Definition at line 92 of file VFS_remotoserver.cpp.

◆ createWebsocketClient()

VFS_websocket_client * VFS_remotoserver::createWebsocketClient ( QWebSocket *  s)
protectedvirtual

Create a VFS_remotoserver_client to host a new connection.

Parameters
sThe socket returned by _socket.nextPendingConnection().
Returns
The new VFS_remotoserver_client.

Reimplemented from VFS_websocket_server.

Definition at line 112 of file VFS_remotoserver.cpp.

◆ reportDetails()

QString VFS_remotoserver::reportDetails ( )
virtual

Report the _port number.

Returns
A string containing the _port number.

Reimplemented from VFS_node.

Definition at line 122 of file VFS_remotoserver.cpp.

Member Data Documentation

◆ count

int VFS_remotoserver::count = 0
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.


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