mirror of
https://github.com/akuker/RASCSI.git
synced 2025-04-18 11:37:08 +00:00
Support for folder filter and nested image files (#551)
* Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Code cleanup, initial support for creating nested file * Check for existing folder * Cleanup * Cleanup * Copy/rename/create * Updated delete operation * Delete empty folders * Code cleanup * Fixed typo * Check image file nesting level * Updated error handling * Fixed warning * Renaming * Error message update * Interface comment updates * Added depth to image info * Fixed scan depth check * Squashed commit of the following: commit 94786aec54c589c080dcec3b18b388a17de64ae3 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Tue Dec 21 08:43:21 2021 +0100 Added support for operation meta data, code cleanup (#534) * Added messages * Comment update * Interface update * Support for localized descriptions * Sort operations * Completed meta data * rasctl -s returns operation meta data * Manpage update * Type update * Comment update * Description updates * Comment update * Added convenience method * Added convenience method * Code cleanup * Comment update * Display permitted values * For completeness sake added permitted boolean values * Added support for default value * Removed redundant message field * Description update * Description upddate * Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements * Default value update * Comment update * Comment update * Map operations by ordinal * Added safeguard against unknown operations * Added cast * Data type update * Sort map by operation name * Renaming * Code cleanup * Comment update * Renaming * Comment update * Description updates * Fixed typo * Added operation * Logging update * Interface comment update * Fixed typo * Aded operation parameters * Updated handling of mandatory parameters * Updated assertion handling * Added missing condition * Removed duplicate cod3 * Code cleanup * Logging update * Removed duplicate code * Code cleanup * Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup * Shutdown functionality is only available if started with root permissions * Only restrict shutdown parameters, not everything if not root * Updated operation count check commit 693ade296756ee8e480e75663a873e4a35829034 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 12:04:23 2021 -0800 Bump Macproxy version to 21.12.2 (#550) commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User <user@rascsi.com> commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit ec31198d83f5ff7400d74d7acf08c832998deb91 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:54:10 2021 +0100 Optional authentication by access token (#529) * Added authentication by access token * No authentication is required for getting the rascsi version * Added comment * Interface description update * Manpage update * Added error code * Enum value update (backwards compatible) * Error code update * Error code update * Added CHECK_AUTHENTICATION * Comment update * VERSION_INFO also requires authentication * rasctl: Made token an optional parameter for -P * Fixed interface comment commit e32211ef737d1a435ee8ca1d7244b3609202b28f Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:49:17 2021 +0100 Recursive image file scan and image file filter (#532) * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Squashed commit of the following: commit 192b14169f7b3f433d23d4306b60ae1aff7e3c96 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Tue Dec 21 09:19:05 2021 +0100 Meta data update commit b319d726018a8fef01b76c19cd600aa70891568f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Tue Dec 21 09:02:39 2021 +0100 Squashed commit of the following: commit 0ab4918c5a59f978f48cf26f431ff809e9ddae33 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 16:52:03 2021 +0100 Scan depth determines availability of folder filter commit 16590cc4e4420a348fae610d749082c9d718be0a Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 15:47:08 2021 +0100 Updated operation count check commit 82f7c99755f535a7a5c30fe66e377705c5306faa Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 15:41:32 2021 +0100 Only restrict shutdown parameters, not everything if not root commit 9bd50d37b11c48b2130e4f6e66d12def88ddc38f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 15:28:08 2021 +0100 Shutdown functionality is only available if started with root permissions commit aa5f3331abf4c178e8ce738c14fd584bd41d1b94 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 10:26:14 2021 +0100 Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit a1f4b28f92bd9f7cdba18c04f61d3721fc7c720f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 21:50:15 2021 +0100 Comment update commit 9cbc06caf5f00ce85e0f7f984c871ed614e2e483 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 21:49:09 2021 +0100 Option update commit c4aa39c2285c5c72e2ea28ad749f5670dd10e89f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 21:46:37 2021 +0100 Merged feature_folder_filter commit ea386fc74cbd64f19a7805d16c19f08f278739f3 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 19:05:07 2021 +0100 Code cleanup commit 17c320113564fa2f0f2f11c1fe2e8b0048be2f48 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 19:03:13 2021 +0100 Removed duplicate code commit 296f816dd3bc632efd11cda4b181362fb89e14e3 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 18:40:49 2021 +0100 Logging update commit 73e0df85576932f2a99df5c8472a6922a6ed9e95 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 17:28:02 2021 +0100 Code cleanup commit 405dbb034cf7775e069e5db9751f007587318558 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 17:13:40 2021 +0100 Removed duplicate cod3 commit c7c168a9420ea43f3b3dd003a5d75a928e8f66c5 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 17:08:02 2021 +0100 Added missing condition commit 6af5394f7879854b12d341c4b6c7ac1b06302494 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 16:16:12 2021 +0100 Updated assertion handling commit 632fe1acd81fa27c096ff6190b5082717e3b3f02 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 14:33:01 2021 +0100 Updated handling of mandatory parameters commit a4e0d506c6a48641b827bc88590d0b416ae2513c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 14:14:09 2021 +0100 Aded operation parameters commit fc783e6a437fb3a4f3f0f60235717c9f7621408d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 12:38:35 2021 +0100 Fixed typo commit cb1b498459b700556700575946264a3a8eabfb96 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 12:37:13 2021 +0100 Interface comment update commit e2d4347ce6daa0a1c3de606aead8cadeb203881a Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 12:35:50 2021 +0100 Logging update commit cecb72df3ea9c1b27071d4b62017449709206ec9 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 12:13:44 2021 +0100 Added operation commit bbf153ccd673004e371f5fb1f325ad2f3d95a97d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 12:09:49 2021 +0100 Fixed typo commit 29fa5c2f962c6e775b82940682121c6d41ffb5fc Merge: 28a36fa ec31198 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 12:07:34 2021 +0100 Merge branch 'develop' into feature_meta_data commit 28a36fa308d926fce4885f16a019604060ff1107 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 15:51:02 2021 +0100 Description updates commit 73df9f136ca572ba160918acf85ecf06d0bd7d2c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 14:37:58 2021 +0100 Comment update commit c3ea3c8b372284468c8302b82067454d17cd061c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 14:34:48 2021 +0100 Renaming commit 6a84edd0fbab8253e47c024ae65529c1c5b246ef Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 14:22:31 2021 +0100 Comment update commit c0d6e66afe819bbcfeb5c606ba7cbc257b39dfec Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 14:20:20 2021 +0100 Code cleanup commit cc81b588eb6bea2014a9abec6d67cdbe849e76e0 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 14:18:31 2021 +0100 Renaming commit c88628e12ad252420f29ebed0541a1c3c4ede231 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 14:17:50 2021 +0100 Sort map by operation name commit b64001e8a4a6941a8f671420e61121f471f90010 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:39:44 2021 +0100 Data type update commit 8177cd306222c8674fbcf889be634565bbd2337f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:37:23 2021 +0100 Added cast commit b8599ba0886363d91399bba6fa4607fd7b3fd445 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:35:40 2021 +0100 Added safeguard against unknown operations commit 6b14ba651135db152fe57c6fe469227f71f00969 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:26:21 2021 +0100 Map operations by ordinal commit ee101f2c6b8dbf527f77c8e005f2ded9ebdf4436 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:14:31 2021 +0100 Comment update commit 67c958ed371f35870e9acf91bd90446c46783264 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:13:06 2021 +0100 Comment update commit d1a9c4074576e75300d990a346abd2357a536138 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 13:04:58 2021 +0100 Default value update commit d9dbbc0bb3347832619c3e600405d4b3cf25d0da Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:47:36 2021 +0100 Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements commit 5d6862b6b0fcd2f6b59779c7d47fdc99af748a28 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 23:22:27 2021 +0100 Description upddate commit 69263b3e4b8c9443d6593db49b4bbb995d884382 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 23:21:38 2021 +0100 Description update commit 49e14f7078ae419766326758a923bde69af8eb9d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 23:19:08 2021 +0100 Removed redundant message field commit ff468aafa85a25c3f48a8bfdc1eb0a24b3fca63f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 23:09:18 2021 +0100 Added support for default value commit 2da717a0a037653d9b182439271165eb1859ed8d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 22:57:59 2021 +0100 For completeness sake added permitted boolean values commit 5d894d2e4f39b75e1672c430d5421df397d5ed10 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 22:53:07 2021 +0100 Display permitted values commit acc7d3cba5e667f690f76d68e6d8aa373faf1db5 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 20:37:03 2021 +0100 Comment update commit f846242aea70c723241eee7ed99943f54694e1e7 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 20:35:07 2021 +0100 Code cleanup commit 5a9592f102a93bbe0acde908e9f0f7b9bebf1e41 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 20:24:33 2021 +0100 Added convenience method commit 9d258d9979afe452ed58ef58c24b73b4ef2bfb05 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 20:05:53 2021 +0100 Added convenience method commit 6c4103989baee3fcffeeb040b501cc6aae9b4b0d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:45:20 2021 +0100 Comment update commit 7d543451f059cd12bed4a8a49bdfd1e8c0a7d706 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:27:50 2021 +0100 Description updates commit f4b0e50e663e5736f4ed1ec176dea2b10cf9d006 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:23:29 2021 +0100 Comment update commit 35dd3f6282cf3253b04e1eea1d25c5ad65247690 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:21:12 2021 +0100 Type update commit 7a94c0e6e0641e1aaa62f892a3f70975165cbca0 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:17:05 2021 +0100 Manpage update commit 4179110bac97268860a1b5bed32d18b0b944bda6 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:13:42 2021 +0100 rasctl -s returns operation meta data commit eed83bb005b1f03df7f10c451a7cf2d872d42b0a Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 19:05:29 2021 +0100 Completed meta data commit 4a7528d9d320bbac4f77d29f293cb99da56561bb Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 18:39:18 2021 +0100 Sort operations commit d3af9a142ceb2dcfb3f0dc310925eff3bf62071b Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 18:29:22 2021 +0100 Support for localized descriptions commit b4ff4f52ab03683f76b6f23b057063ca67f1b9dd Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 17:53:11 2021 +0100 Interface update commit e8d9e97fe5c3e64fab57ccff8cfdb60fe24a849d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 16:59:49 2021 +0100 Comment update commit 22753b15471166a34748113026b1e46b4c3b6888 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Fri Dec 17 16:57:39 2021 +0100 Added messages commit b3a92924588513787e89908310d450306064e946 Merge: ea3bb83 94786ae Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Tue Dec 21 08:57:56 2021 +0100 Merge branch 'develop' into feature_folder_filter commit ea3bb8363a2a9a734abd2fc330066c52d5638b6d Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Tue Dec 21 08:53:30 2021 +0100 Squashed commit of the following: commit 94786aec54c589c080dcec3b18b388a17de64ae3 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Tue Dec 21 08:43:21 2021 +0100 Added support for operation meta data, code cleanup (#534) * Added messages * Comment update * Interface update * Support for localized descriptions * Sort operations * Completed meta data * rasctl -s returns operation meta data * Manpage update * Type update * Comment update * Description updates * Comment update * Added convenience method * Added convenience method * Code cleanup * Comment update * Display permitted values * For completeness sake added permitted boolean values * Added support for default value * Removed redundant message field * Description update * Description upddate * Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements * Default value update * Comment update * Comment update * Map operations by ordinal * Added safeguard against unknown operations * Added cast * Data type update * Sort map by operation name * Renaming * Code cleanup * Comment update * Renaming * Comment update * Description updates * Fixed typo * Added operation * Logging update * Interface comment update * Fixed typo * Aded operation parameters * Updated handling of mandatory parameters * Updated assertion handling * Added missing condition * Removed duplicate cod3 * Code cleanup * Logging update * Removed duplicate code * Code cleanup * Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup * Shutdown functionality is only available if started with root permissions * Only restrict shutdown parameters, not everything if not root * Updated operation count check commit 693ade296756ee8e480e75663a873e4a35829034 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 12:04:23 2021 -0800 Bump Macproxy version to 21.12.2 (#550) commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User <user@rascsi.com> commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit 94786aec54c589c080dcec3b18b388a17de64ae3 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Tue Dec 21 08:43:21 2021 +0100 Added support for operation meta data, code cleanup (#534) * Added messages * Comment update * Interface update * Support for localized descriptions * Sort operations * Completed meta data * rasctl -s returns operation meta data * Manpage update * Type update * Comment update * Description updates * Comment update * Added convenience method * Added convenience method * Code cleanup * Comment update * Display permitted values * For completeness sake added permitted boolean values * Added support for default value * Removed redundant message field * Description update * Description upddate * Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements * Default value update * Comment update * Comment update * Map operations by ordinal * Added safeguard against unknown operations * Added cast * Data type update * Sort map by operation name * Renaming * Code cleanup * Comment update * Renaming * Comment update * Description updates * Fixed typo * Added operation * Logging update * Interface comment update * Fixed typo * Aded operation parameters * Updated handling of mandatory parameters * Updated assertion handling * Added missing condition * Removed duplicate cod3 * Code cleanup * Logging update * Removed duplicate code * Code cleanup * Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup * Shutdown functionality is only available if started with root permissions * Only restrict shutdown parameters, not everything if not root * Updated operation count check commit 693ade296756ee8e480e75663a873e4a35829034 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 12:04:23 2021 -0800 Bump Macproxy version to 21.12.2 (#550) commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User <user@rascsi.com> commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit f59eeb842ef5a71020bd1ae642eb9fe250963ea5 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 10:25:28 2021 +0100 Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit 670356e0e29b4c03ddb5f02f0621043881766ad6 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 20:26:03 2021 +0100 Code cleanup commit 4fc8f679758aef6d29a73850a7b8d15541b496e6 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 20:21:10 2021 +0100 Manpage update commit 29603a327a8bdbe2241200ccef7df8a36415fcf4 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Sun Dec 19 19:49:56 2021 +0100 Added optional folder name filter commit ec31198d83f5ff7400d74d7acf08c832998deb91 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:54:10 2021 +0100 Optional authentication by access token (#529) * Added authentication by access token * No authentication is required for getting the rascsi version * Added comment * Interface description update * Manpage update * Added error code * Enum value update (backwards compatible) * Error code update * Error code update * Added CHECK_AUTHENTICATION * Comment update * VERSION_INFO also requires authentication * rasctl: Made token an optional parameter for -P * Fixed interface comment commit e32211ef737d1a435ee8ca1d7244b3609202b28f Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:49:17 2021 +0100 Recursive image file scan and image file filter (#532) * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Interface update * Squashed commit of the following: commit 6c98228726c26936c81b498d2837c7af7731be3c Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 22:45:24 2021 +0100 Fixed scan depth check commit 87e8b3be6a74d873efd982b027049ee0aebe6184 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 20:46:36 2021 +0100 Added depth to image info commit 7c08fa6569e4c91132ff50f02a1c5d79935d78a3 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 20:38:53 2021 +0100 Interface comment updates commit 29d919d30eeb0322ad0178e4a14190089c505062 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 20:06:02 2021 +0100 Error message update commit fe76a1a577929f4f5b0517f859b58a611811b520 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:56:36 2021 +0100 Renaming commit 412b53ddf185406cf8ce7b6eab54e2271a110aaf Merge: bf9d906 958fb95 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:50:53 2021 +0100 Merge branch 'develop' into feature_file_operations_with_folders commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User <user@rascsi.com> commit bf9d90664cfd6c5e85ec16a607dcf1de9067db7e Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:42:36 2021 +0100 Fixed warning commit 362a90f3dc2960bf9b272073bb1904a8879e4486 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:37:32 2021 +0100 Updated error handling commit 66c380bd974fd5ada7b254d702d123ac775e768f Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:33:01 2021 +0100 Check image file nesting level commit c98a2b906929b6e10cc7a43d038c5a0671e8c6a1 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:06:18 2021 +0100 Fixed typo commit a36dabc00216aa22ec2953d17b2293ad0c7bf7fc Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 19:03:18 2021 +0100 Code cleanup commit 46fc22f72aabe0e51d2519a540707369eb91d8fc Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 18:58:27 2021 +0100 Delete empty folders commit d55bf3e06f7d2ab9f64ffe89d8e383f9b4dcca5e Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 18:33:59 2021 +0100 Updated delete operation commit 5afce5f50fd113c3d925f8b81e42247d8bd1b789 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 18:31:55 2021 +0100 Copy/rename/create commit b969d3990a5b21905e21ecb572e3ab1f19f52ccb Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 15:21:17 2021 +0100 Cleanup commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt <markstedt@gmail.com> Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit 6a6efa6bdd9974b4e0bb00b603914f824375a997 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 12:58:29 2021 +0100 Cleanup commit 72ab669158d55f8008f4c80a882356cad42a4c53 Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 12:58:03 2021 +0100 Check for existing folder commit 6a9ac4d0dafbc4e385a7553d03e2dce21f88b7ae Author: Uwe Seimet <Uwe.Seimet@seimet.de> Date: Mon Dec 20 12:52:26 2021 +0100 Code cleanup, initial support for creating nested file commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt <markstedt@gmail.com> Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit ec31198d83f5ff7400d74d7acf08c832998deb91 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:54:10 2021 +0100 Optional authentication by access token (#529) * Added authentication by access token * No authentication is required for getting the rascsi version * Added comment * Interface description update * Manpage update * Added error code * Enum value update (backwards compatible) * Error code update * Error code update * Added CHECK_AUTHENTICATION * Comment update * VERSION_INFO also requires authentication * rasctl: Made token an optional parameter for -P * Fixed interface comment commit e32211ef737d1a435ee8ca1d7244b3609202b28f Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:49:17 2021 +0100 Recursive image file scan and image file filter (#532) * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Code cleanup * Resolved merged issues * Fixed merge issue * Comment update * Message update * Fixed typo * Logging update * Logging update * Logging update * Fixed merge issue * Set pattern param for SERVER_INFO * Added missing break * Updated error handling * Logging update * Error message update * Removed initial approach for localization in remote interface * Resolve merge conflicts * Made 1 the default scan depth Co-authored-by: Daniel Markstedt <markstedt@gmail.com>
This commit is contained in:
parent
e2580d77cf
commit
b5f71fb3b8
@ -58,7 +58,7 @@ The rascsi log level (trace, debug, info, warn, err, critical, off). The default
|
||||
Enable authentication and read the access token from the specified file. The access token file must be owned by root and must be readable by root only.
|
||||
.TP
|
||||
.BR \-R\fI " " \fISCAN_DEPTH
|
||||
Scan for image files recursively, up to a depth of SCAN_DEPTH. Be careful when using this option with many sub-folders in the default image folder.
|
||||
Scan for image files recursively, up to a depth of SCAN_DEPTH. Depth 0 means to ignore any folders within the default image filder. Be careful when using this option with many sub-folders in the default image folder. The default depth is 1.
|
||||
.TP
|
||||
.BR \-h\fI " " \fI
|
||||
Show a help page.
|
||||
|
@ -73,25 +73,26 @@ OPTIONS
|
||||
|
||||
-R SCAN_DEPTH
|
||||
Scan for image files recursively, up to a depth of SCAN_DEPTH.
|
||||
Be careful when using this option with many sub-folders in the
|
||||
default image folder.
|
||||
Depth 0 means to ignore any folders within the default image
|
||||
filder. Be careful when using this option with many sub-folders
|
||||
in the default image folder. The default depth is 1.
|
||||
|
||||
-h Show a help page.
|
||||
|
||||
-n VENDOR:PRODUCT:REVISION
|
||||
Set the vendor, product and revision for the device, to be re‐
|
||||
turned with the INQUIRY data. A complete set of name components
|
||||
Set the vendor, product and revision for the device, to be re‐
|
||||
turned with the INQUIRY data. A complete set of name components
|
||||
must be provided. VENDOR may have up to 8, PRODUCT up to 16, RE‐
|
||||
VISION up to 4 characters. Padding with blanks to the maxium
|
||||
length is automatically applied. Once set the name of a device
|
||||
VISION up to 4 characters. Padding with blanks to the maxium
|
||||
length is automatically applied. Once set the name of a device
|
||||
cannot be changed.
|
||||
|
||||
-p PORT
|
||||
The rascsi server port, default is 6868.
|
||||
|
||||
-r RESERVED_IDS
|
||||
Comma-separated list of IDs to reserve. -p TYPE The optional
|
||||
case-insensitive device type (SAHD, SCHD, SCRM, SCCD, SCMO,
|
||||
Comma-separated list of IDs to reserve. -p TYPE The optional
|
||||
case-insensitive device type (SAHD, SCHD, SCRM, SCCD, SCMO,
|
||||
SCBR, SCDP). If no type is specified for devices that support an
|
||||
image file, rascsi tries to derive the type from the file exten‐
|
||||
sion.
|
||||
@ -99,17 +100,17 @@ OPTIONS
|
||||
-v Display the rascsi version.
|
||||
|
||||
-IDn[:u] FILE
|
||||
n is the SCSI ID number (0-7). u (0-31) is the optional LUN
|
||||
n is the SCSI ID number (0-7). u (0-31) is the optional LUN
|
||||
(logical unit). The default LUN is 0.
|
||||
|
||||
FILE is the name of the image file to use for the SCSI device.
|
||||
For devices that do not support an image file (SCBR, SCDP) a
|
||||
FILE is the name of the image file to use for the SCSI device.
|
||||
For devices that do not support an image file (SCBR, SCDP) a
|
||||
dummy name must be provided.
|
||||
|
||||
-HDn[:u] FILE
|
||||
n is the SASI ID number (0-15). The effective SASI ID is calcu‐
|
||||
lated as n/2, the effective SASI LUN is calculated is the re‐
|
||||
mainder of n/2. Alternatively the n:u syntax can be used, where
|
||||
n is the SASI ID number (0-15). The effective SASI ID is calcu‐
|
||||
lated as n/2, the effective SASI LUN is calculated is the re‐
|
||||
mainder of n/2. Alternatively the n:u syntax can be used, where
|
||||
ns is the SASI ID (0-7) and u the LUN (0-1).
|
||||
|
||||
FILE is the name of the image file to use for the SASI device.
|
||||
@ -126,7 +127,7 @@ EXAMPLES
|
||||
rascsi -ID0 /path/to/harddrive.hda -ID2 /path/to/cdimage.iso
|
||||
|
||||
Launch RaSCSI with a removable SCSI drive image as ID 0 and the raw de‐
|
||||
vice file /dev/hdb (e.g. a USB stick) and a DaynaPort network adapter
|
||||
vice file /dev/hdb (e.g. a USB stick) and a DaynaPort network adapter
|
||||
as ID 6:
|
||||
rascsi -ID0 -t scrm /dev/hdb -ID6 -t scdp DUMMY_FILENAME
|
||||
|
||||
|
@ -68,7 +68,6 @@ static void *MonThread(void *param);
|
||||
string current_log_level; // Some versions of spdlog do not support get_log_level()
|
||||
string access_token;
|
||||
set<int> reserved_ids;
|
||||
int scan_depth = 0;
|
||||
DeviceFactory& device_factory = DeviceFactory::instance();
|
||||
RascsiImage rascsi_image;
|
||||
RascsiResponse rascsi_response(&device_factory, &rascsi_image);
|
||||
@ -1244,10 +1243,12 @@ bool ParseArgument(int argc, char* argv[], int& port)
|
||||
continue;
|
||||
|
||||
case 'R':
|
||||
if (!GetAsInt(optarg, scan_depth) || scan_depth < 0) {
|
||||
int depth;
|
||||
if (!GetAsInt(optarg, depth) || depth < 0) {
|
||||
cerr << "Invalid image file scan depth " << optarg << endl;
|
||||
return false;
|
||||
}
|
||||
rascsi_image.SetDepth(depth);
|
||||
continue;
|
||||
|
||||
case 'n':
|
||||
@ -1430,7 +1431,7 @@ static void *MonThread(void *param)
|
||||
}
|
||||
|
||||
if (!PbOperation_IsValid(command.operation())) {
|
||||
LOGTRACE("Received unknown command %d", command.operation());
|
||||
LOGERROR("Received unknown command with operation opcode %d", command.operation());
|
||||
|
||||
ReturnStatus(fd, false, "Unknown command", UNKNOWN_OPERATION);
|
||||
continue;
|
||||
@ -1454,12 +1455,7 @@ static void *MonThread(void *param)
|
||||
}
|
||||
|
||||
case DEFAULT_FOLDER: {
|
||||
string folder = GetParam(command, "folder");
|
||||
if (folder.empty()) {
|
||||
ReturnStatus(fd, false, "Can't set default image folder: Missing folder name");
|
||||
}
|
||||
|
||||
string result = rascsi_image.SetDefaultImageFolder(folder);
|
||||
string result = rascsi_image.SetDefaultImageFolder(GetParam(command, "folder"));
|
||||
if (!result.empty()) {
|
||||
ReturnStatus(fd, false, result);
|
||||
}
|
||||
@ -1483,8 +1479,8 @@ static void *MonThread(void *param)
|
||||
|
||||
case SERVER_INFO: {
|
||||
result.set_allocated_server_info(rascsi_response.GetServerInfo(
|
||||
result, devices, reserved_ids, current_log_level, GetParam(command, "filename_pattern"),
|
||||
scan_depth));
|
||||
result, devices, reserved_ids, current_log_level, GetParam(command, "folder_pattern"),
|
||||
GetParam(command, "file_pattern"), rascsi_image.GetDepth()));
|
||||
SerializeMessage(fd, result);
|
||||
break;
|
||||
}
|
||||
@ -1503,7 +1499,8 @@ static void *MonThread(void *param)
|
||||
|
||||
case DEFAULT_IMAGE_FILES_INFO: {
|
||||
result.set_allocated_image_files_info(rascsi_response.GetAvailableImages(result,
|
||||
GetParam(command, "filename_pattern"), scan_depth));
|
||||
GetParam(command, "folder_pattern"), GetParam(command, "file_pattern"),
|
||||
rascsi_image.GetDepth()));
|
||||
SerializeMessage(fd, result);
|
||||
break;
|
||||
}
|
||||
@ -1541,7 +1538,8 @@ static void *MonThread(void *param)
|
||||
}
|
||||
|
||||
case OPERATION_INFO: {
|
||||
result.set_allocated_operation_info(rascsi_response.GetOperationInfo(result));
|
||||
result.set_allocated_operation_info(rascsi_response.GetOperationInfo(result,
|
||||
rascsi_image.GetDepth()));
|
||||
SerializeMessage(fd, result);
|
||||
break;
|
||||
}
|
||||
@ -1593,7 +1591,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
// Get temporary operation info, in order to trigger an assertion on startup if the operation list is incomplete
|
||||
PbResult pb_operation_info_result;
|
||||
rascsi_response.GetOperationInfo(pb_operation_info_result);
|
||||
rascsi_response.GetOperationInfo(pb_operation_info_result, 0);
|
||||
|
||||
int actid;
|
||||
BUS::phase_t phase;
|
||||
|
@ -44,10 +44,42 @@ RascsiImage::RascsiImage()
|
||||
else {
|
||||
default_image_folder = "/home/pi/images";
|
||||
}
|
||||
|
||||
depth = 1;
|
||||
}
|
||||
|
||||
bool RascsiImage::CheckDepth(const string& filename)
|
||||
{
|
||||
return count(filename.begin(), filename.end(), '/') <= depth;
|
||||
}
|
||||
|
||||
bool RascsiImage::CreateImageFolder(int fd, const string& filename)
|
||||
{
|
||||
size_t filename_start = filename.rfind('/');
|
||||
if (filename_start != string::npos) {
|
||||
string folder = filename.substr(0, filename_start);
|
||||
|
||||
// Checking for existence first prevents an error if the top-level folder is a softlink
|
||||
struct stat st;
|
||||
if (stat(folder.c_str(), &st)) {
|
||||
std::error_code error;
|
||||
filesystem::create_directories(folder, error);
|
||||
if (error) {
|
||||
ReturnStatus(fd, false, "Can't create image folder '" + folder + "': " + strerror(errno));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
string RascsiImage::SetDefaultImageFolder(const string& f)
|
||||
{
|
||||
if (f.empty()) {
|
||||
return "Can't set default image folder: Missing folder name";
|
||||
}
|
||||
|
||||
string folder = f;
|
||||
|
||||
// If a relative path is specified the path is assumed to be relative to the user's home directory
|
||||
@ -104,17 +136,19 @@ bool RascsiImage::CreateImage(int fd, const PbCommand& command)
|
||||
if (filename.empty()) {
|
||||
return ReturnStatus(fd, false, "Can't create image file: Missing image filename");
|
||||
}
|
||||
if (filename.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Filename must not contain a path");
|
||||
|
||||
if (!CheckDepth(filename)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + filename + "'").c_str());
|
||||
}
|
||||
filename = default_image_folder + "/" + filename;
|
||||
if (!IsValidDstFilename(filename)) {
|
||||
return ReturnStatus(fd, false, "Can't create image file: '" + filename + "': File already exists");
|
||||
|
||||
string full_filename = default_image_folder + "/" + filename;
|
||||
if (!IsValidDstFilename(full_filename)) {
|
||||
return ReturnStatus(fd, false, "Can't create image file: '" + full_filename + "': File already exists");
|
||||
}
|
||||
|
||||
const string size = GetParam(command, "size");
|
||||
if (size.empty()) {
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Missing image size");
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': Missing image size");
|
||||
}
|
||||
|
||||
off_t len;
|
||||
@ -122,20 +156,19 @@ bool RascsiImage::CreateImage(int fd, const PbCommand& command)
|
||||
len = stoull(size);
|
||||
}
|
||||
catch(const invalid_argument& e) {
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Invalid file size " + size);
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': Invalid file size " + size);
|
||||
}
|
||||
catch(const out_of_range& e) {
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Invalid file size " + size);
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': Invalid file size " + size);
|
||||
}
|
||||
if (len < 512 || (len & 0x1ff)) {
|
||||
ostringstream error;
|
||||
error << "Invalid image file size " << len;
|
||||
error << "Invalid image file size " << len << " (not a multiple of 512)";
|
||||
return ReturnStatus(fd, false, error.str());
|
||||
}
|
||||
|
||||
struct stat st;
|
||||
if (!stat(filename.c_str(), &st)) {
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + filename + "': File already exists");
|
||||
if (!CreateImageFolder(fd, full_filename)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
string permission = GetParam(command, "read_only");
|
||||
@ -143,23 +176,23 @@ bool RascsiImage::CreateImage(int fd, const PbCommand& command)
|
||||
int permissions = !strcasecmp(permission.c_str(), "true") ?
|
||||
S_IRUSR | S_IRGRP | S_IROTH : S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
|
||||
|
||||
int image_fd = open(filename.c_str(), O_CREAT|O_WRONLY, permissions);
|
||||
int image_fd = open(full_filename.c_str(), O_CREAT|O_WRONLY, permissions);
|
||||
if (image_fd == -1) {
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + filename + "': " + string(strerror(errno)));
|
||||
return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': " + string(strerror(errno)));
|
||||
}
|
||||
|
||||
if (fallocate(image_fd, 0, 0, len) == -1) {
|
||||
if (fallocate(image_fd, 0, 0, len)) {
|
||||
close(image_fd);
|
||||
|
||||
unlink(filename.c_str());
|
||||
unlink(full_filename.c_str());
|
||||
|
||||
return ReturnStatus(fd, false, "Can't allocate space for image file '" + filename + "': " + string(strerror(errno)));
|
||||
return ReturnStatus(fd, false, "Can't allocate space for image file '" + full_filename + "': " + string(strerror(errno)));
|
||||
}
|
||||
|
||||
close(image_fd);
|
||||
|
||||
ostringstream msg;
|
||||
msg << "Created " << (permissions & S_IWUSR ? "": "read-only ") << "image file '" << filename + "' with a size of " << len << " bytes";
|
||||
msg << "Created " << (permissions & S_IWUSR ? "": "read-only ") << "image file '" << full_filename + "' with a size of " << len << " bytes";
|
||||
LOGINFO("%s", msg.str().c_str());
|
||||
|
||||
return ReturnStatus(fd);
|
||||
@ -172,31 +205,45 @@ bool RascsiImage::DeleteImage(int fd, const PbCommand& command)
|
||||
return ReturnStatus(fd, false, "Missing image filename");
|
||||
}
|
||||
|
||||
if (!IsValidDstFilename(filename)) {
|
||||
return ReturnStatus(fd, false, "Can't delete image file '" + filename + "': File already exists");
|
||||
if (!CheckDepth(filename)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + filename + "'").c_str());
|
||||
}
|
||||
|
||||
if (filename.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "The image filename '" + filename + "' must not contain a path");
|
||||
}
|
||||
|
||||
filename = default_image_folder + "/" + filename;
|
||||
string full_filename = default_image_folder + "/" + filename;
|
||||
|
||||
int id;
|
||||
int unit;
|
||||
Filepath filepath;
|
||||
filepath.SetPath(filename.c_str());
|
||||
filepath.SetPath(full_filename.c_str());
|
||||
if (FileSupport::GetIdsForReservedFile(filepath, id, unit)) {
|
||||
ostringstream msg;
|
||||
msg << "Can't delete image file '" << filename << "', it is used by device ID " << id << ", unit " << unit;
|
||||
msg << "Can't delete image file '" << full_filename << "', it is currently being used by device ID " << id << ", unit " << unit;
|
||||
return ReturnStatus(fd, false, msg.str());
|
||||
}
|
||||
|
||||
if (unlink(filename.c_str())) {
|
||||
return ReturnStatus(fd, false, "Can't delete image file '" + filename + "': " + string(strerror(errno)));
|
||||
if (remove(full_filename.c_str())) {
|
||||
return ReturnStatus(fd, false, "Can't delete image file '" + full_filename + "': " + string(strerror(errno)));
|
||||
}
|
||||
|
||||
LOGINFO("Deleted image file '%s'", filename.c_str());
|
||||
// Delete empty subfolders
|
||||
size_t last_slash = filename.rfind('/');
|
||||
while (last_slash != string::npos) {
|
||||
string folder = filename.substr(0, last_slash);
|
||||
string full_folder = default_image_folder + "/" + folder;
|
||||
|
||||
std::error_code error;
|
||||
if (!filesystem::is_empty(full_folder, error) || error) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (remove(full_folder.c_str())) {
|
||||
return ReturnStatus(fd, false, "Can't delete empty image folder '" + full_folder + "'");
|
||||
}
|
||||
|
||||
last_slash = folder.rfind('/');
|
||||
}
|
||||
|
||||
LOGINFO("Deleted image file '%s'", full_filename.c_str());
|
||||
|
||||
return ReturnStatus(fd);
|
||||
}
|
||||
@ -207,9 +254,11 @@ bool RascsiImage::RenameImage(int fd, const PbCommand& command)
|
||||
if (from.empty()) {
|
||||
return ReturnStatus(fd, false, "Can't rename image file: Missing source filename");
|
||||
}
|
||||
if (from.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "The source filename '" + from + "' must not contain a path");
|
||||
|
||||
if (!CheckDepth(from)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + from + "'").c_str());
|
||||
}
|
||||
|
||||
from = default_image_folder + "/" + from;
|
||||
if (!IsValidSrcFilename(from)) {
|
||||
return ReturnStatus(fd, false, "Can't rename image file: '" + from + "': Invalid name or type");
|
||||
@ -219,14 +268,20 @@ bool RascsiImage::RenameImage(int fd, const PbCommand& command)
|
||||
if (to.empty()) {
|
||||
return ReturnStatus(fd, false, "Can't rename image file '" + from + "': Missing destination filename");
|
||||
}
|
||||
if (to.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "The destination filename '" + to + "' must not contain a path");
|
||||
|
||||
if (!CheckDepth(to)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + to + "'").c_str());
|
||||
}
|
||||
|
||||
to = default_image_folder + "/" + to;
|
||||
if (!IsValidDstFilename(to)) {
|
||||
return ReturnStatus(fd, false, "Can't rename image file '" + from + "' to '" + to + "': File already exists");
|
||||
}
|
||||
|
||||
if (!CreateImageFolder(fd, to)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (rename(from.c_str(), to.c_str())) {
|
||||
return ReturnStatus(fd, false, "Can't rename image file '" + from + "' to '" + to + "': " + string(strerror(errno)));
|
||||
}
|
||||
@ -242,9 +297,11 @@ bool RascsiImage::CopyImage(int fd, const PbCommand& command)
|
||||
if (from.empty()) {
|
||||
return ReturnStatus(fd, false, "Can't copy image file: Missing source filename");
|
||||
}
|
||||
if (from.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "The source filename '" + from + "' must not contain a path");
|
||||
|
||||
if (!CheckDepth(from)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + from + "'").c_str());
|
||||
}
|
||||
|
||||
from = default_image_folder + "/" + from;
|
||||
if (!IsValidSrcFilename(from)) {
|
||||
return ReturnStatus(fd, false, "Can't copy image file: '" + from + "': Invalid name or type");
|
||||
@ -254,9 +311,11 @@ bool RascsiImage::CopyImage(int fd, const PbCommand& command)
|
||||
if (to.empty()) {
|
||||
return ReturnStatus(fd, false, "Can't copy image file '" + from + "': Missing destination filename");
|
||||
}
|
||||
if (to.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "The destination filename '" + to + "' must not contain a path");
|
||||
|
||||
if (!CheckDepth(to)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + to + "'").c_str());
|
||||
}
|
||||
|
||||
to = default_image_folder + "/" + to;
|
||||
if (!IsValidDstFilename(to)) {
|
||||
return ReturnStatus(fd, false, "Can't copy image file '" + from + "' to '" + to + "': File already exists");
|
||||
@ -267,6 +326,10 @@ bool RascsiImage::CopyImage(int fd, const PbCommand& command)
|
||||
return ReturnStatus(fd, false, "Can't access source image file '" + from + "': " + string(strerror(errno)));
|
||||
}
|
||||
|
||||
if (!CreateImageFolder(fd, to)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Symbolic links need a special handling
|
||||
if ((st.st_mode & S_IFMT) == S_IFLNK) {
|
||||
if (symlink(filesystem::read_symlink(from).c_str(), to.c_str())) {
|
||||
@ -318,9 +381,11 @@ bool RascsiImage::SetImagePermissions(int fd, const PbCommand& command)
|
||||
if (filename.empty()) {
|
||||
return ReturnStatus(fd, false, "Missing image filename");
|
||||
}
|
||||
if (filename.find('/') != string::npos) {
|
||||
return ReturnStatus(fd, false, "The image filename '" + filename + "' must not contain a path");
|
||||
|
||||
if (!CheckDepth(filename)) {
|
||||
return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + filename + "'").c_str());
|
||||
}
|
||||
|
||||
filename = default_image_folder + "/" + filename;
|
||||
if (!IsValidSrcFilename(filename)) {
|
||||
return ReturnStatus(fd, false, "Can't modify image file '" + filename + "': Invalid name or type");
|
||||
|
@ -22,6 +22,10 @@ public:
|
||||
RascsiImage();
|
||||
~RascsiImage() {};
|
||||
|
||||
void SetDepth(int depth) { this->depth = depth; }
|
||||
int GetDepth() { return depth; }
|
||||
bool CheckDepth(const string&);
|
||||
bool CreateImageFolder(int, const string&);
|
||||
string GetDefaultImageFolder() const { return default_image_folder; }
|
||||
string SetDefaultImageFolder(const string&);
|
||||
bool IsValidSrcFilename(const string&);
|
||||
@ -35,4 +39,5 @@ public:
|
||||
private:
|
||||
|
||||
string default_image_folder;
|
||||
int depth;
|
||||
};
|
||||
|
@ -35,7 +35,7 @@ enum PbOperation {
|
||||
|
||||
// Attach devices and return the new device list (PbDevicesInfo)
|
||||
// Parameters (mutually exclusive):
|
||||
// "file": The filename relative to the default image folder. It must not contain a slash.
|
||||
// "file": The filename relative to the default image folder
|
||||
// "interfaces": A prioritized comma-separated list of interfaces to create a network bridge for.
|
||||
ATTACH = 1;
|
||||
|
||||
@ -54,7 +54,7 @@ enum PbOperation {
|
||||
|
||||
// Insert medium
|
||||
// Parameters:
|
||||
// "file": The filename, relative to the default image folder. It must not contain a slash.
|
||||
// "file": The filename, relative to the default image folder
|
||||
INSERT = 6;
|
||||
|
||||
// Eject medium
|
||||
@ -68,7 +68,8 @@ enum PbOperation {
|
||||
|
||||
// Gets the server information (PbServerInfo). Calling this operation should be avoided because it
|
||||
// may return a lot of data. More specific other operations should be used instead.
|
||||
// "filename_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned
|
||||
// "folder_pattern": Optional filter, only folder names containing the case-insensitive pattern are returned
|
||||
// "file_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned
|
||||
SERVER_INFO = 10;
|
||||
|
||||
// Get rascsi server version (PbVersionInfo)
|
||||
@ -83,10 +84,11 @@ enum PbOperation {
|
||||
|
||||
// Get information on available image files in the default image folder (PbImageFilesInfo)
|
||||
// Parameters:
|
||||
// "filename_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned
|
||||
// "folder_pattern": Optional filter, only folder names containing the case-insensitive pattern are returned
|
||||
// "file_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned
|
||||
DEFAULT_IMAGE_FILES_INFO = 14;
|
||||
|
||||
// Get information on an image file (not necessarily in the default image folder) based on an absolute path.
|
||||
// Get information on an image file (not necessarily in the default image folder).
|
||||
// Parameters:
|
||||
// "file": The filename. Either an absolute path or a path relative to the default image folder.
|
||||
IMAGE_FILE_INFO = 15;
|
||||
@ -126,39 +128,39 @@ enum PbOperation {
|
||||
|
||||
// Create an image file. The image file must not yet exist.
|
||||
// Parameters:
|
||||
// "file": The filename, relative to the default image folder. It must not contain a slash.
|
||||
// "file": The filename, relative to the default image folder
|
||||
// "size": The file size in bytes, must be a multiple of 512
|
||||
// "read_only": Optional, "true" (case-insensitive) in order to create a read-only file
|
||||
CREATE_IMAGE = 24;
|
||||
|
||||
// Delete an image file.
|
||||
// Parameters:
|
||||
// "file": The filename, relative to the default image folder. It must not contain a slash.
|
||||
// "file": The filename, relative to the default image folder.
|
||||
DELETE_IMAGE = 25;
|
||||
|
||||
// Rename an image file.
|
||||
// Rename/Move an image file.
|
||||
// Parameters:
|
||||
// "from": The old filename, relative to the default image folder. It must not contain a slash.
|
||||
// "to": The new filename, relative to the default image folder. It must not contain a slash.
|
||||
// "from": The old filename, relative to the default image folder
|
||||
// "to": The new filename, relative to the default image folder
|
||||
// The new filename must not yet exist.
|
||||
RENAME_IMAGE = 26;
|
||||
|
||||
// Copy an image file.
|
||||
// Parameters:
|
||||
// "from": The source filename, relative to the default image folder. It must not contain a slash.
|
||||
// "to": The destination filename, relative to the default image folder. It must not contain a slash.
|
||||
// "from": The source filename, relative to the default image folder
|
||||
// "to": The destination filename, relative to the default image folder
|
||||
// "read_only": Optional, "true" (case-insensitive) in order to create a read-only file
|
||||
// The destination filename must not yet exist.
|
||||
COPY_IMAGE = 27;
|
||||
|
||||
// Write-protect an image file.
|
||||
// Parameters:
|
||||
// "file": The filename, relative to the default image folder. It must not contain a slash.
|
||||
// "file": The filename, relative to the default image folder
|
||||
PROTECT_IMAGE = 28;
|
||||
|
||||
// Make an image file writable.
|
||||
// Parameters:
|
||||
// "file": The filename, relative to the default image folder. It must not contain a slash.
|
||||
// "file": The filename, relative to the default image folder
|
||||
UNPROTECT_IMAGE = 29;
|
||||
|
||||
// Check whether an authentication token is valid. A client can use this operation in order to
|
||||
@ -173,9 +175,8 @@ enum PbOperation {
|
||||
// The operation parameter meta data. The parameter data type is provided by the protobuf API.
|
||||
message PbOperationParameter {
|
||||
string name = 1;
|
||||
// Optional short localized description, key is the lower case locale (e.g. en, de).
|
||||
// Falling back to "en" is recommended if a description for a particular language is missing.
|
||||
map<string, string> description = 2;
|
||||
// Optional short description
|
||||
string description = 2;
|
||||
// There is no specific set of permitted values if empty
|
||||
repeated string permitted_values = 3;
|
||||
// Optional default value
|
||||
@ -188,9 +189,8 @@ message PbOperationParameter {
|
||||
message PbOperationMetaData {
|
||||
// The operation name at the time the server-side protobuf code was generated.
|
||||
string server_side_name = 1;
|
||||
// Optional short localized description, key is the lower case locale (e.g. en, de).
|
||||
// Falling back to "en" is recommended if a description for a particular language is missing.
|
||||
map<string, string> description = 2;
|
||||
// Optional short description
|
||||
string description = 2;
|
||||
repeated PbOperationParameter parameters = 3;
|
||||
}
|
||||
|
||||
@ -275,6 +275,8 @@ message PbImageFile {
|
||||
message PbImageFilesInfo {
|
||||
string default_image_folder = 1;
|
||||
repeated PbImageFile image_files = 2;
|
||||
// The maximum nesting depth, configured with the -R option
|
||||
int32 depth = 3;
|
||||
}
|
||||
|
||||
// Log level information
|
||||
|
@ -141,39 +141,45 @@ bool RascsiResponse::GetImageFile(PbImageFile *image_file, const string& filenam
|
||||
}
|
||||
|
||||
void RascsiResponse::GetAvailableImages(PbImageFilesInfo& image_files_info, const string& default_image_folder,
|
||||
const string& folder, const string& pattern, int scan_depth) {
|
||||
string pattern_lower = pattern;
|
||||
transform(pattern_lower.begin(), pattern_lower.end(), pattern_lower.begin(), ::tolower);
|
||||
const string& folder, const string& folder_pattern, const string& file_pattern, int scan_depth) {
|
||||
string folder_pattern_lower = folder_pattern;
|
||||
transform(folder_pattern_lower.begin(), folder_pattern_lower.end(), folder_pattern_lower.begin(), ::tolower);
|
||||
|
||||
string file_pattern_lower = file_pattern;
|
||||
transform(file_pattern_lower.begin(), file_pattern_lower.end(), file_pattern_lower.begin(), ::tolower);
|
||||
|
||||
if (scan_depth-- >= 0) {
|
||||
DIR *d = opendir(folder.c_str());
|
||||
if (d) {
|
||||
struct dirent *dir;
|
||||
while ((dir = readdir(d))) {
|
||||
string filename = folder + "/" + dir->d_name;
|
||||
|
||||
string name_lower = filename;
|
||||
if (!pattern.empty()) {
|
||||
transform(name_lower.begin(), name_lower.end(), name_lower.begin(), ::tolower);
|
||||
}
|
||||
|
||||
bool is_supported_type = dir->d_type == DT_REG || dir->d_type == DT_DIR || dir->d_type == DT_LNK || dir->d_type == DT_BLK;
|
||||
if (is_supported_type && dir->d_name[0] != '.') {
|
||||
string name_lower = dir->d_name;
|
||||
if (!file_pattern.empty()) {
|
||||
transform(name_lower.begin(), name_lower.end(), name_lower.begin(), ::tolower);
|
||||
}
|
||||
|
||||
string filename = folder + "/" + dir->d_name;
|
||||
|
||||
struct stat st;
|
||||
if (dir->d_type == DT_REG && !stat(filename.c_str(), &st)) {
|
||||
if (!st.st_size) {
|
||||
LOGTRACE("File '%s' in image folder '%s' has a size of 0 bytes", dir->d_name, folder.c_str());
|
||||
LOGWARN("File '%s' in image folder '%s' has a size of 0 bytes", dir->d_name, folder.c_str());
|
||||
continue;
|
||||
}
|
||||
} else if (dir->d_type == DT_LNK && stat(filename.c_str(), &st)) {
|
||||
LOGTRACE("Symlink '%s' in image folder '%s' is broken", dir->d_name, folder.c_str());
|
||||
LOGWARN("Symlink '%s' in image folder '%s' is broken", dir->d_name, folder.c_str());
|
||||
continue;
|
||||
} else if (dir->d_type == DT_DIR) {
|
||||
GetAvailableImages(image_files_info, default_image_folder, filename, pattern, scan_depth);
|
||||
if (folder_pattern_lower.empty() || name_lower.find(folder_pattern_lower) != string::npos) {
|
||||
GetAvailableImages(image_files_info, default_image_folder, filename, folder_pattern,
|
||||
file_pattern, scan_depth);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pattern.empty() || name_lower.find(pattern_lower) != string::npos) {
|
||||
if (file_pattern_lower.empty() || name_lower.find(file_pattern_lower) != string::npos) {
|
||||
PbImageFile *image_file = new PbImageFile();
|
||||
if (GetImageFile(image_file, filename)) {
|
||||
GetImageFile(image_files_info.add_image_files(), filename.substr(default_image_folder.length() + 1));
|
||||
@ -188,23 +194,27 @@ void RascsiResponse::GetAvailableImages(PbImageFilesInfo& image_files_info, cons
|
||||
}
|
||||
}
|
||||
|
||||
PbImageFilesInfo *RascsiResponse::GetAvailableImages(PbResult& result, const string& pattern, int scan_depth)
|
||||
PbImageFilesInfo *RascsiResponse::GetAvailableImages(PbResult& result, const string& folder_pattern,
|
||||
const string& file_pattern, int scan_depth)
|
||||
{
|
||||
PbImageFilesInfo *image_files_info = new PbImageFilesInfo();
|
||||
|
||||
string default_image_folder = rascsi_image->GetDefaultImageFolder();
|
||||
image_files_info->set_default_image_folder(default_image_folder);
|
||||
image_files_info->set_depth(scan_depth);
|
||||
|
||||
GetAvailableImages(*image_files_info, default_image_folder, default_image_folder, pattern, scan_depth);
|
||||
GetAvailableImages(*image_files_info, default_image_folder, default_image_folder, folder_pattern,
|
||||
file_pattern, scan_depth);
|
||||
|
||||
result.set_status(true);
|
||||
|
||||
return image_files_info;
|
||||
}
|
||||
|
||||
void RascsiResponse::GetAvailableImages(PbResult& result, PbServerInfo& server_info, const string& pattern, int scan_depth)
|
||||
void RascsiResponse::GetAvailableImages(PbResult& result, PbServerInfo& server_info, const string& folder_pattern,
|
||||
const string& file_pattern, int scan_depth)
|
||||
{
|
||||
PbImageFilesInfo *image_files_info = GetAvailableImages(result, pattern, scan_depth);
|
||||
PbImageFilesInfo *image_files_info = GetAvailableImages(result, folder_pattern, file_pattern, scan_depth);
|
||||
image_files_info->set_default_image_folder(rascsi_image->GetDefaultImageFolder());
|
||||
server_info.set_allocated_image_files_info(image_files_info);
|
||||
|
||||
@ -283,19 +293,19 @@ PbDeviceTypesInfo *RascsiResponse::GetDeviceTypesInfo(PbResult& result, const Pb
|
||||
}
|
||||
|
||||
PbServerInfo *RascsiResponse::GetServerInfo(PbResult& result, const vector<Device *>& devices, const set<int>& reserved_ids,
|
||||
const string& current_log_level, const string& filename_pattern, int scan_depth)
|
||||
const string& current_log_level, const string& folder_pattern, const string& file_pattern, int scan_depth)
|
||||
{
|
||||
PbServerInfo *server_info = new PbServerInfo();
|
||||
|
||||
server_info->set_allocated_version_info(GetVersionInfo(result));
|
||||
server_info->set_allocated_log_level_info(GetLogLevelInfo(result, current_log_level));
|
||||
GetAllDeviceTypeProperties(*server_info->mutable_device_types_info());
|
||||
GetAvailableImages(result, *server_info, filename_pattern, scan_depth);
|
||||
GetAvailableImages(result, *server_info, folder_pattern, file_pattern, scan_depth);
|
||||
server_info->set_allocated_network_interfaces_info(GetNetworkInterfacesInfo(result));
|
||||
server_info->set_allocated_mapping_info(GetMappingInfo(result));
|
||||
GetDevices(*server_info, devices);
|
||||
server_info->set_allocated_reserved_ids_info(GetReservedIds(result, reserved_ids));
|
||||
server_info->set_allocated_operation_info(GetOperationInfo(result));
|
||||
server_info->set_allocated_operation_info(GetOperationInfo(result, scan_depth));
|
||||
|
||||
result.set_status(true);
|
||||
|
||||
@ -356,7 +366,7 @@ PbMappingInfo *RascsiResponse::GetMappingInfo(PbResult& result)
|
||||
return mapping_info;
|
||||
}
|
||||
|
||||
PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result)
|
||||
PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result, int depth)
|
||||
{
|
||||
PbOperationInfo *operation_info = new PbOperationInfo();
|
||||
|
||||
@ -391,7 +401,10 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result)
|
||||
CreateOperation(operation_info, meta_data, UNPROTECT, "Unprotect medium, device-specific parameters are required");
|
||||
|
||||
meta_data = new PbOperationMetaData();
|
||||
AddOperationParameter(meta_data, "filename_pattern", "Pattern for filtering image file names");
|
||||
if (depth) {
|
||||
AddOperationParameter(meta_data, "folder_pattern", "Pattern for filtering image folder names");
|
||||
}
|
||||
AddOperationParameter(meta_data, "file_pattern", "Pattern for filtering image file names");
|
||||
CreateOperation(operation_info, meta_data, SERVER_INFO, "Get rascsi server information");
|
||||
|
||||
meta_data = new PbOperationMetaData();
|
||||
@ -404,7 +417,10 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result)
|
||||
CreateOperation(operation_info, meta_data, DEVICE_TYPES_INFO, "Get device properties by device type");
|
||||
|
||||
meta_data = new PbOperationMetaData();
|
||||
AddOperationParameter(meta_data, "filename_pattern", "Pattern for filtering image file names");
|
||||
if (depth) {
|
||||
AddOperationParameter(meta_data, "folder_pattern", "Pattern for filtering image folder names");
|
||||
}
|
||||
AddOperationParameter(meta_data, "file_pattern", "Pattern for filtering image file names");
|
||||
CreateOperation(operation_info, meta_data, DEFAULT_IMAGE_FILES_INFO, "Get information on available image files");
|
||||
|
||||
meta_data = new PbOperationMetaData();
|
||||
@ -463,7 +479,7 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result)
|
||||
CreateOperation(operation_info, meta_data, RENAME_IMAGE, "Rename image file");
|
||||
|
||||
meta_data = new PbOperationMetaData();
|
||||
AddOperationParameter(meta_data, "from", "Source image file name image file name", "", true);
|
||||
AddOperationParameter(meta_data, "from", "Source image file name", "", true);
|
||||
AddOperationParameter(meta_data, "to", "Destination image file name", "", true);
|
||||
parameter = AddOperationParameter(meta_data, "read_only", "Read-only flag", "false");
|
||||
parameter->add_permitted_values("true");
|
||||
@ -497,7 +513,7 @@ void RascsiResponse::CreateOperation(PbOperationInfo *operation_info, PbOperatio
|
||||
const PbOperation& operation, const string& description)
|
||||
{
|
||||
meta_data->set_server_side_name(PbOperation_Name(operation));
|
||||
(*meta_data->mutable_description())["en"] = description;
|
||||
meta_data->set_description(description);
|
||||
int ordinal = PbOperation_descriptor()->FindValueByName(PbOperation_Name(operation))->index();
|
||||
(*operation_info->mutable_operations())[ordinal] = *meta_data;
|
||||
}
|
||||
@ -507,7 +523,7 @@ PbOperationParameter *RascsiResponse::AddOperationParameter(PbOperationMetaData
|
||||
{
|
||||
PbOperationParameter *parameter = meta_data->add_parameters();
|
||||
parameter->set_name(name);
|
||||
(*parameter->mutable_description())["en"] = description;
|
||||
parameter->set_description(description);
|
||||
parameter->set_default_value(default_value);
|
||||
parameter->set_is_mandatory(is_mandatory);
|
||||
|
||||
|
@ -29,17 +29,18 @@ public:
|
||||
~RascsiResponse() {};
|
||||
|
||||
bool GetImageFile(PbImageFile *, const string&);
|
||||
PbImageFilesInfo *GetAvailableImages(PbResult&, const string&, int);
|
||||
PbImageFilesInfo *GetAvailableImages(PbResult&, const string&, const string&, int);
|
||||
PbReservedIdsInfo *GetReservedIds(PbResult&, const set<int>&);
|
||||
void GetDevices(PbServerInfo&, const vector<Device *>&);
|
||||
void GetDevicesInfo(PbResult&, const PbCommand&, const vector<Device *>&, int);
|
||||
PbDeviceTypesInfo *GetDeviceTypesInfo(PbResult&, const PbCommand&);
|
||||
PbVersionInfo *GetVersionInfo(PbResult&);
|
||||
PbServerInfo *GetServerInfo(PbResult&, const vector<Device *>&, const set<int>&, const string&, const string&, int);
|
||||
PbServerInfo *GetServerInfo(PbResult&, const vector<Device *>&, const set<int>&, const string&, const string&,
|
||||
const string&, int);
|
||||
PbNetworkInterfacesInfo *GetNetworkInterfacesInfo(PbResult&);
|
||||
PbMappingInfo *GetMappingInfo(PbResult&);
|
||||
PbLogLevelInfo *GetLogLevelInfo(PbResult&, const string&);
|
||||
PbOperationInfo *GetOperationInfo(PbResult&);
|
||||
PbOperationInfo *GetOperationInfo(PbResult&, int);
|
||||
|
||||
private:
|
||||
|
||||
@ -52,8 +53,8 @@ private:
|
||||
void GetDevice(const Device *, PbDevice *);
|
||||
void GetAllDeviceTypeProperties(PbDeviceTypesInfo&);
|
||||
void GetDeviceTypeProperties(PbDeviceTypesInfo&, PbDeviceType);
|
||||
void GetAvailableImages(PbImageFilesInfo&, const string&, const string&, const string&, int);
|
||||
void GetAvailableImages(PbResult& result, PbServerInfo&, const string&, int);
|
||||
void GetAvailableImages(PbImageFilesInfo&, const string&, const string&, const string&, const string&, int);
|
||||
void GetAvailableImages(PbResult& result, PbServerInfo&, const string&, const string&, int);
|
||||
void CreateOperation(PbOperationInfo *, PbOperationMetaData *, const PbOperation&, const string&);
|
||||
PbOperationParameter *AddOperationParameter(PbOperationMetaData *, const string&, const string&,
|
||||
const string& = "", bool = false);
|
||||
|
@ -91,6 +91,23 @@ PbDeviceType ParseType(const char *optarg)
|
||||
}
|
||||
}
|
||||
|
||||
void SetPatternParams(PbCommand& command, const string& patterns)
|
||||
{
|
||||
string folder_pattern;
|
||||
string file_pattern;
|
||||
size_t separator_pos = patterns.find(COMPONENT_SEPARATOR);
|
||||
if (separator_pos != string::npos) {
|
||||
folder_pattern = patterns.substr(0, separator_pos);
|
||||
file_pattern = patterns.substr(separator_pos + 1);
|
||||
}
|
||||
else {
|
||||
file_pattern = patterns;
|
||||
}
|
||||
|
||||
AddParam(command, "folder_pattern", folder_pattern);
|
||||
AddParam(command, "file_pattern", file_pattern);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
GOOGLE_PROTOBUF_VERIFY_VERSION;
|
||||
@ -139,7 +156,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
opterr = 1;
|
||||
int opt;
|
||||
while ((opt = getopt(argc, argv, "elmosvDINOTVXa:b:c:d:f:h:i:n:p:r:t:u:x:C:E:F:L:R:P::")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "e::lmos::vDINOTVXa:b:c:d:f:h:i:n:p:r:t:u:x:C:E:F:L:P::R:")) != -1) {
|
||||
switch (opt) {
|
||||
case 'i': {
|
||||
int id;
|
||||
@ -199,7 +216,10 @@ int main(int argc, char* argv[])
|
||||
|
||||
case 'e':
|
||||
command.set_operation(DEFAULT_IMAGE_FILES_INFO);
|
||||
break;
|
||||
if (optarg) {
|
||||
SetPatternParams(command, optarg);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'F':
|
||||
command.set_operation(DEFAULT_FOLDER);
|
||||
@ -299,7 +319,10 @@ int main(int argc, char* argv[])
|
||||
|
||||
case 's':
|
||||
command.set_operation(SERVER_INFO);
|
||||
break;
|
||||
if (optarg) {
|
||||
SetPatternParams(command, optarg);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
cout << "rasctl version: " << rascsi_get_version_string() << endl;
|
||||
|
@ -127,10 +127,10 @@ void RasctlCommands::CommandReserveIds(const string& reserved_ids)
|
||||
|
||||
void RasctlCommands::CommandCreateImage(const string& image_params)
|
||||
{
|
||||
size_t separatorPos = image_params.find(COMPONENT_SEPARATOR);
|
||||
if (separatorPos != string::npos) {
|
||||
AddParam(command, "file", image_params.substr(0, separatorPos));
|
||||
AddParam(command, "size", image_params.substr(separatorPos + 1));
|
||||
size_t separator_pos = image_params.find(COMPONENT_SEPARATOR);
|
||||
if (separator_pos != string::npos) {
|
||||
AddParam(command, "file", image_params.substr(0, separator_pos));
|
||||
AddParam(command, "size", image_params.substr(separator_pos + 1));
|
||||
}
|
||||
else {
|
||||
cerr << "Error: Invalid file descriptor '" << image_params << "', format is NAME:SIZE" << endl;
|
||||
@ -151,10 +151,10 @@ void RasctlCommands::CommandDeleteImage(const string& filename)
|
||||
|
||||
void RasctlCommands::CommandRenameImage(const string& image_params)
|
||||
{
|
||||
size_t separatorPos = image_params.find(COMPONENT_SEPARATOR);
|
||||
if (separatorPos != string::npos) {
|
||||
AddParam(command, "from", image_params.substr(0, separatorPos));
|
||||
AddParam(command, "to", image_params.substr(separatorPos + 1));
|
||||
size_t separator_pos = image_params.find(COMPONENT_SEPARATOR);
|
||||
if (separator_pos != string::npos) {
|
||||
AddParam(command, "from", image_params.substr(0, separator_pos));
|
||||
AddParam(command, "to", image_params.substr(separator_pos + 1));
|
||||
}
|
||||
else {
|
||||
cerr << "Error: Invalid file descriptor '" << image_params << "', format is CURRENT_NAME:NEW_NAME" << endl;
|
||||
@ -166,10 +166,10 @@ void RasctlCommands::CommandRenameImage(const string& image_params)
|
||||
|
||||
void RasctlCommands::CommandCopyImage(const string& image_params)
|
||||
{
|
||||
size_t separatorPos = image_params.find(COMPONENT_SEPARATOR);
|
||||
if (separatorPos != string::npos) {
|
||||
AddParam(command, "from", image_params.substr(0, separatorPos));
|
||||
AddParam(command, "to", image_params.substr(separatorPos + 1));
|
||||
size_t separator_pos = image_params.find(COMPONENT_SEPARATOR);
|
||||
if (separator_pos != string::npos) {
|
||||
AddParam(command, "from", image_params.substr(0, separator_pos));
|
||||
AddParam(command, "to", image_params.substr(separator_pos + 1));
|
||||
}
|
||||
else {
|
||||
cerr << "Error: Invalid file descriptor '" << image_params << "', format is CURRENT_NAME:NEW_NAME" << endl;
|
||||
|
@ -230,6 +230,7 @@ void RasctlDisplay::DisplayImageFile(const PbImageFile& image_file_info)
|
||||
void RasctlDisplay::DisplayImageFiles(const PbImageFilesInfo& image_files_info)
|
||||
{
|
||||
cout << "Default image file folder: " << image_files_info.default_image_folder() << endl;
|
||||
cout << "Supported folder depth: " << image_files_info.depth() << endl;
|
||||
|
||||
if (image_files_info.image_files().empty()) {
|
||||
cout << " No image files available" << endl;
|
||||
@ -292,12 +293,12 @@ void RasctlDisplay::DisplayOperationInfo(const PbOperationInfo& operation_info)
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Remote operations supported by rascsi and their parameters:" << endl;
|
||||
cout << "Operations supported by rascsi server and their parameters:" << endl;
|
||||
for (const auto& operation : sorted_operations) {
|
||||
if (!operation.second.server_side_name().empty()) {
|
||||
cout << " " << operation.first;
|
||||
if (!operation.second.description().empty()) {
|
||||
cout << " (" << operation.second.description().at("en") << ")";
|
||||
cout << " (" << operation.second.description() << ")";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
@ -305,7 +306,7 @@ void RasctlDisplay::DisplayOperationInfo(const PbOperationInfo& operation_info)
|
||||
cout << " " << parameter.name() << ": "
|
||||
<< (parameter.is_mandatory() ? "mandatory" : "optional");
|
||||
if (!parameter.description().empty()) {
|
||||
cout << " (" << parameter.description().at("en") << ")";
|
||||
cout << " (" << parameter.description() << ")";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
|
@ -337,7 +337,8 @@ int main(int argc, char* argv[])
|
||||
DWORD prev_sample = 0xFFFFFFFF;
|
||||
DWORD this_sample = 0;
|
||||
struct sched_param schparam;
|
||||
timeval start_time, stop_time;
|
||||
timeval start_time;
|
||||
timeval stop_time;
|
||||
uint64_t loop_count = 0;
|
||||
timeval time_diff;
|
||||
uint64_t elapsed_us;
|
||||
|
Loading…
x
Reference in New Issue
Block a user