1
0
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:
Falk Werner 2019-02-13 19:43:29 +01:00
parent ec9fdc1857
commit 7970cece50

View File

@ -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