- added a -host_trig command line option that creates a new host
instance without blocking user input.
- the build/install python scripts will no longer internally build
platform specific shell scripts; instead, they will now copy the
necessary templates from the /templates folder.
- modified both build.py and install.py to include windows
deployment support so this app can now be built/installed on
windows based host. note: i decided to have it "daemonized" as
a scheduled task that runs on system start instead of service
because it is simply easier to do it this way and will not
involve any 3rd party libraries or apps.
- added the src/applink.c file to the source code since it is
needed for windows openssl support.
- changed over all references of "endl" to "Qt::endl" to avoid
depreciation errors/warnings.
Changed the versioning system to a 4 number system that have the first 2
numbers as major.minor for the host application itself and the next 2
numbers (tcp_rev.mod_rev) used by clients and modules to determine
compatibility. A full description of this new system has been edited
into protocol.md. This new system offically starts at v3.0.0.0.
Added the PROMPT data type id that will work exactly like PRIV_TEXT except
it tells the client that the command is asking for non-private information
from the user.
Added PROG and PROG_LAST type ids that can be used by commands to notify
the client of the progress of the command if it is long running. The
long running fs_* commands were updated to use these instead of TEXT for
progress updates.
PUB_IPC, PRIV_IPC and PUB_IPC_WITH_FEEDBACK have all been combined into
one: ASYNC_PAYLOAD. This type id is now the only means at which module
commands can now run async commands. The command process object will
now determine where to direct the async payload (public, private or
public with feedback) based on the async command id being requested.
A description for TERM_CMD was missing in data_types.md so it was added.
Refactored HALT_CMD to YIELD_CMD. The new name just seems more appropriate
or the effect it has on the command.
Module commands can now do input hooking using the new ASYNC_HOOK_INPUT
and ASYNC_UNHOOK async commands. input hooking basically makes it so all
client data gets redirected to the module command that initiated the hook.
This can be used to implement something like a EULA agreement that blocks
all actions that can place during the session until the user accepts or
anything else to that effect.
The command process object will now check the open sub-channels list
being sent by ASYNC_CAST or ASYNC_LIMITED_CAST in any order and will not
be required match exactly to open sub-channels list in the session object.
It however cannot contain sub-channels not already listed in session's
list or else the async payload will be blocked.
Fixed the CmdProcess::validAsync() function that was comparing the input
aysnc command id with the process's command id in some places which is
invalid logic for this function.
Fixed the 'cast' core command that was outputting a malformed async
payload that didn't include the open writable sub-channels list.
Fixed a bug that caused all casted payloads to be forwared to the clients
even when the sub-channel(s) are closed.
Fixed the 'set_disp_name' core command so it can now see the -new_name
argument properly.
genfile commands would not terminate properly or
would end up de-synced with the host in one way or
another.
to fix this, i updated the GEN_FILE data type and
sub-protocol to now define the commands as download
or upload on the NEW_CMD frame so clients can now
define the direction of the GEN_FILE data of the
various GEN_FILE commands at the very start instead
of trying to determine that at run time.
also fixed this by creating the onTerminate() virtual
function in CmdObject and have it call this function
when term() is called. this makes it possible to
properly put the command object in a reset state if
using parameters outside of the base class when
term() is called.
updated all documentation related to the GEN_FILE
sub-protocol to reflect these changes.
fixed ASYNC_DEBUG_TEXT to self correct the ipc type
to PRIV_IPC so no debug messages can accidentally be
sent to peers.
Made some major changes to the project to facilitate a lighter code base and the
must flexible module interface possible.
-the mutli-process architecture now operate at the command object level so each
command now operate in it's own process instead of a single process handling
multiple command objects.
-each module is now an independent application that will now tell the session
object all of the commands it can run via named pipe. during command execution,
it will run the requested command object also running io with the session object
via named pipe.
with this change, it is now possible for modules to be developed in different
versions or QT or entirely different languages. the only requirement is the need
to support named pipes. shared memory segments is also a nice to have but not
needed.
-clients can now run multiple instances of the same command via changes to the
protocol. mrci frames will now include a branch id along with the command id.
the branch id can be used by clients to differentiate the io between instances
of the same command.
-the command states are longer controlled by a single object. it will now be up
to the command object (internal/exterenal) to send an IDLE frame to the client
to notify it that the command has finished. the session object will still track
if the command is in idle state or not but not directly control it.
-must async commands now use binary formatted data instead of TEXT as a way to
reduce overhead.
-all command objects can now send async commands. it is no longer limited to just
internal commands, however; the data of these async commands are verified by
session in some way to prevent host crashing due to malformed data.
-changed up the database structure to rely more on user ids, channel ids and
removed all foreign keys pointing to user names, channel names and sub-channel
names. also removed the groups table altogether. instead, the host rank is now
directly attached to the user data in the users table.
-changed the query object to now support the INNER JOIN SQL clause. this change
was needed to support the new database structure.
-version negotiation is now one-way via tcp connection or module interface.
the host will make it's own verion numner known to the client connected via
tcp or the module connected via named pipe. it will now be entirely up to the
client or module to decide if they support the host. another change in this
regard is the removal of the import rev for the modules. compatibility for
modules shall now use just the host verion.
-removed ls_cmds and cmd_info. the NEW_CMD frame now carries all information
about the command (cmd_id, cmd_name, summery, io and full_description) so it
is now possible for the clients to display the command documentation instead
of the host.
Documentation for the internal commands were updated to reflect the changes but
all other documentation will need to be updated in the near future.
Added a new fs_tree command that list all files and directories in a directory
tree. Just like fs_list, it has the option to output human readable text or
FILE_INFO frames. Also added the option to hide hidden files for both commands.
1.1.2 --> 1.1.3