1. 28 Mar, 2022 4 commits
    • Rob Swindell's avatar
    • Rob Swindell's avatar
    • Rob Swindell's avatar
      Overhaul statistics files · 908a31be
      Rob Swindell authored
      */dsts.dab (daily statistics and running totals) -> */dsts.ini
      */csts.dab (cumulative statistics / log) -> */csts.tab
      * dsts.ini now has both daily and total stats for all fields (not just timeon and logons).
      * dsts.ini is now an easily modifiable text file - no longer need dstsedit (here-by deprecated and soon to be deleted)
      * dsts.ini and csts.tab support 64-bit upload/download byte stats and are very extensible for future fields to be added or extended > 32-bit (this was the main inspiration for this overhaul, but it was overdue and already designed for v4, pretty much)
      * csts.tab is a tab-delimited fixed length record format suitable for easy import to a spreadsheet program or parsing with scripts. Each day is a 128-character LF-delimited record with tab-delimited fields of plain ASCII text.
      * All fields except timeon in dsts.ini files are updated immediately and by more non-terminal servers (e.g. post statistics from web UI scripts).
      * New user stats are tracked more than just for "today".
      The upgrade of these files is automatic and built-into SBBS.
      Still to do: overhaul the slog utility to support the new csts.tab file format.
    • Rob Swindell's avatar
      Remove unused stub function. · efe3b357
      Rob Swindell authored
  2. 27 Mar, 2022 1 commit
  3. 25 Mar, 2022 5 commits
    • Rob Swindell's avatar
      Remove the hard-coded ".msg" extension from data/subs/*.msg display file · 1f0d53ca
      Rob Swindell authored
      And data/dirs/*.msg display file. Now you can have any supported menu file in this location if you wish.
    • Rob Swindell's avatar
      Detect/display menu files, even if only a .ans version exists · 9ac7335f
      Rob Swindell authored
      I'm so tired of this 30 year old frequently asked question.
      If a sysop really wants their Synchronet BBS to only work correctly for ANSI users, I suppose that should be their prerogative.
      I always felt that by not detecting/displaying menu files when the minimum set of files was not present, I was helping sysops to identify an issue with their system (which would not work correctly for non-ANSI users). *And* I always felt that having a single menu/display file that correctly supported both ANSI and non-ANSI users was a nice convenience (who really wants to maintain multiple versions of their menu files?). But I'm so tired of answering this question, I just give up.
      Hopefully this doesn't break anything for anyone. <shrug>
    • Rob Swindell's avatar
      Revert to *.XXcol.* being an exact column width, add *.cXX.* support · e3ba2427
      Rob Swindell authored
      That previous commit made all *.40col.msg files display for 80 column users. Not my intention.
      So revert to the previous behavior of *.XXcol.* display files. I didn't want to go renaming a bunch of menu files as a result of the previous commit and I didn't want a bunch of sysops with *.XXcol.* files to be suddenly surprised at their new BBS behavior.
      And introduce a new file naming convention, *.cXX.* (where XX is a MINIMUM column width). This is the same naming convention used by Mystic, which also treats it is as a minimum terminal width, not a required exact width.
    • Rob Swindell's avatar
      Use text/menu/*.###col.* display files for even-wider terminals · a8db694b
      Rob Swindell authored
      e.g. display basename.132col.msg even if the terminal is 133+ columns wide.
      Fixes issue #380.
    • Rob Swindell's avatar
      De-dupe random menu filenames by truncating at first dot, rather than last. · 479bd24c
      Rob Swindell authored
      Fix for one of the problems described in issue #380.
      bbs.menu("random*"); would display column-width-specific files (e.g.
      random.132col.msg) even when they weren't appropriate for the current
      user terminal width.
      This is fixed by truncating the filenames matching the requested pattern at
      their first-dot rather than the last.
      The downside is, you can't have a set of random.#.* files, where # is the
      unique part of the filename and * is the file-type extension. Just use
      the naming pattern "random-#.*" instead (or something similar) instead.
  4. 24 Mar, 2022 5 commits
    • Rob Swindell's avatar
      DLL-export is_valid_XXXnum() functions, for web server use · 3fa6bebb
      Rob Swindell authored
      Fixes recently broken Win32 build
    • Rob Swindell's avatar
      Fix potential seg fault when an invalid file vpath is requested · f5a4c16b
      Rob Swindell authored
      I knew I created these is_valid_*num() functions for a reason!
    • Rob Swindell's avatar
      Fix newly-introduced GCC warnings · 9405250f
      Rob Swindell authored
    • Rob Swindell's avatar
      Support user credits and transfer stats > 4GB in total · 1cac2c8a
      Rob Swindell authored
      Credits and daily free credits are accurate to the byte up to (a maximum) of 18446744073709551615 (that's 18 Exbibytes - 1).
      User's upload and download byte stats are now similarly extended in maximum range, but the accuracy is only "to the byte" for values less than 10,000,000,000. Beyond that value, the accuracy declines, but is generally pretty damn accurate (to 4 decimal places beyond the nearest multiple of a power of 1024), so I don't expect that to be an issue. This method of storing upload/download byte stats allowed me to use the same 10-character user record fields in the user.dat file.
      As a side-effect of this enhancements:
      * User and file credit values are now expressed in multiples of powers of 1024 (e.g. 4.0G rather than 4,294,967,296).
      * Free credits per day per security level has now been extended from 32 to 64-bits (to accommodate values >= 4GB).
      * adjustuserrec() now longer takes the record length since we can easily determine that automatically and don't need more "sources of truth" that can be out-of-sync (e.g. the U_CDT field length going from 10 to 20 chars with this change).
      * setting the stage for locale-dependent thousands-separators (e.g. space instead of comma) - currently still hard-coded to comma
      * more/better support for files > 4GB in size (e.g. in the batch download queue)
      * user_t ulong fields changed to either uint32_t or uint64_t - I didn't realize how many long/ulong's remained in the code (which are sometmies 32-bit, sometimes 64-bit) - ugh
      * Steve's ultoac() function renamed to u32toac() and created a C++ wrapper that still uses the old name, for homage
    • Rob Swindell's avatar
  5. 21 Mar, 2022 9 commits
    • Rob Swindell's avatar
      Fix newly introduced GCC warning · 06605539
      Rob Swindell authored
      warning: invalid suffix on literal; C++11 requires a space between literal and string macro
    • Rob Swindell's avatar
      SMB items (messages or files) can now have 32-bit or 64-bit cost value · 9db7a614
      Rob Swindell authored
      To fully support files > 4GB in size in file bases, credit values larger than 32-bits must be supported too.
      There's a couple of todo comments/items included in this commit, but that's mainly to do with messages (which don't really have costs anyway).
      The main thing to deal with now is the fact that users can't have more than 4GB in credits in the first place! That's got to be fixed next.
    • Rob Swindell's avatar
      Fix newly-encountered GCC warning · 26028bca
      Rob Swindell authored
      comparison of integer expressions of different signedness: ‘off_t’ {aka ‘long int’} and ‘uint64_t’ {aka ‘long unsigned int’}
    • Rob Swindell's avatar
      Support files > 4MB in SMB filebase indexes · b72813e8
      Rob Swindell authored
      Used the reserved 16-bits in the file index record to extend the supported index-file-size from 4294967295 (4GB) to 281474976710655 (281TB). I think that's big enough for the foreseeable future. :-)
    • Rob Swindell's avatar
      Add options to sort directories by file size (ascending or descending) · 939d7e6e
      Rob Swindell authored
      Size is indexed, so might as well sort by it. This does have an issue with files >= 4GB in length however, so I'm looking at that next.
    • Rob Swindell's avatar
    • Rob Swindell's avatar
      File's meta-object's "size" and "time" properties reflect current values · 623c49e4
      Rob Swindell authored
      Query the disk for file's current "size" and "time" values when get_list() or get() method is used with a "detail" level of >= DETAIL.NORMAL and the "check file existence" toggle option is enabled for this directory in SCFG.
      I pondered and contemplated whether this configuration setting should be checked/applied here or in the various JS scripts (e.g. filelist.js) and decided here was best to provide the most uniform/expected behavior, even though there is a performance impact. If a script doesn't need/use these properties, they should probably be specifying the DETAIL.MIN (minimal) detail level in their queries anyway, which will then bypass these performance-impacting disk queries.
    • Rob Swindell's avatar
      Create some convenience functions for validating lib/dir/grp/sub nums · a466152f
      Rob Swindell authored
      There are lot of places in the code where subnums and dirnums (especially) are compared against total_subs and/or total_dirs or >= 0 without a ton of consistency. We should migrate to use these functions for validity-checking going forward.
    • Rob Swindell's avatar
      Update the help text for the "file existence check" option · 13c520ef
      Rob Swindell authored
      This option actually controls whether the disk will be queried for the current file size and modification date/time (when listing) too.
  6. 20 Mar, 2022 4 commits
    • Rob Swindell's avatar
    • Rob Swindell's avatar
    • Rob Swindell's avatar
      Add dynamic file area/base indexing to web server · 23a82123
      Rob Swindell authored
      By setting sbbs.ini [web] FileIndexScript to an SSJS or XJS script filename, that script (by default, from your exec directory) will be executed when a file area/base listing has been http[s]-requested. File area/base requests are of the form <vpath_prefix> (for the list of libraries), <vpath_prefix>/<lib-name>/ (for list of directories of a library) or <vpath_prefix>/<lib-name>/<dir-code-suffix>/ (for a list of files in a directory). The new http_request "lib" and "dir" properties indicate that a library or directory listing was requested (if neither are defined, that's a request for the root / list of libs). The same configured script is executed to handle all 3 types of index/list requests.
      A sample script (webfileindex.ssj) will be committed soon.
      Authentication (via HTTP-AUTH) will be required if user #0 does not have access to all libraries or all directories within a required library.
      file_area.lib[].link has been changed from "/<vdir>/" to just "<vdir>" (no slashes) and renamed to "vdir".
      file_area.dir[].link has been changed from "/<vpath>/" to "<vpath>/" (no leading slash) and renamed to "vpath".
      Added file_area.dir[].vdir property that contains just the directory's virtual directory name.
      I don't think anyone was using these "link" properties since the dynamic FTP HTML index scripting feature is no longer supported.
      Added can_user_access_lib() to insure that the user has access to at least one directory of a library before allowing access to the library (e.g. via JS). Something similar should be created for message groups.
    • Rob Swindell's avatar
      Use JS_ValueToECMAUint32 for full 32-bit time_t values · cf5b2141
      Rob Swindell authored
      Resolves issue with filelist.js trying to pass 4294967295 (-1) to system.datestr() resulting in:
      !JavaScript  /sbbs/exec/filelist.js line 13: Error: can't convert t to an integer
  7. 17 Mar, 2022 1 commit
  8. 14 Mar, 2022 7 commits
  9. 13 Mar, 2022 4 commits