+/****s* silcsftp/SilcSFTPFSAPI/SilcSFTPFilesystemOps
+ *
+ * NAME
+ *
+ * typedef struct SilcSFTPFilesystemOpsStruct { ... }
+ * *SilcSFTPFilesystemOps;
+ *
+ * DESCRIPTION
+ *
+ * This structure defines the generic filesystem access. When the
+ * filesystem is accessed these functions are called to do the requested
+ * filesystem operation. The level that implements the actual filesystem
+ * must fill this structure with the callback functions providing the
+ * access to the filesystem.
+ *
+ * SOURCE
+ */
+typedef struct SilcSFTPFilesystemOpsStruct {
+ /* Find a file handle by the file handle data indicated by the `data'.
+ If the handle is not found this returns NULL. */
+ SilcSFTPHandle (*sftp_get_handle)(void *context, SilcSFTP sftp,
+ const unsigned char *data,
+ SilcUInt32 data_len);
+
+ /* Return encoded handle of `handle' or NULL on error. The caller
+ must free the returned buffer. */
+ unsigned char *(*sftp_encode_handle)(void *context, SilcSFTP sftp,
+ SilcSFTPHandle handle,
+ SilcUInt32 *handle_len);
+
+ /* Open a file indicated by the `filename' with flags indicated by the
+ `pflags', and with attributes indicated by the `attr'. Calls the
+ `callback' to return the opened file handle. */
+ void (*sftp_open)(void *context, SilcSFTP sftp,
+ const char *filename,
+ SilcSFTPFileOperation pflags,
+ SilcSFTPAttributes attr,
+ SilcSFTPHandleCallback callback,
+ void *callback_context);
+
+ /* Closes the file indicated by the file handle `handle'. Calls the
+ `callback' to indicate the status of the closing. */
+ void (*sftp_close)(void *context, SilcSFTP sftp,
+ SilcSFTPHandle handle,
+ SilcSFTPStatusCallback callback,
+ void *callback_context);
+
+ /* Reads data from the file indicated by the file handle `handle' starting
+ from the offset of `offset' at most `len' bytes. The `callback' is
+ called to return the read data. */
+ void (*sftp_read)(void *context, SilcSFTP sftp,
+ SilcSFTPHandle handle,
+ SilcUInt64 offset,
+ SilcUInt32 len,
+ SilcSFTPDataCallback callback,
+ void *callback_context);
+
+ /* Writes to a file indicated by the file handle `handle' starting from
+ offset of `offset' at most `data_len' bytes of `data'. The `callback'
+ is called to indicate the status of the writing. */
+ void (*sftp_write)(void *context, SilcSFTP sftp,
+ SilcSFTPHandle handle,
+ SilcUInt64 offset,
+ const unsigned char *data,
+ SilcUInt32 data_len,
+ SilcSFTPStatusCallback callback,
+ void *callback_context);
+
+ /* Removes a file indicated by the `filename'. Calls the `callback'
+ to indicate the status of the removing. */
+ void (*sftp_remove)(void *context, SilcSFTP sftp,
+ const char *filename,
+ SilcSFTPStatusCallback callback,
+ void *callback_context);
+
+ /* Renames a file indicated by the `oldname' to the name `newname'. The
+ `callback' is called to indicate the status of the renaming. */
+ void (*sftp_rename)(void *context, SilcSFTP sftp,
+ const char *oldname,
+ const char *newname,
+ SilcSFTPStatusCallback callback,
+ void *callback_context);
+
+ /* Creates a new directory indicated by the `path' with attributes indicated
+ by the `attrs'. The `callback' is called to indicate the status of the
+ creation. */
+ void (*sftp_mkdir)(void *context, SilcSFTP sftp,
+ const char *path,
+ SilcSFTPAttributes attrs,
+ SilcSFTPStatusCallback callback,
+ void *callback_context);
+
+ /* Removes a directory indicated by the `path' and calls the `callback'
+ to indicate the status of the removal. */
+ void (*sftp_rmdir)(void *context, SilcSFTP sftp,
+ const char *path,
+ SilcSFTPStatusCallback callback,
+ void *callback_context);
+
+ /* Opens a directory indicated by the `path'. The `callback' is called
+ to return the opened file handle. */
+ void (*sftp_opendir)(void *context, SilcSFTP sftp,
+ const char *path,
+ SilcSFTPHandleCallback callback,
+ void *callback_context);