IO Ninja Changelog

What's new in IO Ninja 5.0.4

Sep 30, 2021
  • New IO Ninja accounts, capabilities, and subscriptions ecosystem;
  • New WebSocket client and server plugins;
  • Device Monitor updates for recent builds of Linux kernel;
  • Support for custom baud rates in the Serial plugin on Linux and macOS;
  • Detection of serial status line changes on Linux and macOS;
  • Find-Next (F3) and Find-Prev (Shift+F3) in the log;
  • Significant improvements in the UI look-and-feel on macOS;
  • Reliable TX/RX stats in the presence of log converters or filters;
  • Lots of other bug fixes, optimizations, and other improvements!

New in IO Ninja 5.0.3 (Sep 17, 2021)

  • Main application changelog:
  • nj_app: eliminate the flash appearance of the restore sign-in dialog during startup. sign in in the background; only show the restore sign-in dialog on errors
  • nj_app: fix: on macOS, require the light (Aqua) appearance
  • nj_app: fix: on Linux, remove the build RPATH from the main executable
  • nj_app: fix: a crash on quit from the main sign-in dialog when there are open documents
  • nj_app: fix: on macOS, don't register IAPs when not sandboxed
  • + conf: create a new plugin group: IO Ninja Hardware (for Serial, I2C/SPI, and Ethernet taps)
  • nj_app: don't sort plugins (turns out, it makes it harder to find what you need; the manually ordered list works better)
  • nj_app: fix: don't save update notification settings unless the user clicked the OK button
  • nj_app: remove the initial Privacy setting dialog during the first startup - it is irrelevant now (we never connect to the server without an explicit user's permission; when installed from the AppStore, we don't even sign-in)
  • nj_app: simplify the update.conf (now that we don't fetch update manifests from the server)
  • + nj_app: raise the sign-in window to the top after a successful sign-in
  • nj_app: fix: broken profile links
  • Jancy changelog:
  • jnc_io_websocket: typo fix: bool -> size_t; could cause potential errors during parsing of handshake headers

New in IO Ninja 5.0.1 (Sep 14, 2021)

  • version 5.0.1 (2020-09-03):
  • Major update. Introduces capability & subscription ecosystem, personal and workgroup accounts, WebSocket client and server plugins, support for custom baud rates on Linux and macOS, lossless observers in Ninja Scroll, compiler pragmas in Jancy, extended POSIX signal and Windows exception information availble in Jancy catch-handlers, Device Monitor updates for recent Linux kernels.
  • Main application changelog:
  • nj_app: capbility & subscription subsystems
  • nj_app: account subsystem; sign-in via web-browser or via token
  • nj_app: redesign of update notifications
  • nj_log, nj_srv: count TX/RX stats in the main log writer; access it through PluginHost.m_txRxStats. This way, we can avoid adding log observers and guarantee lossless stats with or without converters/filtes in the pipeline
  • nj_app: major style fixes/updates for macOS
  • nj_app: Find Next (F3) and Find Prev (Shift+F3) shortcuts now work without the need to open the Find dialog beforehand
  • nj_app: critical fix: use special names for mappings & events when inside the macOS sandbox
  • nj_app: opt: only enable RX pumping when terminal is visible or there is a session link
  • nj_doc: critical fix: Plugin::transmitNext MUST create a new call-site with the proper runtime; calling JIT-ted code with a wrong runtime might lead to gc-heap corruption, use-after-delete, and all kinds of issues
  • nj_app: critical fix: potential crash on dangling template pointer; saving binary property page could have left a dangling template pointer in the combo box
  • nj_app: fix: packet-template-widget mistreated bigendian enums (hex-edit to property-browser)
  • nj_app: fix: packet contents in the Transmit Pane was lost after closing the last document, then opening a new one
  • nj_app: fix "weird" button collapse in the main toolbar
  • nj_app: add documentation & forum links to the Help menu
  • conf: fix: add EthernetTapLog.njplg to the std plugin list (otherwise, opening EthernetTap logs in a freshly started IO Ninja doesn't work)
  • nj_app: when a representer is not found, show its GUID
  • nj_app: use "unknown" progress bar when we are rebuilding log with a non-null conversion pipeline
  • nj_app: maintain three sets of dock-states (for logs, read-write sessions, and monitor sessions)
  • nj_srv: opt: don't add RxObserver by default; manually add/remove it as necessary (e.g. for terminal, session-link)
  • nj_app: sort plugins (unlocked first, then locked)
  • nj_app: don't rely on QByteArray::toBase64 (QByteArray::Base64UrlEncoding) which is only available in QT-5.2+
  • conf: add devicemon-log plugin to macos packages
  • nj_app: qt-5.0.2 compat fixes
  • nj_srv: use session/layer class names as module tags
  • nj_ui: require std.HashTable from ui.DictionaryProperty
  • nj_app: force-sync .njcfg files
  • nj_app: center password dialog over session startup progress
  • nj_app: remove custom escape encoding in TextTransmitEdit, use the new AXL enc::EscapeEncoding facilities
  • nj_app: fix: apply escape encoding on the resulting packet (after codec)
  • nj_app: add new setting: show whitespace chars
  • nj_app: fix FileTransmit::updatePreview for empty filenames
  • nj_app: don't re-use file scripts in new sessions, but do keep non-file (temp) scripts
  • package-msi: rename program directory (Ninja 3 -> IO Ninja) -- we are bumping major version to 5
  • nj_app: add DigiCert Root EV CA (apparently, on some machines it's missing)
  • Scripts changelog:
  • new plugins: websocket-client & websocket-server
  • regex-colorizer: critical fix: partial match IMMEDIATELY after a quantified match yielded wrong retro-colorize offsets
  • servers: critical fix: when transmit is not completely buffered, wait for client events (otherwise, we might miss the WriteBufferReady event)
  • ias: add http-server
  • all: use the new pragma(Alignment) directive
  • common: add CRC8-CCITT
  • serial: don't report "unknown-driver" and fall back to conservative unless the driver is in the list)
  • all: major update: Listener -> Observer, use TxRxStats, LogDocument
  • ez-tap-pro: change name to "Stratus EZ-Tap Pro" (so it's not the first on the list when sorted)
  • serial: show status line changes for DCD & RI
  • all: don't restart waiting for WriteBufferReady
  • replay: allow broken records (but not in the beginning of the log)
  • replay: add replay-count and interval-scale parameters
  • common: ui.SslPropertySet should take ui.Property*, not io.GroupProperty* as a parent
  • common: sockets ui should allow adjusting the default remote address
  • ssl: rename SslLogRecordCode.SslConnectionCompleted -> SslConnectCompleted
  • all: update re latest jancy extensions updates (extract common events & options into base enums)
  • serialmon: support TCSETS2 (termios2 with custom baud rates)
  • serial-tap: maintain the currently opened device name
  • serial: rename SerialLogRecordCode.PortClosed -> PortClosedNamed, add SerialLogRecordCode.PortClosed (unnamed) and use it in all official serial-based plugins
  • pcap: remove "Wireshark file" from all Pcap device dropdowns
  • Device Monitor changelog:
  • dm_lnx_lkm: support read_iter/write_iter
  • dm_lnx_lkm: check fops for null before forwarding
  • dm_lnx_lkm: fix page protection removal on arm (linux 5.10+)
  • dm_app: fix: missing string for dm_NotifyCode_DataDropped
  • Ninja Scroll changelog:
  • njs_log: major redesign: replace Listener-s with Observer-s, support lossless observers (when suspended, record file is locked so that no new records can be added)
  • njs_log: major redesign of rebuild-completion detection in case of non-null conversion pipeline
  • njs_wdg: clear 4-bit cursor flag on kill-focus
  • njs_log: pre-rebuild initialization (scroll to the top, set rebuild flag, clear sticky scroll flags)
  • njs_log: don't retro-colorize cross-pages (kills performance)
  • njs_log: typo fix: removeAllDetailizer_s -> removeAllDetailizers_s
  • njs_log: support moveFilterToTail/moveConverterToTail
  • njs_log: support upgrade/downgrade for read-write locks
  • njs_log: reset folding filters
  • njs_log: support record file format v3.0.1
  • njs_log: handle broken records (need to improve even further)
  • QT Property Browser changelog:
  • qtpb: make label inside QtDictionaryEditWidget clickable
  • qtpb: emit change events from QtEnumEditotFactory even if the value has not changed (e.g., for forcing values in packet template editor)
  • Jancy & Graco changelog:
  • jnc_websocket: new extension library for websockets
  • jnc_ct: major update: compiler pragmas (for now: Alignment, ThinPointers, ExposedEnums)
  • jnc_ct: ptr-operator on 'dynamiclib'-s translates to member-operator for member 'lib'
  • jnc_rt, jnc_api, jnc_ct: major update: save extended exception information (both Windows and POSIX)
  • jnc_ct: clean-up cast operator resolver (shouldn't set errors on conflicts)
  • graco, llk: move catch nodes to a separate stack
  • graco: support catch(eof) -- required for code-assist
  • jnc_ct: add catch(eof) to pass-1 expressions -- critical for code-assist in initializers
  • jnc_rt: critical fix: nesting runtimes didn't work
  • jnc_io_ssl: major refactoring (extract SSL socket common code to be shared between SslSocket & WebSocket)
  • jnc_io_base: implemented waiting for serial status line changes on Linux (TIOCMIWAIT)
  • jnc_ct: critical bugfix: zero-initialize all static variables (except for const and externally mapped ones)
  • jnc_api, jnc_ct, jnc_dll: capability checks & management
  • jnc_api, jnc_ct, jnc_dll: add optional code authentication for dynamic extensions
  • jnc_ct: compat fix: some versions of clang report ambiguous call to overloaded constructor Value::Value(...) in ControlFlowMgr::setJmp()
  • jnc_edit: set axl module tag
  • jnc_mini_ide: fix axl module tag
  • jnc_api: c-compatibility fix in JNC_CALL_SITE_xxx
  • jnc_api: don't restore SJLJ frame if it already is restored
  • jnc_ct: assert success of conditionalJump from ControlFlowMgr::setJmp
  • jnc_ct: typo fix in statement_sync: TokenKind_Reswitch -> TokenKind_ReSwitch
  • jnc_ct: warning fix: false-vs-null in ct::OperatorMgr::createClosureObject()
  • jnc_ct: fix: typo in ct::OperatorMgr::getValueFunctionTypeOverload: invalid closure function-ptr base arg idx
  • graco: typo fix in NodeMgr::indexBeacons
  • graco: remove unused variables
  • graco: warning fix: false-vs-NULL in Parser::resolverSpecifier()
  • jnc_io_base: add property io.Serial.m_updateInterval
  • jnc_stdlilb: update .forced.jnc
  • jnc_api: add jnc_Module_getName
  • jnc_std: require std.MapEntry from std.HashTable & std.RbTree
  • jnc_io_ssl: regression fix: accepted socket io thread was not started
  • jnc_io_cmn: minor refactoring of AsyncIoDevice::bufferedWrite/ addToWriteBuffer
  • jnc_io_ssl: move SslSocketEvents to a separate file
  • jnc_io: put overlapped struct back to pool immediately (was causing memory leaks in some IO classes)
  • jnc_api, jnc_ct, jnc_rtl: add requireOpaqueItemsFunc pointer to opaque classes (this should replace external return type set)
  • jnc_api: use DualString (axl::sl::String + jnc::DataPtr) for convenient string generation and caching GC heap pointers
  • jnc_api: add utility: struct DualString (mainain both axl::sl::StringRef and cached jnc::DataPtr)
  • jnc_io_xxx: extract common options & events and inherit from base enums
  • jnc_ct, jnc_api, jnc_edit: support enum inheritance
  • jnc_io_ssl: allow external creation of io.SslState (e.g. from websockets)
  • jnc_io_cmn: save overflow write data for datagram devices
  • jnc_ct: propagate POD flag in TypedefShadowType (important for code-assist)
  • jnc_ct: fast-exit from appendFmtLiteralBinValue if no codegen
  • sample: fix: 90_SslSocket.jnc
  • samples: pass_c/pass_cpp: update sample jancy code (formatting out-of-range
  • char pointer now yields empty string)
  • jnc_io_ssl: regression fixes
  • jnc_ct: fast-exit from await operators & async sequencers if no codegen
  • jnc_rtl: fix: properly handle pointer's end-of-range in formatting literals
  • jnc_io_usb: fix: incorrect check before removing USB iface from the device
  • jnc_sys: make sys.Event.wait & sys.NotificationEvent.wait interruptible (so that Runtime::abort can abort waiting threads)
  • jnc_api, jnc_ct: fix: Function::isUnusedExternal should check m_llvmFunction directly
  • jnc_ct: ensure layout of the target type before cast
  • jnc_io_ssh: typo fix: PTY-less mode didn't really work due to an incorrect check (0 vs LIBSSH2_ERROR_EAGAIN)
  • jnc_io_usb: implemented vid/pid-based access restriction to usb devices
  • jnc_io_cmn: moved enum SocketOption to io_SocketBase.h
  • jnc_api: remove unnecessary JNC_EXPORT_O (only relevant when building jnc_dll)
  • tools/sign-jnx: implemented sign-jncx for linux (via elfsign)
  • jnc_io_base: simplify generation of stdio pipe names
  • AXL changelog:
  • axl_sys: critical update: new implementation of sys::NameableEvent on macOS PTHREAD_PRODCESS_SHARED doesn't work reliably on Darwin, so the traditional pthread_cond + pthread_mutex approach in shared memory doesn't work well
  • axl_io: critical fix: custom baud rates on Linux
  • axl_sys_ca: added a new library for cross-platform code authentication
  • axl_sec: added a new library axl_sec (Darwin Security Framwork wrappers)
  • axl_io: critical fix: pass correct size to axl::io::psx::Mapping::unmap()
  • axl_sl: add overload sl::CmpBin::operator(const T*, const T*)
  • axl_sys: add ExceptionError (to save exception information)
  • axl_gui: typo fix in WidgetScrollBar::WidgetScrollBar
  • axl_spy: typo fix: unnecessary assignment in conditional operator in hookEnterCommon
  • axl_sys: typo fix: incorrect check of the dlinfo result
  • cmake: import_xxx should check if lib-dirs were auto-detected
  • axl_sys: warning fix: false vs NULL in DynamicLib::getInfo()
  • axl_io: NT native functions returns NULL as an invalid handle value, not -1
  • axl_sys: on windows, add missing intrinsics for InterlockedExchangeAdd
  • axl_sys: add sys::atomicAdd
  • axl_sys: add sys::ReadWriteLock::upgrade/downgrade
  • axl_io: use ptsname instead of ptsname_r on osx
  • cmake: check the presence of opensslconf.h
  • axl_mem, test: use MAP_ANON instead of MAP_ANONYMOUS (better compatibility)
  • axl_sl: add method sort() to List, BoxList, HashTable
  • axl_ref: fix: incorrect assert in ref::Buf::operator -> ()
  • axl_err: allow overriding error router
  • axl_enc: add Base64Encoding, fix Base32Encoding, rename old (incompatible) implementation to Base32Encoding_nj (used for legacy ioninja product keys)
  • axl_sl: fix: AXL_SL_BEGIN_STRING_HASH_TABLE_IGNORE_CASE was broken
  • axl_enc: add encoding flags to enc::EscapeEncoding
  • axl_enc: isprint -> utfIsPrintable
  • axl_enc: added enc::EscapeEncodingDynamic (with a CharCodec*)
  • axl_enc: not necessary to check for reserve() result
  • axl_sl: ensure exclusivity in sl::Array & sl::String in non-const indexers
  • enc: EscapeEncoding now supports all UTF encodings (not just UTF-8)
  • axl_enc: refactor API of enc::CharCodec
  • axl_cry: rettype: const sl::String -> sl::String
  • axl_sys_win: fix: RegCloseKey returns LONG (error), not BOOL (success)
  • axl_cry: add axl_cry_Pem.cpp/.h with cry::encodePem/cry::decodePem
  • axl_cry: use failWithLastCryptoError/completeWithLastCryptoError wherever possible
  • axl_sl: only allow Handle::p() on empty handles
  • axl_io: fix: don't directly assign mmap to m_p (mmap returns -1 on failure, not NULL)
  • axl_io, axl_sys: added success-ASSERTs to ctors/dtors

New in IO Ninja 3.15.1-a (Dec 20, 2020)

  • Service release
  • Main application changelog:
  • nj_app: fix: dock state for the script pane was not properly serialized
  • package/msi: fix: missing conf/ias.conf
  • package/msi: typo fix: file type name ioninja.npkt -> ioninja.njpkt

New in IO Ninja 3.15.1 (Dec 18, 2020)

  • Introduces: new packet library & packet history panes; major improvements in script file management; the ioninja-server system log is viewable from the main app; synchronous `receive` function added to in-app scripting
  • Main application changelog:
  • nj_app: add packet library & packet history panes
  • nj_app: removed history up/down buttons (now that we have a dedicated packet historty pane)
  • nj_app: new design of in-app script file management
  • nj_ias_srv: implemented synchronous 'receive'
  • nj_ias: allow omittnig 'main' if 'onLogRecord' is present
  • nj_srv: support multiple compilation errors when ioninja-server is run from the IDE
  • nj_app: major improvements in dock-state persistency
  • nj_app, nj_srv: add system log viewer (very helpful for script debugging)
  • nj_app: for read-only jancy-edit: use simple grey color & disable current line highlighting
  • nj_app: adjust the default size for the packet template editor
  • package/msi: add a new file type: *.njpkt (IO Ninja Packet Library)
  • conf: add ias.conf (stock in-app scripts)
  • nj_app: add the 'Copy As' submenu to HexEditWidget
  • nj_app: fix: disable/unable link/unlink buttons on the 'Link Session' dlg
  • nj_app: override copy/paste in the text-transmit-pane to properly handle escape sequences
  • Scripts changelog:
  • api: add declaration: `size_t errorcode receive(void const* p, size_t size)`
  • ssl-server: critical fix: set ephemeral DH/ECDH parameters even when we have a certificate (required for certain cipher suits)
  • df1: moved DF1 proto declarations to protocols/io_Df1.jnc
  • samples: add TutoProto analyzer
  • common: add default binPartRecordCode = 0 for representStruct()
  • common, plugins, samples: updates re latest changes in jancy regex engine
  • samples: add PostIt plugin as a sample (allows adding plain text notes to the log)
  • Device Monitor changelog:
  • tdevmon: release 3.3.8 (linux-only)
  • dm_lnx_lkm: critical fix: __force_order was removed in linux-5.9.2
  • Jancy changelog:
  • jnc_rt: save/restore EXCEPTION_REGISTRATION in jnc_setJmp/jnc_longJmp on win-x86
  • jnc_ct: add support for function-ptr & property-ptr const-casts (cructial when function pointers are stored in variants)
  • jnc_api: add jnc.Function.isUnusedExternal
  • jnc_ct: fix: ptr type flags for function ptrs and property ptrs were not applied
  • jnc_ct: convert function-ref to function-ptr in cdecl vararg
  • jnc_ct: fix: only fall back to llvm cast from a failed const cast if there is codegen
  • jnc_rtl: fix: don't rollback jnc.RegexState unless we are in the lexer-mode
  • jnc_ct, jnc_rtl: replace jnc.RegexState.m_isIncremental -> jnc.RegexState.m_flags
  • add jnc.RegexStateFlags.Lexer (matches final DFA state immediately)
  • jnc_ct: Value::setType(TypeKind_Void) should set m_valueKind to ValueKind_Void
  • jnc_ct: reset argument tip stack on skipped tokens during synchornization
  • jnc_ct: use 'char const thin*' instead of 'char thin*' in Parser::appendFmtLiteralValue
  • jnc_ct: add cast ops for typedef shadow types (for code-assist)
  • llk: add overridables: onSynchronizeSkipToken, onSynchronized
  • Ninja Scroll changelog:
  • njs_log: critical fix: setting font didn't update base col (thus leading to
  • njs_log: critical fix: UiFlag_Rebuilding may have been set AFTER IndexMgr completed rebuilding (due to delayed CacheMgr::updateUi)
  • njs_log: handle allocation failures in copy-processor (logs may be huge)
  • njs_wdg: add HexEditWidget::copyBin(CopyBinKind)
  • njs_wdg: move the copy-bin logic into a common file (njs_CopyBin.h)
  • njs_log: add LogWidget::ensureVisibleLine() and use it from CacheMgr::onRepresentPageCompleted()
  • njs_log: typo fix: implicit cast size_t -> bool (should check for -1 instead) bogus cursor placement)
  • njs_log: add internal trace engine for debugging
  • AXL changelog:
  • axl_ini: support line continuation for values
  • axl_gui: gui::Engine::writeClipboard should use sl::ArrayRef, not sl::Array

New in IO Ninja 3.15.0 (Oct 30, 2020)

  • Main application changelog:
  • nj_app: use jnc_edit for script editing
  • nj_app, nj_srv, nj_ias: turned script transmit page into stand-alone IAS (in-app-scripting) script pane
  • nj_app: crashes due to QT static being exported from the resulting executable because of mixing POSITION_INDEPENDENT_CODE/-fPIC/-fPIE
  • nj_ias: fix: if runtime was aborted, suppress the error message from onLogRecord()
  • nj_app: when we press "scroll-to-bottom", force-set sticky scroll (even when not scrolled)
  • nj_app: fix: only save transmit/script pane states for sessions (otherwise, opening log hides those panes for all upcoming sessions)
  • nj_app: jump to the error line in the script widget
  • nj_ias, nj_srv: add function clearLog()
  • nj_ias: abort IAS-scripts on error in onLogRecord()
  • nj_app: save script source before running (code-assist is not stable ebough just yet)
  • nj_app, nj_ias: don't let OK-close PacketTemplateEditDlg on errors (parse and wait before closing the dialog)
  • nj_app: fix: case sensitivity in history combos (find-dlg, address-bar, etc)
  • nj_app: fix: serialize state of information/transmit/script panes
  • nj_app: add toolbar icons for convenient show/hide of information/transmit/script panes
  • nj_app: add load/save-as toolbars to packet-template edit dialog and script pane
  • nj_srv, nj_doc: make syncConnect wait for the SessionConnectionState
  • nj_srv, nj_etx, nj_cmn: improved script transmit API (don't endlesslyqueue transmit block, allow connect/disconnect/write-to-log)
  • nj_app: don't hide transmit panes for linked sessions (so we can inject)
  • nj_app, nj_cmn, nj_doc, nj_srv: added protocol messages and implementation for m_sessionConnectionState/connectSession/disconnectSession
  • nj_app: fix: cloning menus did not preserve titles
  • nj_app: fix: EditLogBinMenu was not properly disabled when in context menus
  • Scripts changelog:
  • api: add property doc.Session.m_sessionConnectionState
  • pipe, file, ssl, udp, tcp, ssl-server, tcp-server, serial: implement m_sessionConnectionState/connectSession/disconnectSession
  • udp: critical fix: buffer size was not applied (as a result, on the first run of UDP Socket there was a barrage of 0-sized packets)
  • ias: added samples for echo-server and saving-to-file
  • odsp: added the recently created skeleton for osdp analyzer as a sample plugin
  • api: add overload log.Writer.write(char const*) -- use log.StdRecordCode.PlainText
  • api: add function clearLog()
  • api: add the 'prototype' attr to in-app-scripting entry points (so that we can conveniently auto-complete those)
  • tcp-flow, udp-flow: should be pure-layers (attachable to logs)
  • api: rename tx.jnc -> ias.jnc
  • api: extend transmit api (add sync-transmit/connect/disconnect/log-write)
  • plugins: use log.RecordCodeFlags.Foldable instead of the 0x8xxxxxx prefix
  • df1: iniitial commit of DF1 analyzer (Allen-Bradley PLC protocol)
  • file, jlink, pipe, process, ssl, tcp, udp: typo
  • fix: m_isTransmitEnabled was (incorrectly!) enabled on each IO event* pipe-server, ssl-server, tcp-server: update session ids
  • tcp, ssl: fix: don't change m_sessionConnectionState after resolve (i.e., we are still connecting)
  • Device Monitor changelog:
  • tdevmon: release 3.3.7
  • package: bundle msvc10 runtime (otherwise, possible runtime error on windows 10 which sometimes misses msvc10 runtime)
  • package: link msi-actions dll against libcmt (otherwise, possible install error on windows 10 which sometimes misses msvc10 runtime)
  • package: install dm_MachineIface.h
  • dm_win_lib: build a libcmt twin for dm_win_lib (for the msi action dll)
  • dm_app: turn stdout buffering off when monitoring on windows (on linux, it was already off)
  • Jancy changelog:
  • jnc_api, jnc_rt: added jnc_setJmp/jnc_longJmp (ensure no unwinding during SJLJ)
  • jnc_edit: new code-assisting editor component for QT (based on QPlainTextEdit)
  • jnc_ct: support for error recovery and parsing with code-gen disabled
  • jnc_io_ssh: critical fix: authenticate didn't clear private key if null was passed; hence, it was not possible to switch from private-key-auth to password-auth
  • jnc_io_base: add functions: io.getTempDir(), io.getHomeDir()
  • jnc_ext: release assertion string before throwing (destructor will not be called)
  • jnc_ext: fix: add import "io_SocketAddress.jnc" to io_NetworkAdapter.jnc
  • jnc_ct: fix: adjust m_storageKind for class member functions
  • jnc_io_base: fix: io.ChildProcess on windows should use time-based pipe names (as to avoid the all-pipe-instances-are-used error)
  • jnc_io_base: fix: io.ChildProcess on windows should use SW_SHOWNORMAL and NOT use CREATE_NEW_CONSOLE
  • jnc_ct: allow member operator in the dynamiclib.lib namespace to return a non-function value
  • jnc_ct: fix type string generation for reactor class types
  • jnc_ct: move error-code check from DeclTypeCalc to FunctionType::calcLayout
  • jnc_api: set jnc_TypeKindFlag_ErrorCode for jnc_TypeKind_TypedefShadow
  • jnc_app: move to the 'tools' source group
  • jnc_app: print failing source dirs (-S switch)
  • jnc_ct: always cast integer -> floating point implicitly
  • jnc_ct: fix: result types of integer arithmetic operators (e.g. -65535 should be int32_t, not uint32_t)
  • jnc_ct: ignore unimplemented prototypes while processing the require-set
  • llk: remove the cryptic "add a 'catch' clause to the grammar" error
  • jnc_ct: update synopsis generation for aliases, functions & properties
  • jnc_ct: accept typedef shadows as enum base-types
  • jnc_ct: replace prototypes when adding functions to a namespace
  • jnc_ct: adjust sync-set for statements
  • jnc_ct: support typedef shadow in type operators (for code-assist)
  • jnc_ct: ensure alias is resolved before accessing its type
  • jnc_ct: fix: setCastError didn't handle 'void' values properly (Type* of 'void' may be NULL)
  • jnc_ct: don't fast-exit from Module::parseImports
  • jnc_api: fix: getNextImportDir should use it.getEntry()
  • jnc_ct: ensure type layout before getting a field
  • jnc_ct: prevent broken scope structure on errors
  • jnc_ct: support 'null' as an attribute value
  • jnc_api, jnc_ct: make compile-error-count-limit freely adjustible
  • jnc_app: make disable-code-gen controllable from command-line
  • jnc_ct: make disable-code-gen a compile-flag
  • Ninja Scroll changelog:
  • njs_wdg: support insert/overwrite xterm modes
  • njs_wdg: critical fix: backspace at the beginning of line should move cursor *before* to the last char on the prev line
  • njs_wdg: critical fix: reset scroll region on e[r
  • njs_wdg: warning fix (signed-vs-unsigned comparison)
  • njs_log: don't update sticky-scroll on every key/mouse press, only when the cursor position actually changes
  • njs_wdg: use m_consoleSize.m_width_u instead of now-removed TerminalScreenBuffer::getConsoleWidth()
  • njs_wdg: reset insert-mode during hard-terminal-reset
  • njs_wdg: fix: don't zero console-width during terminal-reset
  • njs_wdg: fix: terminal widget should reset char set and insert mode on csi-soft-reset
  • njs_log: typo fix: jancy literal terminator should be a string-literal (not char-literal)
  • AXL changelog:
  • axl_io: critical fix: if the initial GetAdaptersAddresses failed with ERROR_BUFFER_OVERFLOW, the buffer was not reallocated, resulting in a invalid memory access
  • axl_gui: added gui::QtRagelSyntaxHighlighter (ragel-based syntax highlighter for QT (derived from QSyntaxHighlighter)
  • cmake: on msvc, build limcmt twin libraries (by default, for axl_core & axl_io) -- required when we can't afford MSVC CRT dependencies
  • axl_io: add function: io::getHomeDir()
  • axl_cry: add support for IAP receipts in AppStore receipt validation
  • axl_err: add overloads ErrorRef::ErrorRef(string)
  • axl_sl: added overloads sl::String::isPrefix(C c)/isSuffix(C c)
  • axl_lex: added Token::m_flags (union-ed with m_channelMask)
  • axl_lex: added method lex::RagelLexer::setLineColOffset
  • axl_lex: added struct lex::LineColOffset
  • axl_lex: extracted lex::Ragel from lex::RagelLexer (so it can be shared with gui::QtRagelSyntaxColorizer)
  • axl_cry: added decoding for app store receipt creation/expiration dates

New in IO Ninja 3.14.4 (Jul 27, 2020)

  • Critical fix: rare opportunistic crash when in plain-text binary view (found by fuzzying);
  • Fix: incorrect version displayed and used on Linux/macOS (regression introduced in ioninja-3.14.3);
  • TCP Flow Analyzer and UDP Flow Analyzer now preserve timestamps of the original log;
  • Pipe Monitor and Mailslot Monitor can now dynamically update capture filter while capturing;
  • Improved support for sandboxing on macOS (in preparation for the App Store publication)

New in IO Ninja 3.14.3 (Jul 10, 2020)

  • Introduces: new TCP Flow and UDP Flow layers, support for app-sandbox,
  • support for appstore receipts & winstore receipts, a critical bugfix in
  • tdevmon for Windows, support for mixed DPI multi-monitors, support for recent
  • kernels in tdevmon for Linux.
  • Main application changelog:
  • nj_app: check for winstore license
  • nj_app: check app store receipt
  • nj_app: show privacy settings once on the first run
  • package: build sandboxed pkg for appstore
  • package: build MSIX for winstore
  • package/msi: produce two kinds of MSI packages (core and full)
  • nj_app: use QWidget::fontMetrics for measuring char width
  • nj_log: added implementation for class log.ProxyWriter
  • nj_app: set privacy setting defaults to FALSE if inside app-sandbox
  • nj_app: fix: terminal ansi-white/ansi-black were not applied as standard
  • text/back colors
  • nj_app: save security-scoped bookmarks wheh running in a sandbox
  • otherwise, MRU lists and file-transmit wouldn't work after app restart
  • nj_app: use sandbox-compatible names for shared-memory and semaphores
  • nj_app: fix: clone shared sub-menus (apparently, it's not OK to add the
  • same QMenu* to multiple menus; clone it to avoid QT warnings)
  • nj_app: fix: take care of negative delays in in QTimer::singleShot (set max
  • delay to one day)
  • nj_cmn: put nj_VersionPp.h into build/include and add build/include to the
  • include path
  • Scripts changelog:
  • udp-flow: separated udp flow mon into a pcap-based sniffer session and
  • a pcap-sniffer/ethernet-tap compatible layer
  • tcp-flow: separated tcp flow mon into a pcap-based sniffer session and
  • a pcap-sniffer/ethernet-tap compatible layer
  • common: fix: Sum16(LE/BE) and IP4 Checksums were incorrectly calculated when
  • data block size is not 16-bit aligned
  • api: added class log.ProxyWriter
  • all: get rid of declarations w/o specifiers
  • Device Monitor changelog:
  • dm_lnx_lkm, dm_win_sys: critical bugfix: wildcard match routine didn't
  • properly handled empty input string
  • dm_lnx_lkm: compatibility fix: don't use struct timespec on linux > 4.20.0
  • dm_lnx_lkm, dm_win_sys: remove r handling in wildcard match (this
  • multi-wildcard functionality was never used)
  • dm_win_sys_core: minor fix: unnecessary to check for m_fileNameFilter in
  • Connection_create
  • Ninja Scroll changelog:
  • njs_log: respect timestamp visibility when saving the log to a text file
  • njs_wdg, njs_log: when calculating text size, take the target device into
  • account
  • Jancy & Graco changelog:
  • jnc_ct: add support for external extension binaries
  • jnc_rt: don't abort-throw unless it's safe (i.e. we are inside a "stable"
  • call-site)
  • jnc_io_usb: fix: check for error after calling axl::io::UsbDeviceList::
  • enumerateDevices (otherwise, -1 is used as the element count)
  • llk: major grammar update: removed declaration_wo_specifier
  • (with exception for construct/destruct/set/etc)
  • jnc_ct: grammar updates for the new graco
  • graco: major update: error recovery
  • graco: allow lookahead stmt to override the default lookahead, e.g.:
  • lookahead(2, default)
  • graco: major redesign: resolvers & lookahead are now specifiers of
  • SymbolNode
  • frame: use table-based indirect calls for all actions
  • llk: opt: use thread-local pool for node allocation
  • jnc_ct: lexer should accept unterminated c-style comments
  • llk: added a comment explaining the trailer for qualified_type_name_rslv
  • all: get rid of function decls w/o specifiers
  • graco: accept unterminated c-style comments
  • graco: only use resolvers at the first step
  • graco: use anytoken for default production (if there was none)
  • AXL changelog:
  • axl_spy: new module for api interception via return-hijacking hooks (works
  • without target function prototype information)
  • axl_io: io::getTempDir should respect the TMPDIR environment variable
  • axl_sl: fix: takeOver should be careful not to memcpy reusable tail-padding
  • axl_sys_win: added wrappers for WinTrust and WinCrypt for Authenticode
  • checks
  • axl_cry: added app-store-receipt verification utilities
  • axl_gui: text size calculations should take the target device into account
  • axl_sl: explicitly disable copy for sl::List
  • axl_cf: new classes: cf::Data, cf::Url, cf::SecScopedBookmark
  • axl_sys_win: added support for authenticode Rfc3161 timestamps
  • axl_iok: added function getComputerGuid (implementation by Apple)
  • axl_cry: added wrappers for PKCS7 (needed for app store receipt decoding)
  • axl_sys: added support for destructible objects in TlsPtrSlot
  • axl_sys: added API for simple TLS slot management (intptr_t values)
  • axl_enc: added enc::uleb128 and enc::sleb128 encodings
  • axl_sys_psx: new method: DynamicLib::getInfo
  • axl_dox: added support for custom command params in the cmd{param} form

New in IO Ninja 3.14.2 (Apr 24, 2020)

  • Fix: potential deadlock in Jancy IO classes on POSIX (Linux and macOS) on high-load;
  • Fix: potential crash in Ethernet Tap or Pcap Sniffer on high-load;
  • Fix: the "lost log" issue when saving a session on Linux and macOS;
  • Fix: on macOS, filtering didn't work in TCP Flow Monitor and UDP Flow Monitor;
  • Sticky-scroll redesign; works much more natural and predictable on high-load now;
  • Lowered GLIBC version requirements on Linux (down to GLIBC-2.9);
  • Disabled library verification on macOS (otherwise, can't load 3rd party libraries — e.g., in JLink RTT).

New in IO Ninja 3.14.1 (Apr 14, 2020)

  • Fix: over-email evaluation licenses stopped working after the introduction of the new first-time evaluation;
  • Fix: broken layout of the Welcome dialog on some platforms;
  • Fix: .desktop files and .png icons were missing from Linux packages.

New in IO Ninja 3.14.0 (Apr 10, 2020)

  • nj_app: support "smooth" first-time evaluation without an email form
  • nj_app: added support for unicode arguments on windows (e.g., when double-clicking a unicode log file name)
  • package: Mac TAR & DMG packages are now signed and notarized to keep the Mac
  • Gatekeeper happy package: packages for Mac now include libcrypto & libssl and don't refer to the system OpenSSL dylibs (boobie-trapped on Catalina)
  • nj_app: fix: save installation-guid as string -- otherwise, it gets lost upon restart on Mac (seems like a QT bug on Mac)
  • nj_app: over-email evaluation & serial number forms offer the newlsetter opt-in option
  • package: Mac DMG now has a nice background
  • conf: moved TCP back to the top (people now confuse TCP-vs-SSL)
  • nj_ui: don't try to be smart and always fire onCurrentData and onCurrentTextChanged (not when they really change)
  • nj_log: added property log.Log.m_syncId (for synchrnoizing async completion records) e.g.: "connecting to abc.com...ok"
  • nj_doc: removed Plugin::transmitTo (never used)
  • nj_srv: fix: preserve layer-creation error (deleting jnc::Module and jnc::Runtime may overwrite error)
  • nj_ui_srv: redesign onchange properties for ui.ComboBox
  • conf: moved SslLog.njlog to a dedicated folder
  • package: added io_ssl.jncx to the MSI package (SSL plugins didn't work)
  • Scripts changelog:
  • pipe-listener: major update: support multiple clients & view filter
  • tcp-listener: major update: support multiple clients & view filter
  • ssl-listener: major update: support multiple clients & view filter
  • tcp-proxy: major update: support multiple clients & view filter
  • tcp-proxy: send-and-close is not losing data now
  • tcp-flow-mon: major update: support multiple connections & view filter
  • udp-flow-mon: added view filter
  • log: fix: log.MonitorLog should convert wildcard to lowercase
  • tcp-server, ssl-server, pipe-server: rename: XxxListener -> XxxServer
  • file: fix: update m_isTransmitEnabled according to buffer state of the stream (not just m_state)
  • file-log: added a new record code Opened which also shows openFlags
  • pcap-sniffer: use the new io.Pcap API (openDevice/activate)
  • pcap: fix: don't add filter-changed records if filter didnt really change
  • pcap-sniffer: fix: launch code into IP4 defragmentation should take the pcap link type into account
  • common: fix: ui.BufferPropertySet should use m_defaultXxx and not Defaults.Xxx
  • common: extract common IP decoding and defragmenting functionality from
  • UdpFlowMon & TcpFlowMon into io.IpDecoder
  • pcap-log: added PcapLogRecordCode.SetCaptureFilter, SetAddressFilter
  • i2c-spi: rename I2cSpiSniffer -> I2cSpiTap
  • common: moved: io.Monitor, io.FpgaUploader -> iox.Monitor, iox.FpgaUploader
  • udp, tcp-proxy: use iox.HostNameResolver
  • common: added iox.HostNameResolver (encapsulates sync & logging)
  • misc: stylisitic fix: use . instead of ->
  • ui: ui.ComboBox.m_onChanged is removed (use bindable events of specific properties: m_editText, m_currentText, m_currentIndex)
  • socket-log: added new records: ClientRemoved, ResolveCompletedPrefix, ResolveCompletedPrefix, DisconnectDataPending
  • ui: property ui.ComboBox.m_currentData must be non-const
  • log: added syncId for synchronizing multi-part records (e.g. connecting to abc.com...ok)
  • doc: removed doc.Plugin.transmitTo & doc.Layer.transmitToNext (never used)
  • socket-log: added class SocketClientLogFilter
  • socket-log: added new record code: ClientChanged
  • api: added methods: ui.ComboBox.addItemSetCurrent, insertItemSetCurrent
  • Jancy changelog:
  • jnc_ct: critical fix: onevent statements were dysfunctional after the introduction of lazy-compilation
  • jnc_rt: critical fix: Runtime::initializeCallSite should check if m_map is NULL before accessing it
  • jnc_app: add build rpath to OPENSSL_DLL_DIR (otherwise, SSL tests may fail if io_ssl is built against non-system OpenSSL so-s/dylib-s)
  • jnc_ext: optionally sign dylib-s inside jncx on mac
  • jnc_ct: fix: dual types were not properly finalized on the implicit-this member operator
  • jnc_io_base: added const property m_osHandle to file- and socket-based classes
  • jnc_std: strtol/strtoul: set default radix to 0 (means, auto-detect)
  • jnc_io_base: added flag mappings: FileOpenFlag.Unlink, Clear, Asynchronous, WriteAttributes
  • jnc_io_base: typo fix: implementation of getFileKind for windows didn't detect serial ports or pipes
  • jnc_io_pcap: refactor API: Pcap.openDevice -> openLive
  • jnc_io_pcap: added Pcap.openDevice and Pcap.activate
  • jnc_io: replace suspendIoThread(false) -> unsuspendIoThread()
  • jnc_io_pcap: added property m_kernelBufferSize
  • jnc_io_pcap: made property m_snapshotSize non-read-only
  • jnc_io_pcap: set default snapshot size to 64K
  • jnc_api: fix: jnc_Variant_hash didnt work for references
  • jnc_api: implemented operators == and != for variants of the same type (via memcmp)
  • jnc_ct: fix: err::setError returns size_t, not err::Error
  • jnc_ct: fix: set m_parentUnit for onevent handlers
  • jnc_std: std.Bufer.clear must be implemented in jancy (this way, it can be inlined)
  • jnc_io_base: io.SocketAddress.isMatch/isEqual should be const
  • Ninja Scroll changelog:
  • nj_log: keep the size of last record in the record file header -- this way we can calc the offset of the last record
  • AXL changelog:
  • axl_sl: fixed parsing the solidified command line string (support escapes on posix, escaped-quote-only on windows)
  • axl_enc: handle unterminated escapes in esc::EscapeEncoding
  • axl_sl: added class EqBin (for using binary-structs as HashTable keys)
  • axl_io: added method NetworkAdapterDesc::isNullMacAddress
  • axl_io: added FileFlag_WriteAttributes (windows-only).
  • axl_io_pcap: added methods: Pcap::setPromiscious, setTimetout, openLive, openDevice, activate, setSnapshotSize, setBufferSize
  • axl_io_psx: implemented mac retrieval on mac & linux via AF_LINK, AF_PACKET and SIOCGIFHWADDR

New in IO Ninja 3.10.5 (Apr 10, 2019)

  • 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

New in IO Ninja 3.10.4 (Mar 29, 2019)

  • 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)

New in IO Ninja 3.10.3 (Mar 28, 2019)

  • 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<n>)
  • 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

New in IO Ninja 3.10.2 (Feb 1, 2019)

  • 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)

New in IO Ninja 3.10.1 (Dec 25, 2018)

  • Fixes for plugins broken in v3.10.0

New in IO Ninja 3.10.0 (Dec 14, 2018)

  • 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

New in IO Ninja 3.9.2 (Sep 27, 2018)

  • 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

New in IO Ninja 3.9.1-a (Sep 7, 2018)

  • 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

New in IO Ninja 3.9.1 (Sep 5, 2018)

  • 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)

New in IO Ninja 3.9.0 (Aug 8, 2018)

  • 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

New in IO Ninja 3.8.7 (Jun 5, 2018)

  • Main application changelog:
  • nj_appfixcheck whether a layer has already been added (disallow adding
  • duplicate layers)
  • infadded .inf files and a script for .cat file generation and signing
  • sh7z archives are built using cpack instead of bat files
  • confadded serial and spi tap plugins to plugins.conf
  • cmakeredesign packaging on Mac OSX
  • nj_appremoved explicit qt library path modification (better use qt.conf)
  • driversupdated driver package to include the winusb co-installer (so it
  • works on machine with no winusb)
  • cpackuse top-level-directory with archive generators
  • confadded new filter wizard to wizards.conf
  • njs_srvdon'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_logreport Rx parts of TxRx to the app (so terminal can be used with
  • dual-hex-view)
  • nj_logfixLog.suspend and Log.resume were not mapped
  • nj_logadded support for retro-colorization flags (aux flag for
  • specifying the part of dual-hex-view)
  • nj_app, nj_srvupdate conf dir detection (include ../etc/ioninja)
  • don't display crash-report-dlg if crash dir is empty
  • cpackpackaging for TXZ, DEB, RPM implemented
  • packagewix packaged updated to auto-install winusb drivers using
  • dpinst.exe
  • infrenamed dirsinf -> drivers (more windows-traditional, even though
  • there are no actual drivers)
  • nj_app, nj_srvsetup error router
  • register parse error provider; previously, we only linked jancy libs
  • statically, so it wasn't necessary
  • Scripts changelog:
  • regex-colorizeradded support for dual-hex view (e.g. SPI Tap)
  • commonthroughput calc now processes log.StrRecordCode.TxRx
  • apiadded RetroColorizeFlags.Aux (to specify which part to apply
  • colorization to)
  • serial-tapcheck for non-null mask before reporting status-line
  • changes
  • serial-tap, spi-tapremoved usb.ids files and instead hardcode
  • device ids into the script (not going to add more ids anyway)
  • spi-tapinitial commit
  • ez-tap-profixuse m_highSpeed for anything above 115200 bps
  • Ninja Scroll engine changelog:
  • njs_logimproved support for dual-hex-viewmisc copy modes
  • implemented, retro-colorization now has a aux-flag (to specify the which
  • part to apply colorization to)
  • cmakeminor fixusing QT modules should happen BEFORE axl_set_pch
  • njs_logfixed uint64_t <-> size_t warnings on x86
  • Jancy changelog:
  • cmakebuild with install rpath
  • jnc_api, jnc_dll(temp solution) link to libusb and register usb
  • error provider
  • jnc_rtlfixjnc.RegexDfa unconditionally set m_isIncremental in
  • jnc.RegexState (probably, a brainfart)
  • jnc_rtlfixjnc.RegeDfa finalize did not update group counts in accept
  • contexts
  • jnc_rtfixprevent longjmp unwinding on win64
  • jnc_appsetup error forwarding and register parse error provider
  • jnc_extremoved propagateLastError (now irrelevant); setup error
  • forwarding in *.jncx
  • jnc_apiimplemented jnc_setErrorRouter
  • jnc_apimoved jnc_DynamicExtensionLibHost.h to the 'include'
  • folder
  • axl_apiadded explicit definition of jnc_Error (maps to
  • axl::err::ErrorHdr)
  • cpackinverted the os-version order in the file name of a package
  • (must be version-first)
  • cmakeworkaround for SOVERSION on windows (jnc_dll)
  • added VERSION/SOVERSION properties to jnc_dll
  • cmakerenamed 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)
  • cmakelink all the executables to the jancy dll (if it's being built)
  • jnc_extadded object libraries for jnc_rtl, jnc_std, jnc_sys
  • jnc_apiexport api functions when building cmake object library
  • jnc_dllbuild dynamic library jancy-x.x.dll
  • jnc_apifixed a few missing JNC_EXTERN_C declarations
  • AXL changelog:
  • axl_sysupdates in sys::ReadWriteLock re named sems on posix
  • axl_erradded support for error forwarding
  • cpackinverted the os-version order in the file name of a package
  • (must be version-first)
  • cmakeremoved rpath direct modification via linker options (should
  • be done via CMAKE_INSTALL_RPATH in actual projects)
  • cmakeswitch to dynamic link (/MD /MDd) by default
  • axl_slminor fixsl::BoxIterator::r () -- better reference
  • m_value directly (rather than as*p())

New in IO Ninja 3.8.6 (Apr 26, 2018)

  • 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

New in IO Ninja 3.8.5 (Apr 10, 2018)

  • 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

New in IO Ninja 3.8.4 (Jan 26, 2018)

  • 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 <QSize> 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)

New in IO Ninja 3.8.3 (Dec 15, 2017)

  • 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)

New in IO Ninja 3.8.2 (Nov 27, 2017)

  • 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)

New in IO Ninja 3.8.0 (Oct 20, 2017)

  • 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

New in IO Ninja 3.7.8 (Sep 14, 2017)

  • 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

New in IO Ninja 3.7.7 (Sep 1, 2017)

  • 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. devicenamedpipe and
  • devicelanmanredirector); 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

New in IO Ninja 3.7.5 (Jul 19, 2017)

  • 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

New in IO Ninja 3.7.4 (Jun 6, 2017)

  • 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)

New in IO Ninja 3.6.5 (May 17, 2016)

  • 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)

New in IO Ninja 3.6.4 (May 17, 2016)

  • 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 immediately
  • 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)

New in IO Ninja 3.6.3 (May 17, 2016)

  • 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

New in IO Ninja 3.6.2 (Apr 15, 2016)

  • 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

New in IO Ninja 3.6.1 (Apr 15, 2016)

  • 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

New in IO Ninja 3.6.0 (Apr 15, 2016)

  • 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

New in IO Ninja 1.8.0 (Apr 29, 2009)

  • NEW: Installer and all binary files are signed
  • NEW: Inactive tab highlighting on events
  • NEW: Actual port display for UDP and TCP auto-port assign (0)
  • NEW: Event filtering options (currently for Serial & Serial Mon only)
  • NEW: History combo box contents (like Local / Remote address) is saved
  • UPD: Session options dialog shows only options relevant to current session
  • UPD: Added ARP and (partial) ICMP support to Network Sniffer
  • UPD: Added TCP window and packet size information to Network Sniffer
  • FIX: Serial plug-in crash on quickly arriving RX data
  • FIX: Network Sniffer a-couple-of-sec-freeze on quickly arriving packets
  • FIX: Read-only plug-ins crash on keypress in log

New in IO Ninja 1.7.7b (Apr 29, 2009)

  • NEW: Tibbo Server registration advisor
  • FIX: Network Sniffer crash on non-IP packets
  • FIX: Network Sniffer parse of TCP header

New in IO Ninja 1.7.5a (Apr 29, 2009)

  • FIX: Saved sessions failed to restore Log & Transmit options

New in IO Ninja 1.7.5 (Apr 29, 2009)

  • FIX: Device Monitor Service caused BSOD on failed attach
  • FIX: Icons on 2000/XP were displayed incorrectly on non 32bpp display modes
  • FIX: Installation on the clean system caused Transmit to malfunction (config issue)
  • FIX: Device Monitor Service did not report the attach failure properly
  • FIX: Ctrl+M in HEX-ASCII and Plain text packet sent packet instead of adding CR
  • UPD: Options dialog initial page is based on keyboard focus (Log/Transmit)
  • FIX: Serial Monitor plug-in did not log RX data
  • NEW: ASCII file transfer
  • UPD: Device Monitor Service VISTA UAC awareness
  • FIX: Device Monitor Service failed to dynamically update configuration (on Apply)

New in IO Ninja 1.7.0 (Apr 29, 2009)

  • NEW: IP6 layer support in Network Sniffer plug-in
  • FIX: Log engine crashed on reaching 5MB
  • FIX: Network Sniffer crashed on garbage packets
  • NEW: XModem plug-in
  • NEW: Full built-in support for Terminal Emulation modes ANSI, TTY, VT100
  • NEW: External 'term.ini' to add new modes or customize key translation tables
  • UPD: New options dialog layout

New in IO Ninja 1.6.6 (Apr 29, 2009)

  • NEW: Insta-send transmission mode via Log (Terminal Emulation mode)
  • NEW: Insta-send transmission mode via Transmit Pane
  • UPD: New options dialog layout

New in IO Ninja 1.6.3 (Apr 29, 2009)

  • UPD: Persistency for timestamp format & data merge threshold
  • UPD: Timestamp suppression for multiline messages (i.e. Network Sniffer packet)

New in IO Ninja 1.6.1 (Apr 29, 2009)

  • NEW: Timestamps in data log
  • NEW: Data merge threshold time gap option

New in IO Ninja 1.6.0 (Apr 29, 2009)

  • NEW: Plain text data log mode (in addition to classic HEX-ASCII mode)
  • UPD: New transmit bar layout
  • NEW: Transmit data history
  • NEW: Transmit packet prefix & suffix
  • UPD: Error codes replaced with descriptive error messages
  • NEW: Login screen for PIPE connections to Windows Networking Servers
  • NEW: Plug-in setting persistency
  • NEW: Always accept/Keep old connection setting added to Listener and Proxy
  • FIX: Proxy handled new connections incorretly if old connection existed

New in IO Ninja 1.5.3 (Apr 29, 2009)

  • FIX: Unable to save log files on WinNT

New in IO Ninja 1.5.2 (Apr 29, 2009)

  • FIX: Large DPI fonts caused repaint bugs both in log and transmit pane
  • UPD: Transmit pane is set to replace unprintable characters with '.'

New in IO Ninja 1.5.1 (Apr 29, 2009)

  • FIX: Serial plug-in did not send or receive data on Win9x
  • FIX: Unable to save session on Win9x
  • FIX: Temporary session log files did not get deleted on session close on Win9x
  • FIX: Serial plug-in statusbar showed wrong state of serial control/status lines
  • FIX: In the absense of WinPCap error message was always shown on start-up
  • NEW: WinPCap 4.0.2 included into installation package for convenience