IO Ninja changelog ================== This changelog is a manually cleaned-up git log of important changes happened in-between the official IO Ninja releases. Modules ------- * Main application - the two main executables (bin/ioninja, bin/ioninja-server) * Scripts - open-source Jancy scripts (*.jnc) which implement all of the IO Ninja plugins. * Ninja Scroll - the proprietary logging engine of IO Ninja (statically linked to the main executables) * Device Monitor - partly open-source tools, libraries, and kernel-mode modules allowing to intercept and monitor communications between user-mode applications and kernel-mode device drivers * QT Property Browser - a heavily modified fork of the official QT property grid library * Jancy - an open-source scripting language with C-compatible structs, safe pointer aritmetic and spreadsheet-like reactive programming (jancy.dll/ libjancy.so/libjancy.dylib) Changelog Items --------------- + denotes a new feature - denotes a bug-fix or a removed feature * is used for all other changes (re-factorings, updates, etc) ................................................................................ version 3.11.0 (2019-06-30) Introduces: new J-Link RTT plugin, new Serial MI Dump Viewer plugin, new layer UI, applying layer to .njlog files, run sessions as Administrator on Windows, signed .exe on Windows, support for RTS-driven half-duplex Modbus over RS-485, direct foreign data pointers in Jancy for increased host-to-script communication efficiency. Main application changelog: - nj_app: fix: use the latest security patch openssl-1.0.2s - nj_app: fix: mark user plugins *before* adding to the list (so the list shows paths in tooltips) * nj_app: user plugin page should use 16x16 icons (for consistency) + package: sign ioninja.exe, ioninja-server.exe, ioninja-server-admin.exe this way, elevation prompts look better (blue and with an icon) * nj_app: don't show "Run As Administrator" on pre-Vista Windows (ver < 6) + nj_srv_adm: added a thread for pumping between STDIN and the STDIN named pipe + nj_srv: added option: --stdin-pipe with this option, StdinThread is reading from the pipe instead of STD_INPUT_HANDLE (required for elevation) + nj_srv: added an icon to ioninja-server.exe & ioninja-server-admin.exe * nj_srv: ioninja-server-admin is now an elevator (creates a ioninja-server via ShellExecuteEx) - nj_srv: removed app-srv & srv-app transport file handles (unused) - nj_etx: fix: clear module if jitting fails (otherwise, we end up with a module in a weird half-baked state) + nj_etx: set error in processMsg_OnActionError (may happen during compile stage, so we need srcpos for error highlighting) + nj_ui: added ComboBox::setItems (also, unified ComboBox item and EnumProperty item) - nj_app: fix: incorrect check for UserPluginFlag in UserPluginSettingPage::on_removeButton_clicked - nj_app: typo fix in TransmitHistory::last() - nj_app: fix: followRedirectGet always returned false - nj_app: fix: uninitialized fields in DocumentLayer - nj_srv: fix: uninitialized field Server::m_paths + nj_app, nj_ui: add document groups for logs, too; also, initially populate document groups with an "empty" prop so it looks more consistent - nj_srv: fix: properly handle start of log documents (now that we can add layers on logs, too) + nj_app: added Plugin::PureLayerFlag (can be applied to log files) * nj_app: rename: SessionSettingPage -> DocumentSettingPage -- this setting page now applies to log documents, too - nj_srv: removed CmdLine::m_workingDir - njs_log: fix: converters/filters were not removed from the aux list (m_conversionPipeline) - nj_app: fix: main plugin entry was not added when opening logs - nj_srv: fix: processMsg_OrderLayers should not call removeAllConversions * nj_app: major update: use LayerPipelineDlg for pipeline management allows adding layers duding session startup and most importantly, re-ordering of layers + nj_app: added LayerPipelineDlg, removed add/remove/removall buttons from SessionSettingPage (now everything is managed from within LayerPipelineDlg) - nj_ui: fix: add spacing widget to the object map (so it's get deleted on layer removal) + nj_srv: force-process doc_MainThreadScheduler.jnc * nj_cmn, nj_srv: removed SrvMsgCode_RemoveAllLayers, added SrvMsgCode_OrderLayers + nj_log: added support for moving conversions/listeners to the tail of pipeline * nj_etx: create foreign pointers instead of memdup/strdup - nj_app: fix: nagmgr failed on parsing an empty manifest * nj_app: rename: new layer -> add layer * nj_srv, nj_ui: jnc::g_nullPtr -> jnc::g_nullDataPtr + nj_app: process terminal status reports * nj_app: use QLinkedList<> where possible: more efficient than QList<> keeps iterators valid + nj_srv: added an option for logging or not logging exception in the main log; - nj_srv: fix: don't log exception from the 'log' submodule - nj_srv: fix: on exception, don't try to write to a read-only log file * all: major renaming and moving-things-around: gui -> ui io.XxxUi -> ui.XxxUi, log.RepresenterTarget -> log.Representation - axl_sl: fix: properly handle count == -1 in sl::Array::remove and sl::String::remove - axl_gui: typo fix: mask should check for (1 << Orientation_Xxx) * axl_enc: HexEncoding::Flag -> HexEncodingFlag + axl_enc: added HexEncodingFlag_Multiline (for debugging) - axl_lex: fix: skipping BOM resulted in invalid offsets in Token::m_pos (which affected modules relying on Token::Pos::m_offset) + axl_lex: ignore UTF-8 BOM by default + axl_sl: added from-index parameter to all String::findXxx methods - axl_enc: critical bugfix: potential buffer overflow in CodePointDecoder::decodeImpl Scripts changelog: + ethernet-tap: added icon to the log plugin + serialmon: added a new plugin: Serial MI Dump Viewer + file: added a simplified FileOpened log record (file name only) + conf: added JLinkRtt to the list of official plugins + conf: added SerialMiDumpView to the list of official plugins * conf: added FpgaUploaderLog.njplg to the std plugin list * conf: added scripts/plugins as a common import dir - jlink, modbus, ssh: remove ../ prefix for shared log record code files * ethernet-tap: use the newly-added shared FPGA-uploader * i2c-spi: use the newly-added shared FPGA-uploader + fpga-uploader: moved FPGA update code to a common plugin (shared between all FPGA-based sniffers) * replay-log: moved log_RecordFile.jnc to common/ + jlink: added support for socket connection to existing localhost session * ui: use ComboBox.setItems() in ToolBar.addComboBox() + packets: added ModbusReadWriteMultipleFrame + packets: added updateSize() packet action + modbus: added support for read/write multiple registers, mask-write register + jlink: added device list refresh, jlink info/error trace, attach to existing session * modbus-gateway: moved to misc group * common: sys.GcXxx -> jnc.GcXxx + ui: added ui.ComboBox.setItems (optimization -- to set all items in one go) + jlink: initial commit of J-Link RTT + common: added io_JLink.jnc (binding to the JLink dynamic library) - mailslot: typo fix in MailslotLog.njplg * common: BufferPropertySet.createPropertiesGrouped should return GroupProperty* + modbus: redesigned half-duplex parsing, added options for RTS-control in half-duplex mode * ethernet-tap: renamed "Ethernet Sniffer" -> "Ethernet Tap" + ethernet-tap: added a firmware file + ethernet-tap: added PacketFlags.BufferOverflow + ethernet-tap: show software-calculated CRC status * modbus: reset parsers in log.Converter.reset() + modbus, regex, replay, tx-rx-filter: added pure-layer = true * api: moved MainThreadScheduler to a dedicated file (doc_MainThreadScheduler.jnc) + api: added log.FoldingFilter, updated log conversion stack methods + modbus: added setting for choosing which stream to analyze in half-duplex mode + ethernet-sniffer: added channel filters, use different backgrounds for channel#1 and channel#2 * ethernet-sniffer: collapse everything by default - pcap: fixed null-exception on empty filter - modbus: fix: device address 0 means: write-only broadcast * all: major renaming and moving-things-around - packets: fix: IcmpFrame::calcChecksum did not update the second (ICMP) checksum Ninja Scroll engine changelog: * njs_log: major redesign of ConversionMgr * njs_log: maintain live record offset and don't call listeners for non-live records * njs_log: major update: respect sequence of filters in conversion stack + njs_log: added class FoldingFilter + njs_wdg: process CSI 5 n and CSI 6 n (report status) - njs_log: critical bugfix: potential crash on save-log-as-text when using bin-text-view * all: rename: RepresenterTarget -> Representation, RepresenterBuffer -> PartBuffer Device Monitor changelog: * dm_lnx_lkm: conditional compilation to make it compile with older kernels * dm_lnx_lkm: use explicit #ifdef/#ifndef to avoid warnings on older GCCs - dm_lnx_lkm: removed unnecessary typedefs in HashTable.h * dm_lnx_lkm: a workaround for older GCCs which disallow multiple identical typedefs * dm_app: added rt to the lib list * dm_app: use (utf32_t) cast as to avoid problems on older GCCs * dm_lnx_lkm: don't use multi-char constants (yields warnings on older GCCs) QT Property Browser changelog: - qtpb: fix: text editor was not bound to the file property value + qtpb: added support for name icons Jancy changelog: + jnc_std: added strrchr, strpbrk * jnc_sys, jnc_rtl, jnc_ct: moved GC runtime functions to RTL, cleaned up lazy item parsing/adding + jnc_std: added atol & strtoul, fixed strtol (should return int64_t) + jnc_ct, jnc_rtl: added jnc.createDataPtr for converting thin-> normal ptrs - jnc_ct: fix: lower priority of non-const -> const casts - jnc_sys: fix: sys.NotificationEven was not mapped - jnc_sys: removed sys.createThread() -- it never was implemented; anyway, it's better to use sys.Thread - jnc_ct: fix: super-import type resolving/import loop detection was broken + jnc_ct: add fixups for import types in typedefs - jnc_ct: fix: srcIface used before null-check in Cast_ClassPtr::constCast - jnc_ct: fix: incorrect arg names when adopting non-user orphans (e.g. property accessors) - jnc_ct: typo fix: incorrect check for ScopeFlag_FinallyAhead - jnc_ct: fix: a few uninitialized members found by pvs-studio - jnc_io_base: fix: unintialized field io::Serial::m_lineErrors - jnc_api: warning fix: using bool_t for bool - jnc_io_usb: typo fix: incorrect checking for Flag_Stop inside ASSERT + jnc_rt: added optional root dump during mark stage (helps detecting bogus pointers) - jnc_ct: fix: ImportMgr::findImportFile should still work if current unit is not set - jnc_api: fix: jnc::Module::addImport should return bool * jnc_rt, jnc_api: changed DataPtr method signatures void* -> const void* (more convenient to use) + jnc_api: added jnc::createForeignBufferPtr, jnc::createForeignBufferPtr (convenient helpers) * jnc_api: jnc::strLen, jnc::strDup, jnc::memDup are no longer exported via the dynamic extension func table (linked statically) - samples: fix: default for isCallSiteLocal is true now; also, use GcHeap::invalidateDataPtr + jnc_rt, jnc_api, jnc_dll: added methods: GcHeap::invalidateDataPtr and invalidateDataPtrValidator * jnc_rtl: added a shortcut (for null) in appendFmtLiteral_p * jnc_dll: export jnc_GcHeap_createForeignDataBox & jnc_GcHeap_createForeignBufferPtr * jnc_api: renamed BoxFlag_Zombie -> BoxFlag_Destructed (more explicit) * jnc_api: increased size for Box::m_flags to 10 bits + jnc_rtl: added checks for BoxFlag_Invalid - jnc_ct: removed the 'lib' argument from jnc::Module::parse - jnc_api: removed include of jnc_Runtime.h (unnecessary and causes errors under gcc) * jnc_ct: invalidate callsite-local boxes upon exiting a callsite + jnc_rt: implemented GcHeap::createForeignDataBox/createForeignBufferPtr + jnc_rtl: added jnc.Promise.asyncSetScheduler + jnc_ct: added 'thisPromise' to async sequencer funcs - jnc_ct: fix: m_multicastClassTypeArray was not cleared - jnc_ct: fix: OperatorMgr::memSet(...) doesn't accept alignment as a parameter anymore - jnc_ct: fix: memCpy/memSet alignment arg is no more (use 1) - jnc_ct: fix: llvm.memcpy/memmove/memset changed signature in llvm-7.0.0 - jnc_ct: fix: reset debug loc in FunctionMgr::prologue + jnc_ct: include LLVM_VERSION_PATCH into LLVM_VERSION * jnc_ct: debug info updates for llvm-8.0.0 * jnc_ct, jnc_rt: replaced StaticDataBox -> DetachedDataBox (with built-in Validator) - jnc_ct, jnc_rt: removed DynamicArrayBox (element count can be reconstructed from DataBox::m_validator) - jnc_ct: fix: create execution engine prior to optimization * jnc_ct: use "generic" for CPU - jnc_ct: llvm-8.0 compatibility fixes ................................................................................ version 3.10.5 (2019-04-10) Service release (SPI firmware fix, UTF-decoder fix) Main application changelog: - axl_enc: critical bugfix: opportunistic buffer overflow in CodePointDecoder::decodeImpl * nj_app: upped max hex line length to 64 - nj_app: fix: force update license in LicenseMgr::setRegistrationState (otherwise, evaluation -> paid is not handled) - axl_sl: fix: String::getXxxCaseString must be const + axl_sl: added support for literal + string concatenations Scripts changelog: - i2c-spi: critcal fix: fixed spi.rpd firmware + ethernet-sniffer: added graceful stop (with cypress buffer clear) - ethernet-sniffer: fix: RJ45 connector (channel) identification + ethernet-sniffer: show packet index Jancy changelog: - jnc_ct: fix: replace '.' with '_' for namespace ref-ids + jnc_ct: accept multiline post-comments /*!< ... * jnc_ct, jnc_dll: moved doxy-comment processing into axl (to be shareable with other doxyrest-pipeline front-ends) + jnc_ct: opt: avoid escape-decode when there are no backslashes in string ................................................................................ version 3.10.4 (2019-03-29) Service release (io.Pcap fix) * jnc_io: fix: io.Pcap used a wrong code for EOF (in 3.10.3 it was causing TCP Flow Monitor, UDP Flow Monitor and Network Sniffer to stop capturing immediately) * jnc_app: fix: command line should use something else for output dir (-O is used for optimizations) * nj_app: do initial repaint before enabling network (which is not instant) ................................................................................ version 3.10.3 (2019-03-28) Introduces: new 'Replay Log' plugin, new 'I2C/SPI Tap' plugin, communications with ioninja.com moved to HTTPS, added support for async/await in Jancy, added LLVM inlining and optimization passes in Jancy, support for BREAK condition in Serial and Serial Monitor. Main application changelog: - package: removed the 'drivers' component from the 7z package (and into a separate package for those who need it) + sh: added support for cmake toolset param (-T); allows using VS2017 to build for Windows XP - nj_app: removed encryption of usage/crash reports, replaced everything with HTTPS + nj_app: added a setting for hex digit case * nj_app: updated welcome dlg (proper format for serial numbers, changed the type of the license field to rich-text) * license: updated the privacy statement (re HTTPS stuff) + license: added libusb (linked into io_usb.jncx) - license: removed lua & zlip (not really linked into ioninja) * doc: updated the HW manual + nj_app: added log-stop icon * nj_srv: update startup progress post-optimize + nj_app: added LLVM optimization-level settings (-O) - nj_app: fix: ScriptEdit::event may be called before m_lineNumberMargin is initialized + nj_srv: use the newly added jnc::Module::optimize + conf: added i2c-spi-sniffer as a stock plugin - nj_app, nj_srv: removed setting for max stack size * nj_app: removed unneeded space from binary transmit page * nj_app: save settings as defaults when the Settings dialog is closed on OK button + nj_app: added path info for user plugin tooltips - nj_gui: bug: getItemData was non-static (ABI inompatibility due to structret-vs-this) + icons: added tape icon (for replay-log) - nj_srv: fix: removing layer which has log plugins resulted in dangling pointers + nj_log: added support for unloading log plugins - nj_app: fix: dangling pointers in packet template combo-box (need to set packet template to null on document deactivate) + axl_gui: added flags arg to TextPainter::drawBinHex (so we can choose upper/lower case) * doc: cleaned up sphinx CSS & templates + cmake: added IPO as LLVM JIT component (now that we use function inlining pass) + axl_gui: added support for strikeout ANSI escape \e[9m \e[29m + axl_io: added Serial::setBreakCondition(bool) - axl_mem: fix: TrackerBlockHdr should be aligned on dual-pointer-size boundary Scripts changelog: * tcp-proxy: keep server data until the connection is established * tcp-proxy: wait for TX buffer empty on disconnect - tcp-listener: typo fix: TcpListenerSession.onConnectionSocketEvent used incorrect socket pointer on io.SocketEvents.IoError - common: removed duplicate RemotePort property + i2c-spi: added support for flipping MOSI/MISO * i2c-spi: renamed I2C/SPI Sniffer -> I2C/SPI Tap * i2c-spi: updated firmware files * i2c-spi: fixes/updates for I2C 10-bit address mode * wizards: use StdLogIcon.Connect/StdLogIcon.Disconnect in the Session wizard + api: added StdLogIcon.Stop + serialmon: added handling for IOCTL_SERIAL_SET_BREAK_ON & IOCTL_SERIAL_SET_BREAK_OFF - serial: fix: BreakConditionChanged was not added to SerialLog.njplg * serial: adjusted levels in the BRK icon + ethernet-sniffer: initial commit + i2c-spi-sniffer: implemented proper decoding for different SPI modes (MSBit-first/LSBit-first for 4, 8, 12, 16 bits) + i2c-spi-sniffer: added graceful stop (with clearing Cypress buffers) * serial: updated the BRK icon - common: fix: invalid througput calculation for TxRx (need to divide by 2) * hw-serial-mon: use the newly added API (io.UsbEndpoint.unsuspend) * tcp: use the newly added API (io.Socket.unsuspend) * usb-data-endpoint,usb-control-endpoint: use the newly added API (io.UsbEndpoint.unsuspend) + usb-data-endpoint,usb-control-endpoint: added persistency for device selection; - i2cspi: fix spi decoder (last byte was lost when buffer was full); also, flush buffer on each decode() * i2cspi: don't expect bytes to necesserily arrive AFTER i2c-start (we can start sniffing in the middle of a packet) * i2cspi: clear cypress buffer on start * i2cspi: handle ACK/NACK in the I2C address, don't adjust incomplete bit count in STOP msg, added properties for log cache update rate limit + serial: added a button to set BREAK condition + replay-log: initial commit + serial-tap: added line error handling (framing/parity/break) + serial: added line error handling (framing/parity/break) - modbus: fix: stream role was not properly loaded (resuling in the default value every time) - modbus: fix: ModbusRtuParser.m_lastTimestamp field shadowed the "real" m_lastTimestamp in the base class, thus resulting in invalid timestamp handling Ninja Scroll engine changelog: + njs_log, njs_wdg: added HexLineWidget::isUpperCase/setUpperCase - njs_log: fix: only update the previous line (timestamp, style) if new characters are added to it - njs_log: fix: update IndexLeaf before invoking getNextLeaf/getPrevLeaf (index file might have grown thus adding extra leaves and thus updating m_next -- while cached leaf may have m_next == -1) Jancy changelog: - jnc_io_base: fix: WSAECONNRESET was not always handled + jnc_io: added io.XxxEvents.WriteBufferEmpty (currently, WriteBufferReady is aliased to it) - jnc_ct: fix: use m_llvmFunctionName/m_llvmGlobalVariableName only if it's not empty * jnc_ct: alas, we have to resort to looking up llvm::Function & llvm::GlobalVariable by name on mapping -- i can't figure out a way to be notified when llvm::Function is being optimized out - jnc_ct: typo fix in Variable::prepareStaticData (llvm::GlobalVariable was still accessed for optimized-out vars) + jnc_ct: optimize sourceless functions, update m_staticData when mapping variables; + jnc_rt: handle SIGILL (optimizer may replace NULL-pointer accesses with UD) + jnc_app: use the newly added jnc::Module::optimize + jnc_ct,jnc_api: added Module::optimize (using llvm::PassManagerBuilder) * doc: updated sphinx conf.py.in according to the latest changes in axl & doxyrest - jnc_ct: fix: getDataPtrType should add fixup for import types - jnc_ct: typo fix: getPtrTypeFlagSignature added 'cn'(intended "cn"); better yet, use single-char signatures + jnc_ct: added options for inlining & basic scalar opts - jnc_ct, jnc_rt: removed explicit stack size limit (handled via exceptions) - jnc_ct: removed GC safe points in prologues by default * jnc_io: accepted sockets/named-pipes and usb IN-endpoints should be suspendable (initially) + jnc_ct: added support for scheduling async functions * all: rename: VTable -> Vtable + jnc_ct: added support for async errorcode functions + jnc_ct: added support for async member functions ('this' value is added to the promise class) * jnc_ct: made Function/Variable/Value/Type getLlvmValue inline * jnc_ct: moved ct::GlobalNamespace and ct::ExtensionNamespace into dedicated files - jnc_ct: removed m_declaratorName from function (only orphans need those) * jnc_ct: make qualified name calculation lazy - jnc_ct: removed names from unnamed functions - jnc_ct: removed ModuleItem.m_tag * jnc_ct: moved m_doxyBlock to ModuleItemDecl - jnc_ct: removed BasicBlock.m_landingPadKind (use BasicBlock::m_flags) - jnc_ct: removed explicit checks for null-ptr, zero-div, stack-overflow (handled via exceptions) + all: the first prototype of async/await is finally functional - jnc_io_usb: fix: UsbAsyncControlEndpoint::markOpaqueGcRoots should lock prior walking the list (libusb completion can modify the list any time) - jnc_io_cmn: fix: enter wait region in AsyncIoDevice::blockingWait + jnc_io_base: added serial line error handling (io.SerialLineErrors, io.SerialEvents.LineError, io.Serial.clearLineErrors) + jnc_rtl: added a draft for jnc.Promise/Promisifier + jnc_ct: added TokenKind_Async, TokenKind_Await, TypeModifier_Async - jnc_ct: removed TokenKind_Auto ................................................................................ version 3.10.2 (2019-02-01) Service release Main application changelog: * nj_app: changed default font to Consolas-10 on windows, Menlo-12 on Mac, Monospace-10 otherwise * nj_app: use the script editor font for line number margin * nj_app: detect font changes and update accordingly * nj_app: added a size-grip to the parametrized action dlg and removed the question mark from the caption - nj_app: fix: switching between sessions might have left BinaryTransmitPage with a dangling m_settings pointer (leading to a crash) + nj_app: added auto-show-terminal setting (false by default) + nj_app: attempt to auto-load log plugin if it's in the same directory + nj_app: added new setting: auto-add-user-plugin * nj_app: when opening log file with aux representers, don't suspend log + nj_app: use the newly added njs::NotifyCode_SelectionChanged - nj_app: fix: load/save sessions still relied on plugin guids rather that ids (and we removed guids from session/layer plugins) - axl_enc: remove the expectedLength/Size parameters from conversion functions Scripts changelog: + tcp: added the reconnect functionality (on remote disconnet/reset) + serial: added the reopen-on-error functionality + usb-data: added read-timeout & use-read-timeout props; use those for proper buffer configuration + common: added configurable defaults to BufferPropertySet - wizards: fixed reswitch code in layer plugin wizards * wizards: updated wizards for the new plugin arch * serialtap: rename: serial tap doesn't use FTDI anymore - serialmon: fix: representSerialMonLog should not fall back to representSerialLog + serial: added icons to serial log plugin - tcp: fix: on error, transmit should be disabled and session ended Ninja Scroll engine changelog: - njs_log: fix: when adding text we should add an extra line when text ends on new-line (\n) - njs_log: fix: CacheLineAttr.clear should reset m_iconIdx to -1 - njs_log: typo fix: RecordFile::getAuxClassGuidArray () mapped a view at a wrong offset - njs_log: typo: SaveLogAsTextRangeProcessor should use m_lineTimestamp, not m_timestamp - njs_wdg: fix: keep the line color when painting hex-ascii - njs_wdg: fix: hex editor crashed if a user starts typing in the hex pane in overwrite mode and the editor is empty + njs_wdg: added NotifyCode_SelectionChanged Jancy changelog: - jnc_rtl: bugfix: 'this' arg of 'onevent' handlers was adjusted twice + jnc_rtl: make RegexState.m_replayLength public & readonly (may be needed) * cmake: moved all rtl .jnc files into src/jnc_ext/jnc_rtl + jnc_ext: create jnc_stdlib.jncx for IO Ninja IDE - jnc_io_ssh: fix: read initially from socket (otherwise, data may be stuck in libssh2 buffers until more data arrives over a socket) ................................................................................ version 3.10.1 (2018-12-25) Service release Main application changelog: + nj_app: added test mode -- load plugin(s) and wait a bit, then exit (added all official plugins to the test list) - nj_cmn, nj_app, nj_srv: removed AppMsgCode_OnException -- it was only used if the initial plugin startup failed. replaced with onStartupCompleted; this also leads to reduced flickering during plugin startup - nj_app, nj_srv: fix: use proper libunwind libnames and link sequence - nj_cmn: fix: only use signalContext on Linux x86/amd64 otherwise, use unw_getcontext (which pretty much works everywhere) + nj_app: force-generate cursorPosChanged in HexEditWidget::selectAll () - nj_app: fix: install crash report writer BEFORE jancy initialization (for proper sequence of signal handlers) + nj_cmn: added SIGILL to the signal list -- turns out, clang may replace invalid memory accesses with UD instructions - nj_app, nj_srv: don’t link to libunwind on mac (it’s part of standard lib here) * nj_cmn: moved posix crash report thread writer to a dedicated file + nj_cmn: implemented crash reports on posix using libunwind - nj_app: fix: user plugin page didn't work well for log plugins (new plugin type was not handled properly) * nj_srv: return --plugin-file option (for old ioninja-ide compatibility) loosen up errors in CmdLineParser::finalize (simpy don't set server flags if log files are not specified) - nj_app: don't call QNetworkProxyFactory::setUseSystemConfiguration at all * nj_app: check for running state during execSyncReq and Document::save this is to prevent main-app lock ups due to zombie server * nj_app: licensemgr should update about dialog (if present) example sequence: about->deregister->nag->register * nj_app: nagdlg: don't set time-left-string if it's not evaluation Scripts changelog: * i2c-spi: updated firmware files (both i2c and spi are functional) - all: removed guids from layers + all: added icons to all log plugins * i2c-spi: major update -- no more lattice, implemented altera max10 upload protocol - tcp-flow-mon: typo fix: guid-> log-guid Jancy changelog: * jnc_ct: major update: raw literals are now zero-terminated, just like normal literals (practice showed it's safer and better this way) - jnc_io_usb: minor warning fix (signed-vs-unsigned mismatch in assert) - jnc_ct: fix: incorrect assert -- unprimed static gc root classes have NULL box ................................................................................ version 3.10.0 (2018-12-14) New major features: A build for Raspberri Pi, machine interface in Device Monitor, a new plugin Serial Monitor over SSH, half-duplex support in Modbus Analyzer, redesign of Jancy reactors, new 64-bit log record code architecture, dedicated log representer plugins (separated from session/layer plugins). Main application changelog: * nj_app: for default session and layer plugins, use ID rather than GUID * nj_app: if no plugin selected, getPluginListWidgetCurrentItem should return NULL * nj_app: update: instant-nag-screen should only pop once * nj_app: prevent silent overwriting of the outdated log file (create a backup and show warning with a link to the KB article) + nj_log, nj_app, nj_srv: added configurability for record code filter groups via bool properties + nj_log: added standard filter RecordCodeFilter + nj_gui: allow creating BoolProperty without a jancy runtime * nj_log: lock before compiling log plugins to avoid races between multiple log threads - nj_srv: fix: addLayer didn't work properly on the new log design - nj_app: fix: no-response-dlg should be closed when server process terminates * nj_srv: fail if log plugin failed to attach (usually, because of a misspelled representer func) + nj_app: added presell serial num page to the welcome dialog - nj_app: typo fix in TextTransmitPage::onEnterKeyPressed (no need to take parent) - nj_srv: fix: erase entry from the layer map if add-layer failed + nj_app: added welcome-dialog (blocking unregistered access) -- a license is now required to run io ninja (at least, an evaluation one). * all: ensure zero-initialization where it matters (post auto-zero-init removal from axl) - all: removed auto-zero-init of allocated blocks - nj_app: qt-5.0.2 fix in UsageReportMgr re QJsonValue * sh: added target cpu mapping armv7l -> arm32 + conf, cmake: added ssh-serialmon to the official plugin list and to the test suite Scripts changelog: - serialmon: removed unnecessary termios->uint_t converters + serialmon: added handling of TCSETSW, TCSETSF, TCSETA, TCSETAW, TCSETAF - pcap: typo fix: should check *filter, not *p (which is void) + serialmon: added serial monitoring over ssh * ssh: moved common ssh ui code into io_SshUi.jnc * udp-flow-mon, tcp-flow-mon: reuse log record codes from PcapLog and SocketLog * all: all-around-fixes, everything passes tests under the new 64-bit record code design + devicemon: added device monitor log plugin * all: ported to the new 64-bit record code design + modbus: added support for half-duplex links * all: updated reactors re the new reactor syntax/capabilities Ninja Scroll engine changelog: + njs_app: implemented conversion for record codes 32-bit -> 64-bit (record-code-db-driven) * njs_log: moved RecordFilePreOpener to a dedicated file + all: 64-bit record/part codes - all: a bunch of typos/fixes found by pvs-studio * all: ensure zero-initialization where it matters (after auto-zero-init removal from axl) Device Monitor changelog: - dm_app: minor posix fix re StdinThread + dm_app: monitor EOF on STDIN (important for SSH connections) + dm_app: added os/cpu information to the start message, renamed dm_MachineInterface.h -> dm_MachineIface.h * dm_app: turn off stdout buffering in machine-interface mode + dm_app: implemented machine interface on linux + dm_app: added machine interface (output binary to stdout for easy parsing -- e.g. over SSH) * lkm: replaced flush_tlb_all (not exported on rpi2) -> local_flush_tlb_all Jancy changelog: + jnc_io_devmon: build io_devmon.jncx even if devmon is not available + jnc_ct: added support for source-only jncx extensions - jnc_ct: fix: conditional_expr didn't check for result of conditionalJump - jnc_pch: removed empty preproc line (confuses cppcheck) - jnc_io_ssh: don't request PTY if ptyType is null or empty - jnc_io_ssh: don't start process if processType is null or empty + jnc_std: added overload std.setError (std.Error const*) + jnc_io_devmon: added io_DeviceMonitorMi.jnc (machine interface) + jnc_ct: added __FILE__ and __DIR__ lexer-time constants - jnc_rt: fix: Runtime::m_module was uninitialized + jnc_std: added methods: std.Guid.parse, std.Guid.getString - jnc_ct: fix: NamedTypeBlock::callMemberFieldConstructors should not assume this is a class type + jnc_rt: add destructors of class field of static objects - jnc_io_base: fix: struct OverlappedIo had uninitialized fields (windows-only) - jnc_ct: fix: DerivableType::findItemTraverseImpl shouldn't assume no unresolved imports in base types + jnc_ct: added a bunch of arm arithmetic/conversion impl functions + jnc_ct: force hard-fp-abi on ARM - jnc_ct: fix: arm32 coercion (should depend on alignment) - jnc_ct: fix: 'char's are unsigned on ARM + jnc_ct: arm call-conv implemented (not fully tested yet) + jnc_ct: added arm calling convention (draft) + test, cmake: added jnc_test_abi to the test quite and make it run before the other tests (except for samples) + jnc_ct: added support for arm32/arm64 + pch: detect arm32/arm64 - pch: fix: don't use attribute(ms_struct) if it's not supported * jnc_ct: moved deletion of llvm::Module, llvm::ExecutionEngine and llvm::Context to the very end of ct::Module::clear - jnc_ct: typo fix in Function::addUsingSet - jnc_dll: fix: Xcode refuses to build a library out of TARGET_OBJECTs only + jnc_io: added WSAStartup on windows to io_base.jncx/io_ssh.jncx - jnc_ct: fix: pass Token::Pos to internalPrologue (otherwise, m_llvmDiScope is not initialized) + jnc_ct: added optional Token::Pos* pos arg to FunctionMgr::internalPrologue - jnc_ct: fix: incorrect include dir sequence - api: removed empty pp lines (containing only #) -- they confuse cppcheck - jnc_ct: fix: call postDeclaratos/postDeclaratorName when parsing reactors + jnc_ct, jnc_rtl: allow empty reactors - jnc_ct: fix: delete llvm::Context in Module::clear - all: a bunch of typos/fixes found by pvs-studio - jnc_ct: don't create vtable for a class unless it's actually needed * all: ensure zero-initialization where it matters (post auto-zero-init removal from axl) * jnc_rtl: use shadow reaction index to loop through pending reactions (rather than picking the pending reaction with the minimal index) + jnc_rtl: added method ReactorBase.restart - jnc_ct: fix: ensure reactor-closure type is created together with jnc.ReactorBase - jnc_ct: fix: jnc.ReactorBaseType should mark ctor/dtor as user-item (otherwise, these will be auto-generated) * jnc_ct: minor modification of the signature of DerivableType::createDefaultMethod * test: updated reactor samples/tests to the new syntax + jnc_ct, jnc_rtl: initial commit of reactor-redesign ................................................................................ version 3.9.2 (2018-09-27) Service release A bunch of critical bugfixes in Jancy runtime and in the Ninja Scroll engine (after a series of tests with libfuzzer + address sanitizer); added delayed cache update in Ninja Scroll (critical to maintain high data throughput, such as with the I2C/SPI Sniffer plugin capturing SPI data at ~50MHz). Main application changelog: + nj_log: added properties: Log.m_leafLineCountLimit, Log.m_cacheUpdateScrollRateLimit + nj_app: use the newly added LogWidget::setStickyScroll * nj_app: set ScrollToBottom & SetCursorToEnd flags on clear - nj_app: fix: gcSafePointMethod setting was neither serialized nor applied on win x64 + nj_doc: added property: doc.PluginHost.m_pluginDir - nj_gui_srv: fix: EnumProperty::setValue should check for null before the shortcut exit (may be setting 0 to null) * doc: updated hardware manual Scripts changelog: + i2c-spi-sniffer: use the newly added m_cacheUpdateScrollRateLimit to limit log cache update rate + log: added properties: Log.m_leafLineCountLimit, Log.m_cacheUpdateScrollRateLimit + i2c-spi-sniffer: added automatic FPGA firmware update + common: added file parseVersion.jnc - log: bugfix: infinite recursion in log.Writer.writeString + doc: added property: doc.PluginHost.m_pluginDir - i2c-spi-sniffer: remove io.UsbEndpointOptions.KeepReadBlockSize + i2c-spi-sniffer: added support for buffer overflow, optimized the SPI decoder, added support for SPI LSB-first-vs-MSB-first - i2c-spi-sniffer: fixed bitwise-arithmetic for building the SPI 16-bit word * i2c-spi-sniffer: switch order of bytes to: MOSI-HI, MISO-HI, MOSI-LO, MISO-LO + i2c-spi-sniffer: renamed I2cSniffer -> I2cSpiSniffer; added SPI decoder + i2c-sniffer: added 'Show STOP' property * i2c-sniffer: wait for OUT-transfers finished before closing the OUT-endpoint + i2c-sniffer: added 7-bit & 10-bit address decoding Ninja Scroll engine changelog: - njs_log: fix: first update cache, then notify widget parent - njs_log: don't reset sticky scroll files on cache rebuild + njs_log: added method: LogWidget::setStickyScroll * njs_log: only modify sticky-scroll flags when cursor is changed because of keyboard/mouse - njs_log: removed m_leafFoldableRecordCountLimit (seems like an excessive setting) + exposed access to m_leafLineCountLimit and m_cacheUpdateScrollRateLimit via njs::Server * changed m_cacheUpdateScrollRateLimit default to -1 (no delayed cache update -- each plugin must turn it on manually) * njs_log: inlined CacheMgr::processStickyScroll () * njs_log: don't let any UI things to happen between releasing the index lock and requesting updates * njs_log: update line count on represent + njs_log: added delayed cache update (based on scroll-change rate limit) * njs_log: use the newly added methods axl::io::MappedFile::duplicate, setSize - njs_log: fix: SharedRecordFile::rename cleared m_auxFileList - njs_wdg: fix: TerminalWidget::escReset () incorrectly reset cursor pos to (0, 0) - njs_wdg: fix: csiSetScrollRgn didn't check begin/end for validity - njs_wdg: fix: csiSetMode/csiResetMode didn't check length of m_body before accessing m_body [0] - njs_wdg: fix: if zero size is passed in TerminalWidget::setConsoleSize, use defaults + njs_wdg: added TerminalWidget::isValidCursor - njs_wdg: fix: always delete history on set-scroll-region + axl_gui: added support for Ctrl+U (cut a line before the cursor) - axl_gui: fix: incorrect condition in WidgetScrollBar::isMaxed + njs_wdg: added TerminalScreenBuffer::isInsideScrollRegion + test_qt: added libfuzzer support, added xterm fuzz corpus Jancy changelog: - jnc_io_cmn: fix: invalid test in AsyncIoDevice::isReadBufferValid and AsyncIoDevice::isWriteBufferValid - jnc_io: critical bugfix: incorrect handling of readBuffer/readOverflowBuffer when KeepReadBlockSize is in effect * axl_sl: CircularBuffer::setBufferSize should do a quick size check for a possible shortcut return - axl_sl: fix: inaccurate assert in CircularBuffer::setBufferSize - jnc_ct: critical bugfix: jnc_Type_getTypeString returned a dangling pointer * jnc_std:jnc_rtl: use sl::getAllocSize, not sl::getHiBit for allocation round-ups + jnc_std: added memmove + jnc_api: added jnc_Variant_isNull - jnc_rt: critical bugfix: GcHeap::stopTheWorld_l released the lock without changing state to something other than State_Idle, which effectively enabled threads running GcHeap::collect_l concurrently. the bug introduced when adding 'abort' functionality in the prev release. * jnc_io_base: use the newly added method axl::io::MappedFile::getFile () + jnc_ct: added jnc_TypeKindFlag_ErrorCode to jnc_TypeKind_Enum + jnc_io_usb: added io.UsbEndpointEvent.WriteCompleted ................................................................................ version 3.9.1-a (2018-09-07) Service release Main application changelog: * nj_app: only use QPlainTextEdit::setPlaceholderText on QT >= 5.3; we use QT 5.0.2 on Linux as to increase the chances of the IO Ninja binary running on various Linux distros * nj_app: only apply packet template if packet templates are really used (otherwise, packet parse delay-finishes, and then we have min size limits even if packet template is off) - cmake: fix: added JANCY_JNCX_DIR to the import list when generating the API documentation Scripts changelog: - usb: removed the unused function getLineString () * hw-serial-mon: moved getLineString to HwSerialMonLog.jnc + i2c-sniffer: initial commit (for internal testing) Jancy changelog: - jnc_ct: fix: decodeBinString should ignore \r and \n -- otherwise, multi-line binary literals don't work + cmake: added JANCY_JNCX_DIR to jancy_config.cmake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . version 3.9.1 (2018-09-05) Major improvements: + Script transmit pane * Packet templates are now processed in the ioninja-server process + Added support for Modbus ASCII, Modbus TCP Main application changelog: * nj_app: remove min size limit when turning packet templates off with a tx pane + nj_app: use icons for use-packet-template/edit-packet-template buttons + nj_app: highlight the error line in script editor + nj_app: use default.jnc scripts whenever packet template or tx script is empty + nj_app: added placeholder text in file-transmit and text-tranmit pages + nj_app: added images: form, edit (used in packet template tx pane) + nj_app: added support for alternate radix in binary literals (0x, 0d, 0b, 0o) + nj_app: added class ScriptEdit to serve as a Jancy editor for packet templates and script tx + nj_etx: added timetout to ScriptTransmitSrvPeer::abort (so we can just request abort without waiting) * nj_srv: abort tx script when tx gets disabled + nj_etx: added ScriptTransmitAppMsgCode_OnRunAborted to distinguish between user-induced abort and a legit Jancy exception * package: link msi actions to CRT statically (as to avoid the yet-not-installed msvcr/msvcp deps which might be missing on older Цindows) - nj_app: removed packet min size setting, properly update packet templates stuff (setting-page vs transmit-widget) + nj_etx: added two modes to PacketTemplateMgr (so setting page changes can be undone) - nj_srv: fix: keep DirectSource until module is compiled (otherwise, we gonna have dangling source pointers) + nj_srv: added idle event to script transmit srv peer (so we can wait until thread is done) * axl_sys_win: when calling FormatMessageW, try LANG_ENGLISH, SUBLANG_ENGLISH_US first; if failed, fall back to LANG_NEUTRAL, SUBLANG_NEUTRAL Scripts changelog: + ssh: added ssh-exec property (to specify the remote process to exec) + tdevmon: added KB links to the representation of capture error records * packets: updated the default packet template script - network-sniffer: removed the now defunct pcap write buffer stuff * tx: updated the default tx script and the arp who-is sample + api: added tx.jnc with a prototype for the transmit () function * tibbo-modbus: updated re the latest modbus code changes + modbus: major update: added support for Modbus-ASCII, Modbus-TCP + common: added hexEncoding.jnc + api: added methods: log.Writer.writeString, writeError, writeLastError * network-sniffer: renamed folder to NetworkSniffer + cypress-uploader: added FPGA status check retries Jancy changelog: + jnc_io_ssh: added advanced method SshChannel.connect which accepts SshConnectParams struct with extra options + jnc_std: added operators == and != for std.Guid - jnc_io_pcap: removed the now unused property io.Pcap.m_writeBufferSize and io.PcapEvents.WriteBufferReady + jnc_io_pcap: implemented io.Pcap.write (was not functional) + jnc_ct: added support for non-space separators in binary literals (useful when defining IPs, MACs, etc) + jnc_api: added jnc_Runtime_isAborted * changed int -> bool_t wherever int is used as bool + jnc_rt: added GcHeap::isAborted and Runtime::isAborted - jnc_rt: APC prototype fix (caused compiler error on 32-bit windows) + jnc_rt: use SIGUSR1 to try and wake up waiting threads in GcHeap::abort - jnc_rt: fix: GcMutatorThread::m_waitRegionLevel should be volatile - jnc_io_base: properly handle read-only & write-only file-streams on POSIX - jnc_rt: fixed missing type specifier in GcHeap::resumeTheWorld + jnc_rt:jnc_api: added jnc_Runtime_abort () * jnc_sys: make sys.sleep alertable on windows - jnc_ct: fix: don't set the newly created unit as the current unit (leads to problems when nest-parsing stdlib entities) * axl_io: io::Pcap::write should distinguish between retvals from pcap_inject (returns actual size on success) and pcap_sendpacket (returns 0 on success) ................................................................................ version 3.9.0 (2018-08-08) New major features: * Major logging engine update (now it's more responsive under high-load and with huge multi-gigabyte logs due to the fully parallel processing of indexing, representing, converting, searching, etc) + New plugins: + USB Control Endpoint (allows low-level communication with USB control endpoint #0) + TX Modifier (provides packet prefix/suffix, re-transmission, inter-character delays) + TX/RX Filter (allows switching TX/RX streams ON or OFF) + Serial baud rate combo-boxes are now editable (allows for arbitrary baud rate specification) + Hung server process detection and termination (now problems with the ioninja-server process should not affect the main GUI process) + Unicode temp paths are supported on Windows (previously, having a non-ASCII characters in TEMP would have resulted in the error: 'A device attached to the system is not functioning.') Main application changelog: * nj_app: improved handling of server crashes/hang-ups * nj_app: nagdlg layout update (didn't look too good on gnome) + nj_app: allow zero-length transmits (required by USB control transfers) - nj_gui: fix: ComboBox should set items value when it switches to editable mode - nj_app: fix: check for find-next/find-prev button state (in case invoked by shortcut) + conf: added TxModifier + nj_gui: allow adding child items to any property/information-item, not just groups (QTPB allows that) + nj_doc: added doc.Layer.m_isTransmitEnabled bindable const property - now layers may be notified when lower sessions enable/disable transmission + nj_app:nj_srv: added keep-alives (5 second timeout) - nj_srv: fix: restored registration of usb error provider - nj_app: fix: unmap index file on clear/rebuild * conf: re-factored plugin groups: now it's serial, network, file-systems, usb + nj_gui: added gui.ComboProperty.selectOption * nj_gui: made ComboBox.m_currentData read-write + nj_gui: added a separate binding for ComboBox.m_currentIndex * nj_app: rename default plugin groups ("other" for sessions, "generic" for layers) + nj_gui: added support for item values to gui.ComboProperty (EnumOption.m_value is used as actual value) - nj_gui: removed gui.ComboBox.m_isDualText property -- now every editable combo box behaves like this (item text - description, item data - value) - nj_app: fix: merge kind combo did not enable/disable merge threshold spinbox + nj_gui, nj_app: added new gui class: gui.ComboProperty + nj_srv: added self-pipe trick on POSIX. Apparently, closing STDIN does not terminate the ongoing 'read' (at least, not on Linux) + nj_app: added FileFlag_DeleteOnClose to plugin-settings and log-settings files - njs_app: fixed find-incremental/find-next/find-prev logic + nj_app, nj_srv: implemented clear-log/rebuild-log + nj_srv: use stdin to monitor state of the parent process + nj_app: use QShortcut for F3/Shift+F3 in the Find Dialog this way, there is no forced delay in between activations of the shortcut + nj_app, nj_srv: use the newly added io::FileFlag_Unlink, io::AutoDeleteFile, io::psx::AutoUnlinkSharedMemory * nj_app, nj_srv: use mapping name instead of file name for index lock Scripts changelog: * usb: split the usb endpoint plugin into two: usb data endpoint and usb plugin endpoint (completely different ui and io code) + common: added parseInteger.jnc * tx-modifier: removed groups (made use of the newly added ability to add children to any property) + tx-rx-filter: added setting persistency * serial: added SerialLogRecordCode.ControlLineChanged -- now control line changes can be encoded symmetrically with status line changes. - serial: removed inter-char delays -- now this funcionality is available via the TX Modifier layer + tx-modifier: initial commit of TX Modifier layer + common: added new file: escapeEncoding.jnc + tx-rx-filter: initial commit of TX/RX filter layer - wizards: fix: invalid signature for log.Filter.filter () + api.gui: allow adding child items to any property/information-item, not just groups (qtpb allows that) + api.doc: added doc.Layer.m_isTransmitEnabled * conf: updated plugin grouping - serial-mon: fix: don't update port name while capturing - hw-serial-mon: fixed path to UsbLog.jnc * serial: all the serial plugins are finalized (use common ui, allow editing baud-rate, updated re api change in io.Serial.setupDevice) - common: bugfix: io.SerialSettingUi should check for presence of properties before accessing them - serial-tap: fixed serial setting configuration (was broken after moving the code to SerialSettingUi) * serial: don't try to set baud rate if it's the same * serial, serial-tap, ez-tap-pro, generic-serial-tap: extracted common setting code and shared it via io_SerialUi.jnc * all: redesign plugin grouping (now it's serial/network/file-systems/usb) + gui: gui.ComboBox.m_currentIndex now has a separate non-shared binding + added gui.ComboProperty.selectOption + added a convenient overload for gui.Toolbar.addComboBox * samples: removed hw-serial-mon and spi-tap from plugin folder and added those as samples + serial: make baud-rate editable (initial commit) - gui: removed m_isDualItemText * serial: use the newly added gui.ComboProperty for port name and baud rate + api: added new class: gui.ComboProperty * regex: log thread is no more; use suspend/resume instead - std: minor locking fix - ssh: fix: import "io_File.jnc" was missing - xmodem: fix: io.File.m_size is now read-only; use setSize instead - serial, udp: fixed signature for: log.Filter.filter Ninja Scroll engine changelog: - njs_log: fix: conversion mgr was unfunctional (never tested) - njs_log: a few int64/int32 fixes (relevant for 32-bit platforms) - njs_log: fix: invalid offset for save-log-as-text + njs_log: make bom configurable + njs_log: added support for bin-text lines in save-log-as-text - njs_log: typo fix: invalid caret pos returned by CachePage::getCaretPosFromLogPos - njs_log: fix: unbalanced lock calls on hidden records - njs_log: fix: don’t use setMouseCapture/releaseMouseCapture - njs_log: fix: bool function returning NULL - njs_log: fix: index file accessors MUST HAVE multiple dynamic views (otherwise walking the tree could cause page faults) * njs_log: set cursor to the *end* of selection upon successful find (more traditional approach) * njs_log: update "is-incremental-find" logic -- accept size decrement also (as long it's not empty) - njs_log: fixed wrapping in range processors + njs_log: added IndexFile::getZoneCount * njs_log: changed LogPos to only contain absolute zone-idx and zone-offset * njs_log: validate caret pos and redraw widget on log-clear - njs_log: fix: false-positive cache-miss in LogWidgeT::paintLineRange - njs_log: fix: suspension logic in RangeProcessor/ConversionMgr * njs_log: minor optimization of redrawing in CacheMgr::onRepresentPageCompleted * njs_log: use the newly added io::FileFlag_Unlink (dropped the old ifdef-ed code) - njs_log: critical fix: in CacheMgr::onRepresentPageCompleted it's NOT OK to touch 'page' pointer after scrolling or redrawing line ranges -- it might unload the page due to the cache size limit * njs_log: moved OnFoldRecordCompleted notification to IndexMgr - njs_log: fix: IndexMgr updated a leaf using m_recordIdx instead of m_recordCount - njs_log: fix: ConversionMgr has unbalanced suspend/resume inside stop () * njs_log: create a dedicated cleanup thread in RangeProcessorMgr - njs_log: fix: cache one extra record per page if the leaf is merged forward + njs_log*: the first working prototype of the new design QT Property Browser changelog: - qtpb: fix: invalid signal/slot names in QtComboEditorFactory::disconnectPropertyManager - qtpb: fix: clang failed to compile a double-right chevron in a template use * qtpb: check for unchanged value in QtComboEditorFactoryPrivate::slotPropertyChanged * qtpb: QtComboProperty now can use item data as actual text values (e.g. item text - device description, item data - device name) - qtpb: minor fixes in the newly added QtComboProperty... classes + qtpb: added QtComboProperty/QtComboPropertyManager/QtComboEditorFactory Jancy changelog: - jnc_io_usb: fix: UsbDevice::close should nullify m_asyncControlEndpoint - jnc_io_usb: fix: typo in UsbAsyncControlEndpoint::UsbAsyncControlEndpoint * jnc_io_usb: renamed requestId -> requestCode (for consistency) + jnc_io_usb: added support for asynchronous control transfers (initial commit, work-in-progress) + jnc_std: added std.Array.detach () / std.Buffer.detach () - app: fixed main() error code on cmd-line parse error - cmake: changed language of jnc_dll to CXX (otherwise, -static-libstdc++ doesn't apply, which results in libstdc++.so dependency) * jnc_io_base: changed the order of values in io.Serial.setupDevice and added default values ................................................................................ version 3.8.7 (2018-06-05) introduces: Tibbo Serial Tap plugin, shared library jancy-1.8 Main application changelog: - nj_app: fix: check whether a layer has already been added (disallow adding duplicate layers) + inf: added .inf files and a script for .cat file generation and signing * sh: 7z archives are built using cpack instead of bat files + conf: added serial and spi tap plugins to plugins.conf * cmake: redesign packaging on Mac OSX - nj_app: removed explicit qt library path modification (better use qt.conf) * drivers: updated driver package to include the winusb co-installer (so it works on machine with no winusb) * cpack: use top-level-directory with archive generators + conf: added new filter wizard to wizards.conf - njs_srv: don't link to libusb and register usb error provider anymore since we've changed to dynamic linking to jancy.dll, it must be done there + nj_log: report Rx parts of TxRx to the app (so terminal can be used with dual-hex-view) + nj_log: fix: Log.suspend and Log.resume were not mapped + nj_log: added support for retro-colorization flags (aux flag for specifying the part of dual-hex-view) * nj_app, nj_srv: update conf dir detection (include ../etc/ioninja) - don't display crash-report-dlg if crash dir is empty + cpack: packaging for TXZ, DEB, RPM implemented * package: wix packaged updated to auto-install winusb drivers using dpinst.exe * inf: renamed dirs: inf -> drivers (more windows-traditional, even though there are no actual drivers) + nj_app, nj_srv: setup error router + register parse error provider; previously, we only linked jancy libs statically, so it wasn't necessary Scripts changelog: + regex-colorizer: added support for dual-hex view (e.g. SPI Tap) + common: throughput calc now processes log.StrRecordCode.TxRx + api: added RetroColorizeFlags.Aux (to specify which part to apply colorization to) - serial-tap: check for non-null mask before reporting status-line changes * serial-tap, spi-tap: removed usb.ids files and instead hardcode device ids into the script (not going to add more ids anyway) + spi-tap: initial commit - ez-tap-pro: fix: use m_highSpeed for anything above 115200 bps Ninja Scroll engine changelog: + njs_log: improved support for dual-hex-view: misc copy modes implemented, retro-colorization now has a aux-flag (to specify the which part to apply colorization to) - cmake: minor fix: using QT modules should happen BEFORE axl_set_pch - njs_log: fixed uint64_t <-> size_t warnings on x86 Jancy changelog: * cmake: build with install rpath - jnc_api, jnc_dll: (temp solution) link to libusb and register usb error provider - jnc_rtl: fix: jnc.RegexDfa unconditionally set m_isIncremental in jnc.RegexState (probably, a brainfart) - jnc_rtl: fix: jnc.RegeDfa finalize did not update group counts in accept contexts - jnc_rt: fix: prevent longjmp unwinding on win64 + jnc_app: setup error forwarding and register parse error provider - jnc_ext: removed propagateLastError (now irrelevant); setup error forwarding in *.jncx + jnc_api: implemented jnc_setErrorRouter * jnc_api: moved jnc_DynamicExtensionLibHost.h to the 'include' folder + jnc_api: added explicit definition of jnc_Error (maps to axl::err::ErrorHdr) * cpack: inverted the os-version order in the file name of a package (must be version-first) * cmake: workaround for SOVERSION on windows (jnc_dll) + added VERSION/SOVERSION properties to jnc_dll * cmake: renamed jnc_api_static -> jnc_core and jnc_api_dynamic -> jnc_api_ext * changed JNCX dir from JANCY_BIN_DIR to JANCY_DLL_DIR (not the same on unix) * cmake: link all the executables to the jancy dll (if it's being built) + jnc_ext: added object libraries for jnc_rtl, jnc_std, jnc_sys + jnc_api: export api functions when building cmake object library + jnc_dll: build dynamic library jancy-x.x.dll - jnc_api: fixed a few missing JNC_EXTERN_C declarations AXL changelog: * axl_sys: updates in sys::ReadWriteLock re named sems on posix + axl_err: added support for error forwarding * cpack: inverted the os-version order in the file name of a package (must be version-first) - cmake: removed rpath direct modification via linker options (should be done via CMAKE_INSTALL_RPATH in actual projects) * cmake: switch to dynamic link (/MD /MDd) by default - axl_sl: minor fix: sl::BoxIterator::r () -- better reference m_value directly (rather than as: *p()) ................................................................................ version 3.8.6 (2018-04-26) introduces: new EZ-Tap Pro plugin Main application changelog: * nj_gui: added property: gui.InformationValue.m_valueColor * nj_gui: added property: gui.ComboBox.m_isDualItemText this allows having an editable combo box with descriptive items in the drop-down (e.g. editable port names, device descriptions in the drop-down) * nj_app: emit cursor-pos changes and index-file changes once a second this changes renders the timer in InformationWidget irrelevant Scripts changelog: + plugins: added new plugin: EZ-Tap Pro (initial commit) + generic-serial-tap: new command: flip DTE/DCE + tibbo-serial-tap: new command: flip DTE/DCE - serial: fix: removed trailing \n from the port-opened log message * plugins: updated HwSerialMon for Cypress EZ-USB FX3 -- we are ditching FT601x (good riddance) + plugins: use the new prop gui.ComboBox.m_isDualItemText in serial and serial mon plugins - plugins: removed DCD line info + plugins: added new plugin: Tibbo Serial Tap Cable * plugins: renames: SerialTapCable -> GenericSerialTapCable, ModbusGatewayMon ->TibboModbusGatewayMon + api: added properties: gui.ComboBox.m_isDualItemText, gui.InformationValue.m_valueColor - udp: fix: apply socket and buffer properties to the socket + common: added new socket property: udp broadcast * common: renamed"local/remote TCP port" -> "local/remote port" -- these are used for UDP, as well * moved all scripts to a dedicated repo; public mirror at: https://github.com/vovkos/ioninja-scripts Jancy changelog: + jnc_io_usb: added support for control transfers (io.Device.controlTransfer) - jnc_io_usb: fix: invalid location for clearing active events (lock was released after that) -- may have caused events to be never noticed - jnc_io: fix: apply SocketOption_UdpBroadcast and enforce AsyncIoOption_KeepReadBlockSize | AsyncIoOption_KeepWriteBlockSize for datagram sockets in SocketBase::setOptions QT Property Browser changelog: + qtpb: added support for value color (QtProperty::valueColor/setValueColor) AXL changelog: + axl_sl, axl_ref, axl_err: use rvalue refs in all ref-count-buffer-based classes + axl_g: added simple detection of rvalue-ref support in C++ compiler * axl_ref: moved ref::RefCount functions to .h; replaced size_t -> int32_t and removed bitfields -- for a minor performance improvement * axl_sys: use intrinsics for interlocked ops on windows + axl_sl: added branchless algo from hacker's delight for hi-bit/lo-bit + axl_io: added support for async control transfers -- for completeness ................................................................................ version 3.8.5 (2018-04-09) introduces: server-side log processors in the Ninja Scroll enging, dramatic performance increase in find-in-log and save-log-as-text for large (multi-GB) logs, new information pane, throughput calculator, checksum calculator, new Tibbo Modbus Gateway Monitor plugin. Main application changelog: + nj_app: added calc-progress-bar in information widget (unified with rebuild-progress-bar) also, added nice thousand-separated formatting for large integers - nj_srv: fix: cancel all active range processors during shut down (definitely before shutting down plugin runtimes) * nj_app: alleviated evaluation restrictions on Crash Report dialog (can skip sending, aka "not now") * nj_app: don't update information widget unless it's visible + nj_app: added a new erasor icon * nj_srv: add udev dependency (needed when linking to libusb statically) - nj_app: fix: save transmit pane during session switching - nj_gui: fix: all information values should be read-only - nj_log: remove RangeProcessor::startRecord; instead, set timestamps and record codes in RangeProcesor::processXxx. this allows for more precise timestamp-based calculations + nj_gui: added property: gui.EnumProperty.m_currentText * nj_app: reduce flickering in the information widget by delaying the disable of selection-dependent items don't show "updating..." until the next update cycle -- chances are, range processor will finish before then + nj_app: added command: select all + nj_app, nj_srv: added support for selection processors + nj_app: added information pane * nj_gui: updated StringPropertyAppPeer for the new qtpropertybrowser + nj_app: added 'delete all' button to crash report dialog + nj_app: new save-log-as-text using range processors (rather than cache processors) * nj_app: minor ui fixes in find dlg + nj_app: replaced cache find (client-side) with range find (server-side) + nj_app, nj_srv: added SrvMsgCode_ProcessHyperlink Scripts changelog: - scripts: removed Hardware Serial Monitor (to reduce confusion) * scripts: renamed files: ModBus -> Modbus + scripts: added Tibbo Modbus Gateway Monitor plugin * scripts: usb endpoint should use max-packet-size as read-block-size this way, the responsiveness is better (this plugin is a usb endpoint terminal, after all) - scripts: fix: properties of io.UsbEndpoint were not updated properly + scripts: added momentary tx/rx throughput calc * scripts: use thousand-separated format for all sizes + scripts: sniffer: added ARP/INARP support to the Network Sniffer plugin + scripts: file stream: added message: "file cleared" * scripts: file stream: read all the buffered data on eof + scripts: added standard information values to all the plugins * scripts: refactor: trhoughput calculator, checksum calculator, std session info + scripts: added simple checksums (sum8, sum16-le, sum16-be) + scripts: added session timer * scripts: re-factored/updated checksum information set + scripts: added utility function for ip4 checksum incremental calculation - scripts: fixed name: should be crc16_ccitt, not "ccit" - scripts: io.Pcap.m_snapshotSize is read-only (remnants from the previous version of jancy) - scripts: fix: a bug in modbus exception processing + scripts: added crc32.jnc + scripts: selection processors & related infos are extracted into common files Ninja Scroll engine changelog: - njs_log: critical bugfix: mini-index file was not cleared on reset + njs_log: added sync method Server::cancelAllRangeProcessors - njs_log: typo fix: if the end page is not cached, range process must be postponed; but it was added to the start page, not the end page as it should - njs_log: fix: incorrect calculation of njs::LogPos on merged page borders (the last line of a merged page contanis records from two leaves) * njs_wdg: keep selection on tab keypress - njs_log: fix: new zone should only processed when we are in range - njs_log: fix: LogWidget::isBinSelection () was incorrect (just used the cursor position) + njs_log: added LogWidget::selectAll () method * njs_log: only call onCursorPosChanged when the pos actually changes - njs_wdg: fix: copy from terminal stopped upon the very first empty line + njs_log: added field: RangeProcessor.m_zoneOffset * njs_log: rename RangeProcessor::processDualBinHex -> processDualBin + njs_log: added StdRangeProcessorId_Last constant + njs_log: added NotifyCode_IndexFileChanged changed logic in getLogPos (need to handle selection start differently) + njs_log: export informational functions from IndexFile/CacheMgr + njs_log: added save bin as file & save log as text range processors - njs_log: fix offset issue in TextFindRangeProcessor set caret to the beginning of selection -- otherwise, using keyboard after find produces unexpected log jumps - njs_log: fix: RangeFind should use 0 as an indicator for invalid processId, not -1 * njs_log: refactor UI update limitation code + njs_wdg: add a flag CursorFlag_KeepSelection to keep selection when setting caret - njs_log: fix: adjust record count in mini-index leaves * njs_wdg: LineWidget::getSelection should return caret pos if actual selection is empty - njs_log: fix: when wrapping, also update leaf zone idx and zone offset -- otherwise, isFinished may return false-positive * njs_log: check for failed processRange (processId == 0) + njs_log: added RangeFind::getProcessId accessor + njs_log: populate mini index file in log server - njs_log: fix: incorrect calculation of m_zoneOffset in CountingRepresenterTarget * njs_log: zone indexing re-design + njs_log: TextFindRangeProcessor/BinaryFindRangeProcessor prototypes are functional + njs_log: added server-side RangeProcessor-s Jancy changelog: + jnc_io_usb: support out-of-order completion of usb transfers - jnc_io: removed incorrect assert (!m_readBuffer.isFull ()) in AsyncIoDevice::bufferedReadImpl_l + jnc_io_usb: added property UsbEndpoint::m_readTimeout - jnc_io_usb: fix: incorrect context for USB transfers - jnc_io_usb: fix: Endpoint::m_isOpen was not properly initialized - jnc_io_usb: fix: usb transfer was not properly allocated prior to fill & submit - jnc_ct: fix: bigendian enums were not handled properly + cmake: add crypto & udev dependencies (needed during static link to libusb & libssh2) - cmake: don't use axl_set_export_version_scrtipt on mac, where the --version-script option is not supported * jnc_io: advance disk file position on windows (overlapped IO requires explicit offsets) + jnc_sys: added sys.formatTimestamp () functions - jnc_ext: fixes re the latest change in axl::sl::HandleTable - jnc_ct: fix: data/class ptr type tuple had incorrect handling of readonly pointers - jnc_io: fix: process 0-lengthed return in FileStream as EOF indicator - jnc_io: minor fix: incorrect logic in AsyncIoDevice::setEvents_l - jnc_io: fix: AsyncIoDevice::m_readOverflowBuffer was not cleared on open; this could leave to inconsisten buffer state when a device is closed during intense IO and then re-opened - jnc_std: remove readonly modifier from fields of struct std.Error - jnc_io: critical bugfix: lock inside markOpaqueGcRoots - jnc_ext: fixes re the latest change in axl::sl::HandleTable - jnc_ct: fix: data/class ptr type tuple had incorrect handling of readonly pointers - jnc_io_base: fix: interpret 0-lengthed serial read on POSIX as EPIPE (broken pipe) - jnc_ext: fixes re the latest change in axl::sl::HandleTable - jnc_ct: fix: data/class ptr type tuple had incorrect handling of readonly pointers QT Property Browser changelog: + qtpb: added QtProperty::valueToolTip and disabledValueText properties - qtpb: fixed displayMode (must be part of StringPropertyManager) + qtpb: added StringPropertyManager::isReadOnly/setReadOnly property + qtpb: added QtTreePropertyBrowser::resizeNameColumnToContents method AXL changelog: - axl_cmake: removed GCC_LINK_FLAG_EXPORTLESS_EXE on mac -- ld here doesn't support --version-script + axl_gui: added QT_NO_VERSION_TAGGING * axl_gui: don't check if caret was visible before, force caret update - axl_enc: fix: UTF-8 -> UTF-32 -> UTF-8 should yield the same length - axl_sl: critical bug fix: TextBoyerMooreFind::find should use length, not size - axl_sl: fix: reverse boyer moore accessor save tail incorrectly * axl_sl: minor update in sl::String: s2 & s3 should return sl::String, not sl::StringRef + axl_gui: added convenient constructors to class HyperText - axl_sl: gcc-related fixes in sl::HandleTable * axl_sl: refactor: sl::HandleTable is now uniform with the other maps ................................................................................ version 3.8.4-a (2018-02-29) * axl_cmake: gcc: export NOTHING from executables and JUST the specified symbols -- from shared libs to improve portability across various Linux distros * jnc_ct: typo fix: ExtensionLibMgr reported a wrong error if dynamic extension could not be loaded ................................................................................ version 3.8.4 (2018-01-26) introduces: new Serial Tap Cable plugin, new streaming mode in Tibbo Device Monitor, all Tibbo Device Monitor-based plugins use generic class io.DeviceMonitor and do IOCTL decoding in Jancy scripts, detection of buggy serial drivers on Windows with fall-back to conservative settings, a few critical bug fixes in the Ninja Scroll logging engine. Main application changelog: + nj_app: add a break between main and session toolbars (this way they initially are displayed on two separate lines, rather than being next to each other on a single line) - nj_srv: fix: relative timestamps (compile times) should use time-zone #0 + nj_log: added log.StdRecordCode.Alert (as a more severe warning on pastel orange background) * nj_app: set GC guard page as the default everywhere; previously, the default for windows x64 was gc-simple-call - nj_app: workaround: avoid calling QIcon::availableSizes () currently, we use static linking to CRT, it means QT dlls use a different memory allocator than the main EXE module; returning templated classes (QList in this particular case) under these conditions is not safe * cmake: added libusb as optional dependency * package: removed nj_io_mon.jncx from all the packages (io_devmon.jncx will be pacakges with all the other jancy extensions) Scripts changelog: - scripts: restore defaults button should not reset port name(s) - scripts: use 'try' in 'gui.ComboBox.m_onEnter' handlers so that a possible exception is not added to the log. * scripts: minor update to the serial log port open message (for consistency) * scripts: make RxBufferFull message optional (and OFF by default) * scripts: rename: ReceiveBufferFull -> ReadBufferFull, TransmitBufferReady -> WriteBufferReady + scripts: new plugin: serial tap cable session * scripts: minor re-factoring in Serial plugin (adjustSerialSettingsForBuggyDrivers -> detectSerialBuggyDriver + setConservativeSerialSettings) this way, it's more convenient to apply to a dual-serial port sessions such as Serial Tap-Cable - scripts: typo fix in Mailslot session: m_syncId is now a member of MailslotSession, not io.Mailslot - scripts: removed ring status line change detection (it's not shown in log/status-bar anyway) + scripts: SerialMon for Linux: implemented termios IOCTL parsing * scripts: renamed io.SerialFlowControl.XOnXOff -> io.SerialFlowControl.XonXoff (for consistency) + scripts: added workaround for buggy drivers such as the one from Prolific * scripts: rename: log.StdRecordCode.RxBufferFulllLossless -> log.StdRecordCode.RxBuffeFull * scripts: moved SerialReadMode to SerialLog.jnc (otherwise, serial monitor fails to compile) + scripts: added overridable method: io.Monitor.processError normally, we also want to close the active connection whenever an error occurs; it has to be done from within the main session class * scripts: changed the order of PID/file ID in monitor sessions + scripts: serial: added more info to port-open log record; merged two props (wait-first-char & check-comstat) into one (read-mode); write read-mode and read-interval changes to the log * scripts: serial: use io.Serial.setupDevice for applying all the settings at once and avoiding multiple SetCommState/tcsetattr calls + scripts: serial: added DTR/RTS properties so it's possible to fully control the serial port from the setting property page * scripts: serial: disable RTS button/property when RTS/CTS is on. * scripts: ported all the remaining plugins to the new Jancy IO model + scripts: create a dedicated class io.Monitor -- it reads from tdevmon in stream mode, accumulates notification package andthen calls the overridable handler Ninja Scroll engine changelog: - njs_log: criticial fix: don't update CachePage::m_indexLeaf inside updateIndexTailLeaf unless we have successfully applied the part buffer (could cause occasional and hard-to-catch crashes) - njs_log: there is no need to check page for null (getPageByIndexLeaf always returns a non-null page ptr) * njs_log: make updateTailLeaf return IndexLeaf* and also assert on growing record count/size - njs_log: critical bugfix: don't unconditionally nullify the current line during fold + njs_log: added overload ServerPeer::writeRecord (const char*) Device Monitor changelog: - dm_app: fix: properly configure monitor on linux (including the final enable call) + dm_app: added the file name wildcard cmd-line switch on linux - dm_win_lib: fix: reading blobs was inefficient (was starting with 0 bytes -- have to start with something reasonable, e.g. 256) - dm_app: fix: monitor was not initially enabled (it was working due to a bug in the driver -- enable counter was ignored) * dm_app: minor update in output format for file name wildcard * dm_app: updates re the latest kernel-module api changes - dm_win_sys_core: critical bugfix: removed the leftover KeAcquireSpinLock inside loop in Connection_p_notifyMessage_l + all-drivers: added a debug suffix to all description strings - dm_win_sys_core: fix: partial notifications had incorrect PendingNotify.m_size field; this resulted in garbaged stream and likely an invalid-signature error * dm_win_sys_core: major update: re-write cancellation race protection and prevent notification order races + dm_win: added a dedicated code dm_NotifyCode_DataDropped for data dropped notifications * dm_win_sys_core: removed const modifier from MemBlock* paramBlockArray this is necessary for copyScatterGatherPartial (in streaming mode) + dm_win_sys_cmn: added copyScatterGatherPartial for copying scatter-gather into multiple buffers - dm_win_sys_core: fix: check for m_enableCount before notification - dm_win_sys: bugfix: DM_IOCTL_SET_FILE_NAME_FILTER should check in buffer size, not out buffer size * dm_win_sys: style: use upper-case for types (DDK/WDK-style) - dm_win_sys_core: fixed warning re UINT -> USHORT conversion + whdc: added test-sign script for testing the drivers under win10 + dm_win_sys: dm_win_lib: added streaming mode (message mode is still available as an option) * dm_win_sys: changed API a bit -- now pending notify limit and file name filter could be set after connection to a device is established (so it's possible to adjust it on-the-fly) - dm_lnx_lkm: removed redundant trailing '...' from printk's * dm_lnx_lkm: switched the order of fields in dm_IoctlDesc (to make it more convenient to use curly initializers) the old API (via Connect_v0302xx) is still available -- the order of fields is adjusted dynamically + dm_lnx_lkm: added debug printk's on setting the IOCTL desc table + dm_lnx_lkm: added support for FIONREAD + dm_lnx_lkm: ported the new streaming notification model (with partial scatter-gather and postponed read completion) to LKM + dm_lnx_lkm: added dm_NotifyCode_DataDropped + dm_lnx_lkm: added function: copyScatterGatherPartial - dm_lnx_lkm: fix: IOCTL argument should not be size_t; use uint32_t instead + dm_lnx_lkm: streaming mode (message mode is still available as an option) + dm_lnx_lkm: added a bunch of IOCTL codes for post-connect configuration + dm_lnx_lkm: added support for file-name filtering (so it's possible to hook a driver and then receive notifications for all the device it's serving) Jancy changelog: - jnc_io_base: fix: in io::FileStream::open PIPE_READMODE_MESSAGE is only applicable to named pipes (when GetFileType returns FILE_TYPE_PIPE) - jnc_io_base: bugfix: length of \\.\pipe\ and \\.\mailslot\ prefixes was calculated incorrectly - jnc_io_base: bugfix: don't read in io.FileStream if it was opened with io.FileFlags.WriteOnly + jnc_io_base: ensure \\.\pipe\ prefix in io.NamedPipe.open - jnc_io_xxx: critical bugfix: all the newly ported IO classes had null markOpaqueGcRoots (instead, should call AsyncIoDevice::markOpaqueGcRoots) + jnc_ct: added utf8_t, utf16_t, utf32_t to jnc_StdTypedefs.jnc (for stdlib doc generation) - cmake: fix: -D_JNC_DYNAMIC_EXTENSION_LIB must be added prior to axl_set_pch * jnc_io_xxx: rename: ReceiveBufferFull -> ReadBufferFull, TransmitBufferReady -> WriteBufferReady - jnc_ct: critical bugfix: octal constant tokens were converted to numbers using the decimal radix - jnc_io_devmon: don't check getIncomingDataSize (not really necessary) - jnc_io_base: don't check getIncomingDataSize (not really necessary) * jnc_ct: when searching in namespaces, don't go to parent namespaces of base types * jnc_io_base: rename XOnXOff -> XonXoff (for consistency) - jnc_ct: fix: use module global symbol map (m_functionMap) for maping global variables on llvm versions < 4.0.0 * jnc_ct: use '?' prefix for global variables (just like we do for functions) * jnc_ct: changed the implementation of Module::mapVariable - jnc_io_devmon: POSIX fix: m_ioThreadEvent.wait () -> sleepIoThread () - jnc_sys: typo fix: incorrect flag assignments in sys.SystemInfo * jnc_sys: fix: OsFlag's had wrong values - jnc_io_usb: POSIX compilation fix: include "axl_io_psx_Pipe.h" was missing - jnc_io_pcap: POSIX compilation fix: m_ioThreadEvent.wait () -> sleepIoThread () - jnc_io_base: POSIX compilation fix: createIncomingConnection () -> m_incomingConnectionPool.get () + jnc_std: added functions: strncmp, strnicmp, strneq, strnieq, strichr, stristr + jnc_io_base: added function: io.getSymbolicLinkTarget - jnc_io_base, jnc_io_usb, jnc_io_pcap: removed unnecessary declarations of the now-missing event params - jnc_io_base: fix: removed the now-missing Mailslot.m_syncId field - jnc_io_devmon: fix: m_overlappedIo was not allocated/freed + jnc_std: added property: std.StringBuilder.m_sz (which is always non-null and zero-terminated) + jnc_io_base: added method: io.File.flush () + jnc_io_base: added io.Serial.setupDevice for setting all the setting with one call * jnc_io_base: replace ^ with != (reads cleaner) * jnc_sys: changed sys.g_systemInfo to a variable (instead of a property) and map it directly + jnc_ct: added a pragma-todo-warning re retval coercion on MSC 32-bit + jnc_api, jnc_ct: added support for mapping global variables - jnc_io_usb: fixed warning re singed-unsigned-comparison + jnc_api: added NOMINMAX definition under windows * jnc_io_ssh: use AsyncIoDevice::setSetting for changing read block size * jnc_io_usb: ported io.UsbEndpoint to the new IO architecture * jnc_io_pcap: ported io.Pcap to the new IO architecture * jnc_io_base: ported io.NamedPipe, io.Mailslot, io.FileStream to the new IO architecture * jnc_io_base: io.SocketAddressResolver now uses completion routine arg rather than event field * jnc_io_devmon: moved all overlapped-related fields in io::DeviceMonitor to struct OverlappedIo * jnc_io_base: moved all overlapped-related fields in io::Socket & io::Serial to struct OverlappedIo * jnc_io_cmn: removed overlapped read list & overlapped write block from the base class AsyncIoDevice + jnc_io: added tdemon-based device monitoring extensions library io_devmon.jncx - jnc_rt: bugfix: class field boxes of base types were not added during allocation + jnc_std: added standard error guids: errno, winerror, ntstatus + jnc_std: added overloads in std.StringBuilder for dealing with UTF-16 & UTF-32 - jnc_io: bugfix: AsyncIoEvent_ReceiveBufferFull was not cleared in AsyncIoDevice::bufferedRead - jnc_ct: fix: choosing overloads could end prematurely (incorrectly reporting ambiguous call) - jnc_ct: fix: when up-casting class pointers, don't check safe pointers for null + jnc_ct: added standard typedefs: utf8_t, utf16_t, utf32_t * jnc_api: move warning suppressions to a dedicated file (no pragma once) + doc: added --ignore-import io_base.jncx cmdline switch in stdlib documentation + jnc_app: added a command line option for adding ignored imports + jnc_ct, jnc_api: added ignored import set - jnc_ct: removed the unneeded file path string cache AXL changelog: * axl_io_win: when enumerating serial ports, use SPDRP_FRIENDLYNAME first, then SPDRP_DEVICEDESC as a fallback (SPDRP_FRIENDLYNAME yields a description just like in the Device Manager) - axl_io: typo fix: SerialSettings constructor didn't propagate dtr & rts values + axl_g: added macros _strnicmp/_wcsnicmp on POSIX (mapping to strncasecmp/wcsncasecmp) + axl_io: implemented getSymbolicLinkTarget for POSIX (via readlink) - axl_io: fixed missing 'const' qualifier in SharedMemoryTransportBase::initializeMapping () + axl_io: added io::getSymbolicLinkTarget (implemented on windows via NtQuerySymbolicLinkObject) + axl_core: added axl_sys_win_NtDll.h/cpp to store native NT declarations * axl_io: on windows, setting all serial settings via DCB affects DTR & RTS; therefore, we must include it in io::SerialSettings and update it whenever we modify flow control * axl_io_win: enumerate serial ports using GUID_DEVCLASS_PORTS (a driver may fail or choose not to register the GUID_DEVINTERFACE_COMPORT interface) * axl_g: g::Module::getSystemInfo should return a const-pointer * axl_g: removed leading underscore from AXL_CPP_xxx_VERSION defines (for consistency) + axl_g: added NOMINMAX definition under windows + axl_err: added a constructor overload for err::Error to allow passing string literals as errors + axl_sl: added an assert to StringRef::attach (length must not be -1) + axl_mem: added a simple mem::Pool template class for fixed-sized memory pools - axl_io: fix: must clear flow control fields in the DCB prior to setting the new value * axl_g: minor cleanup of the warning suppression file ................................................................................ version 3.8.3 (2017-12-15) introduces: major redesign of Jancy IO model, support for guard-page-based GC safe-points on Windows x64, advanced IO & buffering options in plugins Main application changelog: * nj_app: show error message in message box only if there's no plugin startup dialog * nj_srv: always return 0 on success; print error messages to stderr - nj_app: critical bugfix: don't nullify SessionStartupSyncReqSlot in processMsg_OnStartupCompleted (could lead to a deadlock if plugin failed to load properly) - nj_app: bugfix: receiving transmit-disabled notification should not affect the transmit pane unless the document is active + nj_log: added StdRecordCode.RxBufferFullLossless & StdRecordCode.RxBufferFullLossy + nj_srv: add errors & exceptions to the main log - nj_gui: bugfix: incorrect check EnumProperty::setCurrentIndex (should be >= count) - njs_srv: fix: check m_workerThreadTerminateFlag in worker thread request processing loop - nj_app: bugfix: next-time combo box in crash report dialog was not serialized properly - nj_app: bugfix: usage report and crash reports could not be disabled (even for paid licenses) - the check for a paid license was made too early (before license mgr initialization) - nj_srv: crash during compilation stage caused invalid manifest collection (log is not opened) + nj_app: allow guard page safe points on win64 - nj_app: bugfix: transmitting a file caused invalid selection in history combo - nj_app: bugfix: submitting usage report during the initial open (e.g. `ioninja serial`) lead to a crash * nj_srv: link to dbghelp.lib on windows. somehow it worked without explicit linking on msvc10, but it doesnt on msvc14 - nj_app: fix: handle server process exit (e.g. during system shutdown/restart) Scripts changelog: + scripts: ported tcp connection socket, udp socket, ssh channel, tcp proxy and serial to the new jancy io model + scripts: added advanced buffering options to serial and all socket-based plugins: * read parallelism * read block size * rx buffer size * tx buffer size * keep read block size * keep write block size + scripts: added advanced socket options to all socket-based plugins: * tcp keep-alives * tcp nagle * tcp reset * re-use address + scripts: added advanced serial port options to the serial plugin: * read interval * comstat check * wait for the first char Ninja Scroll engine changelog: + njs_wdg: added support for ESC D, ESC M - njs_wdg: fix: properly handle newline inside a scroll-region - njs_wdg: fix: when deleting lines, fill the space with background color - njs_wdg: fix: terminal widget did not always invalidate necessary lines on scroll + njs_wdg: improved support for xterm scroll regions - njs_wdg: bugfix: cursor pos should be re-validated after console size change (could lead to crashes on terminal resize) Jancy changelog: * jnc_io: use the new axl::io::Serial::open to open serial port in asynchrounous mode + jnc_sys: added sys.g_systemInfo property + jnc_api: added alias _JNC_CPU_IA32 (the same as _JNC_CPU_X86) - jnc_ct: fix: set value to ValueKind_Void when const-casting to (void) - jnc_ct: fix: incorrect check for void value in ControlFlowMgr::ret (const Value&) + jnc_io: added SocketOption_TcpKeepAlive (translates to SO_KEEPALIVE) + jnc_ct: fix: handle returning of values from void functions + test: added a test for checking the recent modification re gc shadow stack frame maps - jnc_ct: critical bugfix: for-loop had incorrect sequence of jump/close-scope (could lead to premature release of temp gc-heap vars) * jnc_ct, jnc_rt: critical update: changed the way shadow stack frame maps are initialized and set * jnc_ct: remove Unit* argument from OperatorMgr::parseXxx (...) set of functions; instead, set current unit explicitly (the same spot where we open namespaces) * jnc_io_base: redesigned io.Socket + jnc_io_ssj: redesigned class io.SshChannel + jnc_io_base: redesign of io.Serial class (using async event model) + jnc_io_cmn, jnc_io_base: added io.AsyncIoDevice (will be base for all asynchronous IO classes: Serial, Socket, SshChannel, etc) * jnc_ct: bool should belong to TypeKindFlag_Integer - jnc_ct: incorrect assert in ClassType::markGcRootsImpl -- opaque classes may be derived from! - jnc_ct: fix: bitwise-xor operator should keep bitflag enum type (just like bitwise-or) * jnc_rt: switch to vectored exception handling on windows; remove seh frames remove jnc_handleSehException; * jnc_rt: by default use gc guard page and no explicit check-calls everywhere + jnc_rt, jnc_ct: added rt::ExceptionMgr to handle null-ptr-access & div-by-zero with signals on POSIX and with vectored exceptions on Windows * jnc_ct: split entry block into two: alloca & prologue + jnc_ct: ported to llvm-5.0 AXL changelog: - axl_io: fix: clear "bad" termios attributes + axl_io: apply read interval via c_cc VTIME: + axl_io: modified io::Serial::open to allow choosing sync vs async using io::FileFlag-s + axl_g: added alias _AXL_CPU_IA32 (the same as _AXL_CPU_X86) * axl_sl: treat uninitialized empty CircularBuffer as valid + axl_io: added axl::io::win::Socket::wsaGetOverlappedResult (...) methods + axl_sl: added sl::CircularBuffer:drop method + axl_sl: added sl::Handle::takeOver method + axl_sl: added a simple circular buffer class sl::CircularBuffer + axl_sys_win: try to FormatMessage (FORMAT_MESSAGE_FROM_HMODULE) for getting NTSTATUS description if RtlNtStatusToDosErrorFunc failed (returned the same code) ................................................................................ version 3.8.2 (2017-11-24) introduces: major optimization in ninja scroll logging engine for bin-text lines and large log files (plus a few critical bugfixes), a critical bugfix in jancy scripting engine, hi-precision (sub-microsecond) timestamps on windows 8+, crash reports, usage reports, new version popup notifications. Main application changelog: - nj_doc: fix: reset current directory to root in StorageParser::finalize - nj_app: bugfix: clicking "reset terminal" in terminal context menu was incorrectly directed to the active document (wrong for floating terminals) + nj_app: added floating/tabbed items to the terminal context menu + nj_app: implemented play-log-in-terminal functionality + nj_app: collect and submit crash-reports (configurable: always-on/confirm/ off) + nj_app: added a popup dialog when a new version is found (configurable: popup/asteris/off) + nj_app: encrypt usage and crash reports (configurable) - nj_app: set fixed size for the status-bar (to prevent if from being stretched by plugins) - nj_app: don't do any network requests until a user presses "Agree" on the initial nag screen - nj_app: bugfix: clicking Remove All on the Add-on Plugins page could lead to a crash - nj_app: bugfix: layerPluginUsageStats argument list was not null-terminated (caused occasional crashes) - nj_app: use RtlGetVersion instead of GetVersionEx (which may lie about the actual OS version depending on the app' manifest) + nj_app: generate a unique installation ID and submit it in every usage report * conf: changed comments from // to # + all: generate linker debug information in Release builds + package: create an extra archive with pdb files + legal: added privacy.txt file with detailed description of our privacy policy Scripts changelog: + scripts: sniffer: added handling of io.PcapEventCode.IoError + scripts: ssh: track console size changes during connect + scripts: added default remote port setting to TCP, UDP & SSH sessions + scripts: use std.getPreciseTimestamp in log - scripts: removed debug printfs + scripts: added PID information to all tdevmon-based monitors + scripts: added gui.ComboBoxHistory class extenstion all the scripts now use it instead of (now removed) gui.ComboBox.addEditTextToHistory * wizards: change icons for all the plugins (previously it was a tennis ball from the Echo plugin, now it's a generic "plugin" icon) Ninja Scroll engine changelog: - njs_log: critical bugfix: merge-id should be a part of each index leaf (not just merged ones) * njs_log: only processUiEvents on rebuild (otherwise, it introduces unnecessary latency on incremental log updates) * njs_wdg: don't scroll to bottom on resize by default (do that for terminal widget only) - njs_log: critical bugfix: in bin-text line we should check for enc::utfIsPrintableNonMark (not just enc::utfIsPrintable) -- could cause occasional crashes - njs_log: fix: codec for wchar_t is platform-dependent (utf16_t/utf32_t) + njs_log: show tooltips with HEX-ASCII/U+ notation for bin-text lines - njs_log: fix: default copy processing for bin-text lines should take actual data bytes, not binText string (because binText is translated regarding tabs/unprintable chars) * njs_log: major update: don't hide '\r' and '\n' in bin-text-lines (show as unprintable char) - njs_log: fix: keyboard jumps over tabs in bin-text lines - njs_log: fix: update m_partIdx of the bin-text line if it's empty during add-data - njs_log: critical bugfix: bin-text lines incorrectly handled multibyte unicode chars being split inside the code-point * njs_log: major optimization update: - optimized index tree re-balancing - delayed UI updates on index rebuild - added support for incremental re-indexing (large logs are now immediatly usable) - UTF buffer-based batch decoding (previously it was per-code-point) * njs_wdg: don't auto-scroll terminal console on write (use the same logic as with the log -- if the bottom line is visible, then scroll to bottom) + njs_wdg: added support for CSI L/M (insert/delete lines), CSI d/G (set cursor line/col) and CSI !p (soft terminal reset) - njs_log: fix: empty log was not handled properly in CacheMgr::processCache Jancy changelog: - jnc_ct: major update/bugfix: StdFunc_AllocateXxx/StdFunc_TryAllocateXxx should return StdType_AbstractDataPtr, not StdType_DataPtrStruct. this under certain circumstances could cause premature release of temporaries which in turn was leading to UB including crashes - jnc_rt: fix: assertion failure could still occasionally fire * jnc_ct: remove dummy field from StdType_AbstractData; instead, just force-set flags (gc-root & non-pod) + jnc_io_pcap: added event io.PcapEventCode.IoError + jnc_sys: added std.getPreciseTimestamp => axl::sys::getPreciseTimestamp * jnc_ct: cleaned up using-sets implementation (now applicable to imports and orphans) AXL changelog: - axl_io: critical bugfix: non-atomic file size grow in io::SharedMemoryTransportBase on POSIX (could lead to SIGBUS) + axl_ini: support empty sections in .ini files (may be useful to reset to root directory) - axl_g: fix: _AXL_GCC_ASAN was detected incorrectly on clang - axl_io: critical bugfix: block size for file copying should be a multiple of systemInfo->m_mappingAlignFactor + axl_gui: added support for tooltips + axl_enc: added access to the accumulator in CodePointDecoder * axl_io: changed default MappedFile read-ahead size to 64K * axl_gui: minor update in WidgetDriver::postThreadMsg API + axl_gui: added Engine::processUiEvents + axl_enc: major update in char codecs (support for buffer decoding in CodePointDecoder, support for single-pass decoding + codepoint map calculation) + axl_cry: added axl::cry::Rsa::publicEncrypt/privateEncrypt/ publicDecrypt/privateDecrypt + axl_cry: added cry::AesKey wrapper class for AES block encryption + axl_sys: implemented hi-res timestamps on mac (via mach_absolute_time) for testing (production version is still using gettimeofday) - axl_sl: bugfix in PackIntTrunc: va_arg was called twice - axl_sys: removed qpc-based precise timestamps on windows; instead, use GetSystemTimePreciseAsFileTime available in win8+ + axl_gui: added support for ansi attr inversion - cmake: don't use -static-libgcc/-static-libstdc++ on clang (not supported) ................................................................................ version 3.8.0 (2017-10-20) introduces: major terminal emulator redesign, regular expression colorizer layer plugin, add-on plugin management system, support for layer plugin persistency in saved log files and session files, support for key authentification in Jancy class io.SshChannel and in the SSH plugin, new Jancy class jnc.RegexDfa for compiling and matching dynamic regular expressions (uses the same engine as the 'reswitch' statement). Main application changelog: * nj_app: major redesign of the terminal widget - now it can be floating or tabbed - can be fixed-sized or auto-sized - when it's auto-sized, the size tooltip is shown on resize * nj_app: terminal: fixed bugs in arrow key mapping * nj_app: added tab close button, i need it to add it to the terminal tab, it's closable now (but not the log tab!) * nj_app: delay terminal console size adjustment (otherwise, lines are cropped prematurely) * nj_app: inverted the terminal mouse roles when xterm mouse-mode is set: send clicks by default; select/context-menu when Ctrl is pressed * nj_app: re-design of transmit history: now text transmit, binary transmit and file transmit all have independent histories. previously having shared history for text+binary transmit caused problems with escape-sequence in the text pane * nj_app: fixed persistency for the file transmit page (previously it was always empty on session start, even when we've set the file previously) * nj_app: added support for layers in saved session files * nj_app: added per-plugin resource directories * nj_app: save document settings as defaults upon closing the settings dlg * nj_app: fix: actions for recent files in the file menu were not connected * nj_gui: added support for enabling/disabling for action (link) properties * nj_srv: apply default settings on add layer * nj_srv:suspend/resume log server on add & remove layer suspending helps avoiding premature rebuilding of log index when layer adds converters/representers * nj_gui: added methods: gui.PropertyGrid.removeProperty and gui.GroupProperty.removeProperty * nj_app: added user plugin setting page * nj_app: set fixed size for the nag dialog (measure by the image) * nj_app: disable already added layers in the "new-layer" drop-down menu * nj_srv: added doc.PluginHost.m_logThreadScheduler * nj_srv: added doc.PluginHost.m_pluginGuid * nj_srv: added support for multi-class-guids in log files * nj_srv: adapted log api to the new representer stack architecture * nj_srv: moved std record code representer into a dedicated class * nj_srv: save log file now takes the last log record file in converter stack * nj_app: brought back the Add Layer toolbar button * qtpb: hide alpha channel in color properties * qtpb: adjusted the display format in flag properties * qtpb: added QVariant user data to properties * nj_gui: added gui.ColorProperty, gui.ActionProperty, gui.FlagProperty, gui.FileProperty * nj_gui: fix: insert properties to the group of particular plugin * nj_app: added tooltip label (QToolTip has certain issues with widget activation/deactivation). i need something simple and predictable to show terminal console size * nj_app: updated icons (also, added a terminal icon) * nj_app: fixed buddies and tab order on all the dialogs * package: added NSPrincipalClass=NSApplication to Info.plist in Mac packages (crucial for high-DPI support) Scripts changelog: * scripts: fix: modbus plugin should use a volatile variable for checking for role inversion (the value of property is not volatile and not guaranteed to return the correct result after the change). timing is critical on startup (if we apply a modbus rtu layer with role inversion to an already captured log) * scripts: MosBus RTU: added support for role inversion: TX/RX - Master/Slave also, improved the handling of invalid ModBus frames * scripts: fixed regex colorizer race issues (log thread vs main thread) * scripts: minor fixes in the file and hw-serial-mon plugins * scripts: added the 'Remove all extra patterns' action to the regex colorizer plugin * wizards: bugfix in syntax highlighter wizard (length should be updated each iteration) * wizards: fixed a typo in TX/RX test plugin wizard * scripts: added gui.rgb function * scripts: ssh: added key authentication * scripts: serial: removed flow control combo box (available via property grid) * scripts: added regex colorizer layer Ninja Scroll engine changelog: * njs_wdg: added support for CSI set scroll region command * njs_log: write bin-format to clipboard on bin-copy mode * njs_log: added "smart" copy logic for bin-hex lines: when selecting in the hex part, the copied text will contain hex codes; when selecting in the text part; the actual text will be copied * njs_log: added support for CopyBinKind_HexView * njs_wdg: added support for mouse mode change notifications * njs_log: critical bug fix in njs::Server::processSyncReqList * njs_wdg: terminal: added support for CSI n P (erase chars) * njs_wdg: fixed a repaint problem on full erase * njs_log: added support for multiple class guids in a single log file (crucial for io ninja layers) * njs_log: moved fold flags to a dedicated fold file (now we don't have to enforce read-write when opening logs; also, it's possible to have multiple log servers working with the same log file) * njs_log: added support for suspend/resume (may be necessary when building complex layer stacks) * njs_log: added support for user callbacks in the log thread (necessary to synchronize io ninja converter layers) * njs_log: show page boundaries under debug Device Monitor changelog: * dm_lnx_lkm: fix: in-header inline functions must be static to make gcc happy * make: added variable LINUX_BUILD_DIR to override build dir when needed * dm_lnx_lkm: implemented write-protection disabling for arm32 now tdevmon can be used on Tibbo LTPS LTPP3 boards for serial monitoring * dm_lnx_lkm: use do_div instead of direct int64 division on arm32 * dm_lnx_lkm: bugfix: Device_p_unhook did Hook_stop sequence incorrectly * dm_lnx_lkm: warning fix: ioctl arg is long, must be cast to (uintptr_t) before casting to (void*) * cmake: added an option for lkm target in cmake project Jancy changelog: * jnc_ext: fix: consumed length calculation in jnc.RegexState did not work properly for negative offsets * jnc_ext: added support for buffer replay after a successful match in incremental jnc.RegexState/jnc.RegexDfa * jnc_ct: critical bugfix: reactor iface classes were not properly shared * jnc_ct: bugfix: skipping non-trailing default arguments crashed the compiler (need to do explicit check for null jnc::ct::Value-s) * jnc_ct: allow finishing commas in named-based curly initializers * jnc_rtl: implement full reset in RegexState::reset * jnc_rt: added Runtime::m_userData field (rather convenient when there are multiple runtimes, like with ioninja plugin stack) * jnc_rtl: removed RegexDfa.incrementalMatch * jnc_rtl: added RegexDfa class * jnc_io_base: typo fix in io.Socket * jnc_io_base: minor sync bugfix in io.Serial (m_ioFlags must be accessed under lock) * jnc_io_ssh: added support for key authentication * jnc_io_ssh: bugfix: SshChannel::write returned 0 on success (must return the actual size) * jnc_ct: fix: OperatorMgr::getConditionalOperatorResultType should use closure-aware types of operands AXL changelog: * axl_io: fix: io::SharedMemoryTransport did not release the lock on open-error * axl_gui: export TextPainter::buildBinTextString for public use (the same code which is used for producing hex-view strings) * axl_sl: minor fix in sl::ListBase::moveXxx to allow usage of these methods from sl::BoxList * axl_io: typo fix in the POSIX impl of io::getDir * axl_io: bug fix in the POSIX impl of io::copyFile * axl_sl: added sl::List::eraseHead/eraseTail for consistency * axl_io: expose const io::File* via io::SharedMemoryTransport::getFile (for uniformity with io::MappedFile) * axl_io: io::MappedFile now provides information about the actual end of a mapping * axl_io: expose const io::File* via io::MappedFile::getFile * axl_io: added io::copyFile () overload (accepting a const io::File* instead of a source file name) * axl_fsm: fix: calling RegexCompiler::makeDfa with an empty regex caused a crash ................................................................................ version 3.7.8 (2017-09-15) * devmon: criticial bugfix: opportunistic BSOD (read beyond the end of a buffer during scatter-gather collection on IRP_MJ_CREATE/ IRP_MJ_CREATE_NAMED_PIPE/IRP_MJ_CREATE_MAILSLOT) * devmon: fix: self-hooking attempts detection and prevention in tdevmon for Linux * devmon: fix: tdevmon --stop-core-service always failed as long as there is at least a single filter device attached * devmon: fix: if the core service could not be stopped, MSI would misbehave: it could failed instead of asking for a reboot or do not ask for reboot at all * plugins: SerialMon: extend port combo (space is unused, anyway) * plugins: Serial: added read buffer size setting * plugins: ModBus: added support for field-clicks in decoded ModBus messages * plugins: ModBus: bugfix: upon a successful decode of a ModBus message, a chunk of raw data was doubled * nj_app: added terminal settings for backspace key mode, home-end key mode and function key mode * nj_app: added proper handling of double-click in terminal * nj_app: remember last open-file dir * nj_app: fix: on Windows and Mac ignore extension case when auto-detecting open-file type * nj_srv: reset base timestamp to the first line of the log if it's not empty otherwise, it produces weird "minus" times when opening existing logs and/or sessions * nj_gui: added properties m_minValue, m_maxValue, m_spinBoxStep to the class gui.IntProperty * axl_sys: fix: month number should be one-based, not zero-based * njs_log: fix: handle double-click on hyperlinks as a normal click (don't select-word) * njs_wdg: added support for character sets (in particular, line-drawing character set) in the terminal widget * njs_log: added support for backward-bin-range-highlighting ................................................................................ version 3.7.7 (2017-08-31) introduces: Tibbo Device Monitor for Linux, Serial Monitor plugin for Linux, support for monitoring the Fast IO and remote pipe/mailslot connections on Windows, dual WHDC-compatible signing of Windows drivers with SHA-1 and SHA-256 EV certificates for Windows 10 1607+ compatibility, two critical BSOD fixes, dynamic structures in Jancy language. * nj_app: added the "What's New" dialog * nj_app: cleaned up QT widget/dialog layout issues * nj_app: removed the "Key Translation" terminal setting (never was fully implemented); added the 'Enter key mode' setting (CR/LF/CR-LF) instead * nj_io_mon: added support dual device monitoring (e.g. \device\namedpipe and \device\lanmanredirector); this allows for monitoring remote pipe/mailslots * moved all *.jncx into 'extensions' dir in tar package * devmon: file name wildcards can contain multiple \r - separated wildcards; to pass a file name must match all the wildcards using AND logic) * devmon: added notifications for FastIoRead/FastIoWrite/FastIoDeviceControl -- this is crucial for monitoring the named pipe IO on Windows (otherwise, a substantial part of pipe traffic is unlogged) * devmon: improvement: MSI installer should not ask for reboot during upgrade unless that's really necessary -- before it *may* have asked for reboot even when services could be cleanly stopped * devmon: fix: IRP_MJ_FILE_SYSTEM_CONTROL file id and data was not properly displayed in tdevmon console utility * devmon: critical bugfix: BSOD on METHOD_NEITHER IOCTLs when either IN or OUT buffer is NULL (due to unconditional MmGetSystemAddressForMdlSafe on NULL MDL) * devmon: critical bugfix: an opprtunistic BSOD crash during open file notification on IRP_MJ_CREATE/IRP_MJ_CREATE_NAMED_PIPE/ IRP_MJ_CREATE_MAILSLOT -- due to incorrect usage of FILE_OBJECT::FileName * devmon: ported tdevmon console application to Linux * devmon: added Linux loadable kernel module (LKM) and usermode library * devmon: added scripts for WHDC signing with the new EV certificate * devmon: bugfix: a leak in HashTable_remove (entry was removed, but not actually freed) * cmake: added QT_COMPILING_QSTRING_COMPAT_CPP and QT_COMPILING_QIMAGE_COMPAT_CPP to QT-based modules. this way, the resulting binary has less import symbols and is more likely to run when linked against older versions of QT * cmake: added gcc settings for -static-libgcc and -static-libstdc++ (static by default). this way, the resulting binaries are more likely to run on different linux distros * ported Serial Monitor plugin to Linux * jancy: added dynamic structs (dynamic layour via non-const-sized arrays) * axl: fixed typos in sl::String::getLeftSubstring/getRightSubstring * axl: catch out-of-memory error in Array::reserve * axl: added assert to getMinPower2Gt to catch values with highest-bit set to one * njscroll: fixed a regression introduced with dual bin hex lines CachedLine::isBin was broken, which lead to incorrect painting of bin-text lines ................................................................................ version 3.7.5 (2017-07-06) * njscroll: ensure visible cursor on paste * njscroll: scroll the widget if necessary on insert/delete data * sh: updated build-packages shell scripts for all opensource projects -- should use cpack rather than hand-made shell scripts (which are all removed now) * nj_app: added support for time-limited evaluation licenses * nj_app: re-designed the license dialog * ecckey: added support for time-limited (expiring) product keys * ecckey: added srand() -- otherwise, product key padding is always the same * jnc_sys: added g_env property for accessing system environment variables ................................................................................ version 3.7.4 (2017-06-03) * nj_app: bugfix: having both a session and a log opened and then closing first the session and then ioninja lead to a crash * njs_log: auto-convert logs from ioninja 3.5.x * nj_app: removed api.conf (not needed anymore) ................................................................................ version 3.7.3 (2017-05-17) internal release. * jnc_ct: ported to llvm-4.0; compiles and runs under llvm versions 3.4.2 to llvm-4.0.0 * jnc_ct: named import types used in orphaned functions/reactors are re-anchored (no more need to qualify nested types in orphaned methods) * njs_log: bugfix: crash if dual bin hex block happen to span cache page boundaries * nj_app: bugfix: hex editor incorrectly reported selected range if cursor was at ASCII-EOL position ................................................................................ version 3.7.2 (2017-05-03) introduces: Hardware Serial Monitor for UART/SPI/I2C; USB Endpoint Terminal; dual binary blocks in Ninja Scroll Engine. * axl_gui: bugfix: TextPainter::drawHyperBinHex incorrectly checked for an empty attr array * nj_app: bugfix: when a session was created after closing a previous one, session property grid was often inaccessible for editing * axl_gui: shift+Tab support * nj_app, nj_log: added support for dual-bin view * nj_log: break record support * nj_gui: proper group property support * axl_gui: make HyperText use UTF-32 for text storage; this way makes it possible to use unicode chars in IO Ninja text log lines * jnc_ct: implemented const casts for class pointers -- this is critical for doing class-ptr upcasts from variants * jnc_ct: critical bugfix: don't fallback to llvm cast post-compile * jnc_ct: allow casts to void (crucial for conditional operators) * jnc_std: bugfix in Array::insert/Buffer::insert methods (they always copied new data into the beginning) * njs_log: added PartKind_Break for inserting breaks between mergeable messages ................................................................................ version 3.7.1 (2017-04-14) introduces new features in Jancy language: 'reswitch' statement; 'cmut' modifier; variant containers (arrays, lists, hash tables, rb-trees); redirectable stdio; raw literals; indexer properties; disposable pointers; declarations in reactors. * scripts: move io_ModBus.jnc/io_TcpIp.jnc to common folder (not really api) * jnc_ct: allow writing formatting literals as f"..." ($"..." is also ok) * axl_err: bugfix: StdErrorCode_String incorrectly handled string length (off-by-one) * ioninja: fix: master encoding was never really saved (reset to UTF-8 each time) * jnc_ct: fix: array->ptr casts, also for const values (required for variants) * jnc_std: cleaned up std classes StringBuilder/HashTable/RbTree * jnc_std: removed unused structs/classes (std.BufferRef/std.StringRef etc) * jnc_std: added std.RbTree, redesigned std.HashTable * jnc_ct: bugfix: thunk function compilation failed if function had call-conv-dependent arg coercion * jnc_ct: fix: non-POD struct field access was essentially unchecked * axl_sl: breaking change: eliminated diversity BinTree/BinTreeMap and HashTable/HashTableMap * jnc_ct: major update: redesign of dual modifiers, implemented dual modifier 'cmut' (container mutability). * jnc_std: added std.Array class * jnc_std: added gets, print, perror and make stdio adjustable by the host application (via jnc::setStdio) * jnc_ct: relaxed the requirement to use 'indexed' modifier when declaring indexed properties * axl_sl: bugfix in sl::CmdLineParser -- parse switch prematurely terminated the switch value upon discovering a space * jnc_ct: added support for raw literals (non-escape-decoded) * jnc_ct: redesign of automatons -> regex switches * jnc_rt: suppress unwinding on longjmp on windows x64 (doesn't work properly -- at least with LLVM 3.9.1) * scripts: remove types in bindable aliases, remove terminating semicolons from curly-initialized declarations * jnc_ct: update in grammar: allow curly-initialized declarations to be non-terminated with ';' * jnc_rt: fix: assert in GcHeap::parkAtSafePoint could occasionally fire due to its wrong placement -- it should be placed *before* atomicDec (&m_handshakeCount) * jnc_ct: indexer properties implemented * jnc_ct: function redirection implemented * jnc_ct: alias redesign * jnc_ct: major update: member & index operators for variants * jnc_ct: disposable pointers * jnc_ct: redesign of automatons -> regex switches * axl_sl: bugfix in sl::Pack -- size calculation for simple types did not advance va_list * axl_fsm: supportfor simple quantifiers, e.g \h{8} * axl_fsm: capturing groups * axl_sl: added support for and-not operation to BitMap::merge * jnc_ct: allow declarations in reactors * jnc_ext: move gc stuff from std to sys * jnc_ct: redesign module constructors/destructors (allow one-per-unit) * jnc_ct: removed 'delete' operator (prolly, never gonna be supported) ................................................................................ version 3.7.0 (2016-12-20) provides a critical fix in Serial plugin. * jnc_io_base: major update in Serial class -- fixed EV_RXCHAR-related data loss and completely removed interval timeouts on windows. As it turns out, certain drivers do not follow WinAPI guidelines on EV_RXCHAR notifications and serial timeouts and it may cause IO Ninja to hang indefinitely * nj_app: proper updates of transmit pane during switching and closing of documents * don't disable transmit pane in monitor and linked sessions (could be used as a scratch-pad). "send" button is disabled anyways * dm_app: bugfix: %lld implies 64-bit, but the argument was intptr_t; it caused a crash during monitoring on 32-bit machines * njscroll: assertions in mergeEditTransactions could actually fire (if we select and then replace by typing) * njscroll: make selectAll (Ctrl+A) keep the cursor in the same pane it was before (Hex-vs-Ascii) * nj_app: keep transmit histories separate for different sessions; also, don't save/restore histories (only current blocks). ................................................................................ version 3.6.8 (2016-11-25) * axl_sys: add unix-windows time epoch difference to POSIX timestamps * axl_enc: critical bugfix in Base32 implementation * axl_cry: critical bugfix: we should update signature size after ECDSA_sign * axl_sys: bugfix in POSIX timed wait (absolute timespec was calculated incorrectly) * jnc_io: bugfix: on POSIX checking socket for FD_WRITE should happen AFTER connect * nj_ssh: rename io.SshEvent->io.SshEventCode (to reflect change in jnc_ssh) * jnc_ct: support for $! in formatting literals (expands to std.getLastError ().m_description) * jnc_api: critical bugfix: propagateLastError should use axl::err:getLastError, not jnc_getLastError * scripts: update scripts to use the new properties io.Socket.m_isSocketEventEnabled and io.FileStream.m_isFileStreamEventEnabled * scripts: read all incoming data before closing the socket in disconnect event handler * all the libs/frameworks added as submodules; list of submodules: axl, doxyrest, ecckey, graco, jancy, njscroll, qtpropertybrowser, minhook devmon * axl: fix: sl::String & ref::Buf should handle in-buffer copies/inserts/ appends properly (either by in-buffer shifts or by add-reffing the original buffer to keep it intact) * jnc_io: Serial::setDtr/setRts should modify property-holding values * axl_enc: UTF trie is now ICU-based * jancy: allow untyped aliases; mostly it's done to allow simple aliasing of 'dispose' method, like: alias dispose = close * jancy: typo: setas declaration had no effect * jancy: fix: io.File was not properly added to IoLib * ioninja: use _wfopen for log file on windows (otherwise it doesnt work for unicode-user-names) * ioninja: show command line output if server process finishes BEFORE transport has been established. * jancy: typo in jnc_Type.h (jnc::TypeKind_Long was mapped to int32, not to int64) * axl: support for \v in escape encoding engine * jnc_ct: multiline literals syntax change: i feel it's better to make it look like python docstrings, using triple quotation """ * jnc_ct: unified hex/octal/binary/decimal constants/literals and added support for multiline binary literals 0x""", 0o""", 0b""", 0n""" * jancy: remove int8..int64 keywords, instead use the same keyword system as in C/Java: int, char, short, long + one non-standard keyword: intptr. char -- signed 8-bit int, short -- signed 16-bit int, int -- signed 32-bit int, long -- signed 64-bit int. the rest is defined just like in stdint.h: int8_t, int16_t, etc. this way it's much easier to switch between C and Jancy (i constantly make typos myself). * jancy: remove C pseudo-inheritance via JNC_BEGIN_INHERITED_STRUCT alas, this approach doesn't work on gcc anyway; ................................................................................ version 3.6.7 (2016-07-28) * all: suppress -rdynamic by default. turns out, (at least) on Linux, CMake adds -rdynamic to the link flags, which results in dll hell on steroids * axl: remove kernel32.GetThreadId dependency (missing on Windows XP) * devmon: print extended information message when driver's signature is rejected (may happen on vanilla Windows 7 because of SHA-2 certificates) * ioninja: tx/rx test wizard * ioninja: layers should be able to filter transmission (before transmission was directed to the main plugin (head of plugin stack) * ioninja: if layer representer is unable to represent a log message, we need to fall back to the previous representer (before it worked only for log converters) * jancy: critical bugfix: lifting variables could lead to incorrect current gc shadow stack frame * ioninja: bugfix: if the 2nd (or later) plugin passed in command-line failed compilation, both ioninja and ioninja-server processes remained in limbo state. * ioninja: answering machine wizard generated a project which would not compile out-of-the-box * axl: critical bugfix: buffer overrun in axl::enc::CharCodec class * ioninja: installer should put bundled packages into user temp folder, not to INSTALLDIR; otherwise it's impossible to delete em afterwards (not with UAC on) so previsouly on all UAC machines we had winpcap.exe and tdevmon64.msi remaining after installation. the solution is to use a temp folder (SUPPORTDIR). It is generated using ProductCode, which will be new every MSI build. in this case we don't have to worry about conflicts and we can delete this folder without elevation. * ioninja: critical bugfix: installer checked tdevmonc.sys version incorrectly: ioninja uses major-minor-revision versioning, windows uses major-minor-build-revision versioning. MSI used ioninja version rather than windows version; this resulted in "...installed version appears to be older..." message all the time (even when it's not) * jancy: remove server stuff; re-organize JncApp structure * axl: extra utility methods in StringRef * axl: reverseMemMem using BoyerMooreFind * axl: ref::BufHdr methods for checking pointer being inside/outside * axl: wrapper for lua_pushvalue; support for relaying arguments to LuaStringTemplate::process * axl: major redesign: String/StringRef; Array/ArrayRef * ioninja: automatic pad-file generation ................................................................................ version 3.6.5 (2016-05-13) * ioninja: transmit history fixes: use hex-exncoding for transmit history because it seems like QT has problems with variant lists, x86 crashes inside QT list conversions (reproduced in isolated test app) * ioninja: don't add empty blocks to transmit history * ioninja: update transmit history buttons after load * jancy: important grammar update: type_name_or_expr should use expression_0, not expression; dynamic sizeof/countof/typeof should use expression, not type_name_or_expr. this way we prevent generating code for unused values and at the same type allow sizeof (struct-field) and countof (struct-field) * njscroll: typo caused only a single line to be processed (introduced when fixing reversed cache processors) * jancy: critical bugfix: after lifting a variable we need to propagate new frame map down the scope stack * axl: bugfix: after adding special handling of zero-utf32_t methods in sl::String enc::EscapeEncoding ::decode started to incorrectly parse \0 escape sequence. should use append (c, 1) instead * jancy: unary ! operator for variants * jancy: critical bugfix: continueBlock in for-loop should be set at loopBlock, not conditionBlock * cmake: sanitiser flags should also be added to CMAKE_SHARED_LINKER_FLAGS_DEBUG (for Xcode) ................................................................................ version 3.6.4 (2016-05-12) * ioninja: file transmit dialog is now aware of incomplete transmissions and does retransmissions accordingly * ioninja: persistency for transmit widgets (text, binary, file) * jancy: io_base.jncx: TransmitBufferOverflow event removed (it was not really implemented anyway, and TX buffer overflow should be checked during send/write) * jancy: io_base.jncx: TransmitBufferReady event is implemented for sockets * jancy: io_base.jncx: synchronous and asynchronous socket modes * ioninja: log all jancy exceptions in ioninja-server-system-log * jancy: cricitcal bugfix: Runtime::uninitializeThread should restore exception recovery snapshot even when thread is being uninitialized otherwise there is a potential race: exception could have left GC shadow stack in invalid state, and it could be accessed if another thread happen to perform a collection simultaneously with GcHeap::unregisterMutatorThread trying to GcHeap::waitIdleAndLock () * jancy: fix Timer::stop () from within onTimer event -- before it deadlocked * jancy: HashVariant should invert bigendians -- otherwise the same values will fall into different buckets * jancy: typo in sys.Timer.wait () -- single shot timer was satisfied immediatly * axl: bugfix: BinaryBoyerMoore should use uchar_t, not char -- equality comparisons failed because of that * axl: bugfix in FSM library: hexcode escapes were parsed incorrectly * axl: added support for hex-literals in RegExpCompiler * jancy: strstr & memmem * axl: memmem via in BinaryBoyerMooreFind * jancy: bugfix: each regexp in automaton function should FIRST set the block, THEN open scope (LLVM bugchecked with unterminated blocks if formatting literals were used within actions of automaton) ................................................................................ version 3.6.3 (2016-05-04) introduces: Tibbo Device Monitor security management; new IO Ninja sessions: Mailslot and Mailslot Monitor; inter-character delays during transmission in IO Ninja Serial session. * ioninja: setting dialog minimum size is properly calculated (looked bad on Mac and Linux KDE before); setting dialog now also installs event filter to disable mouse wheel in comboboxes and spinboxes -- otherwise it really breaks the flow of wheel scrolling and produces unwanted setting changes * axl: bugfix: Mac OSX axl_cf & axl_iok libraries had multi-CFRelease bug which occasionally crashed serial port enumerator * cmake: add sanitiser flags to CMAKE_EXE_LINKER_FLAGS as well — Xcode fails to link sanitised executables otherwise * ioninja: serial session: inter-char delay; also removed data-bits, stop-bits, parity combo-boxes from toolbar (it takes too much space) * jancy: keyword rename: thread -> threadlocal (otherwise it's too conflict-prone) * jancy: bugfix: sys.Event and sys.Lock should enter wait regions before waiting * jancy: jnc_sys library (Lock, Event, Thread, Timer) implemented * jancy: run destructors in dedicated destruct-thread (instead of running them synchronously during collection) * axl: new methods: sys::Thread::wait, sys::Thread::terminate * jancy: IPV6_HDRINCL is apparently windows-only -- use IP_HDRINCL instead on *nix * jancy: fix broken #ifdef structure (error introduced when implementing FileFlag_WriteOnly support) * axl: ifdef win-specific test code * ioninja: mailslot & mailslot monitor plugins. mailslot uses io.Mailslot from io_base.jncx to create server mailslot; mailslot monitor uses a io.MailslotMon in io_mon.jncx * devmon: --show-sd option doesn't really need KEY_WRITE access * jancy: raw sockets (almost useless on windows except for ICMP/IGMP) on *nix should be much more convenient for low-level network IO than pcap * devmon: access management monitor function is now controlled by configurable SD (security descriptor) stored in service parameters regkey; access is checked during IOCTL_DM_CONNECT; default SD allows access for Administrators only; if SD is not found in service parameters regkey or is not valid, then default SD is used. * axl: sys::win::Sid major improvements (name lookups, sid lookups, parsing etc) * axl: sl::String should handle copy, append, insert of 0 as NULL (otherwise it's very easy to misuse); if actual utf32_t 0 assign/append/insert is required, this can be achieved by specifying "count" implicitly * axl: sys::getTimestampFromTimeval * axl: ref::Buf::getSize () method * axl: timestamps in io::PCap -- essential when reading from file * devmon: keyboard & mouse service callbacks moved to tdevmonp.sys * devmon: support for IRP_MJ_CREATE_MAILSLOT monitoring * jancy: io.Mailslot class * jancy: support for write-only in io.FileStream * ioninja: Mailslot plugin * jancy: conditional operator with bitflag enums and zero * axl: io::FileFlag_WriteOnly * jancy: add isReusableAddress parameter to Socket::open () * njscroll: bugfix: reversed cache processor cause out-of-bounds access to line array ................................................................................ version 3.6.2 (2016-04-15) * ioninja: replace empty filter in Named Pipe Mon with * -- this way we will not be notified of already-opened nameless files * jancy: sl::String -> String conversion requires explicit .cc () method call * jancy: update to prev bugfix: adding GC roots in schedule launcher function is not enough, cause internalPrologue adds a gc-safe-point which will fire BEFORE adding GC roots in schedule launcher. instead, add roots in internalPrologue directly. later on, remove it, also remove no-collect call-sites and instead add ALL user-allocated data to something like call-site-gc-root-set * jancy: critical bugfix: schedule launcher functions should mark gc-root arguments (otherwise it's extremely error-prone when calling scheduled function pointers from C++). bug discovered during crash analysis in Answering Machine under debug build. listener function is scheduled in the main thread, and it makes a gc-copy of parameter block. Parameter block gets collected during allocation of closure object (debug build runs gc-collect on every allocation), then dangling pointer gets saved in the closure object * all: add debug suffix to version strings * all: replace strlen/wcslen with safe NULL-checked axl_strlen/axl_wcslen * axl: make axl::sl::StringDetails::calcLength null-ptr safe * ioninja: Plugin::transmitTo/Plugin::transmitToNext methods * jancy: toupper/tolower in jnc_std * qtpropertybrowser: added support for changing property label style (bold, italic, underlined, color) * ioninja: parametrized packet template actions * ioninja: bugfix in reading/writing of bigendian bitfields in packet template widget * ioninja: setSrcAddress/setDstAddress actions in TCP/IP packet library. * jancy: bugfix: inplace const cast destroyed original const (also, fired an assert on cast bool->int during prepareOperand) * axl: bugfix: enc::EscapeEncoding::encode should clear target string first * jancy: Type::getDeclarationString ................................................................................ version 3.6.1 (2016-04-11) * ioninja: macro variable _IONJ_CRASH_DUMP to turn on/off Windows error-mode in ioninja-server (for Vlad Yershov crashdump request) * ioninja: updated icons from leonid (pipe listener, pipe monitor, modbus analyzer) * ioninja: pipe listener and pipe monitor icons from leonid * ioninja: proper removal of plugins should also modify common-among-plugins nj::log::LogRepresenter * njscroll: sync request should not wait if io thread is already stopped/stopping * njscroll: restore previous target record file upon converter removal * njscroll: fix uint32_t/uint64_t warning on x86 * jancy: parseConstIntegerExpression should take int64_t, not intptr_t EnumConst::m_value should also be int64_t, not intptr_t added limit checks for array bounds and enum constants * jancy: 02_dialog sample is now correctly garbage-collected (-1 size trigger removed, opaque-gc-roots marked) * ioninja: remove all layers upon log destruction -- otherwise remove-layer leaves log in an invalid state (referencing desturcted and deallocated layer objects) * jancy: re-prime after destruct is just wrong -- it damages child class fields. also, need to figure out why we even need zeroing of Multicast fields after destruct. seems like a wrong and error-prone design. * ioninja: udp session has "show packet header" filter (to produce clean log when udp socket is used in one-to-one communication) * ioninja: serial session and serialmon session use "true" as default value for log filter properties * ioninja: default values when reading from doc.Storage * ioninja: modbus analyzer plugin; modbus packet library * ioninja: packet template mgr also adds fields from base types * ioninja: io_mon uses timestamp recorded by devmon (rather than current) * devmon: add timestamps to notifications. currently i provide completion timestamps only, but space is reserved for start timestamp as well. start timestamp would require pool allocation on irp start, so im not sure if it's necessary. later i can add it while staying binary-compatible. * jancy: bugfix: gc heap should check if TLS belongs to the same runtime (bug discovered during multi-layer ioninja session, each layer has its own runtime) * ioninja: serial session should get initial parity from combo box, not from property * axl: critical bugfix: io::Serial did not handle parity setting properly * ioninja: description update * cmake: add -Wno-incompatible-ms-struct warning suppression * jancy: llvm integer constant values were read incorrectly. address sanitizer helped to pin read overflow for integer constants (unconditional load of 8-bytes). changed to 1, 2, 4, 8 byte load depending on type. * ioninja: add AXL_GCC_MSC_STRUCT to 8-byte-aligned types (log.Log and doc.PluginHost) * jancy: add AXL_GCC_MSC_STRUCT to class boxes * axl: AXL_GCC_MSC_STRUCT macro for enforcing MSC-layout * axl: bool-vs-bool_t warning fix in io::win::File::setSize ................................................................................ version 3.6.0 (2016-04-04) introduces: Jancy exceptions and disposable variables (resource management) Tibbo Device Monitor FileSystem Filters; IO Ninja Named Pipe Monitor plugin; relative timestamps; actions in packet templates. * jancy: critical bugfix: switch statement could damage gc shadow stack frame maps (incorrect map after break) * ioninja: new icons for pipe monitor and stopwatch * jancy: support for multiple kinds of alignment in classboxes * devmon: don't use FSRTL per-stream contexts cause we didn't test it - npfs.sys does not support it * devmon: replace ULONGLONG m_fileId with UINT_PTR m_fileId while preserving the layout (using unions) * ioninja: menu items for setting base timestamp as current line or current time * njscroll: new design for relative timestamps relative timestamps are per-logwidget now, relative to adjustable epoch (instead of baked into log in form of epoch records) * ioninja: pipe mon should inspect FSCTL, not IOCTL (for listen/disconnect requests) * devmon: support for IRP_MJ_FILE_SYSTEM_CONTROL (otherwise pipe-mon did not see listen/disconnect requests) * ioninja: pipemon - merge fileIdChanged and other informational messages (accepted, disconnected, closed) * ioninja: log message style unification (unable-to vs cannot, error (details) vs error: details) * ioninja: pipemon improvements: file-id cache & open error handling * ioninja: pipe mon plugin * axl: make win::FileHandle::getOverlappedResult return size_t, not dword_t (very easy to misuse on amd64) * axl: escape-encoding did not encode backslash properly * ioninja: escape-encode string values * ioninja: critical bugfix: FileStream hang on close * devmon: file name filter redesign -- instead of caching *all* file-objects and storing isMatch flag, we now only cache matching file-objects also, file name checks are only done during create/create-named-pipe requests -- microsoft states that FILE_OBJECT::FileName is only valid during IRP_MJ_CREATE/IRP_MJ_CREATE_NAMED_PIPE. * devmon: HashTable_removeKey should return TRUE/FALSE depending on whether the key was found * devmon: neither-method ioctl should also use AssociatedIrp.SystemBuffer for output buffer -- if IRP_BUFFERED_IO is set * devmon: support for FSRTL stream contexts (turns out, npfs.sys does not support them anyway) * devmon: HashTable method renames (remove->removeKey; removeEntry->remove find-> findValue; findEntry -> find) * devmon: critical bugfix: with NEITHER_IO and IRP_BUFFERED_IO we have to manually copy the buffer from AssociatedIrp.SystemBuffer (which would be done by IopCompleteRequest later, during APC completion) * devmon: we should remove file-object from cache also on unsuccessful open/create requests; therefore, it makes sense to rename isClose -> isLastRequest. * devmon: bugfix: we did not add CacheEntry to cacheMapEntry->m_value (so cache was essentially useless) * devmon: bugfix: incorrect setup for dm_ConnectParams * devmon: make wildcard string comparison in lowercase * devmon: file name wildcard filter * ioninja: session-started log record (epoch timestamp) we need some uniform rule for relative timestamps in different sessions. the problem is, often times establishing connection takes time and/or multiple steps, so it's difficult to use as time epoch. suggested solution is: before even attempting any new connection operation (resolving/parsing/connecting/etc), create an epoch record "Session started" (light bulb icon) * ioninja: relative timestamps * njscroll: relative timestamps * ioninja: update data ptr range check in log representor * jancy: replace rangeLength with rangeEnd in rt::DataPtrValidator it makes runtime bounds checks shorter * ioninja: having exception in ioninja-server during sync request loop caused ioninja-app to hang. on exception we have to cancel all sync requests first. * njscroll: rename MultiRangeHilite to OverlayHilite * ioninja: increase fade timeout (so it slowly fades) * ioninja: invalid check for unsigned/bigendian in PacketTemplateMgr * ioninja: keep/fade hilite timeouts adjusted to 750/500 msec * ioninja: checksum calculations for TCP/IP stack protocol headers * njscroll: bugfix: incorrect fade animation of multi-range highlight spanning multiple lines (typo, actually) * jancy: critical bugfix: dynamic sizeof/dynamic countof returned incorrect result for incremented pointers * ioninja: packet template action methods modified parts are highlighted in red (flash, then fade) * njscroll: leave 4-bit cursor mode when writing data * jancy: separate calc-layout and compile stages; * jancy: fix attribute block assignment for declarations * njscroll: multi-range hilites; fade animation for multi-range hilites. this is crucial for the ability to hilite modified areas * axl: gui subsystem: alpha rects & animation support * jancy: disable variant operators proper implementation requires more advanced redesign than i assumed initially. for member assignments, property address operators, indexation etc special new type like TypeKind_VariantRef must be introduced. importance/implementation-difficultly ratio is too low for now variants will be used for storage only. * jancy: eleviate dbl-ptr-size limitation on type size that can be stored in Variant; it was really annoying when you couldn't store long literal in variant, now it is allowed to store arbitrary sized values (large values will be stored as references) * jancy: disable tests if jnc_app is not built * ioninja: remove no-terminal flag from UDP session -- it will allow redirecting from/to UDP sockets * jancy: test10 did not zero-terminate memcat-generated buffer (which halted address-sanitizer on Mac in printf) no need to zero-terminate memcat-buffer automatically -- printf is unsafe, anyway * jancy: no need to zero memory in StdLib::memCat * jancy: force simple GC safe points if we compile with address sanitizer hitting GC guard page does not make address sanitizer happy. so just use simple GC safe point call if we make a sanitized build * axl: add macro to check whether we compile with address sanitizer * graco: add pthread to test_cpp * jancy: typo TypeKind_Void/ValueKind_Void * jancy: add full path to units (otherwise imports may be searched in the wrong sequence) * axl: io::findFilePath should also check *firstDir before trying (otherwise it will effectively search in current dir) * jancy: all old tests are added to the test suit in the future as during debugging of jancy compiler/runtime problems, corresponding test should be added to test/test_jnc folder * jancy: invalid function sequence in std.String/std.StringBuilder * jancy: HashTable classes didnt' properly mark opaque GC roots * jancy: allow multiple typedefs for the same name (as long as type matches) * jancy: fix CallConv::getThisArgValue with respect to argument coercion (applied to struct/union methods on amd64, both Microsoft x64 and SystemV) * jancy: don't erase allocas of lifted variables until the very end (they may be already stored in Value-s) * FunctionMgr::callStaticConstructor calls LlvmIrBuilder directly (OperatorMgr complained about conversion of function-ptr to thin-data-ptr in non-unsafe region) * jancy: incorrect assert in Value::getFieldOffset * jancy: test_qt had incorrect highlighting for dynamiclib * jancy: appending char array to fmt-literal should trim zero-termination (if any) * jancy: sample of disposable pattern in jancy * jancy: incorrect assertions in exception-handling code * graco: simple console test for graco cpp back-end (will use it later for testing and further development of graco) * axl: RagelLexer should check length for -1 (and use strlen) * jancy: separate between cross-scope and cross-function landing pads. we must restore previous gc shadow stack frame on exception landing pads -- even when the function has no roots. * jancy: major redesign of exception handling and scope escapes replace multiple allocas for sjlj-frames with a single re-usable sjlj-frame array; also much cleaner implementation for setting the correct sjlj-frame via landing-pad-blocks * jancy: try expression and try statement; try expression truely catches exceptions now (instead of just locking throw-if errorcode handling like before) * jancy: remove tmp gc root scopes (add tmp roots to user scope) this potentially keeps temp objects lingering longer than they are needed, but it greatly simplifies everything * jancy: when opening user scope frame map we should also update tmp stack root frame map insert point * jancy: bugfix: tmp gc root insert location was not alwats cleared between functions * jancy: we must open tmp gc stack root map in the beginning of statement/declaration (because of phi-functions) * jancy: when opening gc shadow stack frame map we need to zero gc roots even when we roots are not re-used (because of loops) use corelib function for simplicity * jancy: everything compiles, all the tests are passed (but some ioninja sessions crash on run) * jancy: sjlj struct * axl: rename LongJmp -> Sjlj also change layout of SjljTry struct (to make it usable from jancy) * jancy: initial commit for new exception model. new tokens, new grammar, no new code generation logic - yet. * ioninja: displaying functions as clickable actions in packet template widget * axl: AXL_NO_ASAN macro * jancy: bugfix: strlen should FIRST check the range, then NULL subtle bug, discovered by GCC address sanitizer * jancy: bugfix: off-by-one bug in MulticastImpl::removeHandler * jancy: bugfix: clear friendset and dual ptr type tuple map in Namespace::clear * jancy: jnc_sys extension library skeleton * jancy: minor fix in jnc_ext_Pch.h (after axl namespace shuffle) * axl: minor namespace shuffle (mt:: moved to sys:: some mt:: members moved to sl::) * axl: remove lex-related classes from axl_core and move them to axl_lex lib * ioninja: added all standard high-speed baud rates to the serial session * jancy: attribute values; clang-specific issues to be worked out pch settings for gcc do not work out-of-the-box * ioninja: package script fixes after latest cmake changes * bulldozer renamed to graco (grammar-compiler) * jancy: disposable pattern (raii replacement) * jancy: fixes in samples/02_dialog (compiles & runs) * jancy: fixes in samples/01_export (compiles & runs) * jancy: bugfix in stack lifting for structs with constructors * jancy: re-prime after destruct (may prevent tricky bugs like the previous one) * jancy: critical: replace MulticastImpl::~MulticastImpl with Multicast::destruct. turned out, newer GCC may optimize things out of destructors! * ioninja: remove debug printfs * ioninja: make ioninja compile with or without devmon * ioninja: remove devmon inclusions from main ioninja CMakeLists.txt (move it to MSI installer project) * jancy: also apply --source-name to the first file in list * jancy: multiple files can be passed to command-line compiler jancy.exe * jancy: cmd line app runs function by default (rather than compile-only) some sanity checks for the entry point function type * ioninja: compile profiling * jancy: always place alloca's in the entry block turns out it may cause stack overflow otherwise (alloca's in looped block) * jancy: bugfix: array_suffix incorrectly parsed expressions starting with integer (because this special "shortcut" rule). shortcut rule removed * jancy: check division by zero * jancy: anydata pointers * ioninja: remove transmit pane size limitations ................................................................................ version 3.5.5 (2016-01-08) * ioninja: typo in SerialSession.onParityChanged () * njscroll: bugfix: once record is hidden, it was impossible to un-hide it (even if filter were to return true) -- hidden bit was kind of sticky. * ioninja: add an option to disable terminal pane for stream sessions (as an performance tweak; plus it might also help to isolate problems when crashes occur) * ioninja: don't emit SerialStatusLineChanged event on IOCTL_SERIAL_GET_MODEMSTATUS, insteqd keep track of the latest status line and emit event only when some line actually chanes * njscroll: critical bugfix: incorrect destruct sequence in CacheMgr * ioninja: start log server suspended when opening log file * njscroll: support for starting server in suspended state, resume later. this is important for opening ioninja logs (before representer is set) * ioninja: change shutdown sequence (stop log server IO thread in the beginning, but close record file in the very end) * njscroll: bugfix: NotifyCode_RebuildCompleted was never issued on amd64, resulting in hang-on-log-rebuild * ioninja: serial session port prop is now gui.StringProperty (without port list suggestion) * njscroll: bugfix: incorrect cursor advance when typing at the end of hex-pane * njscroll: bugfix: incorrect logic for changing console size * axl: use CLOCK_REALTIME_COARSE only if it's available (fallback to CLOCK_REALTIME otherwise -- older Linuxes don't have CLOCK_REALTIME_COARSE) * axl: make libudev optional (use find_path to determine whether libudev is installed and choose whether to build AXL wrappers for it). sys::lnx::SerialPortEnumerator simply returns a fixed list of devices if libudev is not available * axl: don't use C++ rtti typeid anymore * cmake: make GCC rtti optional and OFF by default using RTTI under GCC is really annoying. AXL used RTTI to get nicely formatted typenames, however under GCC typeid (T).name () gives a mangled name anyway. Even bigger issue is that it's impossible to derive from an interface class (with virtual functions) defined in a -fno-rtti library (and LLVM uses -fno-rtti by default, so it would require to rebuild LLVM with LLVM_REQUIRES_RTTI=1). * axl: bugfix: memory leak in cf::TypeRef::getDescription () ................................................................................ version 3.5.4 (2015-12-31) * axl: minor update re moving time functions to axl::sys namespace * axl: fsm subsystem is separated into a dedicated lib * axl: cf lib (Mac OSX Core Foundation Framework wrappers) * axl: iok lib (Mac OSX IOKit Framework wrappers) * ioninja: serial enumeration is implemented on Mac (using IOKit) * jancy: detect USB serial disconnect io.Serial implementation for POSIX * jancy: io_base.jncx should link to libudev * axl: sys::lnx::Udev classes * axl: sys::lnx::SerialPortEnumerator (via udev) * ioninja: terminal scrollback limit implemented (translates to Terminal::setHistoryLimit) * ioninja: gui.ComboBox.clear () method * ioninja: refresh com port list in both Serial and SerialMon sessions * ioninja: handling IoError in SerialSession (especially important during USB serial ports surprise removal) * ioninja: log error format change: (error-desc) -> : error-desc * njscroll: TerminalWidget history limit implemented * jancy: IoError event for various IO classes (particularly important for USB serial ports) * jancy: FileStream overlapped bugfix (potential lost of read blocks) * axl: serial port enumerator * njscroll: bugfix in TerminalWidget: terminal could crashed on invalid input due to unverified escRestoreCursor ................................................................................ version 3.5.2 (2015-12-21) * ioninja: bugfix: File->Exit caused a hang * ioninja: dock state persistency fix * ioninja: font family should not be altered if it's not set properly * jancy: first add library, then do forcedExport * jancy: forcedExport did not check for addImport result * ioninja: mac dmg installer background image update * ioninja: update nj_io_mon to reflect the latest jancy change (.jncx is now .zip) * jancy: extension lib redesign: .jncx is now a .zip archive with .jnc source files and .bin dynamic library * axl: io::getTempDir * ioninja: add /d switch when signing installer (otherwise UAC displays some random tmp file name) * devmon: MSI installer fixes (did not work with UAC on) * axl: bugfix in AccessToken::getTokenInformation * jancy: remove jncx-info -- .jncx file is going to be a .zip archive * ioninja: installer can now execute nested MSIs * axl: zip read support (library axl_zip, class axl::zip::ZipReader) * ioninja: bugfix: installer did not ask to install Device Monitor if WinPcap feature was not selected * ioninja: rephrased installer message "XX-bit version already installed" * devmon: check for admin rights before admin-sensitive operations * devmon: update removeAllPnpFilters to ignore devices with no physical name (yes, it might happen in win10) * axl: simple access token wrappers * axl: sid wrappers * ioninja: proper handling of SSH re-authentification (need to reconnect when user name changes) * ioninja: appearance settings (fonts & colors) * njscroll: bugfix: icon placement was calculated incorrectly * njscroll: also, icon placement must be updated upon font change. * njscroll: critical bugfix: fold record should nullify current line * ioninja: bugfix: Serial was using wrong settings on open (should use combo boxes, not properties) * ioninja: zip package on windows changed to 7z * ioninja: mac packages (tar & dmg) * unix tar packages now use xz compression * ioninja: mac app bundle support * jancy: bugfix: jancy.exe crashed on --help command line switch (--import-dir had missing value) * ioninja: bug fix: session menu was created too late (caused an occasional crash) * bugfix: QT toolbar buttons had background on MacOS X ................................................................................ version 3.5.1 (2015-11-24) * ioninja: session link re-implemented (via dedicated Session Link dialog) ................................................................................ version 3.5.0 (2015-11-20) introduces: Jancy dynamic extensions (.jncx); Jancy multi-line literals; new Tibbo Device Monitor service for Windows with support for early attach to PNP devices; Serial Monitor plugin uses new Tibbo Device Monitor; Jancy compiles and runs on Mac OSX; * jancy: io::Socket::open did not translate io::AddressFamily_Ip6 to AF_INET6 * jancy: io::SshChannel did not report libssh2 errors properly (should use libssh2_session_last_error) * ioninja: hex-view & plain-text icons resized to 20x20 * all: port to MaxOSX * jancy: critical bugfix: using _alloca to determine stack epoch is not safe. turned out under certain conditions the first _alloca was above subsequent _alloca's (initializeThread () also uses up some stack). so we better use ExceptionRecordSnapshot pointer on stack, which is guaranteed to be above any subsequent stack allocations. * all: add -fPIC to all libraries. on amd64 gcc refuses to build shared objects unless all used static libraries are compiled with -fPIC. so, let's add -fPIC to all static libraries (libssh2/openssl for amd64 were also rebuilt with -fPIC) * ioninja: include .jncx extensions into deb & rpm package * ioninja: don't automatically add scipts/api to import path (rather, use paths.conf -- it's more consistent and more flexible) * ioninja: if server process terminates normally, just wait (rather than abruptly cancel pending requests -- this might result in losing compile error messages) * axl: allow read from SharedMemoryTransport even after remote disconnect * ioninja: add io_base.jncx. io_pcap.jncx and io_ssh.jncx to tar package * ioninja: premature termination of ioninja-server should report some error (before it was "no error") * ioninja: . in paths.conf should refer to conf dir, not to bin dir * axl: no need to have pvoid_cast (int) specialization on gcc * all: Version.h.in -> version.h.in * ioninja: msi and zip packages include tdevmon.msi and extensions: io_base.jncx , io_pcap.jncx, io_ssh.jncx, io_pcap.jncx * devmon: disable damn OACR in wdk build * ioninja: serialmon bugfix (m_dataSize was not set) * ioninja: SrvLib was not really added to module (printf/trace were not linked properly) * ioninja: serialmon had missing JNC_BEGIN_CALL_SITE around jnc::rt::memDup also, it's necessary to protect m_eventParamArray against race conditions in enumOpaqueGcRoots (we use JNC_BEGIN_CALL_SITE for that) * sh: devmon added to build scripts * ioninja: switch from old tdevmon to new tdevmon * ioninja: error propagation in shared extension lib nj_io_mon.jncx * jancy: error propagation in shared extension libraries io_*.jncx * devmon: cmake prefix change: DM_xxx -> DEVMON_xxx * axl: err::ErrorHdr& -> err::ErrorHdr* * devmon: forced stop support (for uninstall/reinstall). in case safe stop is not possible, service is still stopped (but the driver actually remains in memory in limbo state (reboot is required) * devmon: prevent unsafe filter device stoppage even in debug build (otherwise it's difficult to test release-expected behaviour) * devmon: critical bugfix in FilterDevice_dispatchCreate: caused a BSOD for non-exclusive devices. * devmon: msi package executes tdevmon.exe to perform necessary service actions (create, start, stop etc) * all: version.h.in VERSION_FULL is now defined as MAKELONG (MAKEWORD (VERSION_REVISION, VERSION_MINOR), VERSION_MAJOR) this is to allow specifying version in a natural way (2 hex digits for each version part, e.g.: 0x10203 --> 1.2.3) * devmon: critical bugfix: m_exclusiveFileCount did not account for initial ObDereferenceObject * axl: class sys::win::Process; sys::win::syncExec () * devmon: MSI package prototype * devmon: driver signing (now that the new Tibbo code-sigining installed) * devmon: listing devices (all or devices of specified class) * devmon: getting device info * devmon: installing/removing PNP filters using physical device name or device class * devmon: removing PNP filters for all devices * axl: support for enumerators in sys::win::DeviceInfo * devmon: starting and stopping core service should also update service start type * devmon: stats for PNP beacon device * devmon: proper propagation of DeviceType and DeviceCharacteristics in both FilterDevice and PnpDevice. * devmon: major update: support for early pnp device attach via pnp filter driver tdevmonp.sys * axl: setupapi wrappers (sys::win::DeviceInfo) * axl: better overlapped IO support in io::win::File/io::win::FileHandle * devmon: application displays driver version, description and build time * devmon: all the binary data of read/write/ioctl requests is displayed in hex-view * devmon: supports for driver description, build time and asynchronous reads in client library * devmon: build driver with cmake (invokes WDK build as custom command) * devmon: handle IRP_MJ_INTERNAL_DEVICE_CONTROL * devmon: don't copy extra bytes besides the header on ntm_NotifyFlag_InsufficientBuffer * devmon: provide information on driver description and build time * axl: mt::win::WaitableTimer * devmon: initial release of the new device monitor (driver, library and application) * cmake: WDK support * ioninja: old njdm (device monitor) is removed * axl: sys::win::Service/ServiceMgr wrappers for SCM * jancy: multi-line literals * enumeration of source files in extension libraries. * axl: mt::DynamicLibrary method renames (load -> open; release -> close) * axl: add pvoid_cast specialization for int (othersize it was impossible to use pvoid_cast (NULL) on 64-bit systems) * ioninja: remove lib-prefix from jancy extension io_mon.jncx * jancy: remove lib-prefix from jancy extensions io_base, io_pcap, io_ssh * axl: remove extern "C" from AXL_EXPORT macro (must specify it explicitly) * ioninja: link jnc.stdLib explicitly * jancy: stdLib must be linked explicitly due to the link-order importance * jancy: llvm tag decoration bugfix. * ioninja: migration to the new jancy extension model * jancy: jnc::rt::RuntimeRef -> jnc::rt::Runtime (opaque in shared extensions) * jancy: jnc2cpp.pl is made public * jancy: minor bugfixes in jnc_io_base jnc sources. * jancy: major extension framework redesign; now suitable for shared libraries as well. * axl: rtl->sl (bad naming, besides, rtl is now used in jancy lib, and there it really means run-time-support-lib) * jancy: extension framework is somewhat functional * axl: bugfix in rtl::StringSlice::isEmpty * axl: GUID_Xxx -> g_xxxGuid * axl: minor improvements in rtl::StringCache * axl: rtl::BoxList::copy () * axl: rtl::StringSlice ................................................................................ version 3.4.11 (2015-09-25) * ioninja: save-session and load-session are functional * njscroll: better to make renameRecordFile copy the file (on Windows it's not possible to remove FILE_FLAG_DELETE_ON_CLOSE flag unless using undocumented methods) * bugfix: io::MappedFile::write did not update m_fileSize. * ioninja: remove unlink for CmdLineFlag_TmpLogFile (now it's done automatically in njs::Server * njscroll: support for io::FileFlag_DeleteOnClose (also on POSIX) * njscroll: extra file flags argument for rename record file method * njscroll: support for layer removal * support for record file renaming * njscroll: njs::LayerMgr::removeLayer () * axl: io.renameFile (), io::copyFile (), io::deleteFile () * axl: io::MappedFile::write method (uses io::File::writeAt) ................................................................................ version 3.4.10 (2015-09-23) * ioninja: serial session: all serial settings are available via toolbar combo boxes * ioninja: pass plugin and log settings via temporary files during document creation * njscroll: additional BinDataConfig argument in njs::Server::create () * ioninja: bugfix: gui::ComboBox::setCurrentIndex did not update value field m_currentIndex * axl: io.TemporaryFile (on windows uses FileFlag_DeleteOnClose, on POSIX deletes file in destructor) * ioninja: setting for gc-safe-point method (write-barrier vs simple-call) * jancy: support for simple gc-safe-points via call (rather than write barrier). write barrier safe points are not currently possible on win64 because SEH 64 relies on being able to walk the call stack, and it doesnt work with llvm-jitted functions * jancy: critical bugfix in linux garbage collector * jancy: system V on amd64 incorrectly passed 128-bit structures * ioninja: support for redirecting of dbg::trace to ioninja-server-log * axl: support for redirection of dbg::trace to a file * axl: io::SharedMemoryTransport uses io::Mapping directly (without the overhead of io::MappedFile) ................................................................................ version 3.4.9 (2015-09-16) * jancy: critical bugfix: crash on windows 10 due to different base address of ntdll.dll (__chkstk was too far, more than 4GB away from the generated code, therefore relative call was not possible) ................................................................................ version 3.4.8 (2015-09-14) introduces: new Jancy pointer safety model; new Jancy garbage collector implementation; support for retro-colorization in Ninja Scroll engine; Syntax Highlighter plugin wizard in IO Ninja; new setting UI in IO Ninja * ioninja: apply method for Jancy Settings page * ioninja: set acceleration=true for large-value spin-boxes * jancy: setters for stack size limit, gc heap size trigger and gc period size trigger * ioninja: Colorizer plugin wizard is now called Syntax Highlighter plugin wizard; by default it generates a full C-language syntax highlighter including keywords, comments, and literals. * jancy: bugfix: accessing autoget property field of parent class did not work * jancy: improvement: allow non-closure-aware function ptr casts * jancy: jnc.AutomatonFunc typedef * jancy: function ptr type should update its signature on calc-layout. * jancy: minor bugfix in qt_test syntax highlighters * jancy: remove pseudo-chars ^/$ from jnc.Recognizer * axl: remove pseudo-chars ^/$ from FSM (was not an efficient implementation anyway) * ioninja: serial mon session now has filters for serial setting changes, serial control line changes, serial status line changes. * ioninja: show session settings by default when a session is open * jancy: JNC_END_CALL_SITE should only leave no collect region if no exception happened (otherwise gc shadow stack might contain invalid entries which will lead to crash) * ioninja: colorizer plugin wizard * ioninja: bugfix: protocol analyzer wizard used incorrect automaton declaration * njscroll: retro-colorize should redraw all the affected lines (previously only the last line was redrawn) * ioninja: colorization of protocol headers in network sniffer * ioninja: retro-colorize support * jancy: support for line continuation sequences in regexp literals * axl: support for line continuation sequences in FSM compiler * njscroll: bugfix: retro-colorize should drop CacheBinLineFlag_FinalAttrArrayReady * jancy: bugfixes in jnc.Recognizer: updating currentOffset should synchronously update lexemeOffset and currentOffset * jancy: changing lexemeLengthLimit didn't update lexeme buffer accordingly * njscroll: retro-colorization support * njscroll: bugfix: addPartBuffer did not properly update longest line length if lines were unmerged * njscroll: RepresenterTarget::writeRecord for strings. * ioninja: toolbar button binary data view switch * ioninja: critical bugfix: call-function-in-worker-thread req entry must be removed INSIDE jancy call site -- otherwise FunctionPtr might be deleted during gc-mark * ioninja: rebuild log progress dialog * ioninja: critical bugfix in all io-related classes: waiting functions should be enclosed in gc-wait regions (deadlocks otherwise) * ioninja: bugfixes in dialog classes construction * njscroll: rebuild log progress notifications * njscroll: remove half-impltemented colorizer architecture * jancy: JANCY_CALL_SITE_FINALLY * axl: AXL_MT_LONG_JMP_FINALLY * ioninja: bump up the size of setting dialog * ioninja: under kubuntu page area of setting dialog was too small to accomodate the minimum size of some pages * jancy: bugfixes in jnc::callFunction/jnc::callFunctionPtr * axl: remove mulDiv64 -- (bad performance and non-amd64 compatible); use simpler and faster approach with cast-to-double. * ioninja: jancy settings page is functional * ioninja: gc trigger sizes/stack limit size are being passed in command line and in setJancySettings msg * ioninja: gc stats is being collected by ioninja-server and displayed on jancy settings page. * jancy: gc alloc size trigger * jancy: gc stats is available. * njscroll: use axl::g::getPreciseTimestamp for log record timestamps and for profiling * axl: critical bugfix re timestamps on windows: now there are axl::g::getTimestamp () using GetSystemTimeAsFileTime and axl::g::getPreciseTimestamp () using QPC * ioninja: no need to unparent property widget in ~SettingDlg * ioninja: major update: new settings dialog * ioninja: all objects created by layers now consolidated and can be removed all together * ioninja: remove-layer and remove-all-layers are functional * jancy: markOpaqueGcRoots func should be a member function rather than static * jancy: improvement/simplification in weak function/property pointers: weak mask is gone -- only 'this' arg can be made weak * jancy: no weakening-operator is required now * jancy: scheduled function pointers are properly weak-traced now. * ioninja: better design for main thread scheduler (as dedicated opaque class) * jancy: add TypeFlag_GcRoot if class type has mark opaque gc roots func * ioninja: major redesign: each plugin has its own runtime (now it's possible to remove plugins one-by-one) * jancy: jnc::construct/jnc::destruct moved to axl * jancy: rename JNC_BEGIN/JNC_END to JNC_BEGIN_CALL_SITE/JNC_END_CALL_SITE * jancy: JNC_BEGIN_CALL_SITE_NO_COLLECT for creating non-collectible call sites * jancy: support for direct function calls (when already inside call site) * axl: memory allocation and ref-counting model redesign: * axl: factories are gone (were poorly designed anyway) * axl: support for easy switching of base allocator * axl: support for constructor arguments (!) * axl: switch from explicit destruct function pointer to virtual destructor in RefCount * axl: decrease of size for child and in-place RefCount objects * ioninja: minor api redesign: use opaque class fields instead of pointers wherever possible (before it was impossible to instantiate opaque classes as variables or fields) * ioninja: remove FileDlg, LoginDlg etc dialogs from plugin host (should be created by plugins as needed) * jancy: bugfix: reactor layout could not be calculated due to the bug in lookupIdentifierType -- variable or field always yielded DataRef (for classes should be ClassRef) * jancy: ApiBase --> ApiBaseTailPadding ; this is to allow arguments in base constructors. * ioninja: don't allocate log on gc-heap (it's static anyway) * jancy: critical bugfix: new (p) T () -> new (p) T * jancy: prevent zero-initializing already-primed headers * jancy: allocate large structs/unions/arrays directly on the gc-heap * jancy: minor bugfix: in multi-declarator declarations with implicit storage specifier, the first deduced storage specifier was used for all the other declarators (without re-evaluation) * ioninja: bugfixes and updates re io object on POSIX * jancy: bugfixes and updates re GC on POSIX * axl: mt.atomic functions for size_t on POSIX * ioninja: minor bugfix in io.Ssh: 64-bit size_t <-> int cast * ioninja: prevent unnecessary setError in Ssh::write () * ioninja: major cleanup of api prime/construct calls * jancy: ApiClassBox is gone; ClassBox does not implicitly call constructor * ioninja: major update of all the API re latest jancy change in opaque classes design * jancy: major opaque class redesign: allow deriving from opaque classes, allocation as variables or fields etc -- basically, opaque classes are now just like normal classes but with opaque padding. 'operator new' is gone. * axl: minor StringCache bugfixes * jancy: bugfix: variable declaration for non-creatable types caused a crash * ioninja: bugfix: exception in log representer caused in 'result' being used without initialization * ioninja: critical bugfix: jancy exception in plugin constructor lead to deadlock (mutator thread has been not unregistered) * jancy: callFunction uses new axl-mt-long-jmp-try * jancy: JNC_END_EX returns status (so JNC_CATCH can be in many cases omitted) * jancy: more strict checks on ExceptionRecoverySnapshot. * axl: long-jmp-try can now return status via AXL_MT_END_LONG_JMP_TRY_EX (so AXL_MT_LONG_JMP_CATCH can be in many cases omitted) * jancy: exception recovery snapshots * jancy: handle destructor exceptions individually. * ioninja: remove debug printf's from io_PCapDeviceUi.jnc * jancy: memory leak in jnc.StringHashTable and jnc.VariantHashTable * ioninja: bugfix: no collect regions in Serial::fireSerialEvent and PCap::firePCapEvent * jancy: major update: multicasts & snapshots now use gc heap only instead of malloc/free (in-destructors) * ioninja: bugfix: serial log had skipped trailing argument in formatting literal * jancy: disallow argument skipping in formatting literals * jancy: formatting literal improvements: remove special gc handling (use fat pointer instead) * jancy: check for unused formatting literal arguments * axl: minor fix re io.UsbDevice on amd64 * jancy: optimized method addRootArray for adding continual regions of roots * ioninja: major update of all api implementation classes re latest jancy changes * jancy: majort redesign of garbage collector and pointer-related structures * axl: minor update of mem-tracker report format * jancy: allow nested JNC_BEGIN-s (keep thread init count in tls) * ioninja: all the plugins compile * jancy: markStackGcRoot accepts target scope * jancy: StdFunction_CreateDataPtrValidator * jancy: jnc.memDup * jancy: LeanDataPtrValidator from class ptr * jancy: create reactor bindsite variables in entry block * ioninja: minor serial log colorization fix * axl: io.UsbDevice cleanup of 64-bit incompatibilities ................................................................................ version 3.4.7 (2015-09-07) * axl: undo broken QPC implementation of timestamps ................................................................................ version 3.4.6 (2015-07-16) * ioninja: devmon32 caused crash on installation -- replaced with the stable one from ioninja-2.3.5 * ioninja: minor serial log colorization fix * axl: io.UsbDevice cleanup of 64-bit incompatibilities * changelog: force re-generation of changelog.txt every time * axl: err::SystemErrorCode_ObjectNameNotFound->ENOINT * axl: minor bugfix in hex-encoding * jancy: support for binary numbers and binary-literals (token is still called HexLiteral -- it yields the same results in all regards) * axl: improvements in libusb support; extended test for libusb enumeration * axl: minor update in ref::Buf (use pointers instead of references) * jancy: bugfix: formatting literals did not handle int64/uint64 properly * axl: high-resolution timestamps on windows (GetSystemFileAsFileTime proved to be way imprecise) ................................................................................ version 3.4.5 (2015-06-23) * ioninja: bugfixes in scripts (re moving network adapter UI from API to common) * ioninja: updates re IP-defragmentation in all pcap-based plugins (Network Sniffer, TCP Flow Mon, UDP Flow Mon) * jancy: bugfix: deleteUnreachableBlocks used llvm::Value::hasOneUse () while it should have used llvm::Value::use_empty () * jancy: bugfix: logical or/and should promote reachability flag BEFORE compiling the second operand. * jancy: bugfix: struct/union member functions did not work (due to incorrect lean this-pointer) * jancy: bugfix: locally declared named types did not work (due to missing calc-layout) * ioninja: tcp-flow-mon, udp-flow-mon plugin updates * ioninja: hide "add new layer" button (not relevant now) * ioninja: gui.ComboBox crashed on addEditTextToHistory with null-string * ioninja: io.PCap.openFile * ioninja: ip4 header fragmentation fields * axl: io::parseSocketAddress with empty string now yields zero'ed ip4 * axl: io::PCap::openFile * jancy: jnc.List class * jancy: jnc.StringHashTable, jnc.VariantHashTable * jancy: bigendian bitfield support * ioninja: context menus for hex-edit & terminal widgets * bugfix in context menu (mouse-drag was not released) * njscroll: improvements in undo/redo: sanity checks, clear/setData/writeData registers with transaction history, caret update post setData/clear * njscroll: undo/redo in hex-edit widget * njscroll: select word on double-click * axl: don't disply 0.0.0.0 when formatting IPv4 address (display port only) * ioninja: Displaying update error message in About dialog in a single line. * ioninja: Displaying error description in About dialog when update fails. ................................................................................ version 3.4.4 (2015-06-08) * ioninja: bugfix: test code in MainWindow::onHelpAbout caused a crash * ioninja: update session to reflect recent jancy change re dynamic sizeof/dynamic countof * ioninja: serial session improvements * ioninja: gui.ComboBox.adjustSizeToContents method * jancy: dynamic sizeof/dynamic countof now require pointers rather than references * ioninja: serial: only report when current value is different from the previously reported one * jancy: bugfix: variantRelationalOperator did not work * njscroll: timestamp visibility setting (never, smart, verbose) * njscroll: add CursorFlag_EnsureVisible when setting cursor on mouse move (very useful when selecting data in big log so it's possible to jerk mouse around to scroll) * axl: force english for windows error description (otherwise it causes problems with chinese windows and njscroll log engine) * ioninja: change log update, website update * ioninja: rollback defaults of auto-convert single lf/single cr to lf/cr pair to FALSE (just wasted almost an hour trying to figure out why mc doesn't work in ssh session) * njscroll: bugfix: xterm saved cursor and caret attr should be part of screen buffer * njscroll: bugfix: invalid bin line size was used in cache processors (bug introduced with recent changes in unicode drawing) ................................................................................ version 3.4.3 (2015-06-01) introduces: TCP Flow Monitor, UDP Flow Monitor, proper display of unicode characters spanning across line borders, member operator for jancy enums * axl: release 5.3.7 * jancy: release 1.5.5 * ioninja: rollback defaults of auto-convert single lf/single cr to lf/cr pair to FALSE * njscroll: bugfix: xterm saved cursor and caret attr should be part of screen buffer * njscroll: bugfix: invalid bin line size was used in cache processors (bug introduced with recent changes in unicode drawing) * jancy: adjust function tag of std functions memcpy, memset, strlen etc as to avoid mapping conflicts * jancy: use zeroInitialize rather than store for stack variables * jancy: add memset, memcpy, memmove to global mapping (required by llvm intrinsics) * jancy: bugfix: getMemberOperatorResultType () and memberOperator () should use OpFlag_KeepEnum when preparing operand (now that we have enum member operators for simplified enum value checking) * jancy: remove explicit cast requirement for integer truncations (it's really annoying) * ioninja: tcp-flow-mon explicit cast size_t->uint32_t * jancy: bugfix: using enum constants from within the same enum caused calc-layout recursion error * jancy: bugfix: deleteUnreachableBlocks might have lead to situation when block is marked unreachable but still had uses. changed to a fixed-point computation to delete unreachable blocks in proper order * jancy: llvm.memcpy, llvm.memset, llvm.memmove * zero-initialize large variables with llvm.memset (rather than store) * jancy: member operator for enums (allows skip writing fully-qualifed member names when you need to check the value of a enum variable/field) * ioninja: tcp flow monitor/udp flow monitor icons from leo * ioninja: change the size of buffer back to 1600 (apparently, windows does not reassemble IP-fragmented datagrams, so it doesn't really matter) * added minhook library and test (for api hooking in ioninja) * cmake: create_flag_setting improvements: modify both C and C++ flags * automatically detect configuration-independent/configuration-specific flags. * ioninja: change min/max packet size limits to 0..65536 * ioninja: tcp flow mon session: support for out-of-order TCP segments * ioninja: udp session: read buffer should be 65535 * udp flow mon sessions: read buffer should be 1600 (no IP fragmentation supported yet) * ioninja: bugfix: sniffer session did not handle invalid UDP/TCP sizes properly * ethernet frame buffer was too small (should be 1600) * ioninja: filter combo in sniffer * bugfix in tcp flow mon * ioninja: re-arrange plugin groups (UDP is now client, TCP proxy is now server) * axl: io::SockAddr::parse also accepts single port string (results in IPv4 with zero-ed address) * ioninja: UDP flow monitor * axl: bugfix: rtl::String::insertSpace did not work properly on libc (memcpy vs memmove) * ioninja: TCP flow monitor (uses pcap to build clean TCP data flow log) * axl: SockAddr utils for equality checking and filter matching * ioninja: clean-up of test code in ioninja-server * ioninja: support for job objects (turns out to be unreliable and have *a lot* of corner cases) * support for waiting for parent object, so any of the following will terminate server process: 1) disconnect message or 2) shared-memory transport disconnect or 3) parent process finished * axl: mt::win::JobObject wrapper * ioninja: prevent windows crash & send report dialog when ioninja-server crashes * ioninja: remove windows-vs-linux closeKind configuration (always use SO_LINGER) * axl: test_mini simple socket test re graceful close/reset * ioninja: bugfix: doc.Storage incorrectly saved empty strings (as '(null)' values) * ioninja: --root flag was ignored * ioninja: sniffer session should use device name if description is null * jancy: strdup should return null for empty strings * ioninja: bugfix: socket property disconnectKind (graceful/reset) did not work * ioninja: disconnect message (rather than waiting for stdin to be closed) reading stdin interferes with the new design of gdb debugging * ioninja: major redesign of debugger interface: instead of initially staring ioninja-server in suspended state to give gdb a chance to attach and resume it later, we now start gdb directly. communication with gdb is supposed to be done via TCP port passed in a command line (e.g. -d=1234). * njscroll: pending cursor validation (when we set cursor into an un-cached area) * njscroll: don't scroll to bottom on resize unless the vertical scroll bar is maxed (before it was cursor based, which was really annoying) * njscroll: bugfix in CacheBinHexLine::addBinData: now we need to manually check if the line is full (and if yes, then try to fill extra utf bytes) * njscroll: let BinLine decide the size of accepted chunk (bin hex lines did that outside of addBinData, which now is wrong cause we want to save extra bytes past end-of-line for better UTF display) * njscroll: save up to 3 extra bytes in bin-hex lines (may help with proper UTF display) * ioninja: add changelog to windows packages zip/msi * ioninja: changelog * jancy: major bugfix: const 64-bit integer arithmetics used 32-bit operations (potentially resulting in garbage in high bits of results) * axl/njscroll: update in unicode bintext painting: use buffer past end-of-line (if available) to correctly display characters which are encoded acroll line boundaries * ioninja: CMakeLists.txt had qt rpath-link added twice (removed old one) * cmake: remove rpath when compiling release unix binaries * that also requires manually adding rpath-link (otherwise linker failes * to build qt-dependent binaries) * axl: warning suppression for gcc64 * ioninja: debian package depends field * debian dependency calc perl script ................................................................................ version 3.4.2 (2015-05-13) * don't try to display utf combining marks in hex-view and hex-editor (it turns into a mess anyways) * bugfix: merge threshold didnt work as expected (milliseconds were not converted to 100-nanoseconds) * bugfixes re suspended/resume states under linux * bugfix: removing packet template crashed ninja * 3 extra std log record codes (plain text, hyper text, bin) * msvc redistributables were not included in zip packages * jancy: critical bugfix in checkVariantScopeLevel re TypeFlag_StructRet ................................................................................ version 3.4.1 (2015-05-06) * jancy: critical bugfix: gc root variables should be zero-initialized even if they have initializer (cause initializer can induce gc-run) * jancy: critical bugfix: variant should have TypeFlag_StructRet (otherwise it results in invalid argument/retval ABI) ................................................................................ version 3.4.0 (2015-05-05) introduces: IPv6 support, named regexps and standard character classes in automatons, variants, dynamic library access, SSH session re-authentication, x-term changeable terminal console size * bugfix: scripts did not compile under x64 due to size_t->int cast (made cast explicit) * jancy: critical bugfix in gc (due to typo destructGuards of other threads were not marked) * jancy: null default for automatonFunc in jnc.Recognizer constructor * remove extra space from labels like "Address: " (now toolbar injects space widgets) * minor updates/bugfixes in jnc.Recognizer * jancy: bugfix: member automatons produced compile error (did not take 'this' into account) * axl bugfix: RegExpCompiler skipped repeat-char after ')' * jancy: recognizer samples updates * jancy: update re new regexp engine: AutomatonResult type (to distinguish between error and stop) * support for named regexp definitions in automatons * major regexp engine improvements: support for ^ $ anchors * support for std char classes \w \W \s \S \d \D \h \H * tcp plugin, ssh plugin -- minor updates in log record logic * size hints for toolbar combo boxes * forced spacings before toolbar labels and combo boxes * network adapter properties update in all plugins * AF_INET and AF_INET6 constants are exported into script namespaces (AF_INET6 is platform-dependent) * jancy: support for export of constants into script namespace * change 'debug-info' switch to 'debug' * jancy: bugfix: debug info for variant type * IPv6 support * IPv6 support updates: socket fixes, host name resolving, network adapter enumeration * adjust property grid drop-down width using QComboBox::sizeHint * linux fixes re latest socket changes * struct SockAddr as union of sockaddr_in and sockaddr_in6 * replace all out args of type sockaddr* with SockAddr* (preparation for IPv6 support in ninja) * network adapter enumeration * comply with WSAAddressToStringA on windows (or with inet_ntop otherwise) * IPv6 parsing and formatting linux fixes * IPv6 address parsing and formatting * jancy: check variant scope levels * throw long-jmp exceptions if library function is called from within non-throwing scope * check pointer should either soft-throw or long-jmp-throw (ignore try operators) * full-clear runtime in Runtime::destroy (caused crashes) * mt.win.Library fixes * remove duplicate strings in dynamic library error messages * jnc.Library uses axl.DynamicLibrary, works on Windows and POSIX * mt.DynamicLibrary class * update tar-building scripts to remove '.' * jancy: major update: unsafe functions, unsafe regions, dynamic libraries * jancy: declarator syntax update (so it's possible to use 'throws' and 'const' modifiers in any sequence) * SSH channel improvements: re-authenticate, console size change handling * jancy: std function jnc.throw () * jancy: bugfix: cast from variant did not handle null variant * gui.LoginDlg, gui.MessageDlg * remove 'object' (use 'class' instead) and 'object ' (use 'variant' instead) * jancy: variant relational operator (at runtime) * jancy: allow casts non-POD* --> POD thin* * jancy: make variants, structs, unions and arrays nullable (assigning null means zero-initialize) ................................................................................ version 3.3.3 (2015-03-31) * bugfix: crash during binary transmit page destruction due to incorrect destruct order * enforce min and max sizes in HexEditWidget::setData * bugfix: unexpected jump to the next location when opening find dialog with something selected in log * bugfix: memory leak fix in Array::reserve * find dialog improvements * support for copying into string/array rather than clipboard * bugfix in property factory (properties were not deleted) * re-organize packet template widget * only update properties within modification range * hex edit widget dataChanged event now contains info about modified range * jancy: variant support in formatting literals * jancy: variant type basic functionality implemented * jancy: remove jnc_VariantType.h * typo in copy/paste/undo/redo shortcut handling * bugfix: packages did not include packets.conf ................................................................................ version 3.3.2 (2015-03-16) * jancy: increase default stack limit (turned out jancy dialog sample failed with stack overflow on amd64) * axl: support for catchless long-jmp try * jancy: c++ exceptions replaced with long_jmp-based exceptions * axl: long_jmp-based exceptions (jancy: hard-throws do not work well with c++ exceptions) * cmake: fix CMP0043 warnings on newer CMake versions * jancy: critical bugfix in pointer arithmetics: increment of fat pointer was broken after pointer struct unification * jancy: remove thin-vs-fat varieties of check-ptr functions (doesn't work well under x64) * support for post-compile LLVM IR emission * jancy: namespace stack should also contain scope field (otherwise evaluateAlias nullifies current scope -- it opens namespace, in which alias was declared) * jancy: should also null-check class pointers before accessing vtable * jancy: property ptr vtable loads should add PtrTypeFlag_Safe to function pointers * jancy: all vtable entries should have PtrTypeFlag_Safe * jancy: also null-check thin function and property ptrs * jancy: null ptr checks use soft-throws if possible * jancy: function ptr and property ptr structs are the same for all pointers (cast is done at pointer access) * jancy: data ptr range checks use soft-throws if possible * jancy: data pointer struct is now the same for all pointers (cast is done at pointer access rather than pointer check) * jancy: prevent throw loops (catch label marks scope as non-catching) ................................................................................ version 3.3.1 (2015-03-06) * important bugfixes in automaton functions * IDE plugin wizard updates * support for hex-code escape sequence in regexp \x00 * DFA should use accept context of the NFA state with the lowest ID ................................................................................ version 3.3.0 (2015-03-04) introduces: automatons and recognizers, IDE wizards, import facilities * recognizers and automaton functions * IDE plugin wizards updates re automaton functions * IDE session plugin wizard is functional * bugfix: API slot conflicts * doc.Plugin.transmitString method * log.Writer should be allocated on heap, not on stack * jancy: std functions: strcat, strdup, memdup * bugfix: conflict between std api slots vs user api slots * jancy: bugfix: member automatons did not account for 'this' argument * jancy: minor update in comments in recognizer sample * jancy: test sequence fix * jancy: minor gcc fixes * jancy: bugfix in CallConv64::createArgVariables () * jancy: automaton samples (plus minor bugfixes) * axl: err::getError --> err::getLastError * axl: rtl::AutoPtrArray update * jancy: on linux gc-stratgy requires stack module before JITting * jancy: eof handling in recognizers * jancy: major update: automaton functions * axl: fsm library (finite state machines) * minor updates in protocol analyzer wizard * log.attachConverter accepts extra representerFunc argument * jancy: allow implicit casts void* to char* and to uchar_t* * minor updates in scripts and wizards * jancy: memchr, strchr is changed to return char* * Cast_Array should have OpFlag_LoadArrayRef (for now, to be removed later) * jancy: const-cast for arrays * allow implicit casts between integer types of the same size * udp socket compass button * jancy: minor updates in stdFunction.jnc and stdTypes.jnc * jancy: update in jnc2cpp.pl: support for namespaces so io ninja IDE can properly add standard items * plugin default settings should also be used when creating session by plugin file path * udp session: auto-switch remote address setting * paths.conf update: user-plugin-dir * debug trace support * fixes regarding failed add-layer * udp session: uses std log record codes TX & RX * updates re latest jancy changes * layer IDE wizards (answering machine and protocol analyzer) are finally functional * jancy: remove current thread module dependencies * operator new takes extra type* parameter * extra std functions for memory ops * bugfixes in pointer diff operator * jancy: mark heap allocations in new operator as temp stack roots * bugfixes regarding plugin open process * msi fixes in Add/Remove Programs entries * bugfix in PacketPad.jnc creation * minor gcc vararg fix * all plugins use import facilities to reduce compilation time * log representer is now a function rather than class (to enforce its stateless nature) * jancy: optional types and functions in API declarations * minor modifications in imports implementation * jancy: import declaration * setData checks for minDataSize * bugfix in CMakeLists.txt tests * improved logic for backspace from hex0 + cursor4bit * major redesign of packet templates * HexEditWidget bugfix in replaceSelection * HexEditWidget bugfixes in setDataSizeLimits * bugfixes and improvements in HexEditWidget * website -- introduction update * jancy: website markdown files * website markdown files * mascot update * minor update on wizard files * sessions and layers dirs are merged together (pugins dir) * wizards dir added (3 wizards: session, protocol analyzer layer, answering machine layer) * wizards.conf added * geeky ninja icon * package cleanup before the release * jancy: linux fixes * JNC_GC_ROOT_ENUMERATOR -> JNC_OPAQUE_CLASS * intptr->int warnings suppressed * jancy: dialog sample (properties, events, reactive programming) * jancy: gc bugfixes * preConstructor -> preconstructor * opaque class setup must specify actual size * export sample ................................................................................ version 3.2.5 (2014-12-31) * linux requires special handling of Ctrl+ * jancy: linux bugfix re multicast destructors * TerminalWidget should kill selection on screen buffer change * bugfix in TerminalScreenBuffer::getLine () * new defaults for ssh channel * pty: xterm * address: sdf.org:22 * user: new * bugfix in TerminalWidget (TerminalLine* could be referred from both m_history and m_console) * bugfix: paint always painted all the way down till the end of console * copy/paste support in terminal * axl: ecc-key: set utf8 for console output * xterm mouse support * application cursor key mode support in TerminalWidget * xterm support * jancy: bugfix: jnc.FmtLiteral must be a root (even though it has no fat pointers) * support for connect cancellation in SSH channel * intercept ctrl+ keys in terminal widget (optional) * exceptions in plugin constructor were not handled properly (main app remained waiting) * jancy: 'const' post-declarator modifier is made part of declarator_suffix (so 'throws' and 'const' can be specified in any order * changelog: show all comits after the latest release also * jancy: construction sequence change: field constructors -> field initializers -> property constructors -> preconstructor -> constructor (before field initializers were called as part of a preconstructor) * update ioninja api to re-used IfaceHdr of basetype (applies to Property->IntProperty and Plugin->Session/Layer) * jancy: major structural refactoring: * common code from DerivableType and Property moved to NamedTypeBlock * static and member destructors are called in reverse order of corresponding constructors * property constructors and field initializers implementation * class re-uses IfaceHdr from the first parent * jancy: VTable -> vtable * property getDefaultConstructor () removed -- properties don't have overloaded constructors anyway * jancy: property constructors, destructors, field initializers -- work in simple cases (still need to refine) * opaque class GC root enumerator placeholders * axl: CPCap -> PCap * jancy: allocate memory for formatting literals from GC heap * jancy: gc-mark opaque classes, multicasts and multicast snapshots * axl: bugfix: hexcode buffer must be at least 9 chars long * axl: bugfix in escape encoding -- must force null-termination of a hex code * axl: escape encoding now supports unicode characters \u \U * if pattern is incremental then start from the last found location * axl: bugfix: incremental boyer-moore find should use offset in case of empty pattern * axl: boyer-moore find should actually succeed on empty pattern * JNC_API_XXX --> JNC_XXX * jancy: JNC_API_XXX --> JNC_XXX * hexedit should paste text as hex if the cursor is in hex area * bugfix: copy from bintext line * jancy: prevent adding fields and virtual methods to extension namespaces (before it was possible to cheat by using in-property firleds or virtuals) * jancy: reactor recursion protection * refinement of comments in samples * jancy: sample pack comment updates by dima * jancy: minor sample updates * jancy: bugfix: remove TokenKind_Signed * jancy: gcc callconv fixes * jancy: major sample pack update * jancy: major redesign of extension namespaces * using declaration implemented * jancy: bugfix: arg_pass1 did not add parentheses into token list * jancy: bugfix: bitflag enum did not accept '0' (cause of recent integer const type change unsigned vs signed) * jancy: support for escape sequences in single-quoted literals * jancy: more bugfixes regarding try/catch/finally * jancy: bugfixes regarding try/catch/finally * jancy: jnc.setPosixError, jnc.setStringError std functions * jancy: bugfix: getInt32TypeKind_u/getInt64TypeKind_u should actually return signed types (otherwise all the integer constants are unsigned) * jancy: support for 'bindingof' without parentheses in 'onevent' statment * 'extend' -> 'extension' (for symmetry: extend is a verb, namespace is a noun) * jancy: allow casts from non-POD* to POD const* * jancy: update of the last commit * jancy: bugfix: tls object header was not constructed properly * variable scope level is NOT variabl->getScope ()->getLevel () (for example, local statics, or local tls variables) * jancy: assert statements implemented * changelog: linux fixes * changelog: created perl utility to generate changelog out of git commits * scripts updated to use dynamic sizeof instead of jnc.getDataPtrSpan * jancy: jnc.getDataPtrSpan is removed (not needed now when we have dynamic sizeof) * scripts brought to conformance with the latest jancy changes (i.e. dynamic casts and static new) * jancy: bugfix: getHeapVariableObjHdr caused a crash (cause of null type) * removed static new/stack new operators from jancy samples * jancy: prevent dynamic casts const->non-const * prevent casts non-pod -> void* * support for dynamic casts of arrays * jancy: variable object headers * dynamic casts * dynamic sizeof * dynamic countof * jancy: scripts brought to conformance with latest jancy grammar changes * jancy: grammar bugfix (now that we have dynamic sizeof/countof/typeof, type_name_or_expr must return Value, not Type*) * jancy: unmanaged heap -> gone * jancy: pragma pack -> gone * jancy: pack -> alignment * jancy: fenum -> bitflag enum * jancy: cenum -> exposed enum * jancy: dconst -> readonly * jancy: devent -> gone * jancy: dtypeof -> dynamic typeof * dynamic sizeof * dynamic countof * dynamic cast ................................................................................ version 3.2.3 (2014-11-17) * handle LIBSSH2_ERROR_EGAIN in SshChannel::write () * jancy: ragel highlighters included headers from src dir (which required adding src dir to includes) * cursor selection in ASCII area did not work properly * axl: MappedFile bugfix: under POSIX mapping view beyond end-of-file caused bus error ................................................................................ version 3.2.2 (2014-11-14) * post-fold caret, selection and hilite validation and update * sessions use ansi-escape sequences for hyper text * bugfix: don't update CachePage::m_indexLeaf.m_lineCount int CachePage::insertRemoveLines (already done in CacheMgr::onFoldRecordCompleted) * validate and update caret pos after fold completed * axl: HyperText -- actually, it should ignore \n: line-handling should be done before feeding data to HyperText * axl: bugfixes and updates * axl: AnsiAttrParser and HyperText bugfixes and updates * bugfix: length used before initialization * log widget validate cursor pos takes selAnchor into account * hex-edit widget validate cursor pos takes selAnchor into account * axl:fast widget scrolling support (instead of full redraw) * corner button bug fixes and adaptation for fast scrolling * axl:ansi attributes * hyper text uses ansi attributes instead of <> tags * forced limit in JncRepresenterTarget::addPart () -- Sniffer plugin occasionally crashed on bad packets * workaround: corner button was drawn on black background on linux * axl: bugfix: std palette did not mask out alpha channel * bugfix: widget should stop caret timer on destruction * axl: QT monospace font force integer metrics * QT std palette * axl: TextPaint update * LogWidget/HexEditWidget/Terminal widget update to use new TextPaint * cmake: include_directories should not be part of master CMakeLists.txt files * activationFinished signal should use int status (moc doesn't do well with nested typedefs) ................................................................................ version 3.2.1 (2014-11-10) * axl: default font flags should be 0, not -1 * axl: major gui subsystem redesign * axl: ecc-key -- linux update * nj_keygen is removed (no need anymore) * axl: ecc-key utility for generating license keys & product keys * LicenseMgr update -- rely on axl::cry::EcKey * support for 2 license kinds and 3 keys (personal, workgroup licenses + activation key) * axl: ecc product keys implemented * axl: open-ssl wrappers (axl::cry) * all codecs moved to axl::enc namespace * base32 encoding implemented ................................................................................ version 3.2.0 (2014-11-03) introduces: Linux packages, Java naming convention, log search functionality, auto-update, option to sudo plugins under Linux * update-database change (split by os-cpu) * shell script updates (rpmbuild and debpkg should be sudone) * axl: gcc fixups in BoyerMooreFind * signed-unsigned comparison warning fix * reverse find implemented * LogWidget::processCache -- support for reverse line order (if startLine > lastLine) * bugfix: mouse wheel delta can actually be less than 120 * so need to accumulate deltas * find improvements * switch to new boyer-moore find * text-find and binary-find * case-sensitive and whole-word-only features are functional * (find-prev not yet) * hex-edit data-changed notification * find uses new boyer-moore instead of boyer-moore horspool * jancy: tests->test * axl: boyer-moore bugfixes * tests->test * axl: boyer-moore enhancements: * whole-word support * pass offset in incremental-find * find and reverse-find return same offsets * axl: full boyer-moore (good-skip/bad-skip) * axl: horspool variation (bad-skip only) * axl: utf support in boyer-moore find * axl: case-insensitive find (unicode-aware, but no special cases) * axl: reverse boyer-moore find * axl: incremental boyer-moorefind * cmake: configure_file_w_permissions doesn't try to detect whether the full dst path was specified or not (use CMAKE_CURRENT_BINARY_DIR for output) * package scripts bugfixes * auto-update file format redesign (to support multiple installation types: msi, zip, deb, rpm, tar) * bugfix in AniLabelWidget * AniLabelWidget optimization attempt. CPU load showed 5% on Release build when About dialog was shown. ridiculous! i supposed switching from QTimer to QBasicTimer, caching rich text and drawing only the visible part of it would speed up animation. turns out, no. the solution happened to be drawing background by hand, cpu load dropped to reasonable values after that * typo in transportFlags * hide run-as-root without layout distortion (change QHBoxLayout->QWidget container) * run as root via sudo * delete session temporary files * also, fixups regarding closing of the transport when terminating on * errors * axl: attach/detach file handles (io.File, io.MappedFile, io.SharedMemoryTransport) * axl: FileFlag_DeleteOnClose calls unlink () on linux * desktop file for deb & rpm packages * remove tmp files generated as a result of erroneous linux conf files * jancy: don't create imports when parsing std function declarations * linux fixes * linux packages * package update (use specialized paths-*.cmake, without unnecessary libs/tools) * zip package * msi package update (do not expand paths.conf on installation * keep conf files in ./conf dir) * detect conf dir * expand std paths in paths.conf * axl: getExeFilePath (), getExeFileDir () * zip packages for publishing * jancy: std function declarations are moved to jnc file just like std types * internal types are hidden from public jnc namespace * support for jnc.String/jnc.StringRef/jnc.ConstBuffer/jnc.ConstBufferRef/jnc.BufferRef in formatting literals * StdLib.getErrorDescription is moved to dedcated type jnc.Error (this way property m_description is not mapped unless type jnc.Error is really used) * jancy: return error if formatting literal doesn't know how to format a value * jancy: automatically cast from Derivable& to Derivable* * jancy: operator cdecl ... () is added to String and StringRef * jancy: operator ... / operator cdecl ... (to specify how to pass types in vararg functions) * jancy: typo in jnc_String.jnc * jancy: struct constructor cast should be prevented not via type map, but rather via simple bool flag -- multistep conversions should be disallowed anyway * jancy: String/StringRef/StringBuilder * jancy: ConstBuffer/ConstBufferRef/BufferRef/Buffer std types draft * jancy: support for skipping the first function overload * jancy: prevent infinite recursion when trying struct constructor casts * jancy: bugfix: formatting literal was losing the ending portion * jancy: formatting literal improvements (support for indexed-based argument injection) * jancy: function_suffix_rslv to allow C++-style constructors * jancy: setas declaration -- for specifying setter argument types * jancy: getArgCastKind for Value arrays * if CastOp::cast (): if constCast fails, fall back to llvmCast (essential for constructor-casts) * CastOp_Struct uses constructor-casts as a last-resort cast * jancy: std typedefs (size_t, uint_t etc) * jnc.String/StringRef draft * update re latest jancy changes * jancy: api overload mapping redesing * api macros for mapping struct and union members * jancy: overloaded function support via JNC_API_XXX macros * enum ApiSlotId -> enum ApiSlot * axl: replace ListLink with Entry in ListData -- this way it's easier to debug (can walk and inspect the whole list in locals/watch) * jancy: std type definitions are moved to perl-processed jancy source files (instead of manually assembling struct types by hand) * sh: test projects shell script, testing is made part of full rebuild * jancy: decided to remove throw conditions (it's never really needed * but it requires not-so-elegant syntax, a dedicated keyword and tricky error propagation logic) * sh: small updates in shell script output * cmake: disable linker warning 4221 (no public symbols in a source file) * update for the last fix: turns out, the style is not automatically deleted but it is altered upon during (and maybe after) setStyle (). therefore, we have to use the new instance every time and also make sure it doesn't linger indefinitely * bugfix: plugin list widget style should be dynamically created rather than static * ensure all stylesheets use namespaces * don't pass full source file list in command line, instead pass a single plugin file * switching read-only mode set 2px-wide caret (must be 1px) * axl: CMakeLists.txt update * axl: remove length limit in dbg::trace * axl: make gcc happy about names from base template type * axl: rename crc16 (used in Packetizer) to "checksum16" (cause it was not crc16) * remove redundant ...Kind suffixes from enum names (after java-style conversion) * keygen: signed/unsigned comparison warning * axl: Iterator redesign: instead of storing ListLink pointer, it's better to store Entry pointer -- this way it's easier to see contents of iterator in the debugger * linux fixes * qtWidget -> QtWidget * keygen: fixed size_t -> int warnings on amd64 builds * java naming convention * jancy: java naming convention * bulldozer: java naming convention * axl: type names brought to java naming convention * axl: variables, fields, functions brought to java naming convention * keygen: during linux port attempt it stopped compiling under windows restore for now, refactor/port later * windows shell scripts update -- detect CPU by default * don't build keygen on linux yet * keygen doesn't compile on linux and needs minor porting. but it has to be refactored anyway, so postpone that for now * linux shell script updates * calculate build times * halt build process on any error * use native processor architecture by default * accept processor aliases (x86/i386, amd64/x86_64/x64) * bugfix: shell script rebuild-all calculated elapsed time incorrectly * wix installer fix (incorrect redist dir) * shell script updates: add calc-time-diff script to calculate build times * switch to lowercase (most examples on the web use lowercase) * wix installer updates * shell scripts no longer copies stuff into files/ dir before invoking heat/candle/light (instead, it uses original files directly) * INSTALLDIR layout has been redesigned a little bit: executables, redistributables and conf files go into INSTALLDIR/bin * uninstall shortcut is created * remove 'scripts' folder from the project (no more CMakeLists.txt in 'scripts') originally it was useful to edit plugin and api .jnc files from Visual Studio. now it's much more convenient to do with IO Ninja IDE ................................................................................ version 3.1.2 (2014-09-23) * trim user name and product key * disabling activation bugfixes * activation disabled * sample packet-templates.jnc is put into scripts/samples * nj_keygen app * sh: build for windows no longer requires WIX in the PATH * installer build scripts re-engineered * installers for linux: deb, rpm, tar * bulldozer: bugfix: CppParserUtils.lua should be prepended with '/' * axl: bugfix: incorrect posix flags in CFile::Open * cmake: Paths.cmake.template had QT_DLL_DIR missing * bulldozer: frame for c++ parser is split into 2 files (CppParser.cpp.in and CppParser.h.in) * lua support code is put into CppParserUtils.lua * bulldozer.cmake is updated to support generation of both *.llk.cpp and *.llk.h files in one go * sh: update: clean everything first, then build * cmake: bugfixes: added @ONLY for generated cmake modules * sh: update of linux set-variables shell script * jancy: update: on 64-bit there are no divdi3/moddi3 * jancy: add mappings for divdi3/udivdi3/moddi3/umoddi3 * cmake: bugfix: generated files in cmake/latest had TARGET_CPU already substituted, need to use @ONLY * debug trace in PaintLineRange * sitara transfer plugin * bugfix: serial session port-open did not use current values of Baud and FlowControl combos * crc16 * typo in CMakeLists.txt * bugfix: filteransmitpage -- m_progressDlg was not nullified (caused a crash) * git: remove set-variables.template, remove set-variables from gitignore * git: remove cmake/latest/*.* from history * git: typo in gitignore * cmake: generated cmake files from the latest build are placed in cmake/latest * cmake:sh: cmake and build shell script updates for linux * cmake: sh: major refactoring of cmake and shell scripts * linux fixes * cmake: updates for linux * axl: libusb support ................................................................................ version 3.1.1 (2014-08-28) * fold record-related bugfixes: bindata config was not passed and follow-up foldrecord line indices were not re-indexed properly * log file save / load works now (before there were access issues) * remove io::EFileFlag_ReadOnly from record file open -- otherwise cannot fold * add line feed \n to record, index node and merge point signatures * axl: shared memory transport: add line feed \n to message signature * tmp-log-file command line switch -- adds io::EFileFlag_DeleteOnClose when opening log file * axl: shared memory transport uses io::EFileFlag_DeleteOnClose when creating transport file * axl: add FILE_SHARE_DELETE flag to file open flags -- important when using io::EFileFlag_DeleteOnClose * bugfix: not all the property grid calls were properly tunneled * jancy: always create alloca in entry block * otherwise it causes crash due to garbled address of __chkstk on windows 8 * actually, it's an LLVM bug (incorrect sign-extension of address during lowering -- most likely they store address in 'int'), but the easy workaround turns out to be simply move allocas to entry block * bulldozer: version info, cmdline parsing via axl facilities * udp session: save last port in combo box history * git: remove set-variables.bat from history * jancy: bugfix: atoi was declared incorrectly * sh: to avoid confusion, renamed 'build' folders to 'sh' -- 'build' is commonly used as build location (='prj' in our case) * one week worth of refactoring ................................................................................ version 3.1.0 (2014-08-15) initial public release of IO Ninja 3 (accumulation of 3.0.x improvements) * showing error message when trying to install 32-Bit and 64-Bit versions at the same time * axl: bugfix: incorrect cast in return from -1 * include tag suffix and cpu suffix in version string * axl: dword_t -> size_t (otherwise it's very error-prone on win64) * version info resources * visualizing state about linked or layered sessions through MDI tab icons * copying redistributables from the folder named after TARGET_CPU specified in set-variables.bat ................................................................................ version 3.0.21 (2014-08-13) * added null-ptr checks to keyboard handlers (crashed on empty log) * removed old stdin-stdout transport (use shared memory transport) * use stdin in ioninja-server to control life time (once stdin is disconnected, terminate ioninja-server process) * remove m_menuAction from Document (not really necessary) * each session has its own menu (before menu items from different sesssion accumulated in stdMenu (SessionMenu)) * added icon for the executable on windows * document didn't remove widget from status bar on deactivation * cmake: copy_qt_dll_files incorrectly created Debug or Release file (instead of the directory) which, in turn, prevented subsequent builds * jancy: on MSVC it is illegal to create zero-length array, so CApiBaseT was adjusted * bugfix: scroll buttons in MDI's tab bar displayed transparent * changed it to white background with a solid border matching rest of the tabs * a couple of gcc warning-related fixes * bulldozer: a couple of gcc warning-related fixes * compiles and runs on linux-x86_64 -- finally * jancy: x86_64 System V ABI support * cmake: gcc setting for no-invalid-offsetof warning * jancy: gcc tail-padding issue workaround * axl: shared memory transport for POSIX * shrinking tabs in MDI's tab bar as much as possible before showing scroll buttons * 64-bit installer * 64-bit installer can be run by setting TARGET_CPU flag in set-variables.bat to 'amd64' * minor bugfixes in jancy files * tests for running ioninja-server on all official plugins * -x switch for passing plugin project file instead of full list of jancy source files * axl: CParserT::ParseFile * axl: CString 'operator +' for utf32_t (was missing) * axl: CMapping and CSimpleMappedFile updates * bugfix: struct LineAttr was incorrectly declared (layout inconsistency ninja scroll C++ vs jancy) * jancy: bugfix: incorrect struct aligned size calculation * jancy: remove SRet attribute from Microsoft x64 calling convention (LLVM JIT crashes if sret is present) * remove compile warnings * jancy: bugfixes re amd64 * jancy: bugfix: calling convention was not properly assigned to user functions * jancy: thiscall support * default calling convention for methods is still cdecl (unless explicitly specified as 'thiscall') * axl: rtl::CAutoPtrArrayT * jancy: Microsoft x64 calling convention implemented. IO Ninja runs under amd64 * copy QT dlls * cmake: copy QT dlls for ioninja and JncQtTest * bugfixes: uint_t -> size_t (important on amd64) * cmake: macro for copying QT dlls -- important when 2 builds of QT (both x86 & amd64) present on a computer * axl: bugfix: register format should be uintptr_t, not uint_t * jancy: bugfix: formatting literal for char array reference ................................................................................ version 3.0.19 (2014-07-28) * replace app-srv communications via stdin/stdout with shared memory transport, results in dramatic performance improvement under windows * axl: shared memory transport * simple mapped file * cross-platform mapping object * forgot to uncomment subsystem linker pragma * save log as text progress dialog, start session by specifying either session name, or session plugin path * jancy: when adding methods to a class, no need to overwrite tags (Parser should do it) * wrong QT file filter (extensions should be space-separated) * StatusBar.m_pane should be a const property * jancy: function tagging critucal temp-fix (operator-new -> operator_new) * show line/col/offset status panes for log documents * different cache page size defaults * cache process cancellation * find progress, find completion notifications * find dialog progress bar & cancellation support ................................................................................ version 3.0.18 (2014-07-18) * bugfix: installer did not find correct files for updating WinPcap and Serial Monitor ................................................................................ version 3.0.17 (2014-07-17) * re-engineer action UI in all sessions: replace pairs of action (like Open/Close, Connect/Disconnect etc) with single action with toggled semantic * added 2 properties to gui.Action: m_text & m_icon ................................................................................ version 3.0.16 (2014-07-16) * mark inactive MDI tabs which have unseen log records * status panes for the rest of plugins (file, pipe listener, serial monitor, network sniffer, tcp listener, tcp proxy udp socket) * status panes for Serial plugin * jancy: reactor starter should also bind to bind-sites in skipped branches of operators &&, ||, ? * currently, && and || are replaced with full-circuit evaluation via bitwise & and | * obviously, this is not a 100% clean solution * in the future on potentially skipped bind-sites should be flagged (if skipped in starter, then delay-bind) * jancy: bugfix: reactors potentially stored invalid event pointer in bindsite * status panes for SSH Channel plugin * status panes for Listener Socket plugin * status bar API * status panes for Connection Socket plugin * jancy: bugfix: static fields/variables with initializers were checked incorrectly * jancy: static field initialization * find dialog Cancel button connection * make a compilation-time define for choosing whether or not to show cache miss using different background color * NetworkSniffer Session: apply capture filter when pcap is open * improvemnts in copy from log (use the application/njs-bin) format in addition to text * edit commands support for HexEditWidget * Copy Bin as Jancy: Hex-literal command * improvements in paste operation in hex editor * copy/paste in hex editor * registry formats support (hex editor should copy both textual representation, which depends on cursor pos AND the actual binary data) * save log as text fixes: * \r\n on windows * keep IsTimestampVisible setting * keep IsIconVisible setting * keep IsOffsetVisible setting * different background for hexedit hex and ascii panes * read only mode for hex edit * new logo hexedit -- always have 1 line * even when there is no data * linux fixes * build scripts: mkdir --> mkdir -p * sniffer session: incorrect replace (new io.PCapDeviceDescList --> * io.createPCapDeviceDescList) * io_Socket updates re disconnect event * io_SocketAddress compatibility fixes ................................................................................ version 3.0.15 (2014-07-02) * sign binaries (including installer MSI) * jancy: change default throw conditions: retval < 0 for signed integers * retval == -1 for unsigned integers * update scripts as they don't need explicit cast literal->char const* in conditional expressions * jancy: array ref -> data ptr conversion is not performed by default anymore, instead, now it's an optional flag to PrepareOperand and PrepareOperandType. adjust GetConditionalOperatorResult: works for literals and keeps references if true and false types match ................................................................................ version 3.0.14 (2014-07-02) * TCP close kind property, TCP disconnect kind flags in SocketEvents, added 'from' information to Connect log record, added 'close-kind' and 'initiator' information to Disconnect log record ................................................................................ version 3.0.13 (2014-07-01) * msi installer now includes qico.dll -- turns out QT needs a plugin for .ico support * remove record size limit to decide whether to buffer or not (it causes empty "stripes"). instead, always buffer during incremental update (non-rebuild). also, enforce check for missing parts in cache mgr (instead of assert) * don't report disconnect if GetIncomingDataSize () is zero -- there is a race with the main thread, so 0 is actually normal * jancy: bitwise & operator yields fenum if one of the operands is fenum ................................................................................ version 3.0.11 (2014-06-23) * jancy: replace no_specifier -> wo_specifier in *.llk files * bulldozer: generation of "clean" EBNF presentation of input grammar * all the plugins now create opaque classes with 'new operator' (instead of 'createXxx' functions) * jancy: operator new for opaque classes * small bugfixes after linux port * api.conf and plugins.conf are made platform-dependent * sh: update set-variables.template for linux * git: remove set-variables from git history * git: update gitignore to include build/linux/set-variables * bugfixes: sockets, SSH * posix socket used incorrect error code for asynchronous connect * SSH channel was reporting incorrect event after TCP connect completed * include --debug flag for ioninja-server process on linux if NDEBUG flag is not set * sh: build scripts for linux * axl: remove ui_mainwindow.h * bugfixes: linux version is now functional * axl:gcc-compliance: project compiles on linux * jancy: bugfix: tmp gc roots were unconditionally nullified * nullify gc-root happened post-statement regardless of whether the block * is reachable or not. this caused an abort in MCJIT cause code was * injected past basic-block terminator (return statement). the solution is * to only nullify tmp gc rool list if the block is reachable * bugfix: installer did not overwrite all files when used in repair mode * bugfix: installer did not configure paths.conf due to missing rights * using a deferred custom action for gaining elevated rights. Must also use a further custom action for setting custom data for the deferred custom action * bugfix: corner button displayed too small ................................................................................ version 3.0.11 (2014-06-12) * new icon resources * bugfix: bin text map was calculated incorrectly if the data block ended in-between multi-unit code point.. * bugfix: bin text map for the lines terminated with '\n' * typo in SnifferLog_Ip.jnc * document activate/deactivate improvements: use mdiArea->activeSubWindow instead of event argument * save current transmit page * removed merged record count tracking from index mgr (not releavant) * bugfixes: hiding messages did not properly work before. remove binary record count, merged record count and foldable record count from index leaf (not really relevant) * instead add hidden record count (important for caching). binary and foldable record count must still be tracked in index mgr (to determine whether changing bin-data-config should finalize the current leaf or not) * bugfix: serial log filter used incorrect flag variable for status line change check * bugfix: CIndexMgr incorrectly determined whether the first part was merged or not (relied on PartIdx, which gets reset every time parts are not merged). replace it with IsFirstPart flag * packet template editor dialog -- remove icon from the caption * bugfix: io::CSerial should force-set settings after open (otherwise baudRate, flowControl and other properties get out-of-sync, and, more importantly, read interval might be invalid (serial.read might wait for the whole buffer to fill) * bugfixes: SSH & TCP connection should close socket when remote side closes connection (otherwise there is a possible syncId mix up with SocketAddressResolver) * replace ProgressDlg and QFileDlg members with pointers -- this way plugin startup dialog for the documents shows up faster and response better (most likely, QFileDlg constructors initiates some jobs in background?) * bulldozer: lookahead statement syntax change ................................................................................ version 3.0.10 (2014-06-09) * file transmit is functional * resources update by leo: plugin icons, file icons, installer splash & banner ................................................................................ version 3.0.9 (2014-06-03) * bugfix: unexpected mdi tab switch after transmit pane tab switch (findNextPrevChild issue) * bring back file transmit page * proxy session icon * improvements of focus handling (set focus to contents of tab widget on current tab change) * small icons for drop down menus / tabs * big icons update from leo * small icons * new icons * log widget, terminal widget & hex edit widget now provide events for handling cursor pos change * ioninja main window displays line, col, offset, range in status bar * bugfix: incremental find should be reset when lines are not merged * basic find functionality is implemented (no case-insensitive/whole-words yet) * MRU list implemented * save-log-as-text is functional * log widget keyboard handling fixes * new layer dialog brought to consistency (vs new session dialog style) * log copy/save-bin-to-file is functional * corrected edit button title in binary transmit settings * cache processing prototypes (find, copy, copy-bin-as, save-bin-as-file, save-log-as-text) * plugin groups * remove CCopyMgr, CFindMgr -- they will be part of CLogWidget * add dropdown for New Layer toolbar command * bugfix: MDI area's tab bar and sub window was drawn too far to the right * implemented group functionality for New Session dialog's list view (including test groups) * displaying corner button in packet template property grid over header * bugfix: shortcut for 'New Session' action didn't work * modified MDI tab close icons * bugfix: MDI area's tab bar was drawn to far to the right * made selected MDI tab and MDI pane look connected by removing tab border * revert back TX & RX codes (not really important -- just so it matches with previously saved logs) * major update of logging engine * fold flags are now stored in record file rather than index file -- this allows for persistency of fold state across log file rebuilds/reopens * record code no longer needs to have mergeable flags: parts are what's merged, not records * instead of log filter which generates secondary log we now have 2 options: 1) simple filter just hides unwanted messages (using fold flag field) and does NOT generate secondary log and 2) converter, which does generate secondary log. when only simple filter is attached, fold state persist across log file rebuilds * bugfix: 'New Session' action in menu also contained drop down list * separated 'New Session' action in two actions one containing drop down list used in toolbar and one without used in standard menu * drop down list in New Session action with list of all session providers * using rectangular MDI tabs with custom close icon * jancy: bugfix: COperatorMgr::GetArgCastKind didn't take default arguments into account * added corner button to packet template property grid * displaying Packet Template Editor when clicked * qtpropertybrowser: Added method for access to tree widget * bugfix: Packet Template Editor wasn't centered relative to the settings dialog * displaying message in About dialog when update check failed * corrected name in About dialog's team info label ................................................................................ version 3.0.8 (2014-05-22) * bugfix: corner button not positioned correctly in terminal widget * this was due to sizeHint() being called after updatePos() resulting in an incorrect corner button size * UI/API prototype for copy/find * save/load log is functional * ClearCache -> Rebuild (cause it's not just clear cache but also clear index) * clear part buffer after UpdateIndex (cause subsequent SetBinDataConfig might re-send what's left in the buffer) * set representer guid on log server create * axl: TGuid::Parse * added readme and license files to installer resources * bugfix: installer couldn't be built because of old reference to session-providers.conf instead of plugins.conf * save -> save session, save session as, save log as * save log implemented * forgot to uncomment subsystem/entry pragma in main.cpp * refactoring of license management UI * animated label widget with team info in AboutDlg * AniLabelWidget (for running line on team info) * implemented license registration and activation (server-side response handling not implemented yet) * listener is now a function* rather than class* -- this allows easy scheduling (we normally want to invoke listener in main thread) * listener sensitivity check (live-records-only vs all-records) * jancy: instead of marking as gc-collectible, add a tmp gc-root for every heap-new (marking as gc-collectible still does not invoke gcEnter/gcLeave if no roots are found). besides, gc-roots are still necessary for temporary closure objects * jancy: mark every function invoking gcAllocate as gc-collectible * jancy: scheduler had 'safe' modifier in function pointer argument -- better take it out (not that necessary, and developers (me included) will constantly bump into 'override signature mismatch' * transmit history maintans 2 current blocks (text & binary) * changing tabs in setting dlg also changes to the corresponding tab in document/transmit widget * bugfix: fold record did not adjust cache page state line idx * bugfix: if fold record line count delta is non-null, invalidation should range all the way to the bottom * bugfix: foldable records calculated line count incorrectly (did not nullify m_pCurrentFoldableRecord) * sniffer interface list now includes IP address and excludes device name (which is real ugly) * generic file session: distinguish between file stream kinds (disk files, pipes, serial devices) * allow writing past EOF for disk files * add clear function for disk files * New Layer action is placed in File Menu and main-toolbar * document-specific actions are disabled if there is no active document * xmodem receive is functional * xmodem transmit is functional * gui.FileDlg, gui.ProgressDlg, io.MappedFile * Link Sessions functionality is now accessible via Setting Dialog rather than session tab context menu * filtering layers are functional (PPP sample) * *.njssp -> *.njplg * jancy: bugfix: POD*->void* should always be implicit * bugfix: pointer difference for void* caused division-by-zero * jancy: bugfix: static new class variables were primed twice, writing data out of allocated range * jancy: bugfix: pointer difference operator did not work * properties for plugins are grouped * already-added layer plugins are disabled * adding layers feature is functional! * ioninja-server compiles and jits additional layers * jancy: CModule - CRuntime pair redesign (move LlvmExecutionEngine to CModule to allow multiple modules to work with the single runtime) -- in preparation for incremental compilation & jitting (adding layers in ioninja-server) * minor design update in AboutDlg check-for-updates * setting dlg: rebuild log layout -> rebuild log widget (to simplify hiding it completely when m_document == NULL) * namespace prefix only for API files * plain names for folders (api, sessions, layers) * currently there is no reason to have namespace prefixes for the rest of plugin files, so as to avoid unnecessary questions i decided to simplify everything to a more conventional and less cryptic scheme * plugin manamenent cleanup * plugin management and api further updates * document model update (2 kinds of plugins: sessions and protocols) * log filtering is functional, serial session provider uses filters to show/hide groups of notification messages * jancy: bugfix: empty condition in for stmt caused a crash on JIT (compiler was creating an invalid basic block graph) * bugfix: API function 'io.createSerialPortList' accidentally removed * added Device Monitor feature to installer * added buttons for adding and removing filters in session settings dialog ................................................................................ version 3.0.7 (2014-04-26) * remove all the serial settings & lines (baud, flowcontrol, dtr, rts etc), from io.SerialMon -- instead of 'state' semantics, they should be represented by 'event' semantics. bugfix in io.SerialLogRepresenter: status line change parts were not merged properly * bugfix: incorrect line range update on tail-leaf-update * nj_srv should close .conf files when its done reading the configuration * serial mon plugin logs all the events (using SerialLogRecordCode / SerialLogRepresenter for most of the records) * jancy: re-fix the previous commits. todo: really clean this shit up * jancy: bugfix: the previous commit has broken certain scenarios (e.g when unnamed union is half way to the field, union-coord was added twice) * jancy: bugfix: resolve import types did not work properly if class had import base * bugfix: nested unnamed structs & unions did not work correctly in some cases (and i suspect still not 100% correct -- double check!) * jancy: creating member closures moved from CParser -> COperatorMgr * when using qualified name for virtual functions don't lookup vtable (get LlvmValue of the parent class) * making use of 'io.createSerialPortList' and 'Document.createSerialPortProperty' in Serial session provider * added io.createSerialPortList and Document.createSerialPortProperty to API * jancy: allow using basetype in functions other than constructors: as type specifiers and as namespaces * background change of combo boxes if local port or target address changed while listening in TCP Proxy session provider * jancy: don't erase unreachable blocks if they were added to function (potentially causes assert failures in LLVM: value is used. most likely this assert is not relevant: block is used from unreachable block, but still) * serial mon plugin base functionality (using tdevmon service) * axl: legacy packetizer (compatible with previous versions of AXL, and tdevmon in particular) * background change of local port combo box in UDP session provider if port changed during open state * added 'gui.ComboBox.m_backgroundColor ' property to API * using address resolver for target address in TCP Proxy session provider * using address resolver for remote address in UDP session provider * refactored UDP session provider to share same code style as the other session providers * out of class definitions * use of State enum * use of ActionId enum * cleaned up Serial session provider * bugfix: io.CSerial had incorrect order of autoget fields * bugfix: io.CSerial did not update autoget fields on serial setting change * jancy: bugfix: getLastError () did not copy the TError struct (previous commit actually had incorrect description: actually it implements host name resolver and proper error handling in SSH channel session) * jancy: bugfix: getLastError () did not copy the TError struct * axl: remove CString::c () (cast to char*) * CString::cc () never returns NULL * socket address resolver implemented * TCP Connection session uses this resolver, allowing specifying address by name * displaying 'Run IO Ninja 3' checkbox in installer only if color depth of screen is 32 bit. this is to avoid that the checkbox otherwise overlays the background (alpha bitmap) with its own control background * io.Socket properties: m_closeKind, m_isNagleEnabled * use these properties in TcpConnection session provider * added default packet template file to installer * creating default packet templates files if none exists * reading and writing packet template file in user's documents directory * only reloading packet template and clearing hex editor when template was modified * bugfix: current data in binary transmit widget not always kept when swichting sessions * bugfix in CHexEditWidget::CalcCursorPos () -- incorrect column calculation * bugfix: hex editor data wasn't applied to array properties in packet template widget ................................................................................ version 3.0.6 (2014-04-21) * loading hex editor data into packet template property widget when transmitting * bugfix: unlink sessions menu item was not connected properly * session linking is implemented * serverProcess_readyRead () slot: replace loop with a single readAll () -- if ioninja-server produces data faster than log widget can update index and cache pages, the loop never exits, and requires extra event processing (to keep ninja responsive) * renamed packet template file (packet_templates.jnc -> packet-templates.jnc) * axl: critical bugfix: MappedFile on Windows sometimes failed View () if aligned end-of-view fell behind mapped-size * loading proper default values in packet template property widget * displaying bit fields with a bit count of 1 as a bool property within packet template widget * highlighting selected packet template property in hex editor * qtpropertybrowser: changed first column's tooltip (property name) with property tooltip * bugfix: pressing Enter in packet template widget caused the transmit action to be triggered * bugfix: packet template file not created when trying to edit a new template file * link sessions menus * support for hexadecimal input for bit fields in packet template widget * removed signed/unsigned checks in packet template widget * warning about errors in packet template editor * include part-buffer in update-tail-leaf notification. this way log-widget can update its cache without the need of sending represnet-request to the log-server * indicating if packet templates are available or not in settings dialog * bugfix: current packet template wasn't selected in settings dialog * removed bit count from bit field properties in packet template widget * renamed "transmit template" to "packet template" * optimized mask creation for bit field modifications in packet template widget * hexedit: highlight on write capability * modified echos in installer build script ................................................................................ version 3.0.5 (2014-04-17) * LogSettingPage: disable 'apply-to-all-log' if log widget is NULL * prompt for unsaved changes before closing transmit template editor * remove main window search loop * sticky log (scroll to bottom when vscroll is maxed) * scroll-to-bottom corner button in log widget * added button for checking for updates in About dialog * jancy: restore original order of resolve-orphans and resolve-import types * templatetransmitmanager -> templatetransmitmgr * jancy: bugfix: DeleteUnreachableBlock caused a dangling pointer write in case last current block was unreachable block * CModule support for calc-layout without actual compilation * bugfix: update check not working correctly * cmake: PCH for MSVC is placed in $(Configuration) subfolder * jancy: bugfix: ensure 8 bytes for const buffer (GetLlvmConst unconditionally reads 8 bytes) ................................................................................ version 3.0.4 (2014-04-16) * catch exceptions in ioninja-server and report them to the application * prompt before closing unsaved changes in transmit template editor * removal of undesired delimiter above TransmitWidget tab implemented transmit templates * jancy: bugfix: bit-field offset calculation during CalcLayout * isTransmitEnabled property -- to disable 'Send' button when there is no connection * bugfix: delete all the page requests from the map when the page is dropped * fold record support in new log engine design * SSH channel session: log messages update (merge all the 'connecting' messages together, so there are no inter-line delimiters) * bugfixes in logging engine * index mgr: finalize leaf on mergable record * cache mgr: set index tail leaf bin data config * bin text line: bin text map calculation and code point decoder state * highlight unprintable chars setting * axl: bugfix in CCharCodec::LoadState/SaveState * bugfixes and updates (mostly re bin-text mode) * new log engine design updates * major redesign of logging engine and protocol (initial commit) * qtpropertybrowser: header column labels can be set via constructor * fixed "mismatched component reference" warning when building installer * sh: build-projects.bat saves and restores current dir (otherwise rebuild-all fails to build installer) * build and installer scripts cleanup * adjusted corner button fade time * added "Run IO Ninja" to exit dialog of installer * msi installer actions DLL project is generated by CMake and is built together with other ioninja binaries * formatted batch scripts * removed directory "icons" from installer * added folder 'redist' to gitignore * WIX installer updates * generate .rl.cpp & .llk.h in output folder to keep source folder clean * WIX installer's build.bat takes a parameter defining base directory for files, redistributables and output * cmake: version templates for ioninja app and installer * initial commit of encoding support in log-plain-text mode * WIX installer * version automation and build script adjustments still missing ................................................................................ version 3.0.2 (2014-04-07) * session startup dialog update (display errors) * remove UTF32->UTF8 conversion in terminal lines (draw UTF32 directly) * axl: support for UTF32 drawing in gui::CTextPaint * session startup dialog * log setting page update * all the dialogs tab order fixups * log setting page: include showСheckerPattern option + some layout modifications * checker pattern colorization (to show merged packet boundaries) ................................................................................ version 3.0.1 (2014-04-02) initial internal release of IO Ninja 3