Remoto - VFS
|
Open a listening TCP port for other clients to connect to. More...
#include <VFS_tcp_server.h>
Public Slots | |
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... | |
Public Member Functions | |
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 bool | isContainer () |
A server is a container. More... | |
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... | |
Protected Slots | |
virtual void | closeConnection () |
Close a socket connection. More... | |
virtual void | createNewConnection () |
The server has received a new connection request. More... | |
Protected Member Functions | |
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 | |
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... | |
Private Member Functions | |
virtual void | metadata (VFS_request *r) |
Fetch the metadata for this node. More... | |
virtual void | read (VFS_request *r) |
Read the state of this node, which is the result of ls(). 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... | |
Open a listening TCP port for other clients to connect to.
This class manages client connections and appends new connections as children of itself. Diffs are emitted to subscribers when clients connect and disconnect.
Subclasses must be used to make the functionality more specific; this class should never be instantiated without a subclass implementation.
Most notably, the newClient() function should be overridden, which will return a VFS_tcp_client subclass that provides useful functionality, as the base class does nothing.
If the node was created using port 0, a first available port will be selected. If the actual port is needed by some other process, a read() on this node will report the port that was selected.
Definition at line 29 of file VFS_tcp_server.h.
|
explicit |
Create a VFS_tcp_server node.
port | The port to listen on |
address | The allowable addresses to connect from. |
ssl | Is it in ssl mode? |
sslCertPath | The path to the cert file |
sslKeyPath | The path to the key file |
This creates the node and connects to the VFS::initialized event.
Definition at line 145 of file VFS_tcp_server.cpp.
|
virtual |
Definition at line 158 of file VFS_tcp_server.cpp.
|
virtualslot |
A socket error has occurred.
Log it as an error/warning, but do nothing.
error | The error |
Definition at line 394 of file VFS_tcp_server.cpp.
|
virtualslot |
A message has been received.
message | The message |
Subclasses will want to implement a protocol here
Definition at line 372 of file VFS_tcp_server.cpp.
|
protectedvirtualslot |
Close a socket connection.
This will also remove it as a child from this VFS_tcp_server node.
Definition at line 344 of file VFS_tcp_server.cpp.
|
protectedvirtualslot |
The server has received a new connection request.
Call newCilent() with the new socket, and attach error and connection handlers.
Definition at line 265 of file VFS_tcp_server.cpp.
|
virtual |
A server is a container.
Connections will be placed as children of this node.
Reimplemented from VFS_node.
Reimplemented in VFS_httpd.
Definition at line 170 of file VFS_tcp_server.cpp.
|
virtualslot |
Open the server socket and listen for new connections.
This is triggered from VFS::initialized().
If the node was created using port 0, a first available port was selected. If the actual port is needed by some other process, a metadata() on this node will provide the actual port that was selected.
Definition at line 186 of file VFS_tcp_server.cpp.
|
privatevirtual |
Fetch the metadata for this node.
r | The VFS_request object |
This will also include the address and port that this node is listening on.
If the node was created using port 0, a first available port was selected. If the actual port is needed by some other process, the metadata() from this node will provide the actual port and address that was selected.
Reimplemented from VFS_node.
Definition at line 425 of file VFS_tcp_server.cpp.
|
protectedvirtual |
Create a new VFS_tcp_client with the new socket.
socket | The new socket, created by the server socket |
ssl | Whether or not to use ssl |
sslConfiguration | The ssl configuration (probably coming from the server) |
This is for subclasses to provide their own subclass instance of a VFS_tcp_client
Reimplemented in VFS_tcp_export.
Definition at line 332 of file VFS_tcp_server.cpp.
|
protectedvirtual |
Attach the clientMessage handler.
client | The new VFS_tcp_cient |
Definition at line 305 of file VFS_tcp_server.cpp.
|
privatevirtual |
Read the state of this node, which is the result of ls().
r | The VFS_request object |
Reimplemented from VFS_node.
Definition at line 408 of file VFS_tcp_server.cpp.
|
virtual |
Report details of this node.
This will include the socket address and port, as well as the open state of the socket.
Reimplemented from VFS_node.
Reimplemented in VFS_tcp_export.
Definition at line 254 of file VFS_tcp_server.cpp.
|
protected |
Address(es) allowed to connect, or 0.0.0.0 if all are allowed.
Definition at line 41 of file VFS_tcp_server.h.
|
protected |
TCP port to listen on, or 0 to find an available one.
Definition at line 42 of file VFS_tcp_server.h.
|
protected |
TCP socket used for connections.
Definition at line 47 of file VFS_tcp_server.h.
|
protected |
Use ssl?
Definition at line 43 of file VFS_tcp_server.h.
|
protected |
ssl cert file path
Definition at line 45 of file VFS_tcp_server.h.
|
protected |
ssl config built up from below paths
Definition at line 44 of file VFS_tcp_server.h.
|
protected |
ssl key file path
Definition at line 46 of file VFS_tcp_server.h.