Remoto - VFS: VFS_tcp_mount Class Reference
Remoto - VFS

The VFS_tcp_mount class is a client side connection that will attempt to connect to another VFS instance. More...

#include <VFS_tcp_mount.h>

Inheritance diagram for VFS_tcp_mount:
VFS_tcp_client VFS_node

Public Slots

virtual void executeRequest (VFS_request *r)
 DOCME. More...
 
void init ()
 DOCME. More...
 
virtual void unsubscribeAll (VFS_node *n)
 Remove all references to a subscriber from this node. More...
 
- Public Slots inherited from VFS_tcp_client
virtual void close ()
 DOCME. More...
 
virtual void init ()
 DOCME. More...
 
void initSSL ()
 DOCME. More...
 
void readyRead ()
 DOCME. 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_mount (QString name, QString path, QString address, quint16 port, quint16 interval=3000, bool ssl=false, QString sslCertPath="")
 VFS_tcp_mount constructor. More...
 
virtual ~VFS_tcp_mount ()
 
virtual VFS_nodefind (VFS_request *r)
 Always return 'this'. More...
 
virtual bool isContainer ()
 
bool isMounted ()
 Return the state of _mounted. More...
 
QString path ()
 Return the path to this node. More...
 
void refreshSubscriptions ()
 Resubscribe to what had been previously subscribed. More...
 
- Public Member Functions inherited from VFS_tcp_client
 VFS_tcp_client (QString address, quint16 port, bool ssl=false, QString sslCertPath="")
 VFS_tcp_client constructor for client mode. More...
 
 VFS_tcp_client (QTcpSocket *socket, bool ssl=false, QSslConfiguration sslConfiguration=QSslConfiguration())
 VFS_tcp_client constructor for client mode. More...
 
 VFS_tcp_client (QTcpSocket *socket, bool ssl=false, QString sslCertPath="")
 VFS_tcp_client constructor for server mode. More...
 
virtual ~VFS_tcp_client ()
 
virtual QString reportDetails ()
 Report data about this client. More...
 
virtual void write (VFS_request *r)
 DOCME. More...
 
virtual void writeMessage (QByteArray data)
 DOCME. 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...
 
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 receiveMessage (QByteArray message)
 
virtual void sendPing ()
 DOCME. More...
 
virtual void startConnecting ()
 DOCME. More...
 
virtual void startPing ()
 DOCME. More...
 
virtual void stopConnecting ()
 DOCME. More...
 
virtual void stopPing ()
 DOCME. More...
 
- Protected Slots inherited from VFS_tcp_client
void modeChanged (QSslSocket::SslMode mode)
 A slot for when the SSL mode has changed. More...
 
void peerVerifyError (const QSslError &error)
 VFS_tcp_client::peerVerifyError. More...
 
void sslErrors (const QList< QSslError > &errors)
 VFS_tcp_client::sslErrors. More...
 
void sslReady ()
 Signal that an SSL connnection has been established. More...
 

Protected Member Functions

void attemptConnection ()
 DOCME. More...
 
postID getNewRequestID ()
 DOCME. More...
 
virtual QByteArray icon ()
 Fetch the icon for this node. More...
 
void issueMounted (QString path)
 VFS_tcp_mount::issueMounted. More...
 
void issueUnmounted ()
 VFS_tcp_mount::issueUnmounted. More...
 
void sendUnmountedRequests ()
 DOCME. More...
 
void timerEvent (QTimerEvent *e=nullptr)
 DOCME. 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 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...
 

Protected Attributes

int _attemptInterval
 The interval to attempt (re)connections. More...
 
VFS_tcp_mount_directory _codeDirectory
 The directory of code available when mounted. More...
 
postID _currentID
 The current VFS_request_id. More...
 
bool _mounted
 Is this mounted? More...
 
QString _name
 The name of this node for logging purposes. More...
 
QString _path
 The path to this node. More...
 
QTimer _ping
 The ping timer object. More...
 
QMap< postID, VFS_request * > _requests
 Outstanding VFS_requests. More...
 
int _timerID
 The ID of the connection timer. More...
 
QList< VFS_request * > _unmountedRequests
 Requests to submit when re-mounted. More...
 
- Protected Attributes inherited from VFS_tcp_client
QString _address
 The address resolved by peerAddress(), or the address to connect to. More...
 
bool _initialized
 Has this node been initialized? More...
 
MESSAGE_SIZE _messageSize
 The message size received. Will wait for this many bytes before emitting messageReady. More...
 
quint16 _port
 The port to connect to. More...
 
QTcpSocket * _socket
 The socket connection. More...
 
bool _ssl
 Use ssl? More...
 
QString _sslCertPath
 ssl cert 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...
 

Static Protected Attributes

static QList< VFS_tcp_mount * > _mounts
 The list of existing mounts. More...
 
static QMutex _mountsLock
 A mutex for modifying the _mounts entry. More...
 

Private Member Functions

void sendMessage (QByteArray message)
 send a message over the line More...
 

Friends

class aclEditor
 
class VFS_tcp_export_client
 
class VFS_tcp_mount_directory
 

Additional Inherited Members

- Signals inherited from VFS_tcp_client
void connected ()
 Emitted when a connection has been made. More...
 
void disconnected ()
 Emitted when a connection has been lost. More...
 
void error (QAbstractSocket::SocketError)
 Emitted when a socket error occurs. More...
 
void moreToRead ()
 Emitted when an incoming message has additional data. More...
 
void readyMessage (QByteArray message)
 Emitted when a message is ready for processing. More...
 
- 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

The VFS_tcp_mount class is a client side connection that will attempt to connect to another VFS instance.

This is analogous to an NFS mount between VFS instances. The receiving side needs to be listening with a VFS_tcp_export node.

ACLs can be applied and browsed as needed from the mounted VFS.

Definition at line 12 of file VFS_tcp_mount.h.

Constructor & Destructor Documentation

◆ VFS_tcp_mount()

VFS_tcp_mount::VFS_tcp_mount ( QString  name,
QString  path,
QString  address,
quint16  port,
quint16  interval = 3000,
bool  ssl = false,
QString  sslCertPath = "" 
)

VFS_tcp_mount constructor.

Parameters
nameThe name of this node, for logging
pathThe VFS path to this node
addressThe address to connect to
portThe port to connect to
intervalUpon disconnection, the time in milliseconds to re-attempt a connection
sslUse ssl?
sslCertPathThe sslCertPath on the local filesystem

The values here are provided by the config file. It maintains a _mounted value depending on connection state and perhaps someday authentication state.

Definition at line 40 of file VFS_tcp_mount.cpp.

◆ ~VFS_tcp_mount()

VFS_tcp_mount::~VFS_tcp_mount ( )
virtual

Definition at line 55 of file VFS_tcp_mount.cpp.

Member Function Documentation

◆ attemptConnection()

void VFS_tcp_mount::attemptConnection ( )
protected

DOCME.

Definition at line 184 of file VFS_tcp_mount.cpp.

◆ executeRequest

void VFS_tcp_mount::executeRequest ( VFS_request r)
virtualslot

DOCME.

Definition at line 276 of file VFS_tcp_mount.cpp.

◆ find()

VFS_node * VFS_tcp_mount::find ( VFS_request r)
virtual

Always return 'this'.

Parameters
rThe VFS_request object

As this is a network endpoint, this method will always return 'this'

Reimplemented from VFS_node.

Definition at line 806 of file VFS_tcp_mount.cpp.

◆ getNewRequestID()

postID VFS_tcp_mount::getNewRequestID ( )
protected

DOCME.

Definition at line 772 of file VFS_tcp_mount.cpp.

◆ icon()

QByteArray VFS_tcp_mount::icon ( )
protectedvirtual

Fetch the icon for this node.

Returns
The "unknown" icon from VFS_icons

Reimplemented from VFS_node.

Definition at line 819 of file VFS_tcp_mount.cpp.

◆ init

void VFS_tcp_mount::init ( )
slot

DOCME.

Definition at line 69 of file VFS_tcp_mount.cpp.

◆ isContainer()

bool VFS_tcp_mount::isContainer ( )
virtual
Returns

DOCME

Reimplemented from VFS_tcp_client.

Definition at line 264 of file VFS_tcp_mount.cpp.

◆ isMounted()

bool VFS_tcp_mount::isMounted ( )

Return the state of _mounted.

Returns
The state of _mounted

Definition at line 830 of file VFS_tcp_mount.cpp.

◆ issueMounted()

void VFS_tcp_mount::issueMounted ( QString  path)
protected

VFS_tcp_mount::issueMounted.

DOCME

Definition at line 753 of file VFS_tcp_mount.cpp.

◆ issueUnmounted()

void VFS_tcp_mount::issueUnmounted ( )
protected

VFS_tcp_mount::issueUnmounted.

DOCME

Definition at line 719 of file VFS_tcp_mount.cpp.

◆ path()

QString VFS_tcp_mount::path ( )

Return the path to this node.

Returns
The path to this node

Definition at line 843 of file VFS_tcp_mount.cpp.

◆ receiveMessage

void VFS_tcp_mount::receiveMessage ( QByteArray  message)
protectedvirtualslot
Parameters
messageDOCME

Definition at line 405 of file VFS_tcp_mount.cpp.

◆ refreshSubscriptions()

void VFS_tcp_mount::refreshSubscriptions ( )

Resubscribe to what had been previously subscribed.

This is useful for when a connection is dropped and we want to seamlessly re-establish the state of the VFS mounts.

Definition at line 622 of file VFS_tcp_mount.cpp.

◆ sendMessage()

void VFS_tcp_mount::sendMessage ( QByteArray  message)
private

send a message over the line

Parameters
messageThe message, which is presumed to be a json string.

This will compress the outgoing data if COMPRESS_TCP_MOUNT is defined.

Definition at line 550 of file VFS_tcp_mount.cpp.

◆ sendPing

void VFS_tcp_mount::sendPing ( )
protectedvirtualslot

DOCME.

Definition at line 242 of file VFS_tcp_mount.cpp.

◆ sendUnmountedRequests()

void VFS_tcp_mount::sendUnmountedRequests ( )
protected

DOCME.

Definition at line 687 of file VFS_tcp_mount.cpp.

◆ startConnecting

void VFS_tcp_mount::startConnecting ( )
protectedvirtualslot

DOCME.

Definition at line 119 of file VFS_tcp_mount.cpp.

◆ startPing

void VFS_tcp_mount::startPing ( )
protectedvirtualslot

DOCME.

Definition at line 218 of file VFS_tcp_mount.cpp.

◆ stopConnecting

void VFS_tcp_mount::stopConnecting ( )
protectedvirtualslot

DOCME.

Definition at line 155 of file VFS_tcp_mount.cpp.

◆ stopPing

void VFS_tcp_mount::stopPing ( )
protectedvirtualslot

DOCME.

Definition at line 230 of file VFS_tcp_mount.cpp.

◆ timerEvent()

void VFS_tcp_mount::timerEvent ( QTimerEvent *  e = nullptr)
protected

DOCME.

Definition at line 105 of file VFS_tcp_mount.cpp.

◆ unsubscribeAll

void VFS_tcp_mount::unsubscribeAll ( VFS_node subscriber)
virtualslot

Remove all references to a subscriber from this node.

Parameters
subscriberThe VFS_node to remove.

This will also send an unsubscribe() request to a connected endpoint if this node is _mounted.

See also
VFS_node::unsubscribeAll()

Definition at line 572 of file VFS_tcp_mount.cpp.

Friends And Related Function Documentation

◆ aclEditor

friend class aclEditor
friend

Definition at line 18 of file VFS_tcp_mount.h.

◆ VFS_tcp_export_client

friend class VFS_tcp_export_client
friend

Definition at line 17 of file VFS_tcp_mount.h.

◆ VFS_tcp_mount_directory

friend class VFS_tcp_mount_directory
friend

Definition at line 16 of file VFS_tcp_mount.h.

Member Data Documentation

◆ _attemptInterval

int VFS_tcp_mount::_attemptInterval
protected

The interval to attempt (re)connections.

Definition at line 35 of file VFS_tcp_mount.h.

◆ _codeDirectory

VFS_tcp_mount_directory VFS_tcp_mount::_codeDirectory
protected

The directory of code available when mounted.

Definition at line 49 of file VFS_tcp_mount.h.

◆ _currentID

postID VFS_tcp_mount::_currentID
protected

The current VFS_request_id.

Definition at line 39 of file VFS_tcp_mount.h.

◆ _mounted

bool VFS_tcp_mount::_mounted
protected

Is this mounted?

Definition at line 37 of file VFS_tcp_mount.h.

◆ _mounts

QList< VFS_tcp_mount * > VFS_tcp_mount::_mounts
staticprotected

The list of existing mounts.

Definition at line 54 of file VFS_tcp_mount.h.

◆ _mountsLock

QMutex VFS_tcp_mount::_mountsLock
staticprotected

A mutex for modifying the _mounts entry.

Definition at line 53 of file VFS_tcp_mount.h.

◆ _name

QString VFS_tcp_mount::_name
protected

The name of this node for logging purposes.

Definition at line 33 of file VFS_tcp_mount.h.

◆ _path

QString VFS_tcp_mount::_path
protected

The path to this node.

Definition at line 34 of file VFS_tcp_mount.h.

◆ _ping

QTimer VFS_tcp_mount::_ping
protected

The ping timer object.

Definition at line 51 of file VFS_tcp_mount.h.

◆ _requests

QMap<postID, VFS_request *> VFS_tcp_mount::_requests
protected

Outstanding VFS_requests.

Definition at line 40 of file VFS_tcp_mount.h.

◆ _timerID

int VFS_tcp_mount::_timerID
protected

The ID of the connection timer.

Definition at line 36 of file VFS_tcp_mount.h.

◆ _unmountedRequests

QList<VFS_request *> VFS_tcp_mount::_unmountedRequests
protected

Requests to submit when re-mounted.

Definition at line 43 of file VFS_tcp_mount.h.


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