X-Git-Url: https://develop.uap-core.de/gitweb/mizunara.git/blobdiff_plain/6de1fe1dd8731d4d952657181f871f9723bbb8b2..963a0109c8244dcc16a829b607a194770a77602f:/mizucp/main.h diff --git a/mizucp/main.h b/mizucp/main.h index 9192835..e5537e5 100644 --- a/mizucp/main.h +++ b/mizucp/main.h @@ -1,74 +1,132 @@ /* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * Copyright 2021 Olaf Wintermann * - * Copyright 2021 Olaf Wintermann. All rights reserved. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * 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. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifndef MAIN_H #define MAIN_H #include +#include +#include #include +#include + #ifdef __cplusplus extern "C" { #endif -#define UWCP_ENV_HOME "HOME" -#define UWCP_CFG_DIR ".uwfile" -#define UWCP_COPY_DIR "copy" +#define MZCP_ENV_HOME "HOME" +#define MZCP_CFG_BASE ".config" +#define MZCP_CFG_DIR ".config/mizunara" +#define MZCP_COPY_DIR "copy" #define CLIENT_MSG_BUFSIZE 512 +#define MAX_COPY_THREADS 32 +#define MZ_COPY_BUFSIZE 4 * 1024 * 1024 + typedef char CPBool; +typedef struct SrcFile SrcFile; +typedef struct MZLock MZLock; +typedef struct MZQueue MZQueue; + typedef struct { char *from; char *to; + size_t num_threads; CPBool url; CPBool pause; CPBool printsocket; + struct stat root_stat; } CPSettings; -typedef struct { - int fd; - char buf[CLIENT_MSG_BUFSIZE]; - size_t pos; -} CtrlClient; +struct MZLock { + pthread_mutex_t mutex; + pthread_cond_t cond; +}; + +struct SrcFile { + /* + * src file path relative to CPSettings.from + */ + char *path; + + /* + * is the file a directory + */ + CPBool isdir; + + /* + * copy status + * 0: unprocessed + * 1: success + * -1: failure + */ + int status; + + /* + * file mode + */ + mode_t mode; + + /* + * file size + */ + uint64_t size; + + /* + * processing this file depends on another file (directory) + */ + SrcFile *depends_on; + + /* + * lock used for waiting, until this resource is successfully copied + */ + MZLock *lock; +}; + +struct MZQueue { + SrcFile *file; + MZQueue *next; +}; + +const char* mzcp_get_cfgdir(void); +const char* mzcp_get_copydir(void); + +int mzcp_copy(CPSettings *settings); -int uwcp_copy(CPSettings *settings); +int mzcp_start_scan(CPSettings *settings); +void* scan_run(void *data); -int uwcp_srvctrl(CPSettings *settings); +int enqueue_file(SrcFile *file); -void client_free(CtrlClient *client); +int mzcp_start_copy_threads(CPSettings *settings); +void* copy_run(void *data); -int handle_messages(CtrlClient *client); -int handle_client_msg(CtrlClient *client, sstr_t msg); +int mz_copy_dir(CPSettings *settings, SrcFile *file, const char *from, const char *to); +int mz_copy_file(CPSettings *settings, SrcFile *file, const char *from, const char *to, char *buffer, size_t bufsize); -void client_send_status(CtrlClient *client); #ifdef __cplusplus }