/****************************************************************************** * Copyright (c) Transmission authors and contributors * * 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. * * 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. *****************************************************************************/ #include /* fprintf () */ #include /* atoi () */ #include /* memcmp () */ #include #include #include #include #include #include /* tr_wait_msec */ #include #include #include /* tr_webRun */ /*** **** ***/ #define MEM_K 1024 #define MEM_K_STR "KiB" #define MEM_M_STR "MiB" #define MEM_G_STR "GiB" #define MEM_T_STR "TiB" #define DISK_K 1000 #define DISK_B_STR "B" #define DISK_K_STR "kB" #define DISK_M_STR "MB" #define DISK_G_STR "GB" #define DISK_T_STR "TB" #define SPEED_K 1000 #define SPEED_B_STR "B/s" #define SPEED_K_STR "kB/s" #define SPEED_M_STR "MB/s" #define SPEED_G_STR "GB/s" #define SPEED_T_STR "TB/s" /*** **** ***/ #define LINEWIDTH 80 #define MY_CONFIG_NAME "transmission" #define MY_READABLE_NAME "transmission-cli" static bool showVersion = false; static bool verify = false; static sig_atomic_t gotsig = false; static sig_atomic_t manualUpdate = false; static char const* torrentPath = NULL; static struct tr_option const options[] = { { 'b', "blocklist", "Enable peer blocklists", "b", false, NULL }, { 'B', "no-blocklist", "Disable peer blocklists", "B", false, NULL }, { 'd', "downlimit", "Set max download speed in "SPEED_K_STR, "d", true, "" }, { 'D', "no-downlimit", "Don't limit the download speed", "D", false, NULL }, { 910, "encryption-required", "Encrypt all peer connections", "er", false, NULL }, { 911, "encryption-preferred", "Prefer encrypted peer connections", "ep", false, NULL }, { 912, "encryption-tolerated", "Prefer unencrypted peer connections", "et", false, NULL }, { 'f', "finish", "Run a script when the torrent finishes", "f", true, "