commit
9d83f1687e
@ -0,0 +1,333 @@
|
||||
# Doxyfile 1.8.13
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = "webfuse"
|
||||
PROJECT_NUMBER = 0.2.0
|
||||
PROJECT_BRIEF = "Websocket filesystem based on libfuse"
|
||||
PROJECT_LOGO =
|
||||
OUTPUT_DIRECTORY = "doc/api"
|
||||
CREATE_SUBDIRS = NO
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
"The $name widget" \
|
||||
"The $name file" \
|
||||
is \
|
||||
provides \
|
||||
specifies \
|
||||
contains \
|
||||
represents \
|
||||
a \
|
||||
an \
|
||||
the
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
QT_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 4
|
||||
ALIASES =
|
||||
TCL_SUBST =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
EXTENSION_MAPPING =
|
||||
MARKDOWN_SUPPORT = YES
|
||||
TOC_INCLUDE_HEADINGS = 0
|
||||
AUTOLINK_SUPPORT = YES
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
CPP_CLI_SUPPORT = NO
|
||||
SIP_SUPPORT = NO
|
||||
IDL_PROPERTY_SUPPORT = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
GROUP_NESTED_COMPOUNDS = NO
|
||||
SUBGROUPING = YES
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
INLINE_SIMPLE_STRUCTS = NO
|
||||
TYPEDEF_HIDES_STRUCT = NO
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_PACKAGE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
HIDE_COMPOUND_REFERENCE= NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
SHOW_GROUPED_MEMB_INC = NO
|
||||
FORCE_LOCAL_INCLUDES = NO
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_MEMBERS_CTORS_1ST = NO
|
||||
SORT_GROUP_NAMES = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
STRICT_PROTO_MATCHING = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_FILES = YES
|
||||
SHOW_NAMESPACES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
LAYOUT_FILE =
|
||||
CITE_BIB_FILES =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_AS_ERROR = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = README.md \
|
||||
doc/build.md doc/protocol.md doc/api.md \
|
||||
include
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS = *.h
|
||||
RECURSIVE = YES
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS = *
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
FILTER_SOURCE_PATTERNS =
|
||||
USE_MDFILE_AS_MAINPAGE = README.md
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = YES
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = NO
|
||||
REFERENCED_BY_RELATION = NO
|
||||
REFERENCES_RELATION = NO
|
||||
REFERENCES_LINK_SOURCE = YES
|
||||
SOURCE_TOOLTIPS = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
CLANG_ASSISTED_PARSING = NO
|
||||
CLANG_OPTIONS =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = YES
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX = wf_ wfp_
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_EXTRA_STYLESHEET =
|
||||
HTML_EXTRA_FILES =
|
||||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_SAT = 100
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_TIMESTAMP = NO
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
HTML_INDEX_NUM_ENTRIES = 100
|
||||
GENERATE_DOCSET = NO
|
||||
DOCSET_FEEDNAME = "Doxygen generated docs"
|
||||
DOCSET_BUNDLE_ID = org.doxygen.Project
|
||||
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
|
||||
DOCSET_PUBLISHER_NAME = Publisher
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
CHM_INDEX_ENCODING =
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
GENERATE_QHP = NO
|
||||
QCH_FILE =
|
||||
QHP_NAMESPACE = org.doxygen.Project
|
||||
QHP_VIRTUAL_FOLDER = doc
|
||||
QHP_CUST_FILTER_NAME =
|
||||
QHP_CUST_FILTER_ATTRS =
|
||||
QHP_SECT_FILTER_ATTRS =
|
||||
QHG_LOCATION =
|
||||
GENERATE_ECLIPSEHELP = NO
|
||||
ECLIPSE_DOC_ID = org.doxygen.Project
|
||||
DISABLE_INDEX = NO
|
||||
GENERATE_TREEVIEW = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
TREEVIEW_WIDTH = 250
|
||||
EXT_LINKS_IN_WINDOW = NO
|
||||
FORMULA_FONTSIZE = 10
|
||||
FORMULA_TRANSPARENT = YES
|
||||
USE_MATHJAX = NO
|
||||
MATHJAX_FORMAT = HTML-CSS
|
||||
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
|
||||
MATHJAX_EXTENSIONS =
|
||||
MATHJAX_CODEFILE =
|
||||
SEARCHENGINE = YES
|
||||
SERVER_BASED_SEARCH = NO
|
||||
EXTERNAL_SEARCH = NO
|
||||
SEARCHENGINE_URL =
|
||||
SEARCHDATA_FILE = searchdata.xml
|
||||
EXTERNAL_SEARCH_ID =
|
||||
EXTRA_SEARCH_MAPPINGS =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
LATEX_FOOTER =
|
||||
LATEX_EXTRA_STYLESHEET =
|
||||
LATEX_EXTRA_FILES =
|
||||
PDF_HYPERLINKS = YES
|
||||
USE_PDFLATEX = YES
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
LATEX_SOURCE_CODE = NO
|
||||
LATEX_BIB_STYLE = plain
|
||||
LATEX_TIMESTAMP = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
RTF_SOURCE_CODE = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_SUBDIR =
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the DOCBOOK output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_DOCBOOK = NO
|
||||
DOCBOOK_OUTPUT = docbook
|
||||
DOCBOOK_PROGRAMLISTING = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = NO
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
EXTERNAL_PAGES = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
MSCGEN_PATH =
|
||||
DIA_PATH =
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
DOT_NUM_THREADS = 0
|
||||
DOT_FONTNAME = Helvetica
|
||||
DOT_FONTSIZE = 10
|
||||
DOT_FONTPATH =
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
UML_LIMIT_NUM_FIELDS = 10
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
INTERACTIVE_SVG = NO
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MSCFILE_DIRS =
|
||||
DIAFILE_DIRS =
|
||||
PLANTUML_JAR_PATH =
|
||||
PLANTUML_CFG_FILE =
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
@ -0,0 +1,55 @@
|
||||
# Webfuse API introduction
|
||||
|
||||
This introduction provides a general overview to webfuse API.
|
||||
Please refer to the [build instructions](build.md) to generate API reference documentation.
|
||||
|
||||
## Contents
|
||||
|
||||
- [Authentication](#Authentication)
|
||||
|
||||
## Authentication
|
||||
|
||||
By default, webfuse daemon will redirect each filesystem call to the first connected provider without any authentication.
|
||||
This might be good for testing purposes or when an external authentication mechanism is used. In some use cases, explicit authentication is needed. Therefore, authentication can be enabled within webfuse daemon.
|
||||
|
||||
When authentication is enabled, filesystem calls are only redirected to a connected provider, after `authenticate`
|
||||
has succeeded.
|
||||
|
||||
![authenticate](authenticate.png)
|
||||
|
||||
### Enable authentication
|
||||
|
||||
Authentication is enabled, if one or more authenticators are registered via `wf_server_config`.
|
||||
|
||||
static bool authenticate(struct wf_credentials * creds, void * user_data)
|
||||
{
|
||||
char const * username = wf_credentials_get(creds, "username");
|
||||
char const * password = wf_credentials_get(creds, "password");
|
||||
|
||||
return ((NULL != username) && (0 == strcmp(username, "bob")) &&
|
||||
(NULL != password) && (0 == strcmp(password, "???")));
|
||||
}
|
||||
|
||||
wf_server_config * config = wf_server_config_create();
|
||||
wf_server_config_add_authenticator(config, "username", &authenticate, NULL);
|
||||
|
||||
wf_server * server = wf_server_create(config);
|
||||
//...
|
||||
|
||||
### Authenticator types and credentidals
|
||||
|
||||
Each authenticator is identified by a user defined string, called `type`. The type is provided by the `authenticate` request, so you can define different authenticators for different authentication types, e.g. username, certificate, token.
|
||||
|
||||
Actually, only one type is used: **username**
|
||||
**It is strongly recommended to prefix custom authenticator types with an underscore (`_`) to avoid name clashes.**
|
||||
|
||||
The `wf_credentials`struct represents a map to access credentials as key-value pairs, where both, key and value, are of type string.
|
||||
|
||||
#### username
|
||||
|
||||
The authenticator type **username** is used to authenticate via username and password. Valid credentials should contain two keys.
|
||||
|
||||
- **username** refers to the name of the user
|
||||
- **password** refers to the password of the user
|
||||
|
||||
**Note** that no further encryption is done, so this authenticator type should not be used over unencrypted websocket connections.
|
@ -0,0 +1,92 @@
|
||||
# Build Instructions
|
||||
|
||||
To install dependencies, see below.
|
||||
|
||||
cd webfuse
|
||||
mkdir .build
|
||||
cd .build
|
||||
cmake ..
|
||||
make
|
||||
|
||||
## Build options
|
||||
|
||||
By default, unit tests are enabled. You can disable them using the following cmake options:
|
||||
|
||||
- **WITHOUT_TESTS**: disable tests
|
||||
`cmake -DWITHOUT_TESTS=ON ..`
|
||||
|
||||
Since webfuse consists of two libraries, it is possible to disable one of them
|
||||
in order to reduce build dependencies.
|
||||
*Note that unit tests are only available, when both libraries are built.*
|
||||
|
||||
- **WITHOUT_ADAPTER**: omit adapter library
|
||||
`cmake -DWITHOUT_ADAPTER=ON`
|
||||
|
||||
- **WIHTOU_PROVIDER**: omit provider library
|
||||
`cmake -DWITHOUT_PROVIDER=ON`
|
||||
|
||||
## Create API documentation
|
||||
|
||||
To create API documentation, you must install doxygen and dot first.
|
||||
After that, run doxygen in the project root directory.
|
||||
|
||||
doxygen
|
||||
|
||||
After that, you will find the API documentation in the doc/api subdirectory.
|
||||
|
||||
## Dependencies
|
||||
|
||||
- [libfuse3](https://github.com/libfuse/libfuse/)
|
||||
- [libwebsockets](https://libwebsockets.org/)
|
||||
- [Jansson](https://jansson.readthedocs.io)
|
||||
- [GoogleTest](https://github.com/google/googletest) *(optional)*
|
||||
|
||||
### Installation from source
|
||||
|
||||
#### libfuse
|
||||
|
||||
To install libfuse, meson is needed. Please refer to [meson quick guide](https://mesonbuild.com/Quick-guide.html) for setup instructions.
|
||||
|
||||
wget -O fuse-3.8.0.tar.gz https://github.com/libfuse/libfuse/archive/fuse-3.8.0.tar.gz
|
||||
tar -xf fuse-3.8.0.tar.gz
|
||||
cd libfuse-fuse-3.8.0
|
||||
mkdir .build
|
||||
cd .build
|
||||
meson ..
|
||||
ninja
|
||||
sudo ninja install
|
||||
|
||||
#### libwebsockets
|
||||
|
||||
wget -O libwebsockets-3.2.0.tar.gz https://github.com/warmcat/libwebsockets/archive/v3.2.0.tar.gz
|
||||
tar -xf libwebsockets-3.2.0.tar.gz
|
||||
cd libwebsockets-3.2.0
|
||||
mkdir .build
|
||||
cd .build
|
||||
cmake ..
|
||||
make
|
||||
sudo make install
|
||||
|
||||
#### Jansson
|
||||
|
||||
wget -O libjansson-2.12.tar.gz https://github.com/akheron/jansson/archive/v2.12.tar.gz
|
||||
tar -xf libjansson-2.12.tar.gz
|
||||
cd jansson-2.12
|
||||
mkdir .build
|
||||
cd .build
|
||||
cmake ..
|
||||
make
|
||||
sudo make install
|
||||
|
||||
#### GoogleTest
|
||||
|
||||
Installation of GoogleTest is optional webfuse library, but required to compile tests.
|
||||
|
||||
wget -O gtest-1.10.0.tar.gz https://github.com/google/googletest/archive/release-1.10.0.tar.gz
|
||||
tar -xf gtest-1.10.0.tar.gz
|
||||
cd googletest-release-1.10.0
|
||||
mkdir .build
|
||||
cd .build
|
||||
cmake ..
|
||||
make
|
||||
sudo make install
|
Before Width: | Height: | Size: 5.2 KiB |
@ -1,16 +0,0 @@
|
||||
@startuml
|
||||
|
||||
salt
|
||||
{
|
||||
{T
|
||||
+ mount_point
|
||||
++ fwupdate
|
||||
+++ default -> 7c029f81-6bdf-4d3c-82dc-26f748164012
|
||||
+++ 7c029f81-6bdf-4d3c-82dc-26f748164012
|
||||
++++ update.raucb
|
||||
+++ f93de23b-4535-4a47-a287-a381b78a11b8
|
||||
++++ update.raucb
|
||||
}
|
||||
}
|
||||
|
||||
@enduml
|
@ -0,0 +1,253 @@
|
||||
# Webfuse Protocol
|
||||
|
||||
## Requests, responses and notifications
|
||||
|
||||
There are three types of messages, used for communication between webfuse 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
|
||||
|
||||
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.
|
||||
|
||||
{
|
||||
"method": <method_name>,
|
||||
"params": <params>,
|
||||
"id" : <id>
|
||||
}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- |:---------:| --------------------------------- |
|
||||
| method_name | string | name of the method to invoke |
|
||||
| params | array | method specific parameters |
|
||||
| id | integer | id, which is repeated in response |
|
||||
|
||||
### Response
|
||||
|
||||
A response is used to answer a prior request. There are two kinds of responses:
|
||||
|
||||
#### Successful Results
|
||||
|
||||
{
|
||||
"result": <result>,
|
||||
"id": <id>
|
||||
}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- |:---------:| ----------------------- |
|
||||
| result | any | request specific result |
|
||||
| id | integer | id, same as request |
|
||||
|
||||
#### Error notifications
|
||||
|
||||
{
|
||||
"error": {
|
||||
"code": <code>
|
||||
},
|
||||
"id": <id>
|
||||
}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- |:---------:| ------------------- |
|
||||
| code | integer | error code |
|
||||
| id | integer | id, same as request |
|
||||
|
||||
#### Error codes
|
||||
|
||||
| Symbolic name | Code | Description |
|
||||
| ------------------ | ---------:| ---------------------- |
|
||||
| GOOD | 0 | no error |
|
||||
| BAD | 1 | generic error |
|
||||
| BAD_NOTIMPLEMENTED | 2 | method not implemented |
|
||||
| BAD_TIMEOUT | 3 | timeout occured |
|
||||
| BAD_BUSY | 4 | resource busy |
|
||||
| BAD_FORMAT | 5 | invalid formt |
|
||||
| BAD_NOENTRY | 101 | invalid entry |
|
||||
| BAD_ACCESS_DENIED | 102 | access not allowed |
|
||||
|
||||
### Notification
|
||||
|
||||
Notfications are used to inform a receiver about something. Unlike requests, notifications are not answered. Therefore, an id is not supplied.
|
||||
|
||||
{
|
||||
"method": <method_name>,
|
||||
"params": <params>
|
||||
}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- |:---------:| --------------------------------- |
|
||||
| method_name | string | name of the method to invoke |
|
||||
| params | array | method specific parameters |
|
||||
|
||||
## Requests (Adapter -> Provider)
|
||||
|
||||
### lookup
|
||||
|
||||
Retrieve information about a filesystem entry by name.
|
||||
|
||||
webfuse daemon: {"method": "lookup", "params": [<filesystem>, <parent>, <name>], "id": <id>}
|
||||
fs provider: {"result": {
|
||||
"inode": <inode>,
|
||||
"mode" : <mode>,
|
||||
"type" : <type>,
|
||||
"size" : <size>,
|
||||
"atime": <atime>,
|
||||
"mtime": <mtime>,
|
||||
"ctime": <ctime>
|
||||
}, "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | --------------- | ------------------------------------------- |
|
||||
| filesystem | string | name of the filesystem |
|
||||
| parent | integer | inode of parent directory (1 = root) |
|
||||
| name | string | name of the filesystem object to look up |
|
||||
| inode | integer | inode of the filesystem object |
|
||||
| mode | integer | unix file mode |
|
||||
| type | "file" or "dir" | type of filesystem object |
|
||||
| size | integer | required for files; file size in bytes |
|
||||
| atime | integer | optional; unix time of last access |
|
||||
| mtime | integer | optional; unix time of last modification |
|
||||
| ctime | intefer | optional; unix time of last metadata change |
|
||||
|
||||
### getattr
|
||||
|
||||
Get file attributes.
|
||||
|
||||
webfuse daemon: {"method": "getattr", "params": [<filesystem>, <inode>], "id": <id>}
|
||||
fs provider: {"result": {
|
||||
"mode" : <mode>,
|
||||
"type" : <type>,
|
||||
"size" : <size>,
|
||||
"atime": <atime>,
|
||||
"mtime": <mtime>,
|
||||
"ctime": <ctime>
|
||||
}, "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | --------------- | ------------------------------------------- |
|
||||
| filesystem | string | name of the filesystem |
|
||||
| inode | integer | inode of the filesystem object |
|
||||
| mode | integer | unix file mode |
|
||||
| type | "file" or "dir" | type of filesystem object |
|
||||
| size | integer | required for files; file size in bytes |
|
||||
| atime | integer | optional; unix time of last access |
|
||||
| mtime | integer | optional; unix time of last modification |
|
||||
| ctime | intefer | optional; unix time of last metadata change |
|
||||
|
||||
### readdir
|
||||
|
||||
Read directory contents.
|
||||
Result is an array of name-inode pairs for each entry. The generic entries
|
||||
"." and ".." should also be provided.
|
||||
|
||||
webfuse daemon: {"method": "readdir", "params": [<filesystem>, <dir_inode>], "id": <id>}
|
||||
fs provider: {"result": [
|
||||
{"name": <name>, "inode": <inode>},
|
||||
...
|
||||
], "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | --------------- | ------------------------------ |
|
||||
| filesystem | string | name of the filesystem |
|
||||
| dir_inode | integer | inode of the directory to read |
|
||||
| name | integer | name of the entry |
|
||||
| inode | integer | inode of the entry |
|
||||
|
||||
### open
|
||||
|
||||
Open a file.
|
||||
|
||||
webfuse daemon: {"method": "readdir", "params": [<filesystem>, <inode>, <flags>], "id": <id>}
|
||||
fs provider: {"result": {"handle": <handle>}, "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | ----------| ----------------------------- |
|
||||
| filesystem | string | name of the filesystem |
|
||||
| inode | integer | inode of the file |
|
||||
| flags | integer | access mode flags (see below) |
|
||||
| handle | integer | handle of the file |
|
||||
|
||||
#### Flags
|
||||
|
||||
| Symbolic name | Code | Description |
|
||||
| --------------| ---------:| --------------------------- |
|
||||
| O_ACCMODE | 0x003 | access mode mask |
|
||||
| O_RDONLY | 0x000 | open for reading only |
|
||||
| O_WRONLY | 0x001 | open for writing only |
|
||||
| O_RDWR | 0x002 | open for reading an writing |
|
||||
| O_CREAT | 0x040 | create (a new) file |
|
||||
| O_EXCL | 0x080 | open file exclusivly |
|
||||
| O_TRUNC | 0x200 | open file to truncate |
|
||||
| O_APPEND | 0x400 | open file to append |
|
||||
|
||||
### close
|
||||
|
||||
Informs filesystem provider, that a file is closed.
|
||||
Since `close` is a notification, it cannot fail.
|
||||
|
||||
webfuse daemon: {"method": "close", "params": [<filesystem>, <inode>, <handle>, <flags>], "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | ----------| ---------------------------- |
|
||||
| filesystem | string | name of the filesystem |
|
||||
| inode | integer | inode of the file |
|
||||
| handle | integer | handle of the file |
|
||||
| flags | integer | access mode flags (see open) |
|
||||
|
||||
### read
|
||||
|
||||
Read from an open file.
|
||||
|
||||
webfuse daemon: {"method": "close", "params": [<filesystem>, <inode>, <handle>, <offset>, <length>], "id": <id>}
|
||||
fs provider: {"result": {
|
||||
"data": <data>,
|
||||
"format": <format>,
|
||||
"count": <count>
|
||||
}, "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | ----------| ----------------------------- |
|
||||
| filesystem | string | name of the filesystem |
|
||||
| inode | integer | inode of the file |
|
||||
| handle | integer | handle of the file |
|
||||
| offset | integer | Offet to start read operation |
|
||||
| length | integer | Max. number of bytes to read |
|
||||
| data | integer | handle of the file |
|
||||
| format | string | Encoding of data (see below) |
|
||||
| count | integer | Actual number of bytes read |
|
||||
|
||||
#### Format
|
||||
|
||||
| Format | Description |
|
||||
| ---------- | -------------------------------------------------------- |
|
||||
| "identiy" | Use data as is; note that JSON strings are UTF-8 encoded |
|
||||
| "base64" | data is base64 encoded |
|
||||
|
||||
## Requests (Provider -> Adapter)
|
||||
|
||||
### add_filesystem
|
||||
|
||||
Adds a filesystem.
|
||||
|
||||
fs provider: {"method": "add_filesytem", "params": [<name>], "id": <id>}
|
||||
webfuse daemon: {"result": {"id": <name>}, "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | ----------| ------------------------------- |
|
||||
| name | string | name and id of filesystem |
|
||||
|
||||
### authtenticate
|
||||
|
||||
Authenticate the provider.
|
||||
If authentication is enabled, a provider must be authenticated by the adapter before filesystems can be added.
|
||||
|
||||
fs provider: {"method": "authenticate", "params": [<type>, <credentials>], "id": <id>}
|
||||
webfuse daemon: {"result": {}, "id": <id>}
|
||||
|
||||
| Item | Data type | Description |
|
||||
| ----------- | ----------| ------------------------------- |
|
||||
| type | string | authentication type (see below) |
|
||||
| credentials | object | credentials to authenticate |
|
||||
|
||||
#### authentication types
|
||||
|
||||
- **username**: authenticate via username and password
|
||||
`{"username": <username>, "password": <password>}`
|
@ -1,17 +1,23 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \file status.h
|
||||
/// \brief Generic status code.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef WF_STATUS_H
|
||||
#define WF_STATUS_H
|
||||
|
||||
#define WF_GOOD 0
|
||||
#define WF_BAD 1
|
||||
#define WF_GOOD 0 ///< Positive status code.
|
||||
#define WF_BAD 1 ///< Generic negative status code.
|
||||
|
||||
#define WF_BAD_NOTIMPLEMENTED 2
|
||||
#define WF_BAD_TIMEOUT 3
|
||||
#define WF_BAD_BUSY 4
|
||||
#define WF_BAD_FORMAT 5
|
||||
#define WF_BAD_NOTIMPLEMENTED 2 ///< The called function is not implemented (yet).
|
||||
#define WF_BAD_TIMEOUT 3 ///< A timeout occured.
|
||||
#define WF_BAD_BUSY 4 ///< Resource is busy, try again later.
|
||||
#define WF_BAD_FORMAT 5 ///< Invalid format.
|
||||
|
||||
#define WF_BAD_NOENTRY 101
|
||||
#define WF_BAD_ACCESS_DENIED 102
|
||||
#define WF_BAD_NOENTRY 101 ///< Entry not found.
|
||||
#define WF_BAD_ACCESS_DENIED 102 ///< Access is denied.
|
||||
|
||||
/// Status code.
|
||||
typedef int wf_status;
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in new issue