- Jan 05, 2022
-
-
Rob Swindell authored
-
- Jan 02, 2022
-
-
Rob Swindell authored
-
- Aug 09, 2021
-
-
Rob Swindell authored
-
- Apr 20, 2021
-
-
Deucе authored
This variable tracks the time that jsdoor was started.
-
- Apr 06, 2021
-
-
Deucе authored
Previously, these both used gettimeofday() which is both expensive to call, and not monotonic. This fixes system.clock_ticks in JS and various internal bits. for when the UTC wall clock jumps. While we're here, fix the documention of system.clock_ticks
-
- Apr 04, 2021
-
-
Rob Swindell authored
This macro has expanded to nothing for a while now and even before, the usage was misguided and unnecessary as explained in this video: https://www.youtube.com/watch?v=cjotPqQxxAY
-
Rob Swindell authored
CID 319143
-
Rob Swindell authored
-
- Apr 02, 2021
-
-
Deucе authored
This appears to work and the event handler *should* work on other event types already. Note, this is *nix-only due to the use of poll(). select() will need to be used for Windows to keep XP compatability.
-
- Feb 22, 2021
-
-
Rob Swindell authored
-
- Feb 15, 2021
-
-
Rob Swindell authored
Hopefully not introducing any bugs in the process.
-
Rob Swindell authored
Hopefully not introducing any bugs in the process.
-
- Jan 24, 2021
-
-
Rob Swindell authored
The first argument can now optionally be an array of strings (e.g. as read from File.readAll()), so that multiple searches of the same file (e.g. twitlist.cfg, while importing messages) does not require multiple *reads* of the same file.
-
- Dec 12, 2020
-
-
Rob Swindell authored
New @-codes: GIT_HASH and GIT_BRANCH New JS system properties: git_hash and git_branch
-
- Dec 06, 2020
-
-
Rob Swindell authored
When system.new_user() was called but the current "client" object is uninitialized (e.g. has NULL protocol, host or IP address fields because there is no active client, e.g. because is was called from a timed event with active user online) - this code would dereference a NULL pointer and crash the b0rad. Reported by Mortifis.
-
- Dec 02, 2020
-
-
Rob Swindell authored
-
Rob Swindell authored
Like bbs.text(), except the "system" object is more widely available (e.g. in JSexec, mail server, web server, services) - in case any text.dat strings are useful in those execution environments tool. Requested by mlong. Also cleaned up the argument validation in some of these other system methods (throw useful error exceptions rather than just returning false).
-
- Sep 19, 2020
-
-
Rob Swindell authored
betwen 4 (the default) and 40 (the maximum) characters
-
- Sep 17, 2020
-
-
Rob Swindell authored
- JS system.operator_available property (read/writeable) - SYSAVAIL @-code which expands to LiSysopAvailable or LiSysopNotAvailable (use the new SYSAVAIL @-code in the chat menu to show availabilty to chat) - ;avail sysop command (in str_cmds.js) to toggle sysop availability - Changed LiSysopIs text.dat string to be a format string (include %s) and the trailing \r\n, so that it can be used in str_cmds.js or anywhere else to report sysop availability to chat, or can be set to blank string to display nothing (this would not work previously).
-
- Sep 14, 2020
-
-
Rob Swindell authored
-
- Aug 16, 2020
-
-
Rob Swindell authored
-
- Mar 31, 2020
-
-
rswindell authored
- min_password_length (currently hard-coded to 4) - max_password_length (currently hard-coded to 40) Remove 2 unused system properties (nobody uses PostLink/UTI drivers any more): - psname - psnum
-
- Mar 29, 2020
-
-
rswindell authored
use this in place of system.node_list[] if you're going to be using a lot of the properties and passing them around to methods which are going to each possibly dereference the values, as *each* deference results in a read of the node record in the node.dab. On my system, a simple node list (e.g. /L command) would result in between 60 and 100 reads of the node.dab (for a 13 node system), which was nuts. The system.get_node() method currently leaves the node record unlocked and there is currently no equivalent put_node() method, so you still need to use the system.node_list[] for modification of node records. But, I now see there are race conditions with the current methods of read-modify-writes of the node_list[] properties. We should be locking a node.dab record, reading it, modifying it, writing it, and then unlocking it - as is done in the C/C++ code. So... that's a todo item. Also created system.stats.node_gets to track the number of node.dab reads from a single instance of the system object. May remove this any time.
-
- Mar 24, 2020
-
-
rswindell authored
"getter". Don't call getstats() when querying properties that aren't actually stats (e.g. total_users) - performance optimization.
-
- Sep 02, 2019
-
-
rswindell authored
The scfg_t instances are often shared between threads and we can't really share file descriptors between threads, so we ended up with file descriptor leaks and race conditions. Instead, define/allocate/free a new js_system_private_t where the scfg_t* and the nodefile (descriptor) are kept - per "system" instance.
-
- Aug 31, 2019
-
-
rswindell authored
(ctrl/node.dab) is constantly closed and re-opened for every non-locking read. This is really slow across network file systems and unnecessary, so use a similar optimization as the C++ sbbs_t class where the file can (and normally is) left open across multiple consecutive reads. Create/use opennodedat() function. Uses the new CLOSE_OPEN_FILE() macro from xpdev/filewrap.h.
-
rswindell authored
(user) Inactivity" system setting (in days, 0 = disabled).
-
- Aug 20, 2019
-
-
deuce authored
-
- May 04, 2019
-
-
rswindell authored
declaration
-
rswindell authored
Use this in place of JS_GetPrivate() in native class methods that need the class instance's private data pointer and will do bad things if that pointer points to something other than what is expected. mcmlxxix (matt) discovered that using Object.apply(), you can invoke class methods where the 'this' instance is a different class. This would result in "Internal Error: No Private Data." or a crash. So now, gracefully detect this condition and report a meaningful error: "'<class-name>' instance: No Private Data or Class Mismatch" Also, important to note: if the method uses JS_THIS_OBJECT to get the JSObject* to pass to JS_Get*Private, then it must do this *before* it calls JS_SET_RVAL. From jsapi.h: * NB: there is an anti-dependency between JS_CALLEE and JS_SET_RVAL: native * methods that may inspect their callee must defer setting their return value * until after any such possible inspection. Otherwise the return value will be * inspected instead of the callee function object. The js_crypt*.c files still need this treatment.
-
- Mar 10, 2018
- Feb 20, 2018
-
-
rswindell authored
-
rswindell authored
HANDLE_PENDING() contains a return, so it's theoretically possible that the memory allocated by the previous JSVALUE/STRING_TO_... allocation could be leaked. So now we pass an optional pointer to HANDLE_PENDING() which will call free() on it if it's not NULL, and then sets it to NULL for good measure.
-
- Nov 16, 2017
-
-
rswindell authored
-
- Nov 13, 2017
-
-
rswindell authored
Server via the new 'V' command from the Reading Mail prompt allows you to toggle between all mail (including SPAM, the default), SPAM only, or HAM only. Also added a new '/' (search text) command from the reading mail prompts. Mail imported before the mailsrvr added support (recently) for the MSG_SPAM attribute flag will not be counted/filtered as SPAM. SBBSecho will have a commit (next) to support the new loadmail() usage, it will not compile until then.
-
- Oct 23, 2017
-
-
rswindell authored
-
- Dec 02, 2016
-
-
rswindell authored
-
- Nov 10, 2015
-
-
deuce authored
node_dir.
-
- Aug 25, 2015
-
-
deuce authored
-