Fri, 15 Nov 2024 21:50:20 +0100
add reference counting to download window
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2023 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef LIBIDAV_CONFIG_H #define LIBIDAV_CONFIG_H #include "webdav.h" #ifdef __cplusplus extern "C" { #endif typedef struct DavConfig DavConfig; typedef struct DavCfgRepository DavCfgRepository; typedef struct DavCfgProxy DavCfgProxy; typedef struct DavCfgKey DavCfgKey; typedef struct DavCfgNamespace DavCfgNamespace; typedef struct DavCfgSecretStore DavCfgSecretStore; typedef struct CfgString CfgString; typedef struct CfgInt CfgInt; typedef struct CfgUInt CfgUInt; typedef struct CfgBool CfgBool; typedef enum dav_cfg_key_type DavCfgKeyType; typedef cxmutstr (*dav_loadkeyfile_func)(const char *filename); #define DAV_HTTP_PROXY 1 #define DAV_HTTPS_PROXY 2 enum dav_cfg_key_type { DAV_KEY_TYPE_AES256 = 0, DAV_KEY_TYPE_AES128, DAV_KEY_TYPE_UNKNOWN }; struct DavConfig { CxMempool *mp; DavCfgRepository *repositories; DavCfgKey *keys; DavCfgNamespace *namespaces; DavCfgProxy *http_proxy; DavCfgProxy *https_proxy; DavCfgSecretStore *secretstore; xmlDoc *doc; }; struct CfgString { cxmutstr value; xmlNode *node; }; struct CfgInt { int64_t value; xmlNode *node; }; struct CfgUInt { uint64_t value; xmlNode *node; }; struct CfgBool { bool value; xmlNode *node; }; struct DavCfgRepository { xmlNode *node; CfgString name; CfgString url; CfgString user; CfgString password; CfgString stored_user; CfgString default_key; CfgString cert; CfgBool verification; CfgBool full_encryption; CfgBool content_encryption; CfgBool decrypt_content; CfgBool decrypt_name; CfgBool decrypt_properties; CfgInt ssl_version; CfgUInt authmethods; int unknown_elements; DavCfgRepository *prev; DavCfgRepository *next; }; struct DavCfgProxy { CfgString url; CfgString user; CfgString password; CfgString noproxy; int unknown_elements; }; struct DavCfgKey { xmlNode *node; CfgString name; CfgString file; DavCfgKeyType type; xmlNode *type_node; DavCfgKey *prev; DavCfgKey *next; int unknown_elements; }; struct DavCfgNamespace { xmlNode *node; cxmutstr prefix; cxmutstr uri; DavCfgNamespace *prev; DavCfgNamespace *next; }; struct DavCfgSecretStore { CfgString unlock_cmd; CfgString lock_cmd; }; enum DavConfigError { DAV_CONFIG_ERROR_XML = 0 }; DavConfig* dav_config_new(xmlDoc *doc); DavConfig* dav_config_load(cxmutstr xmlfilecontent, int *error); void dav_config_free(DavConfig *config); CxBuffer* dav_config2buf(DavConfig *config); void dav_config_add_repository(DavConfig *config, DavCfgRepository *repo); DavCfgRepository* dav_repository_new(DavConfig *config); void dav_repository_free(DavConfig *config, DavCfgRepository *repo); void dav_repository_remove_and_free(DavConfig *config, DavCfgRepository *repo); int dav_repository_get_flags(DavCfgRepository *repo); void dav_repository_set_url(DavConfig *config, DavCfgRepository *repo, cxstring newurl); void dav_repository_set_auth(DavConfig *config, DavCfgRepository *repo, cxstring user, cxstring password); cxmutstr dav_repository_get_decodedpassword(DavCfgRepository *repo); void dav_config_add_key(DavConfig *config, DavCfgKey *key); DavCfgKey* dav_key_new(DavConfig *config); void dav_key_remove_and_free(DavConfig *config, DavCfgKey *key); int dav_str2ssl_version(const char *str); int dav_cfg_string_set_node_value(DavConfig *config, CfgString *str, xmlNode *node); void dav_cfg_bool_set_node_value(DavConfig *config, CfgBool *cbool, xmlNode *node); void dav_cfg_string_set_value(DavConfig *config, CfgString *str, xmlNode *parent, cxstring new_value, const char *nodename); void dav_cfg_bool_set_value(DavConfig *config, CfgBool *cbool, xmlNode *parent, DavBool new_value, const char *nodename); void dav_cfg_int_set_value(DavConfig *config, CfgInt *cint, xmlNode *parent, int64_t new_value, const char *nodename); void dav_cfg_uint_set_value(DavConfig *config, CfgUInt *cint, xmlNode *parent, uint64_t new_value, const char *nodename); void dav_cfg_string_remove(CfgString *str); void dav_cfg_bool_remove(CfgBool *cbool); void dav_cfg_int_remove(CfgInt *cint); void dav_cfg_uint_remove(CfgUInt *cint); DavCfgRepository* dav_config_get_repository(DavConfig *config, cxstring name); DavCfgRepository* dav_config_url2repo(DavConfig *config, const char *url, char **path); DavCfgRepository* dav_config_url2repo_s(DavConfig *config, cxstring url, cxmutstr *path); int dav_config_keytype(DavCfgKeyType type); const char* dav_config_keytype_str(DavCfgKeyType type); int dav_config_register_keys(DavConfig *config, DavContext *ctx, dav_loadkeyfile_func loadkey); int dav_config_register_namespaces(DavConfig *config, DavContext *ctx); #ifdef __cplusplus } #endif #endif /* LIBIDAV_CONFIG_H */