Added --config flag, updated CHANGELOG.md
This commit is contained in:
parent
55ad0cd9fc
commit
4b02980380
|
@ -8,6 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
### Added
|
||||
- Subsonic server support - this is dedicated to my Debian package maintainer
|
||||
Jerome Charaoui
|
||||
- You can now specify which configuration file to use by using the ``--config``
|
||||
flag.
|
||||
- Added support for turning off TLS certificate check.
|
||||
- Now check for server's support for HTTP range request, which can be turned off
|
||||
using the ``--no-range-check`` flag.
|
||||
|
||||
### Changed
|
||||
- Wrapped all calloc() calls with error handling functions.
|
||||
|
|
69
README.md
69
README.md
|
@ -73,31 +73,6 @@ FUSE options:
|
|||
-f foreground operation
|
||||
-s disable multi-threaded operation
|
||||
|
||||
## Permanent cache system
|
||||
You can cache all the files you have looked at permanently on your hard drive by
|
||||
using the ``--cache`` flag. The file it caches persist across sessions.
|
||||
|
||||
By default, the cache files are stored under ``${XDG_CACHE_HOME}/httpdirfs``,
|
||||
which by default is ``${HOME}/.cache/httpdirfs``. Each HTTP directory gets its
|
||||
own cache folder, they are named using the escaped URL of the HTTP directory.
|
||||
|
||||
Once a segment of the file has been downloaded once, it won't be downloaded
|
||||
again.
|
||||
|
||||
Please note that due to the way the permanent cache system is implemented. The
|
||||
maximum download speed is around 15MiB/s, as measured using my localhost as the
|
||||
web server. However after you have accessed a file once, accessing it again will
|
||||
be the same speed as accessing your hard drive.
|
||||
|
||||
If you have any patches to make the initial download go faster, please submit a
|
||||
pull request.
|
||||
|
||||
The permanent cache system relies on sparse allocation. Please make sure your
|
||||
filesystem supports it. Otherwise your hard drive / SSD will get heavy I/O from
|
||||
cache file creation. For a list of filesystem that supports sparse allocation,
|
||||
please refer to
|
||||
[Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_file_systems#Allocation_and_layout_policies).
|
||||
|
||||
## Airsonic / Subsonic server support
|
||||
This is a new feature to 1.2.0. Now you can mount the music collection on your
|
||||
Airsonic / Subsonic server (*sonic), and browse them using your favourite file browser.
|
||||
|
@ -128,11 +103,45 @@ ID3 mode, please use the ``--sonic-id3`` flag.
|
|||
|
||||
Please note that the cache feature is unaffected by how you mount your *sonic
|
||||
server. If you mounted your server in index mode, the cache is still valid in
|
||||
ID3 mode, and vice versa.
|
||||
ID3 mode, and vice versa.
|
||||
|
||||
HTTPDirFS is also known to work with the following applications, which implement
|
||||
some or all of Subsonic API:
|
||||
|
||||
- [Funkwhale](https://funkwhale.audio/) (requires ``--sonic-id3`` and
|
||||
``--no-range-check``)
|
||||
- [LMS](https://github.com/epoupon/lms) (requires ``--sonic-insecure`` and
|
||||
``--no-range-check``. To mount the [demo instance](https://lms.demo.poupon.io/),
|
||||
you might also need ``--insecure-tls``
|
||||
|
||||
## Permanent cache system
|
||||
You can cache all the files you have looked at permanently on your hard drive by
|
||||
using the ``--cache`` flag. The file it caches persist across sessions.
|
||||
|
||||
By default, the cache files are stored under ``${XDG_CACHE_HOME}/httpdirfs``,
|
||||
which by default is ``${HOME}/.cache/httpdirfs``. Each HTTP directory gets its
|
||||
own cache folder, they are named using the escaped URL of the HTTP directory.
|
||||
|
||||
Once a segment of the file has been downloaded once, it won't be downloaded
|
||||
again.
|
||||
|
||||
Please note that due to the way the permanent cache system is implemented. The
|
||||
maximum download speed is around 15MiB/s, as measured using my localhost as the
|
||||
web server. However after you have accessed a file once, accessing it again will
|
||||
be the same speed as accessing your hard drive.
|
||||
|
||||
If you have any patches to make the initial download go faster, please submit a
|
||||
pull request.
|
||||
|
||||
The permanent cache system relies on sparse allocation. Please make sure your
|
||||
filesystem supports it. Otherwise your hard drive / SSD will get heavy I/O from
|
||||
cache file creation. For a list of filesystem that supports sparse allocation,
|
||||
please refer to
|
||||
[Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_file_systems#Allocation_and_layout_policies).
|
||||
|
||||
## Configuration file support
|
||||
This program has basic support for using a configuration file. The configuration
|
||||
file that the program reads is ``${XDG_CONFIG_HOME}/httpdirfs/config``, which by
|
||||
This program has basic support for using a configuration file. By default, the configuration file which the program reads is
|
||||
``${XDG_CONFIG_HOME}/httpdirfs/config``, which by
|
||||
default is at ``${HOME}/.config/httpdirfs/config``. You will have to create the
|
||||
sub-directory and the configuration file yourself. In the configuration file,
|
||||
please supply one option per line. For example:
|
||||
|
@ -141,6 +150,9 @@ please supply one option per line. For example:
|
|||
--password test
|
||||
-f
|
||||
|
||||
Alternatively, you can specify your own configuration file by using the
|
||||
``--config`` option.
|
||||
|
||||
## Compilation
|
||||
### Debian 10 "Buster" and newer versions
|
||||
Under Debian 10 "Buster" and newer versions, you need the following packages:
|
||||
|
@ -163,6 +175,7 @@ the header files for OpenSSL 1.1. The header files for OpenSSL 1.0.2 link in
|
|||
additional mutex related callback functions, whereas the header files for
|
||||
OpenSSL 1.1 do not.
|
||||
|
||||
You can check your SSL engine version using the ``--version`` flag.
|
||||
|
||||
### Debugging Mutexes
|
||||
By default the debugging output associated with mutexes are not compiled. To
|
||||
|
|
45
src/main.c
45
src/main.c
|
@ -14,6 +14,8 @@ static int
|
|||
parse_arg_list(int argc, char **argv, char ***fuse_argv, int *fuse_argc);
|
||||
void parse_config_file(char ***argv, int *argc);
|
||||
|
||||
static char *config_path = NULL;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
/* Automatically print help if not enough arguments are supplied */
|
||||
|
@ -41,14 +43,17 @@ int main(int argc, char **argv)
|
|||
/* initialise network subsystem */
|
||||
NetworkSystem_init();
|
||||
|
||||
/* parse the config file, if it exists, store it in all_argv and all_argc */
|
||||
parse_config_file(&all_argv, &all_argc);
|
||||
|
||||
/* Copy the command line argument list to the combined argument list */
|
||||
for (int i = 1; i < argc; i++) {
|
||||
add_arg(&all_argv, &all_argc, argv[i]);
|
||||
if (!strcmp(argv[i], "--config")) {
|
||||
config_path = strdup(argv[i+1]);
|
||||
}
|
||||
}
|
||||
|
||||
/* parse the config file, if it exists, store it in all_argv and all_argc */
|
||||
parse_config_file(&all_argv, &all_argc);
|
||||
|
||||
/* parse the combined argument list */
|
||||
if (parse_arg_list(all_argc, all_argv, &fuse_argv, &fuse_argc)) {
|
||||
/*
|
||||
|
@ -90,13 +95,18 @@ activate Sonic mode.\n");
|
|||
|
||||
void parse_config_file(char ***argv, int *argc)
|
||||
{
|
||||
char *xdg_config_home = getenv("XDG_CONFIG_HOME");
|
||||
if (!xdg_config_home) {
|
||||
char *home = getenv("HOME");
|
||||
char *xdg_config_home_default = "/.config";
|
||||
xdg_config_home = path_append(home, xdg_config_home_default);
|
||||
char *full_path;
|
||||
if (!config_path) {
|
||||
char *xdg_config_home = getenv("XDG_CONFIG_HOME");
|
||||
if (!xdg_config_home) {
|
||||
char *home = getenv("HOME");
|
||||
char *xdg_config_home_default = "/.config";
|
||||
xdg_config_home = path_append(home, xdg_config_home_default);
|
||||
}
|
||||
full_path = path_append(xdg_config_home, "/httpdirfs/config");
|
||||
} else {
|
||||
full_path = config_path;
|
||||
}
|
||||
char *full_path = path_append(xdg_config_home, "/httpdirfs/config");
|
||||
|
||||
/* The buffer has to be able to fit a URL */
|
||||
int buf_len = MAX_PATH_LEN;
|
||||
|
@ -155,6 +165,7 @@ parse_arg_list(int argc, char **argv, char ***fuse_argv, int *fuse_argc)
|
|||
{"no-range-check", no_argument, NULL, 'L'}, /* 18 */
|
||||
{"sonic-insecure", no_argument, NULL, 'L'}, /* 19 */
|
||||
{"insecure-tls", no_argument, NULL, 'L'}, /* 20 */
|
||||
{"config", required_argument, NULL, 'L'}, /* 21 */
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
while ((c =
|
||||
|
@ -240,6 +251,9 @@ parse_arg_list(int argc, char **argv, char ***fuse_argv, int *fuse_argc)
|
|||
case 20:
|
||||
CONFIG.insecure_tls = 1;
|
||||
break;
|
||||
case 21:
|
||||
/* This is for --config, we don't need to do anything */
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "see httpdirfs -h for usage\n");
|
||||
return 1;
|
||||
|
@ -276,8 +290,10 @@ static void print_help(char *program_name, int long_help)
|
|||
|
||||
static void print_version()
|
||||
{
|
||||
fprintf(stderr,
|
||||
"HTTPDirFS version " VERSION "\n");
|
||||
fprintf(stderr, "HTTPDirFS version " VERSION "\n");
|
||||
/* --------- Print off SSL engine version --------- */
|
||||
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
|
||||
fprintf(stderr, "libcurl SSL engine: %s\n", data->ssl_version);
|
||||
}
|
||||
|
||||
static void print_long_help()
|
||||
|
@ -285,9 +301,10 @@ static void print_long_help()
|
|||
fprintf(stderr,
|
||||
"\n\
|
||||
general options:\n\
|
||||
-o opt,[opt...] mount options\n\
|
||||
-h --help print help\n\
|
||||
-V --version print version\n\
|
||||
--config Specify a configuration file \n\
|
||||
-o opt,[opt...] Mount options\n\
|
||||
-h --help Print help\n\
|
||||
-V --version Print version\n\
|
||||
\n\
|
||||
HTTPDirFS options:\n\
|
||||
-u --username HTTP authentication username\n\
|
||||
|
|
|
@ -276,10 +276,6 @@ void NetworkSystem_init(void)
|
|||
* https://curl.haxx.se/libcurl/c/threaded-ssl.html
|
||||
*/
|
||||
crypto_lock_init();
|
||||
|
||||
/* --------- Print off SSL engine version stream --------- */
|
||||
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
|
||||
fprintf(stderr, "libcurl SSL engine: %s\n", data->ssl_version);
|
||||
}
|
||||
|
||||
void transfer_blocking(CURL *curl)
|
||||
|
|
|
@ -298,7 +298,6 @@ LinkTable *sonic_LinkTable_new_index(const char *id)
|
|||
} else {
|
||||
url = sonic_gen_url_first_part("getIndexes");
|
||||
}
|
||||
puts(url);
|
||||
LinkTable *linktbl = sonic_url_to_LinkTable(url, XML_parser_index, 0);
|
||||
free(url);
|
||||
return linktbl;
|
||||
|
|
Loading…
Reference in New Issue