Remoto - VFS
|
Open a listening TCP socket for mounting one VFS into another. More...
#include <VFS_tcp_export.h>
Public Slots | |
virtual void | clientMessage (QByteArray message) |
A client message has been received. More... | |
virtual bool | listen () |
Open the server socket and listen for new connections. More... | |
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... | |
Public Member Functions | |
Q_INVOKABLE | VFS_tcp_export (QString exportRoot, quint16 port, QHostAddress address=QHostAddress::Any, bool ssl=false, QString sslCertPath="", QString sslKeyPath="", QByteArray icon="", QString broadcastName="", QString broadcastAddress="", QString multicastAddress="", quint16 multicastPort=0, QJsonArray tags=QJsonArray()) |
VFS_tcp_export constructor. More... | |
virtual | ~VFS_tcp_export () |
virtual QString | reportDetails () |
Report details of this node. 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 bool | isContainer () |
A server is a container. 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_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 | startBroadcast () |
Start broadcasting this mount. 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 | |
virtual QByteArray | icon () |
VFS_tcp_mount::icon. More... | |
virtual VFS_tcp_client * | newClient (QTcpSocket *socket, bool ssl=false, QSslConfiguration sslConfiguration=QSslConfiguration()) |
Create a new VFS_tcp_export_client with the new socket. More... | |
virtual void | sendBroadcast () |
Broadcast information about this mount to the network. More... | |
virtual void | timerEvent (QTimerEvent *event) |
A timer event has fired, probably for sendBroadcast. More... | |
Protected Member Functions inherited from VFS_tcp_server | |
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 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 | |
QString | _broadcastAddress |
int | _broadcastid |
QString | _broadcastName |
QUdpSocket | _broadcastSocket |
QString | _exportRoot |
The VFS path to export. More... | |
QHostAddress | _multicastAddress |
quint16 | _multicastPort |
QJsonArray | _tags |
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... | |
Private Attributes | |
QByteArray | _icon |
The optional override icon. 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... | |
Open a listening TCP socket for mounting one VFS into another.
Subscriptions, reads, writes, or any other VFS Command can be sent over the line. This emulates something like an NFS mount, but with some extra functionality.
Subclasses can make the functionality more specific, and any client that implements the VFS protocol could potentially connect.
The VFS_tcp_export can also optionally broadcast its existence to the network, which simplifies mounting. The broadcast message will indicate address and port for a VFS to connect to. After a VFS is mounted it will stop broadcasting.
Broadcast is over a UDP multicast address.
Definition at line 9 of file VFS_tcp_export.h.
|
explicit |
VFS_tcp_export constructor.
exportRoot | The VFS path to export. |
port | The port to listen on. This port is included in a broadcast message. |
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 |
icon | An optional icon to override the one provided by the exportRoot. |
broadcastName | The name of the service being broadcast. This is included in the broadcast message. |
broadcastAddress | An string indicating the address to use to connect to this mount. This is included in the broadcast message. In most cases this will want to be the IP or FQDN of this machine exporting a VFS path. |
multicastAddress | The broadcast/multicast address to broadcast on. You will have to calculate this manually as there are too many unknowns with different subnets, especially when using docker. If one is not provided, 255.255.255.255 will be used, which will spam your whole network. |
multicastPort | An optional port to broadcast the existence of this mount to any other VFS instances who may be listening. If this is set to a non-zero value, broadcast will activate. |
tags | A QJsonArray list of tags to include in a broadcast message. This indicates to the receiving side where to mount this share. |
A broadcast/multicast address calculator can be found here: http://jodies.de/ipcalc?host=10.10.100.170&mask1=24&mask2=
Definition at line 51 of file VFS_tcp_export.cpp.
|
virtual |
Definition at line 76 of file VFS_tcp_export.cpp.
|
virtualslot |
A client message has been received.
message | The incoming message |
This should be implemented in subclasses.
Definition at line 137 of file VFS_tcp_export.cpp.
|
protectedvirtual |
|
virtualslot |
Open the server socket and listen for new connections.
If this node has a broadcast port set, it will also start broadcasting here.
Definition at line 152 of file VFS_tcp_export.cpp.
|
protectedvirtual |
Create a new VFS_tcp_export_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) |
Reimplemented from VFS_tcp_server.
Definition at line 113 of file VFS_tcp_export.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_tcp_server.
Definition at line 99 of file VFS_tcp_export.cpp.
|
protectedvirtual |
Broadcast information about this mount to the network.
Definition at line 197 of file VFS_tcp_export.cpp.
|
protectedvirtualslot |
Start broadcasting this mount.
Definition at line 180 of file VFS_tcp_export.cpp.
|
protectedvirtual |
A timer event has fired, probably for sendBroadcast.
event | The QTimerEvent |
Definition at line 167 of file VFS_tcp_export.cpp.
|
protected |
Definition at line 44 of file VFS_tcp_export.h.
|
protected |
Definition at line 42 of file VFS_tcp_export.h.
|
protected |
Definition at line 43 of file VFS_tcp_export.h.
|
protected |
Definition at line 45 of file VFS_tcp_export.h.
|
protected |
The VFS path to export.
Definition at line 34 of file VFS_tcp_export.h.
|
private |
The optional override icon.
Definition at line 51 of file VFS_tcp_export.h.
|
protected |
Definition at line 47 of file VFS_tcp_export.h.
|
protected |
Definition at line 46 of file VFS_tcp_export.h.
|
protected |
Definition at line 48 of file VFS_tcp_export.h.