mirror of
https://github.com/falk-werner/webfuse-provider
synced 2024-10-27 20:44:10 +00:00
fixed code style issues
This commit is contained in:
parent
ec9fdc1857
commit
7970cece50
77
README.md
77
README.md
@ -6,13 +6,13 @@
|
|||||||
|
|
||||||
fuse-wsfs combines libwebsockets and libfuse. It allows ot attach a remote filesystem via websockets.
|
fuse-wsfs combines libwebsockets and libfuse. It allows ot attach a remote filesystem via websockets.
|
||||||
|
|
||||||
# Contents
|
## Contents
|
||||||
|
|
||||||
- [Workflow and API](#Workflow-and-API)
|
- [Workflow and API](#Workflow-and-API)
|
||||||
- [Build and run](#Build-and-run)
|
- [Build and run](#Build-and-run)
|
||||||
- [Dependencies](#Dependencies)
|
- [Dependencies](#Dependencies)
|
||||||
|
|
||||||
# Workflow and API
|
## Workflow and API
|
||||||
|
|
||||||
+---------------------+ +-------------+ +------+
|
+---------------------+ +-------------+ +------+
|
||||||
| Filesystem Provider | | wsfs daemon | | user |
|
| Filesystem Provider | | wsfs daemon | | user |
|
||||||
@ -46,19 +46,19 @@ fuse-wsfs combines libwebsockets and libfuse. It allows ot attach a remote files
|
|||||||
With fuse-wsfs it is possible to implement remote filesystems based on websockets.
|
With fuse-wsfs it is possible to implement remote filesystems based on websockets.
|
||||||
A reference implementation of such a daemon is provided within the examples. The picture above describes the workflow:
|
A reference implementation of such a daemon is provided within the examples. The picture above describes the workflow:
|
||||||
|
|
||||||
- The websocket filesystem daemon (*wsfs daemon*) mounts a filesystem on startup.
|
- The websocket filesystem daemon (*wsfs daemon*) mounts a filesystem on startup.
|
||||||
It starts the websocket server and waits for incoming connections.
|
It starts the websocket server and waits for incoming connections.
|
||||||
- A remote filesystem provider connects to wsfs daemon via websocket protocol.
|
- A remote filesystem provider connects to wsfs daemon via websocket protocol.
|
||||||
The example includes such a provider implemented in HTML and JavaScript.
|
The example includes such a provider implemented in HTML and JavaScript.
|
||||||
- Whenever the user makes filesystem requests, such as *ls*, the request is redirected via wsfs daemon to the connected filesystem provider
|
- Whenever the user makes filesystem requests, such as *ls*, the request is redirected via wsfs daemon to the connected filesystem provider
|
||||||
|
|
||||||
Currently all requests are initiated by wsfs daemon and responded by filesystem provider. This may change in future, e.g. when authentication is supported.
|
Currently all requests are initiated by wsfs daemon and responded by filesystem provider. This may change in future, e.g. when authentication is supported.
|
||||||
|
|
||||||
## Requests, responses and notifications
|
### Requests, responses and notifications
|
||||||
|
|
||||||
There are three types of messages, used for communication between wsfs daemon and filesystem provider. All message types are encoded in [JSON](https://www.json.org/) and strongly inspired by [JSON-RPC](https://www.jsonrpc.org/).
|
There are three types of messages, used for communication between wsfs daemon and filesystem provider. All message types are encoded in [JSON](https://www.json.org/) and strongly inspired by [JSON-RPC](https://www.jsonrpc.org/).
|
||||||
|
|
||||||
### Request
|
#### Request
|
||||||
|
|
||||||
A request is used by a sender to invoke a method on the receiver. The sender awaits a response from the receiver. Since requests and responses can be sendet or answered in any order, an id is provided in each request to identify it.
|
A request is used by a sender to invoke a method on the receiver. The sender awaits a response from the receiver. Since requests and responses can be sendet or answered in any order, an id is provided in each request to identify it.
|
||||||
|
|
||||||
@ -74,11 +74,11 @@ A request is used by a sender to invoke a method on the receiver. The sender awa
|
|||||||
| params | array | method specific parameters |
|
| params | array | method specific parameters |
|
||||||
| id | integer | id, which is repeated in response |
|
| id | integer | id, which is repeated in response |
|
||||||
|
|
||||||
### Response
|
#### Response
|
||||||
|
|
||||||
A response is used to answer a prior request. There are two kinds of responses:
|
A response is used to answer a prior request. There are two kinds of responses:
|
||||||
|
|
||||||
#### Successful Results
|
##### Successful Results
|
||||||
|
|
||||||
{
|
{
|
||||||
"result": <result>,
|
"result": <result>,
|
||||||
@ -90,7 +90,7 @@ A response is used to answer a prior request. There are two kinds of responses:
|
|||||||
| result | any | request specific result |
|
| result | any | request specific result |
|
||||||
| id | integer | id, same as request |
|
| id | integer | id, same as request |
|
||||||
|
|
||||||
#### Error notifications
|
##### Error notifications
|
||||||
|
|
||||||
{
|
{
|
||||||
"error": {
|
"error": {
|
||||||
@ -104,7 +104,7 @@ A response is used to answer a prior request. There are two kinds of responses:
|
|||||||
| code | integer | error code |
|
| code | integer | error code |
|
||||||
| id | integer | id, same as request |
|
| id | integer | id, same as request |
|
||||||
|
|
||||||
#### Error codes
|
##### Error codes
|
||||||
|
|
||||||
| Symbolic name | Code | Description |
|
| Symbolic name | Code | Description |
|
||||||
| ------------------ | ---------:| ---------------------- |
|
| ------------------ | ---------:| ---------------------- |
|
||||||
@ -117,7 +117,7 @@ A response is used to answer a prior request. There are two kinds of responses:
|
|||||||
| BAD_NOENTRY | 101 | invalid entry |
|
| BAD_NOENTRY | 101 | invalid entry |
|
||||||
| BAD_NOACCESS | 102 | access not allowed |
|
| BAD_NOACCESS | 102 | access not allowed |
|
||||||
|
|
||||||
### Notification
|
#### Notification
|
||||||
|
|
||||||
Notfications are used to inform a receiver about something. Unlike requests, notifications are not answered. Therefore, an id is not supplied.
|
Notfications are used to inform a receiver about something. Unlike requests, notifications are not answered. Therefore, an id is not supplied.
|
||||||
|
|
||||||
@ -131,9 +131,9 @@ Notfications are used to inform a receiver about something. Unlike requests, not
|
|||||||
| method_name | string | name of the method to invoke |
|
| method_name | string | name of the method to invoke |
|
||||||
| params | array | method specific parameters |
|
| params | array | method specific parameters |
|
||||||
|
|
||||||
## Requests
|
### Requests
|
||||||
|
|
||||||
### lookup
|
#### lookup
|
||||||
|
|
||||||
Retrieve information about a filesystem entry by name.
|
Retrieve information about a filesystem entry by name.
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ Retrieve information about a filesystem entry by name.
|
|||||||
| mtime | integer | optional; unix time of last modification |
|
| mtime | integer | optional; unix time of last modification |
|
||||||
| ctime | intefer | optional; unix time of last metadata change |
|
| ctime | intefer | optional; unix time of last metadata change |
|
||||||
|
|
||||||
### getattr
|
#### getattr
|
||||||
|
|
||||||
Get file attributes.
|
Get file attributes.
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ Get file attributes.
|
|||||||
| mtime | integer | optional; unix time of last modification |
|
| mtime | integer | optional; unix time of last modification |
|
||||||
| ctime | intefer | optional; unix time of last metadata change |
|
| ctime | intefer | optional; unix time of last metadata change |
|
||||||
|
|
||||||
### readdir
|
#### readdir
|
||||||
|
|
||||||
Read directory contents.
|
Read directory contents.
|
||||||
Result is an array of name-inode pairs for each entry. The generic entries
|
Result is an array of name-inode pairs for each entry. The generic entries
|
||||||
@ -202,7 +202,7 @@ Result is an array of name-inode pairs for each entry. The generic entries
|
|||||||
| name | integer | name of the entry |
|
| name | integer | name of the entry |
|
||||||
| inode | integer | inode of the entry |
|
| inode | integer | inode of the entry |
|
||||||
|
|
||||||
### open
|
#### open
|
||||||
|
|
||||||
Open a file.
|
Open a file.
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ Open a file.
|
|||||||
| flags | integer | access mode flags (see below) |
|
| flags | integer | access mode flags (see below) |
|
||||||
| handle | integer | handle of the file |
|
| handle | integer | handle of the file |
|
||||||
|
|
||||||
#### Flags
|
##### Flags
|
||||||
|
|
||||||
| Symbolic name | Code | Description |
|
| Symbolic name | Code | Description |
|
||||||
| --------------| ---------:| --------------------------- |
|
| --------------| ---------:| --------------------------- |
|
||||||
@ -228,8 +228,7 @@ Open a file.
|
|||||||
| O_TRUNK | 0x200 | open file to trunkate |
|
| O_TRUNK | 0x200 | open file to trunkate |
|
||||||
| O_APPEND | 0x400 | open file to append |
|
| O_APPEND | 0x400 | open file to append |
|
||||||
|
|
||||||
|
#### close
|
||||||
### close
|
|
||||||
|
|
||||||
Informs filesystem provider, that a file is closed.
|
Informs filesystem provider, that a file is closed.
|
||||||
Since `close` is a notification, it cannot fail.
|
Since `close` is a notification, it cannot fail.
|
||||||
@ -242,7 +241,7 @@ Since `close` is a notification, it cannot fail.
|
|||||||
| handle | integer | handle of the file |
|
| handle | integer | handle of the file |
|
||||||
| flags | integer | access mode flags (see open) |
|
| flags | integer | access mode flags (see open) |
|
||||||
|
|
||||||
### read
|
#### read
|
||||||
|
|
||||||
Read from an open file.
|
Read from an open file.
|
||||||
|
|
||||||
@ -263,14 +262,14 @@ Read from an open file.
|
|||||||
| format | string | Encoding of data (see below) |
|
| format | string | Encoding of data (see below) |
|
||||||
| count | integer | Actual number of bytes read |
|
| count | integer | Actual number of bytes read |
|
||||||
|
|
||||||
#### Format
|
##### Format
|
||||||
|
|
||||||
| Format | Description |
|
| Format | Description |
|
||||||
| ---------- | -------------------------------------------------------- |
|
| ---------- | -------------------------------------------------------- |
|
||||||
| "identiy" | Use data as is; note that JSON strings are UTF-8 encoded |
|
| "identiy" | Use data as is; note that JSON strings are UTF-8 encoded |
|
||||||
| "base64" | data is base64 encoded |
|
| "base64" | data is base64 encoded |
|
||||||
|
|
||||||
# Build and run
|
## Build and run
|
||||||
|
|
||||||
To install dependencies, see below.
|
To install dependencies, see below.
|
||||||
|
|
||||||
@ -282,16 +281,16 @@ To install dependencies, see below.
|
|||||||
./wsfs -m test --document_root=../exmaple/www --port=4711
|
./wsfs -m test --document_root=../exmaple/www --port=4711
|
||||||
|
|
||||||
|
|
||||||
# Dependencies
|
## Dependencies
|
||||||
|
|
||||||
- [libfuse3](https://github.com/libfuse/libfuse/)
|
- [libfuse3](https://github.com/libfuse/libfuse/)
|
||||||
- [libwebsockets](https://libwebsockets.org/)
|
- [libwebsockets](https://libwebsockets.org/)
|
||||||
- [Jansson](https://jansson.readthedocs.io)
|
- [Jansson](https://jansson.readthedocs.io)
|
||||||
- [GoogleTest](https://github.com/google/googletest) *(optional)*
|
- [GoogleTest](https://github.com/google/googletest) *(optional)*
|
||||||
|
|
||||||
## Installation
|
### Installation
|
||||||
|
|
||||||
### libfuse
|
#### libfuse
|
||||||
|
|
||||||
wget -O fuse-3.1.1.tar.gz https://github.com/libfuse/libfuse/archive/fuse-3.1.1.tar.gz
|
wget -O fuse-3.1.1.tar.gz https://github.com/libfuse/libfuse/archive/fuse-3.1.1.tar.gz
|
||||||
tar -xf fuse-3.1.1.tar.gz
|
tar -xf fuse-3.1.1.tar.gz
|
||||||
@ -301,7 +300,7 @@ To install dependencies, see below.
|
|||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
### libwebsockets
|
#### libwebsockets
|
||||||
|
|
||||||
wget -O libwebsockets-3.1.0.tar.gz https://github.com/warmcat/libwebsockets/archive/v3.1.0.tar.gz
|
wget -O libwebsockets-3.1.0.tar.gz https://github.com/warmcat/libwebsockets/archive/v3.1.0.tar.gz
|
||||||
tar -xf libwebsockets-3.1.0.tar.gz
|
tar -xf libwebsockets-3.1.0.tar.gz
|
||||||
@ -312,7 +311,7 @@ To install dependencies, see below.
|
|||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
### Jansson
|
#### Jansson
|
||||||
|
|
||||||
On many systems, libjansson can installed via apt:
|
On many systems, libjansson can installed via apt:
|
||||||
|
|
||||||
@ -329,7 +328,7 @@ Otherwise, it can be installed from source:
|
|||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
### GoogleTest
|
#### GoogleTest
|
||||||
|
|
||||||
Installation of GoogleTest is optional fuse-wsfs library, but required to compile tests.
|
Installation of GoogleTest is optional fuse-wsfs library, but required to compile tests.
|
||||||
|
|
||||||
@ -341,5 +340,3 @@ Installation of GoogleTest is optional fuse-wsfs library, but required to compil
|
|||||||
cmake ..
|
cmake ..
|
||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user