Remoto - VFS: VFS_tcp_export Class Reference
Remoto - VFS

Open a listening TCP socket for mounting one VFS into another. More...

#include <VFS_tcp_export.h>

Inheritance diagram for VFS_tcp_export:
VFS_tcp_server VFS_node

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_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 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_clientnewClient (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...
 

Detailed Description

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.

See also
VFS_tcp_server

Definition at line 9 of file VFS_tcp_export.h.

Constructor & Destructor Documentation

◆ VFS_tcp_export()

VFS_tcp_export::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() 
)
explicit

VFS_tcp_export constructor.

Parameters
exportRootThe VFS path to export.
portThe port to listen on. This port is included in a broadcast message.
addressThe allowable addresses to connect from.
sslIs it in ssl mode?
sslCertPathThe path to the cert file
sslKeyPathThe path to the key file
iconAn optional icon to override the one provided by the exportRoot.
broadcastNameThe name of the service being broadcast. This is included in the broadcast message.
broadcastAddressAn 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.
multicastAddressThe 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.
multicastPortAn 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.
tagsA 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.

◆ ~VFS_tcp_export()

VFS_tcp_export::~VFS_tcp_export ( )
virtual

Definition at line 76 of file VFS_tcp_export.cpp.

Member Function Documentation

◆ clientMessage

void VFS_tcp_export::clientMessage ( QByteArray  message)
virtualslot

A client message has been received.

Parameters
messageThe incoming message

This should be implemented in subclasses.

Definition at line 137 of file VFS_tcp_export.cpp.

◆ icon()

QByteArray VFS_tcp_export::icon ( )
protectedvirtual

VFS_tcp_mount::icon.

Returns

DOCME

Reimplemented from VFS_node.

Definition at line 87 of file VFS_tcp_export.cpp.

◆ listen

bool VFS_tcp_export::listen ( )
virtualslot

Open the server socket and listen for new connections.

Returns
The open state of the socket.

If this node has a broadcast port set, it will also start broadcasting here.

Definition at line 152 of file VFS_tcp_export.cpp.

◆ newClient()

VFS_tcp_client * VFS_tcp_export::newClient ( QTcpSocket *  socket,
bool  ssl = false,
QSslConfiguration  sslConfiguration = QSslConfiguration() 
)
protectedvirtual

Create a new VFS_tcp_export_client with the new socket.

Parameters
socketThe new socket, created by the server socket
sslWhether or not to use ssl
sslConfigurationThe ssl configuration (probably coming from the server)
Returns
The new VFS_tcp_export_client

Reimplemented from VFS_tcp_server.

Definition at line 113 of file VFS_tcp_export.cpp.

◆ reportDetails()

QString VFS_tcp_export::reportDetails ( )
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.

◆ sendBroadcast()

void VFS_tcp_export::sendBroadcast ( )
protectedvirtual

Broadcast information about this mount to the network.

Definition at line 197 of file VFS_tcp_export.cpp.

◆ startBroadcast

void VFS_tcp_export::startBroadcast ( )
protectedvirtualslot

Start broadcasting this mount.

Definition at line 180 of file VFS_tcp_export.cpp.

◆ timerEvent()

void VFS_tcp_export::timerEvent ( QTimerEvent *  event)
protectedvirtual

A timer event has fired, probably for sendBroadcast.

Parameters
eventThe QTimerEvent

Definition at line 167 of file VFS_tcp_export.cpp.

Member Data Documentation

◆ _broadcastAddress

QString VFS_tcp_export::_broadcastAddress
protected

Definition at line 44 of file VFS_tcp_export.h.

◆ _broadcastid

int VFS_tcp_export::_broadcastid
protected

Definition at line 42 of file VFS_tcp_export.h.

◆ _broadcastName

QString VFS_tcp_export::_broadcastName
protected

Definition at line 43 of file VFS_tcp_export.h.

◆ _broadcastSocket

QUdpSocket VFS_tcp_export::_broadcastSocket
protected

Definition at line 45 of file VFS_tcp_export.h.

◆ _exportRoot

QString VFS_tcp_export::_exportRoot
protected

The VFS path to export.

Definition at line 34 of file VFS_tcp_export.h.

◆ _icon

QByteArray VFS_tcp_export::_icon
private

The optional override icon.

Definition at line 51 of file VFS_tcp_export.h.

◆ _multicastAddress

QHostAddress VFS_tcp_export::_multicastAddress
protected

Definition at line 47 of file VFS_tcp_export.h.

◆ _multicastPort

quint16 VFS_tcp_export::_multicastPort
protected

Definition at line 46 of file VFS_tcp_export.h.

◆ _tags

QJsonArray VFS_tcp_export::_tags
protected

Definition at line 48 of file VFS_tcp_export.h.


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