IO Ninja changelog ================== This changelog is a manually cleaned-up git log of important changes happened in-between the official IO Ninja releases. Modules ------- * Main application - the two main executables (ioninja, ioninja-server) * Hardware client - a command-line executable (ioninja-hwc) for controlling the IO Ninja taps and other hardware (e.g., serial ports) * Scripts - open-source Jancy scripts (*.jnc) which implement all of the IO Ninja plugins. * Ninja Scroll - the proprietary logging engine of IO Ninja (statically linked to the main executables) * Device Monitor - partially open-source tools, libraries, and kernel-mode modules allowing to intercept and monitor communications between user-mode applications and kernel-mode device drivers * QT Property Browser - a heavily modified fork of the official QT property grid library * Jancy - an open-source scripting language with C-compatible structs, safe pointer arithmetic and spreadsheet-like reactive programming (jancy.dll/jancy-edit.dll/libjancy.[so|dylib]/libjancy-edit.[so|dylib]) * AXL - an open-source support library used in all IO Ninja components Changelog Items --------------- ! denotes an important update or a critical bugfix + denotes a new feature - denotes a bugfix or a removed feature * is used for all other changes (re-factorings, updates, etc) ................................................................................ version 5.7.3 (2024-01-16) Service release. Main application changelog: - nj_srv: fix: deregister log plugins if layer compilation fails (otherwise, record codes remain unavailable even after loading a correct layer) + nj_app: add status to the find dialog and update it accordingly (pattern not found, wrapped past end-of-log, wrapped past begin-of-log) + nj_app: add confirmations (exit, clear log, close session, reset terminal) Scripts changelog: ! ssh: critical typo fix: iox.SshChannel.ConnectParams.m_ptyHeight vs m_ptyWidth * modbus: print registers in both hexadecimal and decimal in log + log: add hyperlinks to elements arrays of derivable types (so that we can select the whole field) - common: fix: in log.representDynamicLayout, each array element hyperlink should use elementSize * modbus: use uppercase hex for addresses * usb-endpoint: use uppercase hex when setting control values from dispatch Ninja Scroll changelog: ! njs_log: critical fix: pending async ops were not deleted after completion thus slowly polluting cache-mgr over time ! njs_log: critical fix: when resuming async ops, nullify page ptr before potential cancelAsyncOp - njs_log: fix: copy with timestamp for multi-line text blocks worked incorrectly. also, trim padding if a line has no contents + njs_log: add RangeProcessCompletionStatus_FinishedPostWrap to detect wraps * njs_cmn_wdg: copy-as-jancy-hex-literal now uses multi-line literals * njs_cmn_wdg: chop the trailing whitespace in copy-as-c-array AXL changelog: + axl_sl: add convenient overloads: sl::String::trimLeft/trimRight (const StringRef& charSet) - axl_err: opt: ErrorRef::getDescription should retrun sl::StringRef, not sl::String ................................................................................ version 5.7.2 (2024-12-31) Service release. Introduces: expand/collapse log, size- and time-based file splitting in ioninja-hwc, multiline formatting literals and other multiline literal improvemtns in jancy, errorcode properties in jancy, transmit mode in HID, handling serial setting errors in all serial-based plugins, USBPcap BSOD workaround, multiple other critical fixes. Main application changelog: ! nj_app: new: expand/collapse all records in the log ! nj_app: critical fix: under certain circumstances, QT can delete the active MDI document without activating next MDI window first (could cause crashes) * nj_app: undo the default 100 pix minimum column width in dictionary widgets - nj_app: fix: the information pane used wrong property manager; as a result, read-only editors for the information pane items were not shown - nj_app: fix: don't show (EVALUATION) when subscription is enabled Hardware client changelog: ! nj_hwc: add support for output file splitting based on size or time Scripts changelog: ! hid: new: transmit mode (send as output/feature) ! usbmon, hidmon: critical fix: incorrect USB transfer capture buffer processing when transfers are split between multiple read blocks ! usbmon, hidmon: don't allow changing kernel buffer size on windows after open (usbpcap can BSOD due to buffer size decrease) ! serial: when can't change serial settings, push appropriate error string and restore serial UI ! pipemon, mailslotmon: critical fix: MonitorFilter.setFilter was throwing an exception on empty wildcard; instead, empty wildcard should set filter to "None" * hid: save the device usage page/usage and respect it when restoring device selection + hid: add usage & usage page values to log & tooltips - usb-endpoint: remove dispatch code OpenDeviceVidPid (use OpenDevice with an extra parameter for the this) + hid: add dispatch interface -- now HID can be controlled by in-app scripts * hid: fix: update the serial-number info line for consistency with others * hid: use   in the HID info tooltip to prevent unwanted line breaks + api: new utility method: ui.BoxLayout.addLabel(string_t) and use it everywhere - usbmon, hidmon: remove the ReadParallelism setting (as it's removed from io_hid.jncx) * all: trivial: convention: error strings are lowercase + common: add 5 & 6 bits to the serial data-bits combo + serial-ui, serial-log: add support for parity: Ignore * serial-tap: trivial: remove separator in the menu before Filp DTE/DCE Ninja Scroll changelog: ! njs_log: critical fix: clear up font flags and text color when setting the line attribute - we don't want the attributes of the initial part auto- applied to the rest of the line - njs_log: fix: don't clear stick-to-bottom when scrollContentsBy() is triggered by setLineCount() from updateUi() or representPage() + njs_log: add Server::expandCollsapseAll (use a simple ConstFoldingFilter) + nj_log_cmn: add support for updating file size on close ("off" by default, but it could make sense to change it to "on" later) QT Property Browser changelog: * qtpb: set the minimum value column size to 32 (instead of default 100) * qtpb: use the default GUI font for property grid (orginally, it could use some other font assigned by a QT style to tree widgets) Jancy changelog: ! jnc_api: critical fix: constructing string_t with length had an off-by-one error ! jnc_io_usbmon: critical update: remove property m_readParallelism; parallelism is inherently windows-only, and USBPcap doesn't handle multiple IRP_MJ_READ-s properly (can complete them out-of-order) ! jnc_io_usbmon: critical fix: maintain context of the transfer parser ! jnc_io_usbmon: critical update: prevent changing kernel buffer size when on windows; USBPcap has a bug causing BSODs on decreasing the buffer size ! jnc_ct: add support for errorcode properties (errorcode applies to setters) ! jnc_ct: critical fix: bitwise OR and XOR operators worked incorrectly for int8_t/int16_t -derived bitflag enums ! jnc_ct, jnc_edit: major update: multiline and formatting literals redesign: support multiline formatting literals, add the ${...} syntax, common indent handling improvements - jnc_ct: fix: Module::initialize() yielded compile errors with ASAN - jnc_io_hid: fix: sendFeatureReport() accepts `void const*` + jnc_std: add std.pushError/pushErrno * jnc_io_xxx: add `errorcode` to appropriate properties - jnc_io_websocket: fix: setExtraHeaders() should return void - jnc_io_usbmon: fix: handle setKernelBufferSize when not opened * jnc_io_usb: set errors when returning false * jnc_io_pcap: properties now return false instead of throw + jnc_ct: add __LINE__ token (to complement __FILE__) AXL changelog: * axl_io_hid: trivial: use uppercase hex for non-standard usages + axl_io_usbmon: add typedef axl::io::UsbMonTransferParser; maps to UsbPcap on windows and UsbMon on linux - axl_io_usbmon: fix: clearFilter was implemented incorrectly (caused stopping the capture instead of removing the filter) ................................................................................ version 5.7.1 (2024-10-09) Service release. Main application changelog: - nj_app: regression fix: QT "macintosh" style used incorrect tab control text placement - nj_app: regression fix: non-number character prefixes should be skipped when parsing packet template number fields ................................................................................ version 5.7.0 (2024-09-26) Major update. Introduces the UI theming support, support for encoded fields in the packet template engine, a critical update for the kernel module of the Device Monitor for Linux re Intel CET, reactive statements in Jancy reactors. Main application changelog: ! nj_app: new UI style & color theme managment ! nj_app, nj_ias: support for encoded fields in packet templates (via the new ias.FieldCodec interface) ! nj_app: regession fix: session menus were not removed on deactivate ! nj_app, nj_ui: major update: PropertyGrid is now creatable by scripts ! nj_app: new UI for the stick-to-bottom functionality ! nj_app: copy-bin and save-bin-as-file can run on multi-zone selections now * nj_ias: apply 1MB packet size limit for dynamic layouts * nj_app: limit the max number of properties in the packet template widget (QtPropertyBrowser is not efficient enought and can't handle too many) - nj_app: fix: escape newlines in regexes (otherwise the multi-regex markup page could look distorted) + nj_app: add the new stick-to-bottom menu item and toolbar icon and update them according to the stickToBottomChanged signal * nj_app: remove icons from regex markup pattern page (look off in dark mode) * nj_ias: create actions for stringified items * nj_srv: save first compile error (otherwise, it could be lost if it doesn't terminate the compilation) + nj_app: add support for "opaque" properties (i.e., label + edit button) Scripts changelog: ! bacnet: new BACnet MS/TP Analyzer plugin ! api: major update: support for encoded fields via the new ias.FieldCodec interface and the common utility log.representDynamicLayout ! api: ui.PropertyGrid is now derived from ui.Widget and can be used in UI forms ! hid: major update of HID output & feature report UI + devmon, serialmon, pipemon: add a special record code (with a KB link) for when tdevmon is not detected + hidmon, usbmon: add a special record code (with a KB link) for when usbmon is not detected * usb, usbmon: change device name format: remove manufacturer (for consistency with HID) * hid, hidmon: change device name format: include interface number, remove manufacturer (too long otherwise) * usbmon, hidmon, serialmon: detect the presence of the underlying capturing service and update UI accordingly + nj_app: allow copy-bin and save-bin-as-file on multiple binary blocks + serial: add extended port info into the open-port log records + serialmon: add extended port info into the start-capture log records * hid: include report IDs into log records * hid: include interface id into the device name * hid: only show field indexes where relevant + api: new methods: ui.ComboBox.insertSeparator() - net-sniffer-log: minor fix: detail log attributes (important for dark themes) - serial: fix: status/control line filter control labels & tooltips * common: formatFunc should be ToStringEx (can potentially accept size and decl) + common: add COBS-encoding (for BAC net) and block XOR-ing + modbus: add packet templates for Modbus ASCII (via the new encoded fields) + common: add encodeHexString * common: fix decodeHexString buffer alloc size; decode now allows using [.,* :] as separators too + pcap: add support for io.PcapLinkType.Raw (raw IPv4/IPv6) * hid: when writing report to the log, don't write more bytes of payload than the report defines + hid: add support for get-feature reports - hid: fix the form layout for multi-field reports - wizards: remove name of the root group in protocol analyzer Ninja Scroll changelog: ! njs_log: use the new bin-text rendition (both for hex-view and plain-text) when saving log as text ! njs_cmn, njs_log: redesign copy-bin (should also work for multiple binary zones) * njs_cmn, njs_log: respect log widget hex-case setting when saving log as text - njs_cmn_wdg: fix: LineWidget::changeEvent should call the base handler * njs_log, njs_cmn: extract a portion of bin-text encoding and counting code to the common library * njs_cmn: use space instead of HorizontalLineLeftChar for tabs (apparently, that glyph was missing in a few common monospace fonts) + njs_log: add support for master hyperlinks (\e$...) to trigger when cursor enter the line Device Monitor changelog: ! dm_lkm: x86: respect X86_CR4_CET and clear it before accessing X86_CR0_WP ! dm_lkm: x86: add a new method of write protection removal via PTEs - dm_lkm: warning fix: add `static` to djb2 + dm_lib: add dm::Monitor::isLoaded to check for the presence of tdevmon QT Property Browser changelog: + qtpb: add QtTreePropertyBrowser::viewportSizeHint() and use it when calculating default widget size - qtpb: fix: clear the private pointer from treeitem delegates on destruction + qtpb: add QtTreePropertyBrowser::applyStyleFix(), call it on style change + qtpb: add QtBoolPropertyManager::resetIcons(), updateAllProperties() these are required when changing themes Jancy changelog: ! jnc_ct, jnc_rtl: major update: reactor redesign to support reactive if-else and switch statements ! jnc_ct: major update: declof operator (so we can get jnc.ModuleItem* of a user declaration) ! jnc_ct: critical fix: incorrect this-arg-offset in case of multi-level multiple-inheritance ! jnc_ct: critical fix: ensure target type layout before checking POD vs non-POD in a data pointer cast * jnc_ct: replace AuxCompileFlag_SkipAccessChecks with a counter (to be able to handle nested disableAccessChecks/enableAccessChecks calls) + jnc_ext: add (optional) size limit for dynamic layouts, check for overflows * jnc_edit: handle completer palette separately (the Fusion QT style doesn't work well with transparent "invalid" highlitht text color) + jnc_io_usbmon: add io.detectUsbMon (maps to axl::io::detectUsbMon) + jnc_io_devmon: add io.detectDeviceMonitor (calling dm::Monitor::isLoaded) + jnc_std: add floating point conversion functions: atof, atod, strof, strtod * jnc_edit: update highlighting and current line on theme change * jnc_ct: special case: allow casting from a variant holding a jnc.Function* to a thin function pointer of exact function type + jnc_rtl: add jnc.ClassType.createObject (dynamic instantiation) * jnc_ct: typeof operator on classes should automatically require this class (unless the class is abstract or opaque-non-creatable) + jnc_ct: add the class ref cast operator (same as data ref cast: addr -> cast ptr -> indir) * jnc_ct: expose Value::m_item and set it for codegen-less values, too + jnc_std: add char classifier functions (isspace, isprint, ispunct, etc) * jnc_rtl: DynamicLayout::asyncScanTo shouldn't call prepareForWait for non-stream layouts (prepare promise only) * jnc_ct: force Alignment = 1 for dynamic layouts * jnc_ct: when overriding virtual functions, use the corresponding function src pos * jnc_ct: don't set LLVM value for virtual functions if no codegen * jnc_ct: resolve imports when getting basetypes * jnc_ct: set Const::m_module * jnc_std: std.Buffer.copy/append/insert should accept NULL as p (then it's a zero-memory) - jnc_io_pcap: fix: axl::io::Pcap::getLinkType actually returned DLT_xxx, not LINKTYPE_xxx * jnc_ct: process code assist for inline definitions of member reactors * jnc_ct: don't automatically set scope in NamespaceMgr::openNamespace - jnc_ct: fix: member reactor reaction declaration was wrong all this time (there should be no 2nd pointer argument) * jnc_ct: inline trivial Value methods - jnc_edit: don't show internal items (!-prefixed) in auto-completion lists * stdlib: update source lists (add rtl dynamic layout & io extensions) * jnc_ct: replace special chars (" ' < >) with XML entities when generating XML documentation * jnc_ct: clear memberXml before generation (some implementations of generateDocumentation assume it's empty) - jnc_ct: fix: reactor onevent statement had no access to event parameters * llk: use `return err::fail()` instead of `err::setError(...); return false` * llk: after failing a user action, advance to next token to avoid potential loop AXL changelog: + axl_io_usbmon: add io::detectUsbMon() + axl_io: add implementation of io::isSymbolicLink on Windows + axl_io: add wchar_t-overloads for io::isSymbolicLink/getSymbolicLinkTarget and move the core of implementation there + axl_sys: add linux kernel module enumerator (useful for detecting the presence of modules) * axl_io, axl_core: build basic file IO and mappings in axl_core (circular dependencies on GCC otherwise) + cmake: support Qt5DBus - axl_sl: typo fix: geLoBit8 -> getLoBit8 - axl_sl: remove redundant sl::String::replace overload - axl_sl: fix: swapByteOrder worked incorrectly for size = 1 + cmake: add support for the MSVC address sanitizer - axl_io_pcap: fix: pcap_datalink returns DLT_xxx, not LINKTYPE_xxx * axl_sys: getProcessImageName: specifically handle special PIDs on Windows (namely, System & System Idle Process) ................................................................................ version 5.6.0 (2024-05-30) Major update. Introduces the new dynamic layout syntax in Jancy (`dylayout` & `dyfield`) for creating protocol analyzers & dynamic packet templates; packet byte-range hiliting and other major improvements in the packet template engine; packet templates for the TCP/IP stack; the new `pretransmit` IAS (in-app-scripting) entry point for the on-the-fly packet encoding; standalone logs can now create menus & toolbars; multiple critical fixes across various modules. Main application changelog: ! nj_app, nj_ias: dynamic layouts in the property template pane ! nj_app, nj_ias: plugins can export packet templates of their own ! nj_ias, nj_app: packet templates support bitflag enums now (unroll enums into a series of bool properties) ! nj_app, nj_ias: major update: dynamic string fields (toString/fromString) ! nj_app, nj_ias: packet template-driven range hiliting ! nj_app: allow menus & toolbars for standalone logs ! nj_ias, nj_srv: major update: transmit() is synchronous again ! nj_ias: new entry point: pretransmit() for dynamic packet encoding ! nj_doc: critical fix: add form objects as GC roots ! nj_ui: critical fix: remove UI objects from the object map on destruction (could cause crashes) ! nj_log: onLogRecord() runs in a separate thread now * nj_app, nj_ias: improved field <-> hex-edit synchronization * nj_ias: respect the `formatSpec`, `ungroup`, `displayTypes` attributes of packet template fields * nj_app: don't add empty aggregates to the packet template widget * nj_app: remove editor for "binary" packet template fields * nj_app: set-log-base-time-as-line should be available for standalone logs * nj_app: derive LoginDlg & ProgressDlg from CenteredDlg (use common style) * nj_ui: add InsertActionPos -- allow inserting menu & toolbar items to the tail or head -- crucial for log filters with UI * nj_log: on log representer exception, add exception information to the log directly * nj_srv: propagate error in syncTransmit() * conf: add the Modbus-ASCII pretransmit encoder * nj_ias: reduce receive loop delay to 100ms * nj_ui: new class: ui.ColorRangeTree (based on axl::sl::RangeTree) * nj_app: don't add the root item to the packet template widget * nj_ui_srv, nj_app: allow setting -1 to enum properties (aka, no selection) * conf: diverge modbus (legacy-vs-dylayout) Scripts changelog: ! wizards: the proto-analyzer wizard is using dynamic layouts now ! ssh-*: major update: use the common ssh code in iox.SshChannel ! pcap: ethernet packet templates (based on dynamic layouts) ! pcap, ethernet-tap: major update: allow filtering & exporting to pcap for standalone logs ! ias: transmit() is sync again ! ias: onLogRecord() runs in a separate thread ! ias: new entry point: pretransmit() ! modbus: a new Modbus analyzer based on dynamic layouts (the original plugin is available as Modbus legacy) ! common: major feature: new method for representing packets: log.representDynamicLayout() ! ias: fix: receiveAll() incorrectly calculated the remaining timeout + all: add io.EthernetAddress.toString/fromString * all: make use of the new 'stringify' attribute * packets: add "packetTemplate" attr to all legacy packet templates * ssh-*: refactor SSH connect params initialization * common: remove PropertyId.PrivateKeyFile (combine with PropertyId.AuthenticationMethod) * net-sniffer-log, ethernet-tap-log: make log-to-pcap virtual (so that we can override for particular log records) * ethernet-tap: remove export-pcap (should be handled by the log plugin) * net-sniffer-log, pcap: use the newly added ui.ToolBar & ui.Menu prop m_insertActionPos + ias: add modbus-ascii script (re-encodes Modbus RTU -> ASCII on-the-fly) * ias: update http-server script (now onLogRecord runs in a dedicated event thread, so it's ok to call stuff) + add pretransmit() to the default script + api: add destructors to UI classes (make sure we remove the object from the ObjectMap on destuction) * common: array digests, respect the bigendian flag for arrays, show base type fields * common: typo fix: RpdVersion.m_hardwareVersion -> m_hardwareType + api: add ui.ColorRangeTree - api: fix: ui.FontFlags should map directly to njs::FontFlag_xxx * all: use the simplified const property syntax where possible * all: fixes re latest jancy changes (dylib/dyfield/bignendian) Ninja Scroll changelog: ! njs_hexedit: add static range hilites (use the newly added AXL class axl::sl::RangeTree) ! pch: critical fix: TRACE was not a noop in release ! njs_hexedit, njs_log: for hex-ascii, use a cursor rect instead of hilites (hilites dont work well with range hilites) - njs_log: fix: markupLastBinZoneLine should markup last lines in foldable records - njs_log: fix: finalize record should markup EOF in foldable records - njs_log: fix: sanity check in canMarkupDynamicEof() (folding can nullify m_currentLine) - njs_log: fix: markup bin zones in foldable records - njs_log: fix: reset regex state before marking each of the bin zones during an invalidate - njs_log: fix: delete binzones of foldable records on recrod folds * njs_hexedit: for range highlights * njs_wdg, njs_hexedit, njs_log: round half-char width (must be an integer, otherwise drawRect might not be pixel-aligned) * njs_wdg, njs_hexedit, njs_log: use different colors for inactive selection (when the widget is not focused); redraw selection on focus change * njs_hexedit: fade hilite regions independently + njs_hexedit: allow setData beyond EOF QT Property Browser changelog: + api: add methods: QtTreePropertyBrowser::editedItem(), closeEditor() and overridable editorDestroyed() * qtpb: allow setting -1 to enum properties (aka, no selection) + qtpb: add property: QtProperty::extraIndent * qtpb: refactor & opt of item -> prop mapping (reduce map lookups) Jancy changelog: ! jnc_ct, jnc_rtl: critical update: refactor & fix struct field alignment ! jnc_ct, jnc_rt: critical fix: TRACE was not a noop in release ! jnc_ct: critical fix: close dynamic lib zip readers after the compile stage, not parse stage ! jnc_ct: critical fix: toString should be a cross-family cast ! jnc_ct: critical fix: ClassType should call ensureCreatable on all class fields in base classes ! jnc_std: critical fix: invalid C++ signature for std.setError(string_t) ! jnc_ct: major update: loosen function pointer casting rules; allow casting to a function pointer type with more arguments (ignoring extras) ! jnc_ct: new: named attribute blocks and attribute sharing ! jnc_ct: redesign codeassist fallbacks (also parse expression_pass1) ! jnc_ct, jnc_rtl: major redesign: dynamic structs are now replaced by dynamic layouts (created `dylayout` & `dyfield` keywords) ! jnc_ct: majore update: redesign bitfields & bigendians -- no more dedicated types; bitfields and bigendians are now properties of the data pointer + llk: add getter Parser::getTokenPool() * jnc_rtl: assert no tail padding in base types in rtl - jnc_rt: fix: with address sanitizer, we can't assume stack to grow up, so adjust ASSERTs accordingly * jnc_io_usb: force-map io.UsbDevice (enumerateUsbDevices implicitly allocates those) - jnc_ct: fix: await should be an unary operator (precedence issues otherwise) - jnc_ct: fix: add import fixup for m_asyncReturnType - jnc_ct: fix: calc layouts of async return types - jnc_ct: fix: when looking for virtual origin class, check the class itself first - jnc_ct: fix: when overriding virtual function, we must use the virtual origin class for vtable base idx (not the class where we found the function name during findDirectChildItemTraverse) - jnc_io_ssh: fix: remove the misplaced JNC_CDECL modifier in SshChannel::authenticateImpl - jnc_ct: opt fix: function_suffix_rslv should use qualified_type_name_rslv instead of type_specifier * jnc_ct: opt fix: getConditionalOperatorResultType should use getCastKind(), not checkCastKind() * jnc_rtl: jnc.Type.getValueString() should use toString() when possible + jnc_io: add aliases for `fromString` * jnc_api: + jnc_api: add ModuleRequireFlag_Traverse (to require imports) and replace bool isEssential with this ModuleRequireFlag - jnc_api: remove ModuleItem::require() * jnc_ct: check required external functions * jnc_ct: toString should ask for OpFlag_KeepDerivableRef + jnc_ct: add the not-match operator (!~) + jnc_ct: add m_parentUnit to std func arguments with default values * jnc_ct: set m_parentUnit for type variables + jnc_ct: add Module::ensureJitCreated and call it from Variable::prepareStaticData() * jnc_ct: save & restore parse context (unit + namespace) uniformly - jnc_ct: remove the never used Parser::initializeReaction/finalizeReaction * jnc_io_ssh: during the authentication loop, always report errors via SshEvent_SshAuthenticateError (to give a chance to re-authenticate) + jnc_io_ssh: support authentication with private-key-file-name (instead of a memory blob) - jnc_ct: fix: missing function thin ptr cast in Cast_FunctionPtr_FromFat + jnc_rt: optionally (conditional compilation) track foreign data boxes -- this way, foreign buffers can hold GC roots * jnc_rt: always weak mark boxes (without prior checking) - jnc_ct: fix: use value intead of type in Closure::getArgTypeArray - jnc_ct: fix: getClosureAwareType() can return NULL -- check before deref * jnc_api, jnc_dll: move createDataPtrValidator, limitDataPtr, getDataPtrLeftRadius, getDataPtrRightRadius from RTL-core to common runtime (we might need some of those from C) + jnc_ct, jnc_rtl: add `dynamic offsetof` by analogy with `dynamic sizeof` * add jnc.getDataPtrLeftRadius(), jnc.getDataPtrRightRadius() * jnc_ct: fix: initialize alignment with 1, not 0 (problems with empty structs/unions otherwise) + jnc_api, jnc_dll, jnc_ct: add AttributeObserver (a quickfix for packet template-related function requirements) + jnc_api, jnc_dll: add api funcs: jnc::Unit::getFilePath/getFileName/getDir - jnc_io_websocket: fix: add missing includes (could have resulted in an incomplete destruction and leaks, depending on the cpp compiler) + jnc_rtl_intro: add property jnc.Type.m_typeKindFlags * all: remove unnecessary null-checks before `operator delete` - jnc_ct: fix: incorrect recursion error reports in import type (on repetitive resolve) * jnc_ct: make TryExpr and DynamicLayoutStmt persistent (scope structure can get broken, and we don't want dangling pointers in Scope) * jnc_ct: refactor pragma config handling (move current config from PragmaMgr to Parser); otherwise, undesired effects when switching between compilation units - jnc_ct: fix: tokens could be reused -- clear code assist flags before processing a token * jnc_ext: use the simplified property getter syntax where possible + jnc_rtl: add jnc.limitDataPtr (reduce the allowed data pointer range) - jnc_api: fix: sanity check in jnc_Attribute_getValueVariant (prevent dereferencing types of null-variants) + jnc_ct: allow attributes inside non-compound branches (if/else/do/while/for) + jnc_api: expose jnc_ClassPtrType * jnc_ct, jnc_edit: rename keyword: `dynamiclib` -> `dylib` (similar to `dylayout` & `dyfield`) AXL changelog: ! axl_sl: critical fix: getLoBitmask/getHiBitmask could have caused UB with 32/64-bit shifts ! axl_sl: critical fix: sl::BitMap was using incorrect number of pages and had an off-by-one overflow in the end ! axl_sl: major update: remove non-const index operators from sl::Array and sl::String (caused an implicit call to ensureExclusive() behind the scene) ! pch: critical fix: AXL_TRACE was not a no-op in Release builds ! axl_io_drw: critical fix: CFNumberGetValue used an incorrect type (resulting in stack corruption) - axl_sl: remove assert on swapByteOrder(size = 1) - axl_io: fix: handle empty & invalid IP4/IP6 strings + axl_sl: new class: RangeTree (for building correct & optimial Ninja Scroll colorization ranges) + axl_lex: add getter Lexer::getTokenPool() ................................................................................ version 5.5.1 (2024-02-29) Service release. Critical Jancy introspection regression fixes Scripts changelog: - wizards: fix: the protocol analyzer template shouldn't pass the code log.StdRecordCode.SessionStarted down to the parser Jancy changelog: ! jnc_rtl_intro: critical fix: jnc.TypeKind declaration missed TypeKind.String (hence, all subsequent type kind constants were wrong) ! jnc_rtl_intro: critical regression fix: for formatSpec, use StringRef::szn() instead of StringRef::sz() (we check formatSpec for NULL later) - jnc_ct: fix: for bigendian enums, swap byte order before looking up constants in EnumType::getValueString() ................................................................................ version 5.5.0 (2024-01-18) Major update. Introduces the new regex markup engine (based on the heavily modified Google RE2 library); the new built-in `string_t` type in Jancy (non-zero-terminated UTF-8 string slices) is now used for strings in all scripts; 100% correct display of UTF-8 multi-byte codepoints, continuation bytes, unprintable chars, and incomplete sequences (also across line and page boundaries in log and hex editor); a new implementation of bin-text in log without overhangs and with support for changing the CR/LF visibility; multiple critical bug fixes. Starting with this release, Windows XP is not supported anymore; UTF-16 and UTF-32 encodings were removed due to their limited usability in the log and terminal. Main application changelog: ! nj_app: new new regex engine and corresponding regex markup UI updates ! api: use `string_t` instead of `char const*` for strings ! ui: remove UTF-16 and UTF-32 encodings ! nj_app: new copy mode BinText (copy exactly as seen in the right pane of the hex view) ! nj_app: remove "show unprintable chars" settings for bin-text; now all unprintable characters are mapped and shown just like in hex-view ! nj_app: critical fix: pasting to the text transmit pane doubled all backslashes ! nj_app: critical fix: potential crash when dragging a packet from the packet library to the transmit pane ! nj_srv, nj_ias: critical fix: IAS `transmit` should return immediately without blocking (could have lead to deadlocks when used from `onLogRecord`) ! nj_app: new bin-text-related settings: bin-text-style, cr-lf-visible + nj_app: add shortcuts (Insert/Delete) for adding and removing items in the "Packet Library" and "Regex Markup" dialogs + nj_srv, nj_ias: add non-blocking IAS functions `initiateConnect` and `initiateDisconnect` - nj_app: fix: don't send terminal reports if a file transmit is in progress (caused skips in the transmitted bytes when terminal echo was on) * nj_app: make the file progress dlg rejectable (so it can be closed by ESC) - nj_app: fix flashing of the progress dialog after file transmit completes Scripts changelog: ! all: updates regarding the new Jancy regex syntax ! api: use `string_t` instead of `char const*` for strings everywhere - api: typo fix: log.LogWriter.write(recordCode, text) used timestamp instead of record code * api: make class ui.InformationValue opaque * modbus: add the [ fixedSize ] attr to ModbusTcpReadPacket Ninja Scroll changelog: ! njs_log: major update: port the markup engine to axl_re2 / re2s ! njs_log: major update: dynamic EOF markup ! njs_log: a major redesign of the bin-text implementation (remove overhangs caused by invalid UTF-8 sequences, add a new setting for CR/LF visibility, visualize tabs) ! njs_cmn, njs_log, njs_hexedit: use the decoder state for fully-correct calculation of continuation bytes at the line start and/or page borders ! njs_cmn, njs_hexedit, njs_log: add a new binary data copy mode (copy text exactly as seen in the hex-view right pane) ! njs_cmn: add special char mappings (middle-dot (U+00b7) for null-bytes, left-single-quote (U+2039) for continuation bytes, white-square (U+25a1) for unprintable char replacements, etc.) ! njs_log: combine same-zone binary data into continuous blocks (both for optimization and code simplification) ! njs_cmn: critical fix: when emitting code units, we also need to check for printable-non-mark (could produce visual glitches depending on font) ! njs_hexedit: critical fix: encoding input characters used a non-null-terminated string (and thus produced undefined results) ! njs_log: major update: redesign checker pattern calculation ! nj_term:: critical fix: xterm_BS should take not allow moving to history lines - njs_log: fix: for reverse range processors, don't process new zone immediately (postpone that until processReversePartList() - njs_log: fix: zoneOffset of the prev-page-merge-line should be the same as merge-offset (use it for col-calculation) - njs_hexedit: fix: adding/removing lines should invalidate the widget all the way to the bottom * njs_cmn: change copy-as-c-array whitespace style to K&R - njs_term: fix: prevent reentrant writes (replies to report requests when local-echo on) * njs_term: draw cursor at m_colCount normally * njs_log: when generating codepoint tooltips for bin-text lines, use the whole available buffer (not just BinTextLine::m_binSize) * njs_log_wdg, njs_hexedit: when copying hex view/bin text, respect decoder state at specific offsets * njs_hexedit: if data change is close to an inter-line border, redraw the possibly affected lines, as well * njs_log: maintain inter-leaf char decoder states for bin-hex & dual-bin-hex * njs_cmn: pad with incomplete-chars, not continuation-byte-chars - njs_cmn_wdg: fix: on selection change, handle the case of empty selection (don't redraw from the very top) * njs_cmn_wdg: opt: add WA_StaticContents & WA_OpaquePaintEvent to all widgets - njs_log_wdg: minor fix: one unnecessary extra line was redrawn in onRepresentPageCompleted * njs_cmn, njs_srv: trivial: IndexFile::addLeaf() should return `IndexLeaf*`, not `const IndexLead*` * njs_cmn_wdg: set default hex-ascii gap to 1 (otherwise, it looks different from the offset gap) Device Monitor changelog: ! tdevmon: release tdevmon-3.3.13 (linux-only) - dm_lnx_lkm: compat fix: in linux-6.5, they killed ITER_PIPE; adjust iov_iter_is_pipe accordingly - dm_lnx_lkm: compat fix: in linux-6.4, they changed class_create to accept only one param (const char* name) Jancy changelog: ! all: major update: new type `string_t` (non-zero-terminated UTF-8 string gslice) and major string handling optimization ! jnc_ct, jnc_rtl: major update: port the regex engine to axl_re2 / re2s ! jnc_rtl: critical fix: appendFmtLiteralStringImpl should not go beyond the end-of-range when checking for null-termination ! jnc_edit: call unloadDynamicLibs from the code-assist thread (so that dynamic lib uninitializers are called from the same thread) ! jnc_ct: major update: support llvm-17 (so now it's llvm-3.4.2 -- llvm-17) ! jnc_ct: critical typo fix: arm32/arm64 "cdecl" callconv-s were incorrectly mapped to gcc32/gcc64 ! jnc_ct: critical fix: amd64 system-V ABI off-by-one miscalculation at callsites (the sret arg was incorrectly counted) ! jnc_ct: critical fix: only propagate releavant type flags (make sure we don't accidentally propagate layout & signature status flags from one type to another) + jnc_api, jnc_dll: add jnc_Module_unloadDynamicLibs() - jnc_ct: fix: set type for pass-on-stack args * readme: update the latest supported version of llvm (llvm-17) * jnc_ct: assert function type match in LlvmIrBuilder::createCall - jnc_ct: fix: jnc::ct::Function declarations of llvm.memset/llvm.memcpy/ llvm.memmove were incorrect (the align parameter was removed in llvm-7) - jnc_ct: fix: flush llvm::raw_string_ostream before accessing the target std::string + jnc_ct: map __chkstk on windows - jnc_ct, jnc_edit: remove `variant` keyword (not a keyword anymore); replace it with the `variant_t` typedef - jnc_ct: fix: LlvmIrBuilder::createSwitch (intptr_t -> int64_t) * jnc_std: update re latest axl rename (ascii -> latin1) * jnc_ct: clone the alias initializer token list before resolving (otherwise, code assist for alises is empty) * jnc_edit: delay startup of the code assist thread when triggered by keypresses in the editor * jnc_ct, jnc_edit: support code-assist thread cancellation - jnc_edit: leak fix: Model for auto-complete could be orphaned -- create a completer before the model - jnc_ct: fix: a single token leak in code assist loop * jnc_ct: don't convert to closure-aware-type in prepareOperandType() -- this loses default args - jnc_ct: fix: maintain scope structure after failed parse of a default arg - jnc_ct: fix: skipped args with default values should yield "identity" - jnc_ct: typo fix: CastKind_Identitiy -> CastKind_Identity - jnc_ct: fix: integer constant extensions and byte swaps should yield "identity" cast kind (not "implicit") - jnc_ct: fix: `null` values should yield "identity" cast kind, not "implicit" - jnc_ct: fix: ensure layout before checking if type is stringable or disposable + jnc_std, jnc_io: make socket addresses stringable by adding toString() * jnc_ct: refactor attribute processing & unused state detection (undefined -> created -> staged) * jnc_ct: fix: handle no-code-gen in OperatorMgr::getStructField for non-ptr-values * jnc_ct: move pragma handling to PragmaMgr * jnc_ct: for simple const properties, use body for the getter * for simple read-write properties, disallow bodies - jnc_api: fix: variantRelationalOperator didn't handle NULL-type in variant properly * jnc_rtl_intro: add `const` modifiers to introspection class methods * jnc_ct: default processing for logical ! operator (cast to bool, compare to zero) * jnc_ct: simplify OperatorMgr::getConditionalOperatorResultType (prefer `true-type` unless can't cast) + jnc_api: add GcHeap::markVariant * jnc_api: opt: format variants using function tables rather than switch * jnc_ct: opt: select arithmetic result type using tablesrather than switch * jnc_ct: opt: prepare operands using functions tables rather than branches * jnc_io_hid: force-import io_HidDb.jnc (otherwise, the required io.HidUsagePage could be missing) + jnc_ct: add jnc::OverloadableFunction::ensureLayout (and use it from Orphan::adoptOrphanFunction) * jnc_ct: allow recalculations of signatures (due to imports) * jnc_ct: minor refactor in Orphan::adoptOrphanFunction * jnc_ct: normalize type signatures * jnc_ct: ensure indexer property getter layout before choosing the best one - jnc_ct: fix: use Token::Pos instead of lex::LineCol - llk: fix: ensure no tail padding in llk::SymbolNode - llk: fix: (unlikely) leak of an invalid char token AXL changelog: ! axl_re2: new axl_re2 library (wrappers for re2s, a heavily modified fork of Google RE2) ! axl_sl: critical fixes in the implementation of the incremental reverse boyer-moore find (could have lead to missing matches and even crashes) ! axl_enc: major update: a redesign of the UTF-8 reverse decoder DFA (now it yields a sequence of CPs strictly isomorphic to that of the forward UTF-8 decider) ! axl_enc: major: redesign for the enc::Locate implementation (a simple overshoot compensation won't work for the reverse UTF-8 decoder) + axl_enc: add enc::CharCodec::getPendingLength(enc::DecoderState) + axl_enc: add enc::Advance and enc::CharCodec::advanceDecoderState + axl_sl: add CircularBuffer::peek() + axl_enc: opt: emission of pending CUs in forward UTF-8 DFA does not need to bitwise-and 0x3f for the header byte - axl_enc: fix: utf-8 should use unsigned comparisons for encoding * axl_test_qt: bench codecs * axl_enc: opt: UTF DFAs must first check for State_Ready (i.e., w/o errors) + axl_enc: enc::CharCodec::calcRequiredBufferLengthToDecode_xxx now accept enc::DecoderState (also add simple inline wrappers without it) + axl_g_pch: add AXL_HAS_TAIL_PADDING/AXL_ASSERT_NO_TAIL_PADDING macros for tail-padding checks * all: remove axl mem tracker (use crt debug facilities on msvc and the leak sanitizer on gcc/clang) * axl_enc, axl_sl, axl_re: rename codec: Ascii -> Latin1 - axl_lex: fix: ensureSrcPosError should NOT push SrcPosError over NoError * axl_sl: BitMapN should use unsafe (and faster) bit manipulation functions * axl_sl: opt: sl::StringRef::ensureNullTerminated: avoid unnecessary incref/decref when transferring ownership * axl_sl: opt: StringRef::isEqual should use memcmp rather than StringDetails::cmp ................................................................................ version 5.4.2 (2023-11-09) Service release. Introduces the new HID Monitor plugin. Main application changelog: * nj_app: resize dockable widgets according to their size hints + package/win: install msvcrt10 with new windows (msvc15) packages, too (libusb-1.0.dll depends on msvc10) + conf, package/msi: add the hidmon plugin on windows and linux Scripts changelog: ! new hidmon (HID Monitor) plugin + hid: count TX & RX stats * usb, usbmon, hid: when showing device info, prefer descriptor strings to DB strings * samples: fix: DeviceParams -> UsbDeviceParams (recent changes in UsbLog) * hid, usb: add Hid/Usb prefixes to log record structs, cleanup formatting of VIDs/PIDs * hidlog: prefer usages specified later; show subcollections before fields Ninja Scroll changelog: ! njs_log_srv: process new zone BEFORE bumping the zone index (otherwise, the processing of EOF happens in the next zone, and this could yield wrong find results) Jancy changelog: ! jnc_ct: win: make filepath lowercase when building a set of parsed files otherwise, this could lead to some scripts being parsed multiple times ! jnc_io_hid: critical fix: m_collectionArray should grow using setCountZeroConstruct (m_rd->getCollection() can trigger GC) ! jnc_io_hid: new HIDMON enumerator - jnc_io_usb: fix: incorrect ASSERT() in UsbMon on windows (reopen after a failed attempt) - jnc_io_usb: fix: missing mapping of the io.openUsbDevice(vid, pid) overload - jnc_io_usb: fix: invalid order of fields in UsbInterfaceDescriptor AXL changelog: ! axl_io_hid: new HIDMON enumerator on Windows & Linux ! axl_sl: critical typo fix: BoyerMooreFindBase had hardcoded type uchar_t for comparison (must be templated typename C). Caused incorrect results when finding character codes >= 0x80 * axl_io_hid: api change: prefer latest usages when decoding * axl_core: allow setting axl_g_traceFile to NULL * axl_io_hid: rename HidReportKind -> HidReportType and adjust values to match the HID specification (1 = Input, 2 = Output, 3 = Feature) * axl_io_hid: io::HidStandaloneReport now serializes LogicalMinimum, LogicalMinimum, UnitExponent, Unit) * axl_io_usbmon: use LIBUSB_CLASS_HUB instead of 0x09 - axl_io_hid: remove USB_CONFIGURATION_DESCRIPTOR* m_configDesc (unused) * axl_io_hid: refactor HidRdParser * axl_sys_lnx: add `const` modifier to UdevDevice::getSysNum - axl_sys_lnx: fix: allow passing NULL for empty strings in UdevDevice::getParentWithSubsystemDevType (NULL is treated differentrly from an empty string) ................................................................................ version 5.4.1 (2023-10-05) Service release. Main application changelog: ! pacakge/msi: fix: add missing io_hid.jncx * conf: move HidLog.njplg to its own directory Hardware client changelog: ! ionina-hwc: fix: remove notification printfs for BROKEN frames (makes it impossible to pipe the output of ioninja-hwc directly to Wireshark) ! nj_hwc: immediately start FPGA upload on --firmware without a TCP or pipe server Scripts changelog: * hidlog: extract the HID log plugin to a dedicated dir * hid: take LogicalMinimum into account when choosing the output format for values (signed-vs-unsigned) Jancy changelog: + jnc_io_hid: add HID mon device enumerator (for usbmon-based HID monitoring) * jnc_io_hid: move m_releaseNumber next to m_usagePage/m_usage (so that HID fields are together) - jnc_io_usbmon: remove fields: m_manufacturerDescriptorId, m_productDescriptorId, m_serialNumberDescriptorId (pretty much useless) + jnc_io_hid: add bool const property io.HidReportField.m_isUnsigned AXL changelog: ! axl_io_hid: add enumeration of sniffable HID devices (windows only for now) ! cmake: prefer llvm-config to get a list of LLVM libraries to link (but fall back to llvm_map_components_to_libnames/llvm_map_components_to_libraries) + cmake: add recent c/c++ standards to the list of possible options for -std - cmake: fix: first check and include axl_io_usbmon, then axl_io_hid (hidmon depends on usbmon) + axl_io_usb, axl_io_usbmon: add fields: hubInterfacePath in UsbDeviceStrings, devInst in UsbDeviceEntry * axl_io_usb: refactor UsbDeviceStrings::queryStrings() to allow passing the USB hub device file directly * axl_sys_win: add `const` modifiers to all DeviceInfo getters + axl_io_hid: add bool HidReportField::isUnsigned() ................................................................................ version 5.4.0 (2023-09-28) Major release. Introduces the new HID plugin, improved high-DPI support on Windows, two sets of packages on Windows 10 (modern) vs Windows XP (legacy), a critical fix of IO code in the hardware client that causes packet loss in Ethernet Tap during high-load, major redesign & optimization of the Jancy tokenizer & LL(k) parser implementation, a critical fix in the log text search engine, fixes for many other potential crash conditions. Main application changelog: ! conf, test, package: install new HID plugin & libraries ! package: have two separate sets of packages on windows: modern CRT & QT for Windows 10 and leagacy MSVC10 CRT & QT 5.6.3 for Windows XP ! package: improved compatibility on Linux; runs on glibc-2.8 (2008) and up ! nj_app, nj_ui_app, nj_ui_srv: add support for removeObject ! nj_app: critical fix: update packet template pane when the server process terminates (e.g., due to a crash); otherwise, leads to dangling pointers and a crash of the main app ! nj_ias, nj_app: new 'hidden' and 'collapsed' attributes in packet templates; optimize and improve property grid update on hex editor changes * nj_app: prevent unintentional auto-shortcuts in document titles + add method Layout.clear() so it's possible to remove forms + nj_app: add version info on qt, llvm, openssl * nj_app: replace the DigiCert Root CA certificate with the one from Let's Encrypt (ioninja.com is using Let's Encrypt now) * nj_app: process DPI changes (e.g., when the user drags an app to a screen with a different DPI) * nj_app: activate centered-dialogs on show (weird focus behavior on older QTs on Linux otherwise) * nj_app: paint base background for the tabs in the find dlg - nj_app: fix: FindDlg::showEvent didn't call to the base class (which should center-align it) - nj_app: fix: memory leaks caused by PluginMgr::populatePluginMenu(), QtPropertyEditorFactory table & jnc::Edit theme Hardware client changelog: ! nj_hwc: critical fix: enforce proper order of usb transfers (libusb completions could be delivered out-of-order!) * nj_hwc: filter out zero-sized frames (wireshark doesn't know how to handle zero-sized frames and simply terminates) * nj_hwc: separate USB IO & transport threads to increase USB throughput + nj_hwc: add settings for read parallelism and buffer size Scripts changelog: ! hid: new HID terminal plugin ! ethernet-tap: critical fixes in the FPGA firmware file - usb: fix: keep the previous selection on device list refresh + samples: add packet templates for ErgoDox HID control * ssh-serialmon: only add --ioctl for Linux hosts (when portName looks like a Unix device name); otherwise, doesn't work with remote windows hosts Ninja Scroll changelog: ! all: use qreal for all on-screen coordinates ! all: improved high-DPI support ! njs_log: add support for overlapping after a wrap (otherwise, we miss a single pattern if the cursor is in the middle of it) ! njs_log: force re-sync during on-index-progress 0 (otherwise, we could potentially miss end-of-rebuild) - njs_log: fix: cleanup line gap calculation and usage (delimiters were not always properly drawn) * njs_log: process wraps during find (important for whole-word search) - njs_cmn: don't replace code units with dots in bin-ascii & bin-text * njs_log: rename range processors (now that there's no cache-proc vs range-proc duality) - njs_log: remove find & save cache processors (not used anymore) QT Property Browser changelog: + qtpb: add proxy style to force SH_ItemView_ShowDecorationSelected; otherwise, alternating colors do not include branches Jancy changelog: ! jnc_io_hid: new extension library for working with HIDAPI ! jnc_ct: add support for LLVM ORC JIT ! graco, llk, frame: major redesign and optimization of the main token loop ! jnc_ct: on arm, add signext/zeroext attributes to call sites (possible ABI incompatibility on ARM64 otherwise) ! jnc_ct: fix: check for presence of current function in ControlFlowMgr::lockEmission/unlockEmission (a possible crash otherwise) ! jnc_ct: fix: crash after error recovery due to lack of code-gen in OperatorMgr::getPropertyBinder, OperatorMgr::getPropertyGetter ! jnc_ct: support closure function/property ptr/refs as operands of the conditional operator ! jnc_ct, jnc_ext: critical update: never parse while mapping ! jnc_ct: remove LLVM IR instruction names ! jnc_ct: fix: disallow auto-size arrays as arguments ! jnc_ct: critical fix: regex for floating point tokens ! jnc_ct: updates & fixes for latest llvms (up to llvm-16) ! jnc_io_usbmon: apply device address filter on linux + add asserts for empty resolver stack in recover() -> synchronize() * llk, frame: free locators back to the node pool - graco: open target file first, then call getFullFilePath (realpath returns NULL for non-existing files; the out-buffer is undefined) * jnc_dll: bump SONAME - jnc_ct: fix: handle situation when the imported target type of a data pointer type is already resolved - jnc_ct: fix: clear PtrTypeFlag_DualTarget when folding dual data ptr type + jnc_ct: add a slot for cmut to data-ptr & class-ptr * jnc_ct: opt: TypeModifier_Const, TypeModifier_ReadOnly, TypeModifier_CMut are mutually exclusive -- remove redundant ifs * jnc_ct: make Type::getTypeStringTuple inline + jnc_api: add jnc_Module_getExtensionLibFilePath to find the path to .jncx - jnc_ct: fix: don't finalize invalid/incomplete properties - jnc_ct: fix: restore namespace stack on property decl errors - jnc_ct: fix: keep enum type for index operator operands - jnc_io_ssl: remove unused file io_SslSocketEvents.jnc - jnc_ct: fix: restore namespace stack on errors in DerivableType::parseBody + jnc_api: add jnc_strDup_w for wchar_t* - jnc_rtl: fix: regex match offsets are 64-bit now; make necessary adjustments * jnc_app: rename --disable-code-gen to --no-codegen, --compile-only to --compile, --jit disables --run, --no-codegen implies --compile, --debug same as --debug-info - jnc_ct: fix: only generate debug-locs for user functions - samples: fix: jnc_Module_initialize takes jnc_ModuleConfig* as the last parameter - jnc_ct: fix: missing declaration of disableLlvmGlobalMerge on arm + jnc_app: add compilation stage profiling; --time-report to show compilation stage times * jnc_io_websocket: require io.SslState * jnc_ct: set EnableFastISel = true when jitOptLevel == 0 + jnc_api, jnc_ct: introduce the generated jnc_Config.h * jnc_api: check for null when mapping variables + jnc_ct, jnc_app, jnc_api: add module configuration (jit-kind, jit-opt-level, compile flags) * jnc_app: don't optimize on -O0 * jnc_ct: reorder pass managers initialization (like in clang) * jnc_api: schedule llvm_shutdown() from jnc_initialize(); use atexit instead of axl module finalizers * jnc_mini_ide: center cursor on double-click in the module pane - jnc_ct: fix: assign declarator attributes to special-void-methods (e.g., constructors, destructors, etc.) AXL changelog: ! axl_io_hid: new wrapper library for HIDAPI ! axl_lex, axl_dox, axl_st, axl_re, axl_ini: major redesign & optimization of the lexer API & implementation ! axl_sl: major optimization of the circular buffer implementation ! axl_sl: new boyer-moore API and implementation ! axl_sl: redesign API for uleb128/sleb128; add uleb128 encoder ! axl_mem: new memory allocation / memory tracker API ! axl_re: all offsets are 64-bit now * axl_zip: refactor: add `const` method modifiers where appropriate * axl_sl: opt: remove run-time empty-checks on List::removeHead/removeTail/ eraseHead/eraseTail * axl_sys: optimize the TLS API to reduce ref-counting (mostly, we want pointers only) * axl_io: opt: no need to zero buffer prior to realpath() * axl_io: fix: add specialization to err::complete - axl_io: fix: on posix, check result of ::realpath - axl_sys_ca: fix: only use OPENSSL_INC_DIR on linux (could be NOTFOUND and thus cause cmake errors) + inc: add missing include redirectors (axl_mem_TrackerBlock.h, axl_re_StateInit.h) ................................................................................ version 5.3.3 (2023-05-18) Service release. Main application changelog: ! nj_app: critical fix: QT rpath on mac-arm64 Hardware client changelog: ! nj_hwc: critical fix: invalid epoch in pcap timestamps ! nj_hwc: critical fix: ignore empty frames and frames with broken CRC from Ethernet Taps (empty frames cause Wireshark to stop capturing) Device Monitor changelog: ! tdevmon: release tdevmon-3.3.12 (linux-only) ! dm_lnx_lkm: fix: in the read_iter hook, override iov_iter.data_source to WRITE to make copy_from_iter() happy (linux-6.2+) ................................................................................ version 5.3.2 (2023-04-25) Service release. Introduces support for ARM64 (a.k.a. Aarch64) Main application changelog: ! nj_app: critical fix: handle early paletteChanged() notifications (default themes could still be uninitialized, which caused crashes with qt5ct) * package: mac: include target CPU suffix (now, we have two: amd64 & arm64) + nj_cmn: add /etc/ioninja to conf files search path to allow for a more natural placement of configuration files on Linux Scripts changelog: ! modbus: precise synchronization of the raw data with decoded modbus frames * serial: rename: SerialDispatch.m_break -> m_breakCondition (to conform with io.Serial.m_breakCondition) + serial-tap: add dispatch * serial: cleanup dispatch code + common: support nested structs in log.representStruct() - modbus: fix: the ascii representer used an incorrect offset for bad LRC - modbus: fix: the ascii parser didn't reset state to idle after LF - modbus: regression fix: the new form ui didn't properly switch the ASCII/RTU mode Ninja Scroll changelog: * njs_log: add default flags = 0 to Representation::retroColorize() * njs_log_wdg: fix: don't clear top markup during invalidation - njs_hexedit: fix: incorrect overlay paint logic - njs_hexedit: fix: adjust x-pos of hex-pane background * njs_log: improve state consistency when re-colorizing the tops of pages Device Monitor changelog: ! tdevmon: release tdevmon-3.3.11 (linux-only) ! dm_lnx_lkm: write protection removal on aarch64 ! dm_lnx_lkm: critical fix: incorrect handling of the original filp close (could have resulted in skipped notifications) ! dm_lnx_lkm: critical fix: dup_iter can return NULL (not an error) * dm_lnx_lkm: define iov_iter_is_pipe on older kernels * dm_lnx_lkm: check for ANY connections before doing more expensive stuff - dm_lnx: fix: type of the 1st parameter for device class:devnode * dm_lnx_lkm: use atomic_inc/atomic_dec instead of __sync_add_and_fetch/__sync_sub_and_fetch (can be missing from libgcc) Jancy changelog: ! jnc_ct: fix: aarch64 abi uses up to [ i64 x 2 ] for sret/arg type coercion plus other aarch64 abi fixes - jnc_ct: fix: ensure non-empty DI unit file name (to suppress LLVM assert on forced imports) - jnc_ct: arm: fix: check for presence of global-merge before disabling it + jnc_rt: arm64: save exception address AXL changelog: * cmake, axl_g: by default, silence AXL_TODO on GCC (way too verbose) * cmake: use qt imported targets instead of qt5_use_modules on newer QTs * axl_glibc: on aarch64, only wrap math functions + cmake: axl_set_pch for gcc: add includes of imported targets ................................................................................ version 5.3.1 (2023-03-02) Service release. Main application changelog: ! nj_app: critical fix: loading a previously saved session caused a crash (a regression introduced in v5.3.0) Scripts changelog: * wizards: redesign the protocol analyzer wizard (a made-up binary protocol) * tx-modifier: unconditionally make a copy of buffer for retransmissions & inter-char delays -- transmit() receives a volatile foreign buffer ptr * wizards: refactor AnsweringMachine for the new Jancy regex engine/API - wizards: remove SyntaxHighlighter & TX/RX test (broken & irrelevant) * wizards: update brace style in Filter, Transport, SendToolBar Ninja Scroll changelog: - njs_log: fix: saveLogAsText() didn't pass the icon map parameter properly; as a result, the resulting log text file had missing icon characters ................................................................................ version 5.3.0 (2023-02-23) Major update. Introduces: new form UI for plugins, regex-based log markup, new USB Monitor plugin, new USB Endpoint plugin with support for simulatenous operations on multiple endpoints, log filters plugins for standalone log files, a critical fix in tdevmon for Linux on ARM Main application changelog: ! nj_ui: a new library of widget classes for building form UI from scripts ! nj_app: the new log regex markup engine replaces log colorizer ! nj_cmn, nj_log, nj_srv: replace log record filters with scripted log filters applicatble to standalone logs ! nj_app, nj_srv, nj_ui_app, nj_ui_srv: move implementation of QTPB dictionary property to ioninja, add new dictionary widget & major refactoring of dictionary properties ! nj_app: macOS AppStore build: fix crashes during in-app purchases due to incomplete IAP product registration * nj_app: use back-alt color for read-only script editors * nj_ui_srv: remove `opaque` modifiers from classes that don't really need it * nj_ui: invoke `onchanged` for ui.Action.m_isChecked when set programmatically * package/msi: install USBPcap, io_usbmon.jncx * nj_app, nj_ui: in QFormLayout, use left align for labels grow all fields (important on macOS) * nj_app: eliminate layout "jumping" when switching between documents of the same kind * nj_app: don't silently ignore conflicting plugins loaded from different locations -- show a "conflict" error instead + nj_ias_srv: new function: `unreceive` + nj_srv, nj_app: add OOB (out-of-band) messages, add new `getTransmitData` to fetch contents of the transmit pane from the server + nj_app: new class: DockWidget to take care of proper tab navigation within a pane + nj_log: add log record size checks in StdRecordCode_RetroColorize and StdRecordCode_Error * nj_app, nj_ui: keep track of all icons & properties created by layers so that we can delete them on layer removal * nj_app: when saving log, show errors on insta-failures - nj_app: fix: check if the server process is created before sending a disconnect message * conf: rename: com.ioninja.log-colorizer -> com.ioninja.log-regex-markup Scripts changelog: ! api: new library of widget classes for building form UI ! all: new form UI for all relevant plugins ! usbmon: new plugin: USB monitor ! usb: new plugin: USB Endpoint (a combination of USB Data Endpoint + USB Control Endpoint w/ support for simultaneous IO on multiple endpoints) + all: suport connect()/disconnect() functionality in applicable plugins + api: new function: unreceive() to put data back in the receive buffer + api: new function: getTransmitData() + api: add methods: ui.EnumProperty.addOption(), ui.EnumProperty.clear(), * pipe-server: move filter to the log plugin * websocket: use new ui.StdEditToolBar + common: new helper class: ui.StdEditToolBar + api: add helper funcs: insertDictionaryHead/createDictionaryHashTable/ findDictionaryEntry * api: rename: DictionaryProperty.m_keyLabel/m_valueLabel -> m_keyColumnName/m_valueColumnName * api: add m_placeholderText * websocket-client: change default address (ws://demos.kaazing.com/echo is dead now) * all: new plugin ServerSocketLogFilter * rename: ComboBox.m_onEnter -> m_onReturnPressed * serial: update plugins now that log filters are auto-loaded + common: new class: LogRecordCodeFilterUi (for building LogFilter-s) * all: rename: toolTipText -> toolTip * serial: extract serial log processing into a dedicated directory SerialLog * doc: extract base class: doc.PluginConfig * doc: move: doc_LogDocument.jnc to api/ - serial: fix: SerialDispatch.m_statusLines is a read-only property - serial: typo fix: on serial error, one attempt of reopen happen regardless of the "Reopen on error" property Ninja Scroll changelog: ! njs_log: major redesign: regex colorizer -> regex markup (also support regex-driven delimiters) ! njs_log: critical fix: don't lose sticky-scroll on fast log growth - njs_log: regression fix: copy bin as hex-view wasn't re-implemented after the recent major redesign + njs_log: introduce LogWidgetFlag_StickToBottomShadow to restore the stick-to-bottom mode after a series of vertical scrolls - njs_log: fix: redraw and stick-to-bottom on fold-record * njs_log: fix: incorrect m_msgSize in ClientPeer::sendRangeProcessErrorMsg() - njs_log: fix: don't use -2 as the end-range-line in saveLogAsText(); use getLineCount() - 1 instead * nj_log: optimize redrawing of the prev line (only necessary when appending data to the log) * njs_cmn, njs_log: offset backgrounds for hex-view a half-char-width to the left Device Monitor changelog: ! tdevmon: release 3.3.10 (linux-only) ! lkm: critical fix: on ARM LPAE and linux-4.14.3, must clear PMD_SECT_AP2 ! lkm: ifdef read_iter/write_iter (to support linux kernels prior to v3.16.0) * make: move -Wno-date-time from pragma to compiler options * app: link to dl (might be required with the new axl and older gcc-s) * cmake: a minor fix to allow building tdevmon.ko from a bundle-repo + lkm: add -Wno-parentheses (suppress a useless warning) Jancy changelog: ! jnc_io_usbmon: new extension library for USB monitoring ! jnc_io_usb: major update re the latest changes in axl USB enumerator ! jnc_ct: added support for +/- pointer operators for arrays ! jnc_ct: critical fix: check for errors in leave {} syntax rule handlers ! jnc_ct: critical fix: TypedefShadowType should fetch target type *after* calling ensureLayout() -- to properly handle import fixups ! jnc_io_cmn: blockingWait() now uses the newly added interruptible rt::Event ! jnc_io_usb: fix: mark opaque gc root UsbDevice::m_deviceDescriptorPtr * jnc_edit: add BaseBackDisabled to theme color sets use it for read-only background * jnc_edit: don't draw extra-selections (e.g., current-line) in read-only and disabled modes * jnc_rt, jnc_sys: refactor interruptible sys::Event::wait() -- move implementation to jnc_rt_Event.h (to make it reusable across extension libs) * jnc_edit: set RUNPATH to $ORIGIN/@loader_path + jnc_std: add non-const overloads for memchr, memmem, strchr, strrchr, strichr, strpbrk, strstr, stristr - jnc_ct: fix: EnumType::getValueString should use zero-extension (just like calcEnumConstValues and parseConstIntegerExpression) + jnc_api: new class StdBuffer (maps to std.Buffer) * jnc_io_usb: rename: UsbInterface.m_parentDevice -> m_device, UsbEndpoint.m_parentInterface -> m_interface + jnc_api: add jnc_strDup_utf16 * jnc_io: rename: io.SerialPortDescMask -> io.SerialPortDescFlags - jnc_ct: fix: resolve import base types of enums before namespace traversing - jnc_ct: fix: cast array -> bool should yield true * jnc_io: non-critical: move leaveNoCollectRegion to a more logical location - jnc_rtl: fix: invalid format specifier for pointers in data-out-of-range error message * jnc_rt: adjust default for leaveNoCollectRegion(bool canCollectNow = false) - jnc_ct: fix: don't (prematurely) allocate variables and resolve orphans during the parse stage - jnc_ct: fix: when adding bodies to global namespaces, reset the state to NamespaceStatus_ParseRequired - jnc_ct:: fix: TypeMgr::requireExternalReturnTypes() & VariableMgr::initializeGlobalVariables() should fully process and clear arrays -- even on errors. VariableMgr::initializeGlobalVariables() should open the namespaces of corresponding global variables before parsing the initializer - jnc_ct: fix: processCompileError(ModuleCompileErrorKind_PostParse) didn't always close namespaces * style: unify indent style for JNC_BEGIN_CALL_SITE/JNC_END_CALL_SITE - jnc_ct: fix: ct::GlobalNamespace::clear should clear extra body list * jnc_io_base: doesn't depend on libudev anymore (axl links to libudev dynamically) - jnc_io_devmon: fix: invalid struct layout (m_activeEvents and m_unused were misaligned; luckily, those are never really used) + jnc_ct: add support for throw (set error, then throw) + jnc_ct: add `std` namespace to the list of standard namespaces (so that we can access it from the compiler) * jnc_io_base: refactor serial & network adapter enumeration code QT Property Browser changelog: + qtpb: add method: QtEnumPropertyManager::addEnumName (a single string) * qtpb: expose QtEditorFactoryPrivate (to make qtpb extensible) and remove dictionary property -- now it can be implemented as an external extension AXL changelog: ! axl_io_usbmon: new module axl_io_usbmon for capturing USB traffic; uses USBPcap on Windows and usbmon on Linux ! axl_sys: major update: full redesign of libudev wrappers (lazy dynamic binding, no dependency on libudev.h) ! axl_io, axl_io_shmt: move shared memory transport into a dedicated library called axl_io_shmt ! axl_io_usb: major update: sync libusb enumerator with Windows device tree or macOS IOKit registry to fetch extended information & descriptors - axl_sl: typo fix in AXL_SL_PROTO_SEND_FUNCTION_3 (T2 -> T3) * axl_io: rename: SerialPortDescMask -> SerialPortDescFlag + axl_cf: new methods: MutableDictionary::create(), Number::Number( CFNumberType, const void*) - axl_io_usb: fix: invalid wrapper around libusb_get_string_description_ascii (needs special handling) - axl_io_usb: remove libusb dependency for axl::io::UsbError (we can use axl libusb error provider without linking to libusb) * axl_io_usb: change return value from UsbDevice::getDescriptor(), getStringDescriptor(): bool -> size_t - axl_io_usb: typo fix: incorrect return on error in UsbDevice::getDescriptor - axl_io: remove unneeded accessors in SerialPortDesc and NetworkAdapterDesc * axl_io: rename: completeOverlappedRequest() -> completeOverlappedIo(); add new method isOverlappedIoCompleted() * axl_io: update io::UsbDevice API (add const modifiers, fix libusb versioning about port path API) * axl_io: update linux serial port enumerator for the latest libudev wrappers - axl_sl: fix: sl::String::getBuffer should still set length when buffer is NULL * axl_io: rename: createNetworkAdapterDescList -> enumerateNetworkAdapters createSerialPortDescList -> enumerateSerialPorts - axl_io: remove the never-used axl_io_Transport.h and friends ................................................................................ version 5.2.1 (2022-10-28) Service release. Introduces: save log selection as .njlog or .txt, save terminal as .txt, sort serial port list in all serial-based plugins, major redesign of the sticky-scroll implementation in the log and terminal widgets, fixes of multiple long-time UI issues. Main application changelog: ! nj_app: new log menu items: "Save Log Selection As..." to save selected portions of log into .njlog or .txt files ! nj_app: new terminal context menu items: "Save As..." and "Save Selection As..." ! nj_app: fix: the "settings" corner button in log and terminal widgets disappeared on every parent scroll and essentially was inaccessible on heavy load - nj_app: fix: terminal was not restored from the minimized state on the "Show Terminal" toolbar button click - nj_app: fix: on hiding the packet template pane, remove the maximum data size limit in the hex editor - nj_app: don't show temp files location in the "New Session" dialog when running in the sandbox (AppStore review issue) * nj_app: ask the user whether to stop the script before closing the script pane * nj_app: terminal: convert LF -> CR-LF by default - nj_app: fix: log statistics were not properly updated in the information pane due to a typo * nj_app: in the terminal context menu, we must show alternative shortcuts for copy/paste (Ctrl+C, Ctrl+V have a different meaning in the terminal) * nj_app: redesign UI for save log selection/binary selection/as text - nj_app: fix: switching between sessions cleared the property template widget - nj_ui_app: fix: handle log palette colors in Jancy combo boxes - nj_ui_app: fix: handle transparent colors in the information pane + nj_app, nj_cmn: add new plugin property: null-packets to allow or disallow empty packet transmission (defaults to `false`) - nj_app: fix: handle null-packets when iterating through history - nj_app: fix: layout of the Save Session dialog (min-size was hardcoded) + nj_hwc: add EZ-USB config uploader Hardware Client changelog: ! nj_hwc: new command-line option: --index (for specifying zero-based tap index) Scripts changelog: * common: sort serial port lists in all serial-based plugins * all: set null-packets = true where it could be required * all: rename: ui.ColorFlags.Transparent -> Undefined Jancy changelog: ! jnc_ct: fix: don't try to delete LLVM unreachable blocks; leave that for the LLVM optimization pass (caused compilation failures with `return` in the middle of a basic block) - jnc_ct: fix: normalization of multi-line literals + jnc_std: new functions: std.sort(), std.Array.sort() - jnc_ct: fix: don't skip namespace finalization for documentation & code-assist scenarios - jnc_ct: fix: check public/protected access on items accessible through the `using` directive Ninja Scroll changelog: ! nj_log, nj_term: major update: redesign of the sticky-scroll implementation in the log and terminal widgets ! njs_log: critical update: remove lossless observers (the existing implementation leads to potential deadlocks under heavy load conditions) - all: fix: mouse cursor must be applied to QAbstactScrollArea->viewport(), not to the whole QAbstactScrollArea + njs_term: add save-to-file functionality - njs_term: fix: cleanup & refactor copying from the terminal - njs_log: fix: reset ConversionMgr on every moveConverterToTail_s, moveFilterToTail_s (even if not changed -- for consistency) + njs_log: add new functions for saving log range as text + njs_log: add new range processor: save selection as njlog ................................................................................ version 5.2.0 (2022-09-16) Major update. Introduces: system dark theme support, color themes in the terminal emulator, major improvements in the xterm compatibility, extended information about serial ports in all related plugins, support for *.njlog output in ioninja-hwc. Main application changelog: ! nj_hwc: add support for writing *.njlog files ! nj_app: support for the system dark theme ! nj_app: support for changing themes in terminal ! nj_app: add prev/next buttons to packet transmit panes (smart iteration over the packet history similar to bash) ! nj_app: terminal: add support for mouse tracking and mouse wheel, handle Alt + Key on macOS, and many other terminal compatibility improvements ! nj_app, nj_srv, nj_hwc: ignore SIGPIPE on POSIX ! nj_log: critical fix: incorrect iteration over m_conversionPipeline ! nj_app: critical fix: on macos, a stack-allocated instance of style was passed to QApplication (potentially causing a crash on exit) * nj_app: fix: kill overlay highlights in the hex editor before adding autorun-induced highlight(s) * nj_app: allow placing corner buttons into subwidgets + nj_app: add shortcuts to all relevant tooltips - nj_hwc: serial-tap: process line errors * nj_hwc: reuse standard serial enums from axl_io/io_Serial.h + nj_ui: add property: ui.ComboBox.m_itemToolTip * nj_app: before transmission, execute all autorun actions (and wait for completion) + nj_ias: add support for attribute [extraSize] (when a minimum packet size is bigger than the header size) + nj_log: add methods: Log::copyOriginalRecordFile, Log::copyFinalRecordFile Scripts changelog: ! serial: add manufacturer info and extended tooltips for serial combo box * serial-*: unify port enumeration code * all: redesign color system (as a part of dark theme support) - ssh: fix: "send" not disabled on error (error handling in ssh is refactored) + ssh: add support for reconnect * hwc: reuse standard serial enum values from io_base.jncx/io_Serial.jnc * process: default TERM to `screen-256color` + api: add property ui.ComboBox.m_itemToolTip - tcp-flow: typo fix: andress -> address - tcp-flow, udp-flow: typo fix: IPv6 headers were not properly decoded - tcp-flow, udp-flow: fix: invalid handling of Ethernet Tap records (PacketHdr is preceded with a 32-bit frame #) + packets: add `extraSize` attributes to appropriate Modbus packets (otherwise, auto-update CRC overwrites header bytes) + packets: add autorun method: ModbusRtuReadReplyPacket.updateCount() - pcap: fix: minor fixes after redesigning `exportToPcap` - websocket: fix: invalid access to property `jnc.RegexState.m_captureArray` * pcap, ethernet-tap: rename: io_LogToPcap.jnc -> log_exportToPcap.jnc Ninja Scroll changelog: ! njs_term: major redesign of the painting engine in log, hex-edit, and terminal widgets ! njs_term: use ragel for fast xterm sequence parsing ! njs_term: major improvements in xterm sequence processing compatibilty ! njs_log: critical fix: don't update the final record file of the conversion pipeline while closing the server (potential crash) ! njs_log: fix: checker pattern was calculated incorrectly (edge cases not properly handled, particularly in bin-text) ! njs_cmn: support dark themes in log and hex-edit ! njs_log: line indices/counts are now 64-bit ! njs_log: critical fix: bugs in moveConverterToTail_s()/moveFilterToTail_s() caused mixup in the order of filters * njs_cmn, njs_term: prefer to keep the top of the fixed-sized console at the screentop * njs_term: draw a dotted border around fixed-size terminal consoles - njs_hexedit: fix: char wrap in overwrite mode didn't work properly Device Monitor changelog: ! dm_lnx_lkm: critical fix on ARM: pmdIdx selection based on addr and SECTION_SIZE QT Property Browser changelog: * qtpb: for links, use QPalette::Link instead of the hardcoded bright-blue * qtpb: clear Qt::TextColorRole if QProperty::valueColor is not set * qtpb: use QPalette::Button for grid lines (SH_Table_GridLineColor doesn't work well for the dark theme) Jancy changelog: ! jnc_io_base: fix: NetworkAdapterAddress used incorrect socket address structure that didn't work on macOS; as a result, the list of adapters in ioninja was missing address information ! jnc_ct: generate code-assist for async functions ! jnc_edit: add theme support - jnc_io_base: fix: link to libudev on linux - jnc_ct: fix: OperatorMgr::awaitOperator didn't handle missing code-gen properly * jnc_ct: check for empty closures (rather than assert) * jnc_io_base: add fields to io.SerialPortDesc: m_manufacturer, m_hardwareIds, m_driver, m_location + jnc_api: add method: jnc_Attribute_getValueVariant - jnc_ct: fix: don't add ScopeFlag_Nested to internal scopes for `disposable` variables (otherwise, `disposable` fails to compile inside `nestedscope`) - jnc_ct: fix: don't generate qualified names for declarations in scopes - jnc_ct: fix: don't add more values to a property closure than the property argument count - jnc_ct: fix: move check for hasCodeGen in OperatorMgr::castOperator() after prepareOperand() * jnc_rtl: remove constants from `bitflag enum RegexCompileFlags` (redundant now that we use `bitflag`) AXL changelog: ! axl_io: add extra fields to SerialPortDesc (manufacturer, hardware IDs, driver, location) ! axl_lex: add support for utf16_t and utf32_t in lex::Ragel ! axl_lex: add method Ragel::setSourcePart() to support chunk-by-chunk tokenizing ! axl_gui: removed the whole axl_gui module (heavily redesigned and integrated directly into njscroll) - axl_sys_win: fix: incorrect string length in DeviceInfo::getDeviceRegistryProperty (the returned size includes trailing null) + axl_sl: add typedefs: ArrayDetails::Value, ArrayRef::Value + axl_lex: add lex::QtRagelSyntaxHighlighter (previously, gui::QtRagelSyntaxHighlighter) * axl_sl: optimize sl::String::remove() to avoid copying when removing from index 0 + axl_enc: add new functions: isMark(), isHiSurrogate(), isLoSurrogate(), isSurrogate() * axl_enc: enc::HexEncoding::encode can now emit string in any UTF encoding * axl_io: rename generateTempFilePath() -> createTempFile() ................................................................................ version 5.1.2 (2022-05-15) Introduces: new dispatch interface for exposing session-specific actions to IAS (in-app scripting), new IAS functions transmitAll() and receiveAll(), support for copying timestamps & binary offsets from the log and hex editor. Main application changelog: ! nj_app: add IAS dispatch interface for exposing session-specific actions ! package/msi: fix: missing conf/guest.pem (prevented offline guest sign-in) ! nj_ias_srv: add the "timeout" parameter to `receive()` ! nj_app: new: setting default layout (Menu -> View -> Reset Layout) * nj_app: suggest to "keep workstation signed in" for non-guest accounts * nj_app: flush account settings when app signin dialog completes successfully + nj_ui_srv: add method: ui.ComboBox.findData + nj_hwc: add cmd line option --ser-enum to enumerate serial ports - nj_app: fix: elide status text in file transmit pane - nj_app: fix: don't cause long file name to affec the min-width of the whole file transmit pane - nj_app: fix: incorrect handling of packet template changes (could cause cutting the hex-edit data) - nj_app: fix: don't process hex-edit changes if packet templates are disabled Scripts changelog: ! api/ias: add IAS dispatch interface ! usb-ctrl-ep: add the "claim interface" functionality (might be required when receipient is set to "interface") + api/ui: add method: ui.ComboBox.findData + common: add utility functions: findUsbInterfaceComboIndex, findUsbEndpointComboIndex - usb-ctrl-ep: fix: restore default properties didn't work correctly + usb: dispatch interfaces for "usb data endpoint" & "usb control endpoint" sessions + api/ias: add new functions: transmitAll() and receiveAll() + api/ias: add `timeout` parameter to receive() + udp: dispatch interface for the "udp" session + tcp-server: dispatch interface for the "tcp server" session + tcp: dispatch interface for the "tcp connection" session + serial: dispatch interface for the "serial" session Ninja Scroll changelog: ! njs_log: select & copy timestamps & offsets (ctrl + mouse click) ! njs_wdg: fix: incorrect processing of CSI Ps @ (insert blank) sequences in terminal widget - njs_wdg: fix: incorrect painting of overlay highlights when h-scrolled Jancy changelog: + jnc_edit: add property: QString jnc::Edit::extraSource() + jnc_api: add union field: jnc_Variant::m_data (to make size measurements more explicit) - jnc_ct: ImportMgr: fix: if import has an absolute path, don't try to find it in import dirs + jnc_api: add jnc_Module_addSourceImport() - jnc_ct: fix: FunctionMgr::epilogue should check the scope structure (might be broken after the error recovery) - jnc_ct: fix: Parser::parseTokenList should respect the result of parseEofToken() - jnc_io_base: fix: IoThreadFlag_Datagram was not properly set - jnc_ct: workaround: don't optimize functions with landing pads * jnc_api: in msvc16 and up, we can't take address of `setjmp` -- implement it in assembly - jnc_ct: fix: incorrect LLVM version check (in conditional compilation of lvm::DIBuilder::insertDeclare) AXL changelog: ! axl_gui: add support for color256 xterm CSI sequences - axl_sl: fix: sl::Array::insert() should check for count == 0 + axl_sl: sl::Array: add methods for insertion of element duplicates: copy(e, count), append(e, count), insert(e, count) + axl_gui: add Engine::getMousePoint, mapGlobalToWidget, mapWidgetToGlobal + axl_io: add io::isAbsolutePath() * axl_io: add const qualifiers to io::SerialPortDesc ................................................................................ version 5.1.1 (2022-03-15) Service release. Critical fix for incorrectly reported Evaluation/Subscription due time on some Linux platforms, a few critical fixes in the new Log Colorizer, use the pre-release build of libssh2-1.10.1 to support RSA-SHA2 required by openssh-8.8 and above, new feature: Guest Login. Main application changelog: ! nj_app: critical fix: don't store unix milliseconds in time_t which could be 32-bit on some platforms (e.g., arm32) ! nj_app: new: Guest login (sign in without an account) ! nj_hwc: don't rely on libusb timeouts, they don't work reliably; instead, reduce the USB transfer block size (1K transfer, quad-parallelism) + nj_app, conf: add new capability: com.ioninja.log-colorizer + nj_srv: add sys::registerExceptionErrorProvider() as to avoid cryptic errors on exceptions * nj_ui: bounds-check in ComboBox::setCurrentIndex * nj_hwc: serial-tap: don't send last error on start * nj_app: don't show "promotion" status when on subscription or evaluation * nj_app: limit offline promotions (app tokens contain timestamps now) * nj_ias: validate buffer sizes in transmit()/receive() * nj_app: handle the situation when autoSignInKind is set to `cookie` but cookie is null (e.g., if previous version has cleaned the cookie and didnt touch autoSignInKind) Scripts changelog: ! ssl, common: pass hostname to the server (SNI) ! xmodem: fix: buffering of xmodem blocks in the xmodem receiver ! ethernet-tap: don't rely on libusb timeouts, they don't work reliably; instead, reduce the default read block size (max transfer size is 512, with 1K buffer and quad-parallelism we should be good) * common, ssh-*: rename: io_HwControllerProto.jnc -> io_HwcProto.jnc Ninja Scroll changelog: ! njs_log: fix: update leaf before suspending (otherwise, it's possible that the cache doesn't update until the next log record is added) - njs_log: fix: incorrect check for cross-page colorization trigger - njs_log: fix: incorrect assert on char-codec-state in ColorizationMgr::colorizerThreadFunc * njs_wdg: TerminalWidget should use UTF-8 by default Jancy changelog: ! io_ssh: use libssh2-1.10.1 (pre-release) to enable RSA-SHA2 required by openssh-8.8 and above AXL changelog: ! axl_re: critical fix: flatten sequences (the current design won't work with nested sequences) ! axl_re: critical fix: anchor transition map was not properly buit for the reverse DFA; major update of NfaStateSet::buildClosureImpl ! axl_io_ssl: add methods: io::Ssl::getHostname(), setHostname() * axl_re: initialize ExecEngine::m_prevChar - axl_re: fix: incorrect assert in re::Compiler::nonCapturingGroup() ................................................................................ version 5.1.0 (2022-02-23) Major update. Introduces new regex-based log colorizer, auto-calculation of packet template fields (such as checksums or length), new CLI-based client for IO Ninja hardware (ioninja-hwc), new plugins: Serial over SSH, Serial Tap over SSH, Ethernet Tap over SSH. Main application changelog: ! nj_app: new built-in regex colorizer to replace the Regex Colorizer plugin ! nj_ias, nj_app, nj_srv: autorun actions marked with the `autorun` attribute to automatically update checksums, packet length, etc. ! nj_app: critical fix: invalid sudo password attempts were not properly handled on Linux and macOS (leading to a locked-up application) ! nj_app: critical fix: Packet Library now uses the Base64 encoding for packet data; the previous implementation was lossy (on invalid UTF sequences) + nj_app: when plugins that require `sudo` are launched via the "New Session" drop-down menu, run them via `sudo` * nj_app: when in AppStore sandbox on macOS, hide the `sudo` checkbox on the New Session dialog and don't allow loading plugins that require `sudo` + nj_app: add keep-alive requests to update `date_refresh` on the server (now that we drop old app sessions) + conf: add Serial over SSH, Serial Tap over SSH, Ethernet Tap over SSH + conf: add HTTP server to the list of stock IAS scripts * nj_app: make script pane read-only on compile or run * nj_app: make user name bold in the sudo password dialog * nj_app: save plugin default settings on document close * nj_app: change focus policy for login dlg (don't tab-stop on radio-buttons) * nj_app: set sticky-scroll on clear-log - nj_log: fix: create a copy of the log record block for observers (those often are scheduled) * conf: packet template library divergence: Modbus.jnc -> ModbusRtu.jnc, ModbusTcp.jnc - nj_app: fix: bring transmit & info panes to front on show (before they remained at bottom when stacked) Hardware Client changelog: ! nj_hwc: new command-line client for managing IO Ninja hardware (Serial Tap, I2C/SPI Tap, Ethernet Tap); also supports Serial (so it can be used to control an attached serial port remotely over SSH) Scripts changelog: ! new plugin: Serial over SSH ! new plugin: Serial Tap over SSH ! new plugin: Ethernet Tap over SSH ! tcp-flowmon, tcp-flow: a major update of the TCP decoder - ssh: fix: don't pass process extra params to `shell` processes + pcap, tcp-flowmon, udp-flowmon: add `sudo` attribute (pcap-based plugins require sudo on Linux or macOS) - ethernet-tap: disable terminal (this is a packet-based read-only plugin) * ias: update the HTTP server sample - pcap: fix: attempted application of the capture filter to a closed device * protocols: rename: TCP "Windows size" -> "Window size" - common/ui: fix: SSH process type was not saved (cannot simply set m_value because it's a `char const*`) * packets: diverge Modbus packet templates (RTU vs TCP, request vs reply) + packets: add new attributes (displayName, fixedSize, autorun) to packet template libraries + protocols: add displayName attributes to Modbus declarations; use those attributes from Modbus plugins - serial: fix: update break condition * all: choose better session group names in the information grid Ninja Scroll changelog: ! njs_log: new regex colorizer based on the new AXL regex engine ! all: major update: port to the new AXL char codec architecture (the bin-text view should work much faster now) ! njs_log: major update of the implementation of check-pattern (must show record boundaries, not part boundaries) ! njs_log: redesign of the sticky-scroll implementation * njs_log: right-click in log sets cursor now + njs_wdg: add new method: HexEditWidget::addDiffOverlayHilite * njs_wdg: HexEditWidget::insertChar: replace encoded char buffer with a more explicit 'char[4]' (utf32_t is confusing) Jancy changelog: ! all: major update: port to the new regex engine implementation in AXL ! axl_io_usb: critical fix: on some backends, it's crucial to free libusb transfers before closing the USB device ! jnc_io_usb: critical fix: removeInterface/removeEndpoint incorrectly checked for non-null links before removing the item from the list - jnc_io_ssh: fix: when reconnecting, use the local or remote address family (previously, AF_INET was unconditionally used on reconnect) - jnc_io_base: fix: typo in handling read errors - jnc_ct: fix: override this-value in ArrayType::calcLayoutImpl (otherwise, it is possible to use unrelated Field-s) - jnc_io_base: remove duplicate update of serial status line events (already set in updateStatusLineEvents) + jnc_api: add attr-related methods: jnc_ModuleItemDecl_findAttribute, jnc_Attribute_getValueConstData, jnc_Attribute_getValueString_v, jnc_AttributeBlock_ensureAttributeValuesReady - jnc_std: remove std.BinTreeFindRelOp as it's now implemented via templates in AXL (and is not used in ioninja anyway) * jnc_ct: use sl::StringRef instead of sl::String for module item names * jnc_ct: EnumType must emit documentation about its base type AXL changelog: ! axl_re: redesign of the regex engine: Ragel-based lexer, DFA search engine, NFA engine for captures, full support for Unicode characters & Unicode word boundary anchors, the engine is applicable to streams ! axl_enc: redesign of UTF char codec engines: fast DFA-based forward and reverse decoders for UTF-8, UTF-16, UTF-32; the reverse decoder yields codepoint sequence isomorphic to the one produced by a forward decode even when replacement characters are emitted; decoders provide information about the number of "pending" code units ! axl_sl: use template parameters instead of runtime parameters in: sl::BinTree::find and sl::BitMap::merge to template args ! axl_sl: remove bool parameters from sl::BitMap::findBit/setBit/setBitRange; instead, provide explicit members set/clear/find/findZero + axl_mem: add mem::Pool::clear + axl_sl: add getters for sl::CircularBuffer: getBuffer, getReader, getWriter + axl_g: AXL_TRACE on windows is now redirectable to a file * axl_gui: remove in-loop buffer checks in TextPainter::buildBinTextBuffer() instead, pass an oversized buffer; pad the buffer in case of an incomplete trailing codepoint * axl_gui: opt: make shortcuts in TextAttrAnchorArray::overlay inlinable - axl_sl: minor style fixes for Boyer-Moore (still need to clean-up and employ the new buffer-less utf32 decoder) + axl_gui: add gui::TextAttrAnchorArray::setTailAttr * axl_sl: rename: sl::String::setReducedLength -> overrideLength * axl_sl: minor opt in sl::String::reserve(), ensureExclusive(), getBuffer() + axl_enc: add enc::isWord (letters, numbers, connecting punctuation) * axl_sl: add forceCopy to sl::Array & sl::BitMap * axl_sl: remove template arg from sl::True, sl::False (always `bool`) + axl_sl: add HashTable::operator [] const + axl_sl: add ASSERT(m_p) in Iterator::operator -> () * axl_rc, axl_sl, axl_enc: minor updates re move semantics - axl_sl: fix: add missing constructor for ConstRbTreeIterator: ConstRbTreeIterator(const Iterator >& src) ................................................................................ version 5.0.4 (2021-09-29) Service release. Critical fix of a rare deadlock on heavy load, added missing io_websocket.jncx to the MSI package, coding style in all scripts changed from Allman to K&R. Main application changelog: ! msi: add missing io_websocket.jncx to the MSI package on Windows + nj_app: add command line option -c (--connect) to connect a session immediately after startup + nj_app: add command line option -s (--script ) to load and run a script file immediately after startup - nj_app: prevent auto-resize of the Save Session dialog (could have caused annoying window resizing when typing) - nj_srv: don't write log detailizer errors to the system log (e.g., when TCP Flow Analyzer is attached to Pcap Session) Scripts changelog: ! style: Allman -> K&R variant (same-line opening braces) - tcp, ssl, websocket: fix: incorrect reconnect logic (reconnect stopped after the first failed reconnect attempt) - all: fix: set appropriate errors in transmit() when session state is invalid; otherwise, we get confusing errors in the in-app scripting pane + common: add a checksum calc for XOR-8 * post-it: don't write empty tags to log * common: don't add empty strings to history * generic-serial-tap: update error string when DTE is the same as DCE Jancy changelog: ! jnc_dll: version bump to 1.9.0 (SONAME must be updated due to many ABI changes since 1.8.7) * jnc_edit: update auto-completion of "prototype" functions for the new K&R brace style Ninja Scroll changelog: ! nj_log: critical fix: rare deadlock in inter-process read-write locks on heavy load AXL changelog: ! axl_sys: don't return bool from ReadWriteLock::readLock/writeLock; fall back to spin-locking on a wait failure ................................................................................ version 5.0.3 (2021-09-17) Service release 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 ................................................................................ version 5.0.2 (2021-09-07) Service release (macOS AppStore only) Main application changelog: ! nj_app: critical fix: in-app purchases of `com.tibbo.ioninja.personal` made in previous versions of ioninja were not handled properly (affects AppStore users only) ................................................................................ version 5.0.1 (2021-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 ................................................................................ version 3.15.1-a (2020-12-20) 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 ................................................................................ version 3.15.1 (2020-12-18) 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 ................................................................................ version 3.15.0-b (2020-11-01) Service release Main application changelog: * package: set executable permissions for both libjancy and libjancy-edit, but only on linux, not on macos - qtpurchasing: remove NSLog on successful product registration - nj_app: remove debug printf when testing bundle builds with _NJ_APP_BUNDLE Jancy changelog: - jnc_edit: fix: remove rpath - jnc_edit: fix: replace printf-s with TRACEs in code-assist-thread ................................................................................ version 3.15.0 (2020-10-30) Introduces: the macOS AppStore version is now free for download with in-app purchases, code-assisting Jancy editor, support for compile error recovery in the Jancy compiler, new DF1 protocol analyzer, propagation of connect and disconnect states across linked sessions, critical fix on Linux (crash when ioninja is run with QT-5.15.x) Main application changelog: ! nj_app: use QT Purchasing for in-app-purchases on macOS ! 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: don't deactivate the MDI child if there are still open documents: on macOS, we receive notification on subWindowActivated(NULL) when MainWindow loses focus - 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 endlessly queue 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 an 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 ................................................................................ version 3.14.4 (2020-07-27) Service release Main application changelog: ! nj_app: fix: incorrect version displayed and used on Linux/macOS (regression introduced in ioninja-3.14.3) * nj_app: when sandboxed (macOS), show an info message before asking the user to select the base session dir * nj_app: when sandboxed (macOS), don't check for updates * nj_app: save last save-log/save-session dirs (bookmark save-session-dir when sandboxed) Scripts changelog: ! pipe-mon, mailslot-mon: apply capture filter during capture ! tcp-flow, udp-flow: preserve original timestamps on convert * tcp-flow: ConnectionPickedUp should use INFO color (not to confuse with Connected/Disconnected) * pcap-log: CaptureStarted/CaptureStopped should use INFO color (so not to confuse with Connected/Disconnected) - pcap-log: typo fix: logical && in SetCaptureFilter + devicemon-log: added DeviceMonLogRecordCode.SetCaptureFilter + common: added method iox.Monitor.setFileNameFilter (so it's possible to adjust capture filter on the fly) - tcp-flow, udp-flow: fix: apply settings on load (otherwise, initial settings are not respected) Ninja Scroll changelog: ! njs_log: critical fix: bin-text in cache-mgr could cause loss of index synchronization on a specific input (ultimately leading to a crash) - njs_log: critical fix: LineWidget::ensureVisible should prevent negative m_firstVisibleLine/Col (could cause repaint issues) - njs_log: fix: retro-colorize didn't properly repaint merged lines + njs_log: added sanity checks in retroColorize Jancy & Graco changelog: ! jnc_ct: explicitly disable address operator on 'threadlocal' variables (which is currently unsupported and leads to a crash) ................................................................................ version 3.14.3 (2020-07-10) 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 ................................................................................ version 3.14.2 (2020-04-24) Service release Main application changelog: * nj_srv: added FileFlag_Unlink to the detail log record file otherwise, these files kept piling up in the ninja tmp-dir (POSIX only) - package: fix update download paths (didn't work for tagged versions) Scripts changelog: - tcp, ssl: fix: nullify m_localAddress before assigning m_addressFamily otherwise, the "auto-adapter" may reuse the previous local address * all-tcp: in onResolver event, shield connect() with 'try' (otherwise, we may have "unhandled-exception" records in the log) Jancy changelog: ! jnc_io: critical fix: set non-blocking mode for self-pipe on POSIX (otherwise, there is an opportunistic deadlock under high-load) ! jnc_io: fix: on macOS, io.SocketAddress.isEqual and .isMatch always returned false * jnc_io: fix: axl::io::SockAddr::isEqual/isMatch now accept (sockaddr const*) Ninja Scroll changelog: ! njs_log: major update: sticky-scroll now behaves more natural & predictable ! njs_log: fix: check for null-line before calling notifyRecordChanged (otherwise, opportunistic crash under high load) ! njs_log: fix: on rename, clear axl::io::FileFlag_Unlink -- otherwise, the newly saved log file gets deleted immediately (POSIX only) * njs_log: on clear, reset m_firstVisibleLine/m_firstVisibleCol AXL changelog: ! axl_io: on macOS, getExeFilePath should return realpath (otherwise, linked ioninja executables can't find conf files) * axl_io: remove unnecessary overloads io::SockAddr::isEqual/isMatch ................................................................................ version 3.14.1-a (2020-04-21) Service release (Linux and macOS only) Main application changelog: ! package: disable library validation for ioninja-server (otherwise, we can't 'dlopen' 3rd party libraries from plugins; for example, J-Link RTT stopped working on macOS Catalina) AXL changelog: ! axl_glibc: added versioned symbols for clock_gettime & secure_getenv this effectively lowers GLIBC requirements from GLIBC-2.17 to GLIBC-2.9 * cmake: when using glibc wraps, also link librt * axl_glibc: add explicit declaration for secure_getenv Jancy changelog: * jnc_io_base: don't rely on the system 'execvpe' (missing on macOS and GLIBC version < 2.11) ................................................................................ version 3.14.1 (2020-04-14) Service release Main application changelog: ! nj_app: critical fix: standard (over-email) evaluation licenses stopped working due to broken extraction of product key - nj_app: on certain platforms, welcome-dlg layout looked distorded due to QGroupBox stylesheet conflicts * nj_app: welcome-dlg should initially set focus to the "I want to evaluate IO Ninja" radio button + package: added ioninja.desktop and png icons to all Linux packages - package: fix: only include top-level directory for zip & tar - nj_app: fix: use QByteArray.constData to avoid cast ambiguity on older QTs ................................................................................ version 3.14.0 (2020-04-10) Introduces: TCP Listener, SSL Listener & Pipe Listener are now "real" servers with support for multiple clients, TCP Proxy supports multiple proxy connections, TCP Flow Monitor follows multiple connections, the Mac OSX build is now notarized with Apple and doesn't cause Gatekeeper warnings, first-time evaluation doesn't require email. Main application changelog: ! 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 ................................................................................ version 3.12.2 (2020-03-12) Introduces: new "SSL Connection" plugin for establishing raw SSL connections, new "SSL Listener" plugin for accepting raw SSL connection, new "Process" plugin for running child processes, list of MRU plugins, a couple of critical bugfixes in Jancy. Main application changelog: ! nj_app: added a list of MRU plugins to the new-session/new-layer drop-downs ! nj_app: use two-level new-session drop down (two many plugins by now to keep everything in a planar list) * nj_ui: removed BaseTailPadding and assert proper alignment of base classes * conf: moved ssl plugins to the top - nj_app: don't serialize propertySplitterPos (doesn't work well when different plugins are used); now we explicitly call resize ui.PropertyGrid.resizeNameColumnToContents + nj_ui: added implementation for ui.PropertyGrid.resizeNameColumnToContents + nj_ui: implemented property: BoolProperty.m_isGroupEnabler + nj_ui_srv: added autoget field: Property.m_parent + nj_ui: implement properties: ui.FileProperty.m_mode, m_options * nj_ui_app: combo boxes should use EditRole for selecting appropriate item in the drop down * nj_app: added size-grips to appropriate dialogs + nj_ui_srv, nj_ui_app: added new UI class: DictionaryProperty - nj_ui: removed getVariantString (now, part of libjancy) * nj_app: create property managers lazily (previously, all property managers were created regardless of whether they are used or not) * nj_app: on play-log-in-terminal, force-show terminal - nj_ui: on win-x86, get rid of dependency on kernel32.dll:InterlockedCompareExchange64 (missing on windows xp) * nj_app, nj_srv, nj_log: PlayInLogProcessor is now a range processor (more efficient) + nj_app: serialize and add recently used plugins to the menu * conf: rearrange plugin lists - nj_app: fix: workaround for swapping Ctrl & Meta on MacOS in the terminal * nj_app: call TerminalFrame::raise when showing terminal (::activate is not enough on MacOS) + nj_ui: added method: ui.Terminal.write + conf: added plugins: ssl, ssl-listener, process + nj_srv: add ssl error provider * nj_srv: link to axl_io_usb Scripts changelog: ! ssl: added the "SSL Connection" plugin ! ssl-listener: added the "SSL Listener" plugin ! process: added the "Process" plugin ! net-plugins: use the new class io.HostNameResolver instead of the removed io.SocketAddressResolver ! api: added property ui.BoolProperty.m_isGroupEnabler (a common pattern where a checkbox enables/disables all children) - pipe: fix: disable transmit on disconnect - tcp-listener: fix: disable transmit on disconnect - ssl-listener: fix: disable transmit on disconnect - transmit: fix: transmit script arp-whois.jnc used removed enum io.ArpProtocolType * net-plugins: use the new features of SocketPropertySet/SshPropertySet * serial: use the newly added ui.BoolProperty.m_isGroupEnabler * all-plugins: call PropertyGrid.resizeNameColumnToContents() * common: redesign of SocketPropertySet & SshPropertySet + api: added method: PropertyGrid.resizeNameColumnToContents * api: a minor cleanup of property builder methods + api: added properties: ui.FileProperty.m_mode, m_options (so we can use it for directories, too) + api: added readonly property ui.Property.m_parent * tcp-listener, tcp-proxy: use newly added ui.SocketPropertySet.m_overrideConnectionProp * pipe: rename m_overrideOldConnectionProp -> m_overrideConnectionProp for consistency + common: added new property m_overrideConnectionProp to SocketPropertySet * common: DefaultRemoteAddress should be const + api: added new class: ui.DictionaryProperty * api: rename: FileProperty.m_fileDialogCaption -> m_fileDialogTitle * ssh-serialmon: adjust text in errors: "machine interface" -> "tdevmon MI" * ssh-serialmon: improved handling of MI errors (most importantly, handle the situation of missing tdevmon) - ssh: fix: SshLogRecordCode.SshAuthenticating was not represented + api: add method: ui.Terminal.write - tcp-listener: fix: after rejecting a client, no moдаre incoming connections were accepted * all: make use of the new common field m_port in the io.SocketAddress (shared between ip4 and ip6) * all: stylistic change: remove space before partial application operator ~(...) Jancy changelog: ! jnc_io_pcap: fix: crash on windows if wpcap.dll cannot be delay-loaded ! jnc_io_ssl: new extension library for client/server SSL sockets ! jnc_io_base: new class HostNameResolver to replace SocketAddressResolver ! jnc_io_base: new class io.ChildProcess for running child processes ! jnc_ct: critical bugfix: catch & finally labels didn't actually finalize current scope (closeScope was called from unreachable block) ! jnc_ct: preserve values across async-returns ! jnc_io: added method to all IO classes: asyncWait ! jnc_api, jnc_rtl: made Promise completion available via API (so that it's possible to implement async interfaces in extension libs) ! jnc_io_base: critical bugfix: don't gc-alloc under lock (previously, i used NoCollectRegion, but it's not enough -- we still may deadlock when entering the call-site) - jnc_api: removed BaseTailPadding (bad practice); replaced with an ASSERT * jnc_api: mark the union inside jnc::Variant as requiring 8-byte alignment * jnc_ct: if jncDynamicExtensionLibMain returns NULL, it probably sets some error -- don't overwrite it with a generic message - jnc_io_ssh: fix: openssl is required for jnc_io_ssh; check for its presence before adding jnc_io_ssh - jnc_std: crtical bugfix: move m_mapEntry from MapEntry to StdMapEntry (fixes tail-padding issues on x86) - jnc_std: fixed calling-convention mismatch in RbTree::removeImpl on x86 (thiscall vs cdecl) * jnc_rtl, jnc_api: export jnc_Variant_format_v (formerly, only available as formatting literal routine in rtl-core) + jnc_api, jnc_std: provide direct access to std.HashTable & std.RbTree * jnc_io_ssh: read stderr if PTY wasn't requested + io_devmon: added enum member: DeviceMonitorMiMsgCode._Last - jnc_ct: fix: close dynamic lib zip readers after parsing is complete + jnc_api: added API func: jnc_createPromise - jnc_ct: fix: use llvm::TerminatorInst for all LLVMs prior to llvm-8.0 - jnc_ct: fix: BasicBlock::iterator syntax workaround - jnc_ct: fix: preserveNames template argument for class IRBuilder<> was removed in llvm-3.9.0 * jnc_dll: use xcode.cpp instead of xcode.c * jnc_api: don't map type methods if type namespace is not ready (means, it's unused - don't lazy parse it during mapping) + jnc_api: added jnc_Namespace_isReady, jnc_Module_getStdType * all: rename axl::err::ErrorMgr::setForwardRouter -> setRouter; remove extra error providers from jnc_api (should be done in the main app only) * jnc_io_ssh: process FD_CLOSE + jnc_std: std.Buffer: added overloads for 'char' * std.Buffer.detach() should return char* * jnc_io_cmn: make m_port directly accessible in union io.SocketAddress * jnc_io_cmn: extracted a common base from AsyncIoDevice (AsyncIoBase) for the cases where read/write buffering is not needed - jnc_io: fix: minor fix in SocketBase::acceptLoop on Windows * jnc_io: moved accept loop to SocketBase * jnc_io: renamed tcpConnect -> connectLoop + jnc_io: added implementation for getFileKind on POSIX (via fstat) * jnc_io: moved FileKind detection to io_File.jnc * jnc_io: io.File.m_kind and io.FileStream.m_kind are now properties - jnc_io: fix: memory leak on IO error (windows-only, overlapped struct was not returned to the overlapped pool on error) + jnc_io: added a default timeout value of -1 to blockingWait Ninja Scroll changelog: ! njs_log: critical typo fix: invalid indexing into the target buffer in BufferingRecordWriter (leads to crash with 2 or more converters) ! njs_log: critical fix: reset m_lastRecordOffset and m_lastRecordIdx on clear * njs_log: fix assert: CacheLineFlag_MergedForward may be missing if lines are in different pages (i.e., last line & first line in two adjacent pages) + njs_log: added support for trailing tabs (to continue tables) - njs_log: fix assert: CacheLineFlag_MergedForward may be missing if lines are in different pages (i.e., last line & first line in two adjacent pages) - njs_wdg: fix: ensureVisible() was overly aggressive with scrolling - njs_log: fix: missing GetLogPosKind_SelectionStart flag when getting LogPos for the beginning of range * njs_wdg: if scroll is inevitable, ensureVisible() should try to put it in the center QT Property Browser changelog: ! qtpb: added new type of property: QtDictionaryPropertyManager ! qtpb: added prop isGroupEnabler for bool properties (makes all children enabled/disabled according to the bool property state) ! qtpb: combo properties should use EditRole for selecting items in the drop-down - qtpb: removed default values for QtFilePropertyData (empty strings work best) * qtpb: show tooltips for items in the drop-downs for combo properties - qtpb: removed setValueStatusTip declaration (unused and unimplemented) AXL changelog: ! axl_io_ssl: added wrappers for the SSL submodule of OpenSSL ! axl_io: added class axl::io::psx::Pty ! axl_core: added time64 functions from https://github.com/evalEmpire/y2038 - axl_sl: typo fix: (isAligned should return bool) * axl_cry: openssl error should use the hexadecimal notation for the error code + axl_cry: added class: cry::Dh + axl_cry: added methods: cry::Rsa::create, generate + axl_cry: added methods cry::BigNum::getWord/setWord + axl_sl: added methods: sl::String::setSubString, setLeftSubString, setRightSubString * axl_io: micro: moved zeroing of wait-count under if (...) - cmake: removed the unnecessary " " option in GCC_FLAG_DEBUG_INFO_RELEASE + cmake: add -Wno-char-subscripts as default for Xcode gen - axl_gui_qt: fix: handle empty QKeyEvent::text in QtWidgetBase::keyEventImpl - axl_io_psx: fix: declare 'code' arg to ioctl and fcntl as unsigned to prevent signed expansion on platforms where it's declared as long * axl_zip: on windows, append "N" to the mode string (makes the resulting handle non-inheritable) * axl_err: ErrorMgr should use public inheritance from ErrorRouter + axl_err: added routing for error descriptions + axl_cry: added wrappers for PEM & DER serialization for X509 certs * axl_cry: conditionally use BIO_METHOD* or const BIO_METHOD* depending on the OpenSSL version + axl_io: added method axl::io::win::File::getType (maps to GetFileType) * axl_sys: rename Process::createProcess -> Process::create - axl_sys: axl::sys::psx::getProcessImageName should use type pid_t * axl_sys, axl_io: moved things around: removed _win/_psx/_drw/_lnx folders; instead, added _io_pcap/_io_usb/_io_ssl ................................................................................ version 3.12.1 (2019-12-27) Service release: fix for a crash on select-word on an empty line, fix for a lock-down on unplugging Ethernet Tap or I2C/SPI Tap during capture, fix for non-selectable merge-boundary in text lines. Scripts changelog: ! ethernet-tap, i2c-spi-tap: fix: graceful stop waits forever on IO error Ninja Scroll engine changelog: ! njs_log: fix: adjust initial offset in selectWord() -- could have caused a crash if selectWord was called beyond the end-of-line ! njs_log: reset CacheTextLine::m_fullLength on merge (caused merge boundaries in text lines to be non-selectable) * njs_log: assert for proper usage (p < end) in findWordBoundary Jancy changelog: - jnc_io_usb: fix: incorrect assert in UsbInterface::removeEndpoint * jnc_io_usb: UsbEndpoint::write shouldn't clear UsbEndpointEvent_WriteCompleted if error was detected * jnc_io_usb: set UsbEndpointEvent_WriteCompleted in UsbEndpoint::cancelAllActiveTransfers ................................................................................ version 3.12.0 (2019-12-20) Introduces: new Ethernet Tap hardware sniffer & plugin, detail pane for the master-log-vs-details representation, added support for multiple protocols and post-capture filtering in the Pcap-based sniffer, process name detection in Serial, Pipe & Mailslot monitors, post-capture filters for file name, file id, process name and PID in Pipe & Mailslot monitors, introspection facilities and lazy parsing in Jancy. Main application changelog: ! nj_app, nj_srv: major update: added detail pane (crucial for Ethernet Tap, Pcap Sniffer and, in the future, other plugins) ! nj_app: added support for deep-find in FindDlg ! nj_app: changed the keep-alive timestamp logic (fixed the bouncing app icon issue on mac osx when ioninja is in the background) ! nj_srv, nj_ui_srv: added class ui.InformationStatValue to support delayed stats UI updates -- now plugins can efficiently calculate stats without worrying about UI updates gobbling up the CPU ! nj_app, nj_srv, nj_cmn: redesign of plugin load facilities (unification of methods used in nj_app and nj_srv) ! drivers: new packages with new sniffer VID/PIDs for win7 & win10 + nj_log: added new class LogDetailizer (to be called from the deep-search and other range-processors) + nj_srv: export global function: sendKeepAlive (for simple non-async loops in the main thread) + nj_log: added method Log.rebuild() + nj_log: add const property log.Log.m_recordFileName (maps to njs::Server::getOriginalRecordFileName) + nj_log: added a scatter-gather overload for log.Writer.write + nj_ui: added support for placeholder text to ui.ComboBox, ui.StringProperty, ui.ComboProperty + nj_ui_app: added support for ColorFlag.Transparent in ComboBox.m_backgroundColor - nj_app: fix: parse and load log filter settings - nj_srv: typo fix: processMsg_Load should call loadRecordCodeFilterProperties - nj_log: fix: mark wait regions (due to njs::Server::suspend()) - nj_log: fix: RecordCodeFilterGroup::m_isVisible was not initialized (should be true by default) - nj_app: fix: don't add duplicate plugins to the cmdline - nj_etx: fix: require 'main' function * nj_doc, nj_etx: moved 'transmit' to a dedicated library TransmitLib; link it to script-transmit modules * nj_app: rename single-user -> personal * nj_ui_app: FileDlg should reuse the last directory * nj_app: increase process wait time to 5 sec (the same as keep-alive-timeout) * nj_app: document should initially set focus to the master log * conf: added scripts/protocols to the standard import path * nj_app: serialize default plugin log filter settings * njs_srv: update status after a log is open (otherwise, hanging in a plugin constructor looks like we are trying to open a log) Scripts changelog: ! ethernet-tap: a new plugin for the hardware Ethernet Tap sniffer ! pipemon, mailslotmon: major update: added view filter (file name, file id, process name, PID) ! pcap-sniffer: added view filter (applicable post-capture) ! net-sniffer-log: added support for app-level protocols (e.g. DNS, NBNS, LLMR, DHCP, etc) ! common: added log_RepresentStruct.jnc (generic representation of an arbitrary structure using the Jancy introspection facilities) ! api: added class ui.InformationStatValue (delayed UI updates for efficient stats calculations) ! api: added placeholder text properties to ui.ComboBox, ui.StringPropterty, ui.ComboProperty (and all property-creating methods) + api: added method log.Log.rebuild + mailslotmon: also show writes (otherwise, we don't see any data on client files) + replay-log: added support for replaying custom log record codes + modbus: added request/reply/error stats + packets: added Modbus TCP frames to the Modbus library + serialmon: added SerialMonLogRecordCode.DeviceOpenError + serialmon:added process name information to DeviceOpened/DeviceOpenError + common: added utils for representation of new device opened/device open error records (with process names) + common: added class log.MonitorFilter capable of filtering by file name, process name, file id, process id + common: added function wildcardCompareStringLowerCase (Krauss algo) + pcap-sniffer: added export to pcap + common: added utilities for exporting *.njlog logs to *.pcap files + common: added property io.Monitor.m_logWriter + plugins: use the new placeholder texts int all editable combos, string and combo properties + api: added new methods: sendKeepAlive, log.Log.m_recordFileName, ui.ProgressDlg.dispose + api: added LineAttrFlags.Preview + fpga-uploader-log: added FpgaUploaderLogRecordCode.FirmwareBootFailed - ethernet-tap: removed show-raw-data prop - udp: removed the auto-switch-remote button from the toolbar - api: removed an unnecessary overload for Log.addConverter - all: remove the alignment directive from the bottom of files (unnecessary -- Jancy parser resets alignment to default for each compilation unit) - common: removed io.Monitor.m_fileIdMgr (we will use FILE_OBJECT as ids) - mailslot-mon: fix: MailslogMonitor should call m_session.m_logWriter (it doesn't have a direct logWriter) - mailslot-mon: fixed immediate throughput/size info - pcap-sniffer: removed throughput-calc (isn't implemented now, anyway) * moved NetSnifferLog to a shared log plugin (will be shared between pcap-sniffer and etherner-tap) * udp: change the back color of remote combo when it's on (and show a tooltip with a description) * api: minor cleanup of addConverter API * pcap-sniffer: open pcap is moved to the toolbar * net-sniffer-log: use the newly added table-feature in ninja-scroll * api: updated color for PasteOrange * common: minor update in checksum calc format specifiers * tcp-flow-mon, udp-flow-mon: updated PcapLogRecordCode names (Filter -> CaptureFilter) * pcap-log: renamed ...Filter... -> ...CaptureFilter... (now that we have both capture filters and view filters) * i2c-spi-tap: use 0x1000 as upload-base-index (new io.FpgaUploader API) * common: updated declarations for the TCP/IP stack * common: io.FpgaUploader should check for RpdVersion post-upload * common: added a setting to io.FpgaUploader for configuring baseIndex (e.g. 0x1000 for I2C/SPI Tap, 0x2000 for EthernetTap) Ninja Scroll engine changelog: ! njs_log: added support for tables (\t chars in text parts automatically align columns and form nicely-looking tables) ! njs_log: added support for bin-preview (show a limited number of lines from the bin-block) ! njs_log: fixed saved-log-as-text in plain-text mode ! njs_log: fixed selectWord for Unicode text strings and binary blocks ! njs_log: added new type of plugins: Detailizer (used for deep-search and, in the future, other range processors) ! njs_log: major update: range processors now can use the detail-pane ! njs_log: fix: prevent multiple simultaneous fold record requests for the same line ! njs_log: added support for scatter-gather log record writing + njs_log: added public methods: Server::getOriginalLogFileName(), getFinalLogFileName() + njs_log: added Server::isOpen + njs_log: added new protocol messages: RangeProcessCompleted, SetDetailSelection, SetDetailHilite, SelectRecord, HiliteRecord, KillSelection, KillHilite + njs_log: added FoldFlag_ExpandAll (all except for FoldFlag_Hidden) + njs_wdg: added methods: isHiliteEmpty, getHiliteStart, getHiliteEnd + njs_log: added method: waitIndexReady + njs_wdg: added parameter: const gui::TextAttr& selAttr to paint functions + njs_log: added methods: selectRecord(uint64_t recordIdx), hiliteRecord(uint64_t recordIdx) + njs_log: added method: forceUpdateUi() + njs_log: added flag m_isStickyScrollEnabled (to force-disable sticky scroll when not needed) + njs_log: added ConstFoldingFilter (e.g. for auto-expand) + njs_log: added NotifyCode_RecordChanged + njs_log: add RecordFile::getClassGuidArray (including the main one) + njs_log: add a delimiter on PartKind_Break - njs_log: fix: nullify m_clientPeer in Server::close() - njs_log: fix: openConvertedRecordFile did not preserve the original class GUID array - njs_log: remove space before array parentheses in CopyBinProcessor * njs_log: better checks on existing record file sizes, handle class guid duplicates properly * njs_wdg: set hex-ascii gap to 2 characters * njs_log: selects bin range improvements Device Monitor changelog: ! dm_lnx_lkm: use write_cr0 from Linux 5.2 (the previous release of tdevmon v3.3.3 stopped working on Linux >= v5.3) QT Property Browser changelog: ! qtpb: added support for placeholder texts in string & combo properties Jancy changelog: ! jnc_rtl_intro: added introspection facilities (the ability to inspect the program structure at runtime) ! jnc_ct: major redesign: lazy parsing (skip whole bodies of unused namespaces without tokenization) ! jnc_ct: cricital bugfix: internalPrologue didn't take struct-ret into account when extracting the arg-array ! jnc_rt: criticial fix: invalidate destructed class boxes and do not add invalidated boxes to the mark queue (caused problems when C++ destructor optimized some clean-up code away) ! jnc_io_usb: fix: recursively release interfaces and close endpoints (caused lock-downs when unplugging Taps during capture) ! jnc_ct: fix: specially handle null values in vararg lists (caused a crash) ! jnc_io_pcap: use signals and pcap_breakloop on close (otherwise, it's impossible to stop a capture if no packets arrive) ! jnc_io_base, jnc_io_cmn: fix: proper support for zero-sized reads/writes (important for UDP, here we can send empty datagrams) ! jnc_ct: major redesign: make overloaded functions explicit via class FunctionOverload and union OverloadableFunction ! jnc_ct: major redesign: get rid of dry-operators (getXxxResultType) ! jnc_ct, jnc_api: major redesign: removed LazyModuleItem, added LazyImport ! jnc_rt: critical fix: GcHeap::markClassFields should also mark class fields in base classes + jnc_ct: added support for simple format specifiers in formatting literals, e.g. $"value: %02x"(n) instead of $"value: %(1; 02x)"(n) + jnc_io_pcap: added io.PcapFilter for offline filtering + jnc_io_pcap: added support for npcap on windows; use npcap when available + jnc_io_pcap: added env setting JNC_IO_PCAP_DISABLE_NPCAP for disabling npcap + jnc_sys: added function: sys.getProcessImageName + jnc_sys: added function: sys.getCurrentProcessId + jnc_std: added methods: std.StringBuilder.chop, trim, trimLeft, trimRight + jnc_std: added std.StringBuilder method overloads for (utf32_t c, size_t count) so it's possible to multiply characters + pygments: added async/await keywords + jnc_ct: added method EnumType::findConst(int64_t value) + jnc_ct: allow attributes for enum constants + jnc_app: added a new cmdline switch -x/--exclude (to exclude specific files from directories; useful when we use -S to mass-add source files) + jnc_ct: on ARM, map memcpy/memmove/memset + jnc_ct: added method Namespace::ensureNamespaceReadyDeep + jnc_rt: add Variant::create (possibly, via GC-allocation) + jnc_rt: add GcHeap::markClassPtr/markDataPtr + jnc_api: add createForeignStringPtr overload for axl::sl::StringRef + jnc_api: add TypeKind to the parameter list for getXxxPtrType(...) + tools: added file2literal.pl (will eventually replace jnc2cpp.pl) - pygments: remove 'preconstruct' from token list in JancyLexer - jnc_ct: don't add the 'static' attribute to global functions & variables when generating documentation - jnc_ct: don't create doxy tokens when not needed (which is almost never) - jnc_ct: fix: GlobalNamespace::generateDocumentation should bail if generateMemberDocumentation fails - jnc_ct: typo fix in StructType::layoutField (should bail on fail) - jnc_ct: typo fix in BitFieldType::prepareDoxyLinkedText - jnc_ct: Typedef doesn't need calcLayout - jnc_ct: fix: CdeclCallConv_arm didn't lay out coerce array types - jnc_ct: fix: fat pointer pointer closure check in direct thunk - jnc_std: fix: std.Buffer should properly handle null-strings in append() and - jnc_ct: fix: use 'unsigned char' when calculating character literals values - jnc_ct: fix: m_requireSet should be cleared in Module::clear() - jnc_rt: fix: invalidated class objects should still be weak-marked - jnc_io_pcap: fix: sigemptyset may be a macro (remove context operator ::) - jnc_io_pcap: fix: cast uint64_t to pthread_t before passing it to pthread_kill - jnc_ct: fix: Namespace::clear should also clear the orphan array - jnc_io_pcap: fix: only include jnc_io_PcapSignalMgr.h on POSIX - jnc_ct: fix: zero dst memory on array casts - jnc_ct: removed Parser::Flag_ConstExpression (checking on each identifier is neither efficient nor enough); better check the final expression result where it matters - jnc_rt: fix: moved assert on TLS list empty *after* finalizing destruct thread - jnc_api: fix: indirect variant didn't save the newly allocated data ptr - jnc_rt: fix: GcHeap::collect_l should signal m_destructEvent if m_dynamicDestructArray is not empty - jnc_rt: fix: jnc_createForeignStringPtr should not use length + 1 for null pointers - jnc_api: fix: callFunctionPtr overload for a single arg had an extra RetVal* parameter - jnc_ct: disallow casts of const arrays into non-const pointers - jnc_ct: fix: set correct parent unit/namespace when parsing attribute values - jnc_ct: fix: restore previous unit after parsing lazy imports - jnc_std: fix: ensure zero-termination in std.StringBuilder - jnc_ct: fix: export ___bzero on macOS (required by LLVM) - jnc_ct: fix: thin function pointers do need calc-layout - jnc_ct: fix: don't use non-ANSI ltoa/ultoa/lltoa/ulltoa - jnc_ct: fix: offsetof operator needs a special handling when getting a value - jnc_api: fix: JNC_MAP_PROPERTY didn't check for NULL (missing property) - jnc_std: fix: added const modifiers to const methods in std.Array * jnc_std, jnc_rtl: moved resetDynamicLayout to the 'jnc' namespace * jnc_ct: don't calc layout on documentation generation; instead do a dedicated step 'ensureNoImports' * jnc_ct: handle doxy-comments as pragma productions * jnc_ct: Namespace::resolveOrphans should call getModuleItem outside of the main loop * jnc_ct: use StdType_CharConstPtr (instead of non-const ptr) in OperatorMgr::memCpy and Parser::appendFmtLiteralRawData * jnc_ct: getConditionalOperatorResultType should prefer const-ptr * jnc_ct: getConditionalOperatorResultType should add PtrTypeFlag_Const to pointers derivative from const-arrays * jnc_io_devmon: replaced int32_t m_ntStatus with a union (otherwise, m_ntStatus sounds weird on POSIX) * jnc_ct: setCastError should show if an operand is constant * jnc_ct: moved ';' to statement (otherwise, empty-body loops won't compile) * jnc_io_pcap: inversed the order of linkType, snapshotSize (should be the same as in pcap_open_dead) * jnc_io_pcap: set default arg value: filter = null * jnc_rt, jnc_ext: rename: ScopedNoCollectRegion -> NoCollectRegion * jnc_io_pcap: rename: PcapLinkType.Null -> Loopback * jnc_ct: use table-based lookups for ModuleItem::getDecl, ModuleItem::getNamespace, ModuleItem::getType * jnc_ct: moved attribute_block from declaration_specifier to common_declaration * jnc_sys, jnc_std: use file2literal.pl instead of jnc2cpp.pl * jnc_ct: parse attribute initializers for named types and fields * jnc_rt: make debug traces for destructible classes optional (off by default) * jnc_ct: rename baseTypePrimeArray -> classBaseTypeArray * jnc_ct: rename Property::isReadOnly -> isConst * jnc_ct: move JNC_MAP_STD_FUNCTION, JNC_MAP_STD_PROPERTY to jnc_ct_StdFunction.h, move JNC_MAP_STD_TYPE to jnc_ct_StdType.h * jnc_ct: opt: return sl::Arrays by reference * jnc_rt: opt: GcHeap::collect_l should use StdType_AbstractClassPtr instead of precise class pointer * jnc_ct: replace DerivableType::getCastOperator -> getCastOperatorArray AXL changelog: + axl_io: added io::PcapFilter for offline filtering + axl_io: added function: io::matchWildcard (Krauss algorithm) + axl_lex: added an extra functor argument to getTokenListString for customizing spacing rules + axl_fsm: added implementation for Regex::match + axl_sys: added function: getCurrentProcessId() + axl_sys: added function: getProcessImageName() + axl_err: added functions: getLastSystemError(), getLastSystemErrorDescription() + axl_cmake: added setting: GCC_FLAG_DEBUG_INFO_RELEASE for adding debug info to release builds + axl_sl: added sl::ListLink g_nullListLink + axl_io_pcap: added methods Pcap::getSelectableFd(), loop(), breakLoop(), getBlockingMode(), dispatch() + axl_mem: added scatter-gather functions + axl_lua: added an implementation for lua_len for lua 5.1 (and below) + axl_gui: added gui::HyperText::setText, appendText with a bool paremater isHyperText + axl_gui: added support for gradients + axl_sl: added explicit copy ctors Iterator -> ConstIterator - axl_sl: fix: ArrayRef should const-cast array pointer on attach - axl_io_pcap: fix: pcap_open_dead 1st arg is link type, 2nd arg is snaplen - axl_lex: fix: error token should stop tokenization (even if tokenize count limit is not reached) - cmake: fix: link __wrap_fcntl even if not directly called * axl_io: swap bytes for ip4 in SockAddr.setup(...) * axl_gui: gui::HyperText::findHyperlinkByOffset should return NULL if offset is beyond the text length * axl_io: added axl::io::win::getWindowsDir() / axl::io::win::getSystemDir() * axl_enc: fix: prevent sign-expansion of a character before passing it to isprint() ................................................................................ version 3.11.1 (2019-07-30) Service release: Run-as-Adminitstrator fix, lowered GLIBC version requrements, auto-detection of J-Link library path. Main application changelog: * nj_srv: fix: ensure non-zero full compile time (used as a divisor) * axl_glibc: added wraps for math functions and for fcntl on x86 * axl_sys: added dynamic linking to libudev and use it serial port enumerator * axl_sys: rename: DynamicLibrary -> DynamicLib * axl_io: hardcode USB errors * axl_glibc: a new library with GLIBC wrappers for improved compatibility * license: update the license terms * nj_srv: removed dependency on libusb & libudev * nj_srv: process log server requests without enqueuing to worker thread * nj_app: show main window *before* loading plugins * nj_app, nj_srv: added support for platform-specific scripts * nj_srv: fix: elevator should enclose space-containing arguments in quotation marks * package/msi: fix: added ioninja-server-admin.exe Scripts changelog: * jlink-rtt: auto-detect location of jlink dll * jlink-rtt: throw on error in connect (otherwise, the error is not logged) * common: added standard paths to jlink dll * tcp-connection: improved handling of the reconnect timer * socket-log: added SocketLogRecordCode.ReconnectDelay Device Monitor changelog: * dm_lnx_lkm: fix: typedefs.h was not included into the project (and hence, missing from the package) Jancy changelog: * jnc_sys: added sys_Registry.jnc with class sys.RegKey for registry access on Windows * jnc_dll, jnc_io_base: removed dependency on libusb & libudev * jnc_rtl: update re latest axl rename DynamicLibrary -> DynamicLib * sphinx: fix: regex for char literals * jnc_ct: major update: calculate type signatures lazily; don't calclayout for function types * jnc_ct: thunk properties don't need to keep signatures ................................................................................ version 3.11.0 (2019-06-30) Introduces: new J-Link RTT plugin, new Serial MI Dump Viewer plugin, new layer UI, applying layer to .njlog files, run sessions as Administrator on Windows, signed .exe on Windows, support for RTS-driven half-duplex Modbus over RS-485, direct foreign data pointers in Jancy for increased host-to-script communication efficiency. Main application changelog: - nj_app: fix: use the latest security patch openssl-1.0.2s - nj_app: fix: mark user plugins *before* adding to the list (so the list shows paths in tooltips) * nj_app: user plugin page should use 16x16 icons (for consistency) + package: sign ioninja.exe, ioninja-server.exe, ioninja-server-admin.exe this way, elevation prompts look better (blue and with an icon) * nj_app: don't show "Run As Administrator" on pre-Vista Windows (ver < 6) + nj_srv_adm: added a thread for pumping between STDIN and the STDIN named pipe + nj_srv: added option: --stdin-pipe with this option, StdinThread is reading from the pipe instead of STD_INPUT_HANDLE (required for elevation) + nj_srv: added an icon to ioninja-server.exe & ioninja-server-admin.exe * nj_srv: ioninja-server-admin is now an elevator (creates a ioninja-server via ShellExecuteEx) - nj_srv: removed app-srv & srv-app transport file handles (unused) - nj_etx: fix: clear module if jitting fails (otherwise, we end up with a module in a weird half-baked state) + nj_etx: set error in processMsg_OnActionError (may happen during compile stage, so we need srcpos for error highlighting) + nj_ui: added ComboBox::setItems (also, unified ComboBox item and EnumProperty item) - nj_app: fix: incorrect check for UserPluginFlag in UserPluginSettingPage::on_removeButton_clicked - nj_app: typo fix in TransmitHistory::last() - nj_app: fix: followRedirectGet always returned false - nj_app: fix: uninitialized fields in DocumentLayer - nj_srv: fix: uninitialized field Server::m_paths + nj_app, nj_ui: add document groups for logs, too; also, initially populate document groups with an "empty" prop so it looks more consistent - nj_srv: fix: properly handle start of log documents (now that we can add layers on logs, too) + nj_app: added Plugin::PureLayerFlag (can be applied to log files) * nj_app: rename: SessionSettingPage -> DocumentSettingPage -- this setting page now applies to log documents, too - nj_srv: removed CmdLine::m_workingDir - njs_log: fix: converters/filters were not removed from the aux list (m_conversionPipeline) - nj_app: fix: main plugin entry was not added when opening logs - nj_srv: fix: processMsg_OrderLayers should not call removeAllConversions * nj_app: major update: use LayerPipelineDlg for pipeline management allows adding layers duding session startup and most importantly, re-ordering of layers + nj_app: added LayerPipelineDlg, removed add/remove/removall buttons from SessionSettingPage (now everything is managed from within LayerPipelineDlg) - nj_ui: fix: add spacing widget to the object map (so it's get deleted on layer removal) + nj_srv: force-process doc_MainThreadScheduler.jnc * nj_cmn, nj_srv: removed SrvMsgCode_RemoveAllLayers, added SrvMsgCode_OrderLayers + nj_log: added support for moving conversions/listeners to the tail of pipeline * nj_etx: create foreign pointers instead of memdup/strdup - nj_app: fix: nagmgr failed on parsing an empty manifest * nj_app: rename: new layer -> add layer * nj_srv, nj_ui: jnc::g_nullPtr -> jnc::g_nullDataPtr + nj_app: process terminal status reports * nj_app: use QLinkedList<> where possible: more efficient than QList<> keeps iterators valid + nj_srv: added an option for logging or not logging exception in the main log; - nj_srv: fix: don't log exception from the 'log' submodule - nj_srv: fix: on exception, don't try to write to a read-only log file * all: major renaming and moving-things-around: gui -> ui io.XxxUi -> ui.XxxUi, log.RepresenterTarget -> log.Representation - axl_sl: fix: properly handle count == -1 in sl::Array::remove and sl::String::remove - axl_gui: typo fix: mask should check for (1 << Orientation_Xxx) * axl_enc: HexEncoding::Flag -> HexEncodingFlag + axl_enc: added HexEncodingFlag_Multiline (for debugging) - axl_lex: fix: skipping BOM resulted in invalid offsets in Token::m_pos (which affected modules relying on Token::Pos::m_offset) + axl_lex: ignore UTF-8 BOM by default + axl_sl: added from-index parameter to all String::findXxx methods - axl_enc: critical bugfix: potential buffer overflow in CodePointDecoder::decodeImpl Scripts changelog: + ethernet-tap: added icon to the log plugin + serialmon: added a new plugin: Serial MI Dump Viewer + file: added a simplified FileOpened log record (file name only) + conf: added JLinkRtt to the list of official plugins + conf: added SerialMiDumpView to the list of official plugins * conf: added FpgaUploaderLog.njplg to the std plugin list * conf: added scripts/plugins as a common import dir - jlink, modbus, ssh: remove ../ prefix for shared log record code files * ethernet-tap: use the newly-added shared FPGA-uploader * i2c-spi: use the newly-added shared FPGA-uploader + fpga-uploader: moved FPGA update code to a common plugin (shared between all FPGA-based sniffers) * replay-log: moved log_RecordFile.jnc to common/ + jlink: added support for socket connection to existing localhost session * ui: use ComboBox.setItems() in ToolBar.addComboBox() + packets: added ModbusReadWriteMultipleFrame + packets: added updateSize() packet action + modbus: added support for read/write multiple registers, mask-write register + jlink: added device list refresh, jlink info/error trace, attach to existing session * modbus-gateway: moved to misc group * common: sys.GcXxx -> jnc.GcXxx + ui: added ui.ComboBox.setItems (optimization -- to set all items in one go) + jlink: initial commit of J-Link RTT + common: added io_JLink.jnc (binding to the JLink dynamic library) - mailslot: typo fix in MailslotLog.njplg * common: BufferPropertySet.createPropertiesGrouped should return GroupProperty* + modbus: redesigned half-duplex parsing, added options for RTS-control in half-duplex mode * ethernet-tap: renamed "Ethernet Sniffer" -> "Ethernet Tap" + ethernet-tap: added a firmware file + ethernet-tap: added PacketFlags.BufferOverflow + ethernet-tap: show software-calculated CRC status * modbus: reset parsers in log.Converter.reset() + modbus, regex, replay, tx-rx-filter: added pure-layer = true * api: moved MainThreadScheduler to a dedicated file (doc_MainThreadScheduler.jnc) + api: added log.FoldingFilter, updated log conversion stack methods + modbus: added setting for choosing which stream to analyze in half-duplex mode + ethernet-sniffer: added channel filters, use different backgrounds for channel#1 and channel#2 * ethernet-sniffer: collapse everything by default - pcap: fixed null-exception on empty filter - modbus: fix: device address 0 means: write-only broadcast * all: major renaming and moving-things-around - packets: fix: IcmpFrame::calcChecksum did not update the second (ICMP) checksum Ninja Scroll engine changelog: * njs_log: major redesign of ConversionMgr * njs_log: maintain live record offset and don't call listeners for non-live records * njs_log: major update: respect sequence of filters in conversion stack + njs_log: added class FoldingFilter + njs_wdg: process CSI 5 n and CSI 6 n (report status) - njs_log: critical bugfix: potential crash on save-log-as-text when using bin-text-view * all: rename: RepresenterTarget -> Representation, RepresenterBuffer -> PartBuffer Device Monitor changelog: * dm_lnx_lkm: conditional compilation to make it compile with older kernels * dm_lnx_lkm: use explicit #ifdef/#ifndef to avoid warnings on older GCCs - dm_lnx_lkm: removed unnecessary typedefs in HashTable.h * dm_lnx_lkm: a workaround for older GCCs which disallow multiple identical typedefs * dm_app: added rt to the lib list * dm_app: use (utf32_t) cast as to avoid problems on older GCCs * dm_lnx_lkm: don't use multi-char constants (yields warnings on older GCCs) QT Property Browser changelog: - qtpb: fix: text editor was not bound to the file property value + qtpb: added support for name icons Jancy changelog: + jnc_std: added strrchr, strpbrk * jnc_sys, jnc_rtl, jnc_ct: moved GC runtime functions to RTL, cleaned up lazy item parsing/adding + jnc_std: added atol & strtoul, fixed strtol (should return int64_t) + jnc_ct, jnc_rtl: added jnc.createDataPtr for converting thin-> normal ptrs - jnc_ct: fix: lower priority of non-const -> const casts - jnc_sys: fix: sys.NotificationEven was not mapped - jnc_sys: removed sys.createThread() -- it never was implemented; anyway, it's better to use sys.Thread - jnc_ct: fix: super-import type resolving/import loop detection was broken + jnc_ct: add fixups for import types in typedefs - jnc_ct: fix: srcIface used before null-check in Cast_ClassPtr::constCast - jnc_ct: fix: incorrect arg names when adopting non-user orphans (e.g. property accessors) - jnc_ct: typo fix: incorrect check for ScopeFlag_FinallyAhead - jnc_ct: fix: a few uninitialized members found by pvs-studio - jnc_io_base: fix: unintialized field io::Serial::m_lineErrors - jnc_api: warning fix: using bool_t for bool - jnc_io_usb: typo fix: incorrect checking for Flag_Stop inside ASSERT + jnc_rt: added optional root dump during mark stage (helps detecting bogus pointers) - jnc_ct: fix: ImportMgr::findImportFile should still work if current unit is not set - jnc_api: fix: jnc::Module::addImport should return bool * jnc_rt, jnc_api: changed DataPtr method signatures void* -> const void* (more convenient to use) + jnc_api: added jnc::createForeignBufferPtr, jnc::createForeignBufferPtr (convenient helpers) * jnc_api: jnc::strLen, jnc::strDup, jnc::memDup are no longer exported via the dynamic extension func table (linked statically) - samples: fix: default for isCallSiteLocal is true now; also, use GcHeap::invalidateDataPtr + jnc_rt, jnc_api, jnc_dll: added methods: GcHeap::invalidateDataPtr and invalidateDataPtrValidator * jnc_rtl: added a shortcut (for null) in appendFmtLiteral_p * jnc_dll: export jnc_GcHeap_createForeignDataBox & jnc_GcHeap_createForeignBufferPtr * jnc_api: renamed BoxFlag_Zombie -> BoxFlag_Destructed (more explicit) * jnc_api: increased size for Box::m_flags to 10 bits + jnc_rtl: added checks for BoxFlag_Invalid - jnc_ct: removed the 'lib' argument from jnc::Module::parse - jnc_api: removed include of jnc_Runtime.h (unnecessary and causes errors under gcc) * jnc_ct: invalidate callsite-local boxes upon exiting a callsite + jnc_rt: implemented GcHeap::createForeignDataBox/createForeignBufferPtr + jnc_rtl: added jnc.Promise.asyncSetScheduler + jnc_ct: added 'thisPromise' to async sequencer funcs - jnc_ct: fix: m_multicastClassTypeArray was not cleared - jnc_ct: fix: OperatorMgr::memSet(...) doesn't accept alignment as a parameter anymore - jnc_ct: fix: memCpy/memSet alignment arg is no more (use 1) - jnc_ct: fix: llvm.memcpy/memmove/memset changed signature in llvm-7.0.0 - jnc_ct: fix: reset debug loc in FunctionMgr::prologue + jnc_ct: include LLVM_VERSION_PATCH into LLVM_VERSION * jnc_ct: debug info updates for llvm-8.0.0 * jnc_ct, jnc_rt: replaced StaticDataBox -> DetachedDataBox (with built-in Validator) - jnc_ct, jnc_rt: removed DynamicArrayBox (element count can be reconstructed from DataBox::m_validator) - jnc_ct: fix: create execution engine prior to optimization * jnc_ct: use "generic" for CPU - jnc_ct: llvm-8.0 compatibility fixes ................................................................................ version 3.10.5 (2019-04-10) Service release (SPI firmware fix, UTF-decoder fix) Main application changelog: - axl_enc: critical bugfix: opportunistic buffer overflow in CodePointDecoder::decodeImpl * nj_app: upped max hex line length to 64 - nj_app: fix: force update license in LicenseMgr::setRegistrationState (otherwise, evaluation -> paid is not handled) - axl_sl: fix: String::getXxxCaseString must be const + axl_sl: added support for literal + string concatenations Scripts changelog: - i2c-spi: critcal fix: fixed spi.rpd firmware + ethernet-sniffer: added graceful stop (with cypress buffer clear) - ethernet-sniffer: fix: RJ45 connector (channel) identification + ethernet-sniffer: show packet index Jancy changelog: - jnc_ct: fix: replace '.' with '_' for namespace ref-ids + jnc_ct: accept multiline post-comments /*!< ... * jnc_ct, jnc_dll: moved doxy-comment processing into axl (to be shareable with other doxyrest-pipeline front-ends) + jnc_ct: opt: avoid escape-decode when there are no backslashes in string ................................................................................ version 3.10.4 (2019-03-29) Service release (io.Pcap fix) * jnc_io: fix: io.Pcap used a wrong code for EOF (in 3.10.3 it was causing TCP Flow Monitor, UDP Flow Monitor and Network Sniffer to stop capturing immediately) * jnc_app: fix: command line should use something else for output dir (-O is used for optimizations) * nj_app: do initial repaint before enabling network (which is not instant) ................................................................................ version 3.10.3 (2019-03-28) Introduces: new 'Replay Log' plugin, new 'I2C/SPI Tap' plugin, communications with ioninja.com moved to HTTPS, added support for async/await in Jancy, added LLVM inlining and optimization passes in Jancy, support for BREAK condition in Serial and Serial Monitor. Main application changelog: - package: removed the 'drivers' component from the 7z package (and into a separate package for those who need it) + sh: added support for cmake toolset param (-T); allows using VS2017 to build for Windows XP - nj_app: removed encryption of usage/crash reports, replaced everything with HTTPS + nj_app: added a setting for hex digit case * nj_app: updated welcome dlg (proper format for serial numbers, changed the type of the license field to rich-text) * license: updated the privacy statement (re HTTPS stuff) + license: added libusb (linked into io_usb.jncx) - license: removed lua & zlip (not really linked into ioninja) * doc: updated the HW manual + nj_app: added log-stop icon * nj_srv: update startup progress post-optimize + nj_app: added LLVM optimization-level settings (-O) - nj_app: fix: ScriptEdit::event may be called before m_lineNumberMargin is initialized + nj_srv: use the newly added jnc::Module::optimize + conf: added i2c-spi-sniffer as a stock plugin - nj_app, nj_srv: removed setting for max stack size * nj_app: removed unneeded space from binary transmit page * nj_app: save settings as defaults when the Settings dialog is closed on OK button + nj_app: added path info for user plugin tooltips - nj_gui: bug: getItemData was non-static (ABI inompatibility due to structret-vs-this) + icons: added tape icon (for replay-log) - nj_srv: fix: removing layer which has log plugins resulted in dangling pointers + nj_log: added support for unloading log plugins - nj_app: fix: dangling pointers in packet template combo-box (need to set packet template to null on document deactivate) + axl_gui: added flags arg to TextPainter::drawBinHex (so we can choose upper/lower case) * doc: cleaned up sphinx CSS & templates + cmake: added IPO as LLVM JIT component (now that we use function inlining pass) + axl_gui: added support for strikeout ANSI escape \e[9m \e[29m + axl_io: added Serial::setBreakCondition(bool) - axl_mem: fix: TrackerBlockHdr should be aligned on dual-pointer-size boundary Scripts changelog: * tcp-proxy: keep server data until the connection is established * tcp-proxy: wait for TX buffer empty on disconnect - tcp-listener: typo fix: TcpListenerSession.onConnectionSocketEvent used incorrect socket pointer on io.SocketEvents.IoError - common: removed duplicate RemotePort property + i2c-spi: added support for flipping MOSI/MISO * i2c-spi: renamed I2C/SPI Sniffer -> I2C/SPI Tap * i2c-spi: updated firmware files * i2c-spi: fixes/updates for I2C 10-bit address mode * wizards: use StdLogIcon.Connect/StdLogIcon.Disconnect in the Session wizard + api: added StdLogIcon.Stop + serialmon: added handling for IOCTL_SERIAL_SET_BREAK_ON & IOCTL_SERIAL_SET_BREAK_OFF - serial: fix: BreakConditionChanged was not added to SerialLog.njplg * serial: adjusted levels in the BRK icon + ethernet-sniffer: initial commit + i2c-spi-sniffer: implemented proper decoding for different SPI modes (MSBit-first/LSBit-first for 4, 8, 12, 16 bits) + i2c-spi-sniffer: added graceful stop (with clearing Cypress buffers) * serial: updated the BRK icon - common: fix: invalid througput calculation for TxRx (need to divide by 2) * hw-serial-mon: use the newly added API (io.UsbEndpoint.unsuspend) * tcp: use the newly added API (io.Socket.unsuspend) * usb-data-endpoint,usb-control-endpoint: use the newly added API (io.UsbEndpoint.unsuspend) + usb-data-endpoint,usb-control-endpoint: added persistency for device selection; - i2cspi: fix spi decoder (last byte was lost when buffer was full); also, flush buffer on each decode() * i2cspi: don't expect bytes to necesserily arrive AFTER i2c-start (we can start sniffing in the middle of a packet) * i2cspi: clear cypress buffer on start * i2cspi: handle ACK/NACK in the I2C address, don't adjust incomplete bit count in STOP msg, added properties for log cache update rate limit + serial: added a button to set BREAK condition + replay-log: initial commit + serial-tap: added line error handling (framing/parity/break) + serial: added line error handling (framing/parity/break) - modbus: fix: stream role was not properly loaded (resuling in the default value every time) - modbus: fix: ModbusRtuParser.m_lastTimestamp field shadowed the "real" m_lastTimestamp in the base class, thus resulting in invalid timestamp handling Ninja Scroll engine changelog: + njs_log, njs_wdg: added HexLineWidget::isUpperCase/setUpperCase - njs_log: fix: only update the previous line (timestamp, style) if new characters are added to it - njs_log: fix: update IndexLeaf before invoking getNextLeaf/getPrevLeaf (index file might have grown thus adding extra leaves and thus updating m_next -- while cached leaf may have m_next == -1) Jancy changelog: - jnc_io_base: fix: WSAECONNRESET was not always handled + jnc_io: added io.XxxEvents.WriteBufferEmpty (currently, WriteBufferReady is aliased to it) - jnc_ct: fix: use m_llvmFunctionName/m_llvmGlobalVariableName only if it's not empty * jnc_ct: alas, we have to resort to looking up llvm::Function & llvm::GlobalVariable by name on mapping -- i can't figure out a way to be notified when llvm::Function is being optimized out - jnc_ct: typo fix in Variable::prepareStaticData (llvm::GlobalVariable was still accessed for optimized-out vars) + jnc_ct: optimize sourceless functions, update m_staticData when mapping variables; + jnc_rt: handle SIGILL (optimizer may replace NULL-pointer accesses with UD) + jnc_app: use the newly added jnc::Module::optimize + jnc_ct,jnc_api: added Module::optimize (using llvm::PassManagerBuilder) * doc: updated sphinx conf.py.in according to the latest changes in axl & doxyrest - jnc_ct: fix: getDataPtrType should add fixup for import types - jnc_ct: typo fix: getPtrTypeFlagSignature added 'cn'(intended "cn"); better yet, use single-char signatures + jnc_ct: added options for inlining & basic scalar opts - jnc_ct, jnc_rt: removed explicit stack size limit (handled via exceptions) - jnc_ct: removed GC safe points in prologues by default * jnc_io: accepted sockets/named-pipes and usb IN-endpoints should be suspendable (initially) + jnc_ct: added support for scheduling async functions * all: rename: VTable -> Vtable + jnc_ct: added support for async errorcode functions + jnc_ct: added support for async member functions ('this' value is added to the promise class) * jnc_ct: made Function/Variable/Value/Type getLlvmValue inline * jnc_ct: moved ct::GlobalNamespace and ct::ExtensionNamespace into dedicated files - jnc_ct: removed m_declaratorName from function (only orphans need those) * jnc_ct: make qualified name calculation lazy - jnc_ct: removed names from unnamed functions - jnc_ct: removed ModuleItem.m_tag * jnc_ct: moved m_doxyBlock to ModuleItemDecl - jnc_ct: removed BasicBlock.m_landingPadKind (use BasicBlock::m_flags) - jnc_ct: removed explicit checks for null-ptr, zero-div, stack-overflow (handled via exceptions) + all: the first prototype of async/await is finally functional - jnc_io_usb: fix: UsbAsyncControlEndpoint::markOpaqueGcRoots should lock prior walking the list (libusb completion can modify the list any time) - jnc_io_cmn: fix: enter wait region in AsyncIoDevice::blockingWait + jnc_io_base: added serial line error handling (io.SerialLineErrors, io.SerialEvents.LineError, io.Serial.clearLineErrors) + jnc_rtl: added a draft for jnc.Promise/Promisifier + jnc_ct: added TokenKind_Async, TokenKind_Await, TypeModifier_Async - jnc_ct: removed TokenKind_Auto ................................................................................ version 3.10.2 (2019-02-01) Service release Main application changelog: * nj_app: changed default font to Consolas-10 on windows, Menlo-12 on Mac, Monospace-10 otherwise * nj_app: use the script editor font for line number margin * nj_app: detect font changes and update accordingly * nj_app: added a size-grip to the parametrized action dlg and removed the question mark from the caption - nj_app: fix: switching between sessions might have left BinaryTransmitPage with a dangling m_settings pointer (leading to a crash) + nj_app: added auto-show-terminal setting (false by default) + nj_app: attempt to auto-load log plugin if it's in the same directory + nj_app: added new setting: auto-add-user-plugin * nj_app: when opening log file with aux representers, don't suspend log + nj_app: use the newly added njs::NotifyCode_SelectionChanged - nj_app: fix: load/save sessions still relied on plugin guids rather that ids (and we removed guids from session/layer plugins) - axl_enc: remove the expectedLength/Size parameters from conversion functions Scripts changelog: + tcp: added the reconnect functionality (on remote disconnet/reset) + serial: added the reopen-on-error functionality + usb-data: added read-timeout & use-read-timeout props; use those for proper buffer configuration + common: added configurable defaults to BufferPropertySet - wizards: fixed reswitch code in layer plugin wizards * wizards: updated wizards for the new plugin arch * serialtap: rename: serial tap doesn't use FTDI anymore - serialmon: fix: representSerialMonLog should not fall back to representSerialLog + serial: added icons to serial log plugin - tcp: fix: on error, transmit should be disabled and session ended Ninja Scroll engine changelog: - njs_log: fix: when adding text we should add an extra line when text ends on new-line (\n) - njs_log: fix: CacheLineAttr.clear should reset m_iconIdx to -1 - njs_log: typo fix: RecordFile::getAuxClassGuidArray () mapped a view at a wrong offset - njs_log: typo: SaveLogAsTextRangeProcessor should use m_lineTimestamp, not m_timestamp - njs_wdg: fix: keep the line color when painting hex-ascii - njs_wdg: fix: hex editor crashed if a user starts typing in the hex pane in overwrite mode and the editor is empty + njs_wdg: added NotifyCode_SelectionChanged Jancy changelog: - jnc_rtl: bugfix: 'this' arg of 'onevent' handlers was adjusted twice + jnc_rtl: make RegexState.m_replayLength public & readonly (may be needed) * cmake: moved all rtl .jnc files into src/jnc_ext/jnc_rtl + jnc_ext: create jnc_stdlib.jncx for IO Ninja IDE - jnc_io_ssh: fix: read initially from socket (otherwise, data may be stuck in libssh2 buffers until more data arrives over a socket) ................................................................................ version 3.10.1 (2018-12-25) Service release Main application changelog: + nj_app: added test mode -- load plugin(s) and wait a bit, then exit (added all official plugins to the test list) - nj_cmn, nj_app, nj_srv: removed AppMsgCode_OnException -- it was only used if the initial plugin startup failed. replaced with onStartupCompleted; this also leads to reduced flickering during plugin startup - nj_app, nj_srv: fix: use proper libunwind libnames and link sequence - nj_cmn: fix: only use signalContext on Linux x86/amd64 otherwise, use unw_getcontext (which pretty much works everywhere) + nj_app: force-generate cursorPosChanged in HexEditWidget::selectAll () - nj_app: fix: install crash report writer BEFORE jancy initialization (for proper sequence of signal handlers) + nj_cmn: added SIGILL to the signal list -- turns out, clang may replace invalid memory accesses with UD instructions - nj_app, nj_srv: don’t link to libunwind on mac (it’s part of standard lib here) * nj_cmn: moved posix crash report thread writer to a dedicated file + nj_cmn: implemented crash reports on posix using libunwind - nj_app: fix: user plugin page didn't work well for log plugins (new plugin type was not handled properly) * nj_srv: return --plugin-file option (for old ioninja-ide compatibility) loosen up errors in CmdLineParser::finalize (simpy don't set server flags if log files are not specified) - nj_app: don't call QNetworkProxyFactory::setUseSystemConfiguration at all * nj_app: check for running state during execSyncReq and Document::save this is to prevent main-app lock ups due to zombie server * nj_app: licensemgr should update about dialog (if present) example sequence: about->deregister->nag->register * nj_app: nagdlg: don't set time-left-string if it's not evaluation Scripts changelog: * i2c-spi: updated firmware files (both i2c and spi are functional) - all: removed guids from layers + all: added icons to all log plugins * i2c-spi: major update -- no more lattice, implemented altera max10 upload protocol - tcp-flow-mon: typo fix: guid-> log-guid Jancy changelog: * jnc_ct: major update: raw literals are now zero-terminated, just like normal literals (practice showed it's safer and better this way) - jnc_io_usb: minor warning fix (signed-vs-unsigned mismatch in assert) - jnc_ct: fix: incorrect assert -- unprimed static gc root classes have NULL box ................................................................................ version 3.10.0 (2018-12-14) New major features: A build for Raspberri Pi, machine interface in Device Monitor, a new plugin Serial Monitor over SSH, half-duplex support in Modbus Analyzer, redesign of Jancy reactors, new 64-bit log record code architecture, dedicated log representer plugins (separated from session/layer plugins). Main application changelog: * nj_app: for default session and layer plugins, use ID rather than GUID * nj_app: if no plugin selected, getPluginListWidgetCurrentItem should return NULL * nj_app: update: instant-nag-screen should only pop once * nj_app: prevent silent overwriting of the outdated log file (create a backup and show warning with a link to the KB article) + nj_log, nj_app, nj_srv: added configurability for record code filter groups via bool properties + nj_log: added standard filter RecordCodeFilter + nj_gui: allow creating BoolProperty without a jancy runtime * nj_log: lock before compiling log plugins to avoid races between multiple log threads - nj_srv: fix: addLayer didn't work properly on the new log design - nj_app: fix: no-response-dlg should be closed when server process terminates * nj_srv: fail if log plugin failed to attach (usually, because of a misspelled representer func) + nj_app: added presell serial num page to the welcome dialog - nj_app: typo fix in TextTransmitPage::onEnterKeyPressed (no need to take parent) - nj_srv: fix: erase entry from the layer map if add-layer failed + nj_app: added welcome-dialog (blocking unregistered access) -- a license is now required to run io ninja (at least, an evaluation one). * all: ensure zero-initialization where it matters (post auto-zero-init removal from axl) - all: removed auto-zero-init of allocated blocks - nj_app: qt-5.0.2 fix in UsageReportMgr re QJsonValue * sh: added target cpu mapping armv7l -> arm32 + conf, cmake: added ssh-serialmon to the official plugin list and to the test suite Scripts changelog: - serialmon: removed unnecessary termios->uint_t converters + serialmon: added handling of TCSETSW, TCSETSF, TCSETA, TCSETAW, TCSETAF - pcap: typo fix: should check *filter, not *p (which is void) + serialmon: added serial monitoring over ssh * ssh: moved common ssh ui code into io_SshUi.jnc * udp-flow-mon, tcp-flow-mon: reuse log record codes from PcapLog and SocketLog * all: all-around-fixes, everything passes tests under the new 64-bit record code design + devicemon: added device monitor log plugin * all: ported to the new 64-bit record code design + modbus: added support for half-duplex links * all: updated reactors re the new reactor syntax/capabilities Ninja Scroll engine changelog: + njs_app: implemented conversion for record codes 32-bit -> 64-bit (record-code-db-driven) * njs_log: moved RecordFilePreOpener to a dedicated file + all: 64-bit record/part codes - all: a bunch of typos/fixes found by pvs-studio * all: ensure zero-initialization where it matters (after auto-zero-init removal from axl) Device Monitor changelog: - dm_app: minor posix fix re StdinThread + dm_app: monitor EOF on STDIN (important for SSH connections) + dm_app: added os/cpu information to the start message, renamed dm_MachineInterface.h -> dm_MachineIface.h * dm_app: turn off stdout buffering in machine-interface mode + dm_app: implemented machine interface on linux + dm_app: added machine interface (output binary to stdout for easy parsing -- e.g. over SSH) * lkm: replaced flush_tlb_all (not exported on rpi2) -> local_flush_tlb_all Jancy changelog: + jnc_io_devmon: build io_devmon.jncx even if devmon is not available + jnc_ct: added support for source-only jncx extensions - jnc_ct: fix: conditional_expr didn't check for result of conditionalJump - jnc_pch: removed empty preproc line (confuses cppcheck) - jnc_io_ssh: don't request PTY if ptyType is null or empty - jnc_io_ssh: don't start process if processType is null or empty + jnc_std: added overload std.setError (std.Error const*) + jnc_io_devmon: added io_DeviceMonitorMi.jnc (machine interface) + jnc_ct: added __FILE__ and __DIR__ lexer-time constants - jnc_rt: fix: Runtime::m_module was uninitialized + jnc_std: added methods: std.Guid.parse, std.Guid.getString - jnc_ct: fix: NamedTypeBlock::callMemberFieldConstructors should not assume this is a class type + jnc_rt: add destructors of class field of static objects - jnc_io_base: fix: struct OverlappedIo had uninitialized fields (windows-only) - jnc_ct: fix: DerivableType::findItemTraverseImpl shouldn't assume no unresolved imports in base types + jnc_ct: added a bunch of arm arithmetic/conversion impl functions + jnc_ct: force hard-fp-abi on ARM - jnc_ct: fix: arm32 coercion (should depend on alignment) - jnc_ct: fix: 'char's are unsigned on ARM + jnc_ct: arm call-conv implemented (not fully tested yet) + jnc_ct: added arm calling convention (draft) + test, cmake: added jnc_test_abi to the test quite and make it run before the other tests (except for samples) + jnc_ct: added support for arm32/arm64 + pch: detect arm32/arm64 - pch: fix: don't use attribute(ms_struct) if it's not supported * jnc_ct: moved deletion of llvm::Module, llvm::ExecutionEngine and llvm::Context to the very end of ct::Module::clear - jnc_ct: typo fix in Function::addUsingSet - jnc_dll: fix: Xcode refuses to build a library out of TARGET_OBJECTs only + jnc_io: added WSAStartup on windows to io_base.jncx/io_ssh.jncx - jnc_ct: fix: pass Token::Pos to internalPrologue (otherwise, m_llvmDiScope is not initialized) + jnc_ct: added optional Token::Pos* pos arg to FunctionMgr::internalPrologue - jnc_ct: fix: incorrect include dir sequence - api: removed empty pp lines (containing only #) -- they confuse cppcheck - jnc_ct: fix: call postDeclaratos/postDeclaratorName when parsing reactors + jnc_ct, jnc_rtl: allow empty reactors - jnc_ct: fix: delete llvm::Context in Module::clear - all: a bunch of typos/fixes found by pvs-studio - jnc_ct: don't create vtable for a class unless it's actually needed * all: ensure zero-initialization where it matters (post auto-zero-init removal from axl) * jnc_rtl: use shadow reaction index to loop through pending reactions (rather than picking the pending reaction with the minimal index) + jnc_rtl: added method ReactorBase.restart - jnc_ct: fix: ensure reactor-closure type is created together with jnc.ReactorBase - jnc_ct: fix: jnc.ReactorBaseType should mark ctor/dtor as user-item (otherwise, these will be auto-generated) * jnc_ct: minor modification of the signature of DerivableType::createDefaultMethod * test: updated reactor samples/tests to the new syntax + jnc_ct, jnc_rtl: initial commit of reactor-redesign ................................................................................ version 3.9.2 (2018-09-27) Service release A bunch of critical bugfixes in Jancy runtime and in the Ninja Scroll engine (after a series of tests with libfuzzer + address sanitizer); added delayed cache update in Ninja Scroll (critical to maintain high data throughput, such as with the I2C/SPI Sniffer plugin capturing SPI data at ~50MHz). Main application changelog: + nj_log: added properties: Log.m_leafLineCountLimit, Log.m_cacheUpdateScrollRateLimit + nj_app: use the newly added LogWidget::setStickyScroll * nj_app: set ScrollToBottom & SetCursorToEnd flags on clear - nj_app: fix: gcSafePointMethod setting was neither serialized nor applied on win x64 + nj_doc: added property: doc.PluginHost.m_pluginDir - nj_gui_srv: fix: EnumProperty::setValue should check for null before the shortcut exit (may be setting 0 to null) * doc: updated hardware manual Scripts changelog: + i2c-spi-sniffer: use the newly added m_cacheUpdateScrollRateLimit to limit log cache update rate + log: added properties: Log.m_leafLineCountLimit, Log.m_cacheUpdateScrollRateLimit + i2c-spi-sniffer: added automatic FPGA firmware update + common: added file parseVersion.jnc - log: bugfix: infinite recursion in log.Writer.writeString + doc: added property: doc.PluginHost.m_pluginDir - i2c-spi-sniffer: remove io.UsbEndpointOptions.KeepReadBlockSize + i2c-spi-sniffer: added support for buffer overflow, optimized the SPI decoder, added support for SPI LSB-first-vs-MSB-first - i2c-spi-sniffer: fixed bitwise-arithmetic for building the SPI 16-bit word * i2c-spi-sniffer: switch order of bytes to: MOSI-HI, MISO-HI, MOSI-LO, MISO-LO + i2c-spi-sniffer: renamed I2cSniffer -> I2cSpiSniffer; added SPI decoder + i2c-sniffer: added 'Show STOP' property * i2c-sniffer: wait for OUT-transfers finished before closing the OUT-endpoint + i2c-sniffer: added 7-bit & 10-bit address decoding Ninja Scroll engine changelog: - njs_log: fix: first update cache, then notify widget parent - njs_log: don't reset sticky scroll files on cache rebuild + njs_log: added method: LogWidget::setStickyScroll * njs_log: only modify sticky-scroll flags when cursor is changed because of keyboard/mouse - njs_log: removed m_leafFoldableRecordCountLimit (seems like an excessive setting) + exposed access to m_leafLineCountLimit and m_cacheUpdateScrollRateLimit via njs::Server * changed m_cacheUpdateScrollRateLimit default to -1 (no delayed cache update -- each plugin must turn it on manually) * njs_log: inlined CacheMgr::processStickyScroll () * njs_log: don't let any UI things to happen between releasing the index lock and requesting updates * njs_log: update line count on represent + njs_log: added delayed cache update (based on scroll-change rate limit) * njs_log: use the newly added methods axl::io::MappedFile::duplicate, setSize - njs_log: fix: SharedRecordFile::rename cleared m_auxFileList - njs_wdg: fix: TerminalWidget::escReset () incorrectly reset cursor pos to (0, 0) - njs_wdg: fix: csiSetScrollRgn didn't check begin/end for validity - njs_wdg: fix: csiSetMode/csiResetMode didn't check length of m_body before accessing m_body [0] - njs_wdg: fix: if zero size is passed in TerminalWidget::setConsoleSize, use defaults + njs_wdg: added TerminalWidget::isValidCursor - njs_wdg: fix: always delete history on set-scroll-region + axl_gui: added support for Ctrl+U (cut a line before the cursor) - axl_gui: fix: incorrect condition in WidgetScrollBar::isMaxed + njs_wdg: added TerminalScreenBuffer::isInsideScrollRegion + test_qt: added libfuzzer support, added xterm fuzz corpus Jancy changelog: - jnc_io_cmn: fix: invalid test in AsyncIoDevice::isReadBufferValid and AsyncIoDevice::isWriteBufferValid - jnc_io: critical bugfix: incorrect handling of readBuffer/readOverflowBuffer when KeepReadBlockSize is in effect * axl_sl: CircularBuffer::setBufferSize should do a quick size check for a possible shortcut return - axl_sl: fix: inaccurate assert in CircularBuffer::setBufferSize - jnc_ct: critical bugfix: jnc_Type_getTypeString returned a dangling pointer * jnc_std:jnc_rtl: use sl::getAllocSize, not sl::getHiBit for allocation round-ups + jnc_std: added memmove + jnc_api: added jnc_Variant_isNull - jnc_rt: critical bugfix: GcHeap::stopTheWorld_l released the lock without changing state to something other than State_Idle, which effectively enabled threads running GcHeap::collect_l concurrently. the bug introduced when adding 'abort' functionality in the prev release. * jnc_io_base: use the newly added method axl::io::MappedFile::getFile () + jnc_ct: added jnc_TypeKindFlag_ErrorCode to jnc_TypeKind_Enum + jnc_io_usb: added io.UsbEndpointEvent.WriteCompleted ................................................................................ version 3.9.1-a (2018-09-07) Service release Main application changelog: * nj_app: only use QPlainTextEdit::setPlaceholderText on QT >= 5.3; we use QT 5.0.2 on Linux as to increase the chances of the IO Ninja binary running on various Linux distros * nj_app: only apply packet template if packet templates are really used (otherwise, packet parse delay-finishes, and then we have min size limits even if packet template is off) - cmake: fix: added JANCY_JNCX_DIR to the import list when generating the API documentation Scripts changelog: - usb: removed the unused function getLineString () * hw-serial-mon: moved getLineString to HwSerialMonLog.jnc + i2c-sniffer: initial commit (for internal testing) Jancy changelog: - jnc_ct: fix: decodeBinString should ignore \r and \n -- otherwise, multi-line binary literals don't work + cmake: added JANCY_JNCX_DIR to jancy_config.cmake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . version 3.9.1 (2018-09-05) Major improvements: + Script transmit pane * Packet templates are now processed in the ioninja-server process + Added support for Modbus ASCII, Modbus TCP Main application changelog: * nj_app: remove min size limit when turning packet templates off with a tx pane + nj_app: use icons for use-packet-template/edit-packet-template buttons + nj_app: highlight the error line in script editor + nj_app: use default.jnc scripts whenever packet template or tx script is empty + nj_app: added placeholder text in file-transmit and text-tranmit pages + nj_app: added images: form, edit (used in packet template tx pane) + nj_app: added support for alternate radix in binary literals (0x, 0d, 0b, 0o) + nj_app: added class ScriptEdit to serve as a Jancy editor for packet templates and script tx + nj_etx: added timetout to ScriptTransmitSrvPeer::abort (so we can just request abort without waiting) * nj_srv: abort tx script when tx gets disabled + nj_etx: added ScriptTransmitAppMsgCode_OnRunAborted to distinguish between user-induced abort and a legit Jancy exception * package: link msi actions to CRT statically (as to avoid the yet-not-installed msvcr/msvcp deps which might be missing on older Цindows) - nj_app: removed packet min size setting, properly update packet templates stuff (setting-page vs transmit-widget) + nj_etx: added two modes to PacketTemplateMgr (so setting page changes can be undone) - nj_srv: fix: keep DirectSource until module is compiled (otherwise, we gonna have dangling source pointers) + nj_srv: added idle event to script transmit srv peer (so we can wait until thread is done) * axl_sys_win: when calling FormatMessageW, try LANG_ENGLISH, SUBLANG_ENGLISH_US first; if failed, fall back to LANG_NEUTRAL, SUBLANG_NEUTRAL Scripts changelog: + ssh: added ssh-exec property (to specify the remote process to exec) + tdevmon: added KB links to the representation of capture error records * packets: updated the default packet template script - network-sniffer: removed the now defunct pcap write buffer stuff * tx: updated the default tx script and the arp who-is sample + api: added tx.jnc with a prototype for the transmit () function * tibbo-modbus: updated re the latest modbus code changes + modbus: major update: added support for Modbus-ASCII, Modbus-TCP + common: added hexEncoding.jnc + api: added methods: log.Writer.writeString, writeError, writeLastError * network-sniffer: renamed folder to NetworkSniffer + cypress-uploader: added FPGA status check retries Jancy changelog: + jnc_io_ssh: added advanced method SshChannel.connect which accepts SshConnectParams struct with extra options + jnc_std: added operators == and != for std.Guid - jnc_io_pcap: removed the now unused property io.Pcap.m_writeBufferSize and io.PcapEvents.WriteBufferReady + jnc_io_pcap: implemented io.Pcap.write (was not functional) + jnc_ct: added support for non-space separators in binary literals (useful when defining IPs, MACs, etc) + jnc_api: added jnc_Runtime_isAborted * changed int -> bool_t wherever int is used as bool + jnc_rt: added GcHeap::isAborted and Runtime::isAborted - jnc_rt: APC prototype fix (caused compiler error on 32-bit windows) + jnc_rt: use SIGUSR1 to try and wake up waiting threads in GcHeap::abort - jnc_rt: fix: GcMutatorThread::m_waitRegionLevel should be volatile - jnc_io_base: properly handle read-only & write-only file-streams on POSIX - jnc_rt: fixed missing type specifier in GcHeap::resumeTheWorld + jnc_rt:jnc_api: added jnc_Runtime_abort () * jnc_sys: make sys.sleep alertable on windows - jnc_ct: fix: don't set the newly created unit as the current unit (leads to problems when nest-parsing stdlib entities) * axl_io: io::Pcap::write should distinguish between retvals from pcap_inject (returns actual size on success) and pcap_sendpacket (returns 0 on success) ................................................................................ version 3.9.0 (2018-08-08) New major features: * Major logging engine update (now it's more responsive under high-load and with huge multi-gigabyte logs due to the fully parallel processing of indexing, representing, converting, searching, etc) + New plugins: + USB Control Endpoint (allows low-level communication with USB control endpoint #0) + TX Modifier (provides packet prefix/suffix, re-transmission, inter-character delays) + TX/RX Filter (allows switching TX/RX streams ON or OFF) + Serial baud rate combo-boxes are now editable (allows for arbitrary baud rate specification) + Hung server process detection and termination (now problems with the ioninja-server process should not affect the main GUI process) + Unicode temp paths are supported on Windows (previously, having a non-ASCII characters in TEMP would have resulted in the error: 'A device attached to the system is not functioning.') Main application changelog: * nj_app: improved handling of server crashes/hang-ups * nj_app: nagdlg layout update (didn't look too good on gnome) + nj_app: allow zero-length transmits (required by USB control transfers) - nj_gui: fix: ComboBox should set items value when it switches to editable mode - nj_app: fix: check for find-next/find-prev button state (in case invoked by shortcut) + conf: added TxModifier + nj_gui: allow adding child items to any property/information-item, not just groups (QTPB allows that) + nj_doc: added doc.Layer.m_isTransmitEnabled bindable const property - now layers may be notified when lower sessions enable/disable transmission + nj_app:nj_srv: added keep-alives (5 second timeout) - nj_srv: fix: restored registration of usb error provider - nj_app: fix: unmap index file on clear/rebuild * conf: re-factored plugin groups: now it's serial, network, file-systems, usb + nj_gui: added gui.ComboProperty.selectOption * nj_gui: made ComboBox.m_currentData read-write + nj_gui: added a separate binding for ComboBox.m_currentIndex * nj_app: rename default plugin groups ("other" for sessions, "generic" for layers) + nj_gui: added support for item values to gui.ComboProperty (EnumOption.m_value is used as actual value) - nj_gui: removed gui.ComboBox.m_isDualText property -- now every editable combo box behaves like this (item text - description, item data - value) - nj_app: fix: merge kind combo did not enable/disable merge threshold spinbox + nj_gui, nj_app: added new gui class: gui.ComboProperty + nj_srv: added self-pipe trick on POSIX. Apparently, closing STDIN does not terminate the ongoing 'read' (at least, not on Linux) + nj_app: added FileFlag_DeleteOnClose to plugin-settings and log-settings files - njs_app: fixed find-incremental/find-next/find-prev logic + nj_app, nj_srv: implemented clear-log/rebuild-log + nj_srv: use stdin to monitor state of the parent process + nj_app: use QShortcut for F3/Shift+F3 in the Find Dialog this way, there is no forced delay in between activations of the shortcut + nj_app, nj_srv: use the newly added io::FileFlag_Unlink, io::AutoDeleteFile, io::psx::AutoUnlinkSharedMemory * nj_app, nj_srv: use mapping name instead of file name for index lock Scripts changelog: * usb: split the usb endpoint plugin into two: usb data endpoint and usb plugin endpoint (completely different ui and io code) + common: added parseInteger.jnc * tx-modifier: removed groups (made use of the newly added ability to add children to any property) + tx-rx-filter: added setting persistency * serial: added SerialLogRecordCode.ControlLineChanged -- now control line changes can be encoded symmetrically with status line changes. - serial: removed inter-char delays -- now this funcionality is available via the TX Modifier layer + tx-modifier: initial commit of TX Modifier layer + common: added new file: escapeEncoding.jnc + tx-rx-filter: initial commit of TX/RX filter layer - wizards: fix: invalid signature for log.Filter.filter () + api.gui: allow adding child items to any property/information-item, not just groups (qtpb allows that) + api.doc: added doc.Layer.m_isTransmitEnabled * conf: updated plugin grouping - serial-mon: fix: don't update port name while capturing - hw-serial-mon: fixed path to UsbLog.jnc * serial: all the serial plugins are finalized (use common ui, allow editing baud-rate, updated re api change in io.Serial.setupDevice) - common: bugfix: io.SerialSettingUi should check for presence of properties before accessing them - serial-tap: fixed serial setting configuration (was broken after moving the code to SerialSettingUi) * serial: don't try to set baud rate if it's the same * serial, serial-tap, ez-tap-pro, generic-serial-tap: extracted common setting code and shared it via io_SerialUi.jnc * all: redesign plugin grouping (now it's serial/network/file-systems/usb) + gui: gui.ComboBox.m_currentIndex now has a separate non-shared binding + added gui.ComboProperty.selectOption + added a convenient overload for gui.Toolbar.addComboBox * samples: removed hw-serial-mon and spi-tap from plugin folder and added those as samples + serial: make baud-rate editable (initial commit) - gui: removed m_isDualItemText * serial: use the newly added gui.ComboProperty for port name and baud rate + api: added new class: gui.ComboProperty * regex: log thread is no more; use suspend/resume instead - std: minor locking fix - ssh: fix: import "io_File.jnc" was missing - xmodem: fix: io.File.m_size is now read-only; use setSize instead - serial, udp: fixed signature for: log.Filter.filter Ninja Scroll engine changelog: - njs_log: fix: conversion mgr was unfunctional (never tested) - njs_log: a few int64/int32 fixes (relevant for 32-bit platforms) - njs_log: fix: invalid offset for save-log-as-text + njs_log: make bom configurable + njs_log: added support for bin-text lines in save-log-as-text - njs_log: typo fix: invalid caret pos returned by CachePage::getCaretPosFromLogPos - njs_log: fix: unbalanced lock calls on hidden records - njs_log: fix: don’t use setMouseCapture/releaseMouseCapture - njs_log: fix: bool function returning NULL - njs_log: fix: index file accessors MUST HAVE multiple dynamic views (otherwise walking the tree could cause page faults) * njs_log: set cursor to the *end* of selection upon successful find (more traditional approach) * njs_log: update "is-incremental-find" logic -- accept size decrement also (as long it's not empty) - njs_log: fixed wrapping in range processors + njs_log: added IndexFile::getZoneCount * njs_log: changed LogPos to only contain absolute zone-idx and zone-offset * njs_log: validate caret pos and redraw widget on log-clear - njs_log: fix: false-positive cache-miss in LogWidgeT::paintLineRange - njs_log: fix: suspension logic in RangeProcessor/ConversionMgr * njs_log: minor optimization of redrawing in CacheMgr::onRepresentPageCompleted * njs_log: use the newly added io::FileFlag_Unlink (dropped the old ifdef-ed code) - njs_log: critical fix: in CacheMgr::onRepresentPageCompleted it's NOT OK to touch 'page' pointer after scrolling or redrawing line ranges -- it might unload the page due to the cache size limit * njs_log: moved OnFoldRecordCompleted notification to IndexMgr - njs_log: fix: IndexMgr updated a leaf using m_recordIdx instead of m_recordCount - njs_log: fix: ConversionMgr has unbalanced suspend/resume inside stop () * njs_log: create a dedicated cleanup thread in RangeProcessorMgr - njs_log: fix: cache one extra record per page if the leaf is merged forward + njs_log*: the first working prototype of the new design QT Property Browser changelog: - qtpb: fix: invalid signal/slot names in QtComboEditorFactory::disconnectPropertyManager - qtpb: fix: clang failed to compile a double-right chevron in a template use * qtpb: check for unchanged value in QtComboEditorFactoryPrivate::slotPropertyChanged * qtpb: QtComboProperty now can use item data as actual text values (e.g. item text - device description, item data - device name) - qtpb: minor fixes in the newly added QtComboProperty... classes + qtpb: added QtComboProperty/QtComboPropertyManager/QtComboEditorFactory Jancy changelog: - jnc_io_usb: fix: UsbDevice::close should nullify m_asyncControlEndpoint - jnc_io_usb: fix: typo in UsbAsyncControlEndpoint::UsbAsyncControlEndpoint * jnc_io_usb: renamed requestId -> requestCode (for consistency) + jnc_io_usb: added support for asynchronous control transfers (initial commit, work-in-progress) + jnc_std: added std.Array.detach () / std.Buffer.detach () - app: fixed main() error code on cmd-line parse error - cmake: changed language of jnc_dll to CXX (otherwise, -static-libstdc++ doesn't apply, which results in libstdc++.so dependency) * jnc_io_base: changed the order of values in io.Serial.setupDevice and added default values ................................................................................ version 3.8.7 (2018-06-05) introduces: Tibbo Serial Tap plugin, shared library jancy-1.8 Main application changelog: - nj_app: fix: check whether a layer has already been added (disallow adding duplicate layers) + inf: added .inf files and a script for .cat file generation and signing * sh: 7z archives are built using cpack instead of bat files + conf: added serial and spi tap plugins to plugins.conf * cmake: redesign packaging on Mac OSX - nj_app: removed explicit qt library path modification (better use qt.conf) * drivers: updated driver package to include the winusb co-installer (so it works on machine with no winusb) * cpack: use top-level-directory with archive generators + conf: added new filter wizard to wizards.conf - njs_srv: don't link to libusb and register usb error provider anymore since we've changed to dynamic linking to jancy.dll, it must be done there + nj_log: report Rx parts of TxRx to the app (so terminal can be used with dual-hex-view) + nj_log: fix: Log.suspend and Log.resume were not mapped + nj_log: added support for retro-colorization flags (aux flag for specifying the part of dual-hex-view) * nj_app, nj_srv: update conf dir detection (include ../etc/ioninja) - don't display crash-report-dlg if crash dir is empty + cpack: packaging for TXZ, DEB, RPM implemented * package: wix packaged updated to auto-install winusb drivers using dpinst.exe * inf: renamed dirs: inf -> drivers (more windows-traditional, even though there are no actual drivers) + nj_app, nj_srv: setup error router + register parse error provider; previously, we only linked jancy libs statically, so it wasn't necessary Scripts changelog: + regex-colorizer: added support for dual-hex view (e.g. SPI Tap) + common: throughput calc now processes log.StrRecordCode.TxRx + api: added RetroColorizeFlags.Aux (to specify which part to apply colorization to) - serial-tap: check for non-null mask before reporting status-line changes * serial-tap, spi-tap: removed usb.ids files and instead hardcode device ids into the script (not going to add more ids anyway) + spi-tap: initial commit - ez-tap-pro: fix: use m_highSpeed for anything above 115200 bps Ninja Scroll engine changelog: + njs_log: improved support for dual-hex-view: misc copy modes implemented, retro-colorization now has a aux-flag (to specify the which part to apply colorization to) - cmake: minor fix: using QT modules should happen BEFORE axl_set_pch - njs_log: fixed uint64_t <-> size_t warnings on x86 Jancy changelog: * cmake: build with install rpath - jnc_api, jnc_dll: (temp solution) link to libusb and register usb error provider - jnc_rtl: fix: jnc.RegexDfa unconditionally set m_isIncremental in jnc.RegexState (probably, a brainfart) - jnc_rtl: fix: jnc.RegeDfa finalize did not update group counts in accept contexts - jnc_rt: fix: prevent longjmp unwinding on win64 + jnc_app: setup error forwarding and register parse error provider - jnc_ext: removed propagateLastError (now irrelevant); setup error forwarding in *.jncx + jnc_api: implemented jnc_setErrorRouter * jnc_api: moved jnc_DynamicExtensionLibHost.h to the 'include' folder + jnc_api: added explicit definition of jnc_Error (maps to axl::err::ErrorHdr) * cpack: inverted the os-version order in the file name of a package (must be version-first) * cmake: workaround for SOVERSION on windows (jnc_dll) + added VERSION/SOVERSION properties to jnc_dll * cmake: renamed jnc_api_static -> jnc_core and jnc_api_dynamic -> jnc_api_ext * changed JNCX dir from JANCY_BIN_DIR to JANCY_DLL_DIR (not the same on unix) * cmake: link all the executables to the jancy dll (if it's being built) + jnc_ext: added object libraries for jnc_rtl, jnc_std, jnc_sys + jnc_api: export api functions when building cmake object library + jnc_dll: build dynamic library jancy-x.x.dll - jnc_api: fixed a few missing JNC_EXTERN_C declarations AXL changelog: * axl_sys: updates in sys::ReadWriteLock re named sems on posix + axl_err: added support for error forwarding * cpack: inverted the os-version order in the file name of a package (must be version-first) - cmake: removed rpath direct modification via linker options (should be done via CMAKE_INSTALL_RPATH in actual projects) * cmake: switch to dynamic link (/MD /MDd) by default - axl_sl: minor fix: sl::BoxIterator::r () -- better reference m_value directly (rather than as: *p()) ................................................................................ version 3.8.6 (2018-04-26) introduces: new EZ-Tap Pro plugin Main application changelog: * nj_gui: added property: gui.InformationValue.m_valueColor * nj_gui: added property: gui.ComboBox.m_isDualItemText this allows having an editable combo box with descriptive items in the drop-down (e.g. editable port names, device descriptions in the drop-down) * nj_app: emit cursor-pos changes and index-file changes once a second this changes renders the timer in InformationWidget irrelevant Scripts changelog: + plugins: added new plugin: EZ-Tap Pro (initial commit) + generic-serial-tap: new command: flip DTE/DCE + tibbo-serial-tap: new command: flip DTE/DCE - serial: fix: removed trailing \n from the port-opened log message * plugins: updated HwSerialMon for Cypress EZ-USB FX3 -- we are ditching FT601x (good riddance) + plugins: use the new prop gui.ComboBox.m_isDualItemText in serial and serial mon plugins - plugins: removed DCD line info + plugins: added new plugin: Tibbo Serial Tap Cable * plugins: renames: SerialTapCable -> GenericSerialTapCable, ModbusGatewayMon ->TibboModbusGatewayMon + api: added properties: gui.ComboBox.m_isDualItemText, gui.InformationValue.m_valueColor - udp: fix: apply socket and buffer properties to the socket + common: added new socket property: udp broadcast * common: renamed"local/remote TCP port" -> "local/remote port" -- these are used for UDP, as well * moved all scripts to a dedicated repo; public mirror at: https://github.com/vovkos/ioninja-scripts Jancy changelog: + jnc_io_usb: added support for control transfers (io.Device.controlTransfer) - jnc_io_usb: fix: invalid location for clearing active events (lock was released after that) -- may have caused events to be never noticed - jnc_io: fix: apply SocketOption_UdpBroadcast and enforce AsyncIoOption_KeepReadBlockSize | AsyncIoOption_KeepWriteBlockSize for datagram sockets in SocketBase::setOptions QT Property Browser changelog: + qtpb: added support for value color (QtProperty::valueColor/setValueColor) AXL changelog: + axl_sl, axl_ref, axl_err: use rvalue refs in all ref-count-buffer-based classes + axl_g: added simple detection of rvalue-ref support in C++ compiler * axl_ref: moved ref::RefCount functions to .h; replaced size_t -> int32_t and removed bitfields -- for a minor performance improvement * axl_sys: use intrinsics for interlocked ops on windows + axl_sl: added branchless algo from hacker's delight for hi-bit/lo-bit + axl_io: added support for async control transfers -- for completeness ................................................................................ version 3.8.5 (2018-04-09) introduces: server-side log processors in the Ninja Scroll enging, dramatic performance increase in find-in-log and save-log-as-text for large (multi-GB) logs, new information pane, throughput calculator, checksum calculator, new Tibbo Modbus Gateway Monitor plugin. Main application changelog: + nj_app: added calc-progress-bar in information widget (unified with rebuild-progress-bar) also, added nice thousand-separated formatting for large integers - nj_srv: fix: cancel all active range processors during shut down (definitely before shutting down plugin runtimes) * nj_app: alleviated evaluation restrictions on Crash Report dialog (can skip sending, aka "not now") * nj_app: don't update information widget unless it's visible + nj_app: added a new erasor icon * nj_srv: add udev dependency (needed when linking to libusb statically) - nj_app: fix: save transmit pane during session switching - nj_gui: fix: all information values should be read-only - nj_log: remove RangeProcessor::startRecord; instead, set timestamps and record codes in RangeProcesor::processXxx. this allows for more precise timestamp-based calculations + nj_gui: added property: gui.EnumProperty.m_currentText * nj_app: reduce flickering in the information widget by delaying the disable of selection-dependent items don't show "updating..." until the next update cycle -- chances are, range processor will finish before then + nj_app: added command: select all + nj_app, nj_srv: added support for selection processors + nj_app: added information pane * nj_gui: updated StringPropertyAppPeer for the new qtpropertybrowser + nj_app: added 'delete all' button to crash report dialog + nj_app: new save-log-as-text using range processors (rather than cache processors) * nj_app: minor ui fixes in find dlg + nj_app: replaced cache find (client-side) with range find (server-side) + nj_app, nj_srv: added SrvMsgCode_ProcessHyperlink Scripts changelog: - scripts: removed Hardware Serial Monitor (to reduce confusion) * scripts: renamed files: ModBus -> Modbus + scripts: added Tibbo Modbus Gateway Monitor plugin * scripts: usb endpoint should use max-packet-size as read-block-size this way, the responsiveness is better (this plugin is a usb endpoint terminal, after all) - scripts: fix: properties of io.UsbEndpoint were not updated properly + scripts: added momentary tx/rx throughput calc * scripts: use thousand-separated format for all sizes + scripts: sniffer: added ARP/INARP support to the Network Sniffer plugin + scripts: file stream: added message: "file cleared" * scripts: file stream: read all the buffered data on eof + scripts: added standard information values to all the plugins * scripts: refactor: trhoughput calculator, checksum calculator, std session info + scripts: added simple checksums (sum8, sum16-le, sum16-be) + scripts: added session timer * scripts: re-factored/updated checksum information set + scripts: added utility function for ip4 checksum incremental calculation - scripts: fixed name: should be crc16_ccitt, not "ccit" - scripts: io.Pcap.m_snapshotSize is read-only (remnants from the previous version of jancy) - scripts: fix: a bug in modbus exception processing + scripts: added crc32.jnc + scripts: selection processors & related infos are extracted into common files Ninja Scroll engine changelog: - njs_log: critical bugfix: mini-index file was not cleared on reset + njs_log: added sync method Server::cancelAllRangeProcessors - njs_log: typo fix: if the end page is not cached, range process must be postponed; but it was added to the start page, not the end page as it should - njs_log: fix: incorrect calculation of njs::LogPos on merged page borders (the last line of a merged page contanis records from two leaves) * njs_wdg: keep selection on tab keypress - njs_log: fix: new zone should only processed when we are in range - njs_log: fix: LogWidget::isBinSelection () was incorrect (just used the cursor position) + njs_log: added LogWidget::selectAll () method * njs_log: only call onCursorPosChanged when the pos actually changes - njs_wdg: fix: copy from terminal stopped upon the very first empty line + njs_log: added field: RangeProcessor.m_zoneOffset * njs_log: rename RangeProcessor::processDualBinHex -> processDualBin + njs_log: added StdRangeProcessorId_Last constant + njs_log: added NotifyCode_IndexFileChanged changed logic in getLogPos (need to handle selection start differently) + njs_log: export informational functions from IndexFile/CacheMgr + njs_log: added save bin as file & save log as text range processors - njs_log: fix offset issue in TextFindRangeProcessor set caret to the beginning of selection -- otherwise, using keyboard after find produces unexpected log jumps - njs_log: fix: RangeFind should use 0 as an indicator for invalid processId, not -1 * njs_log: refactor UI update limitation code + njs_wdg: add a flag CursorFlag_KeepSelection to keep selection when setting caret - njs_log: fix: adjust record count in mini-index leaves * njs_wdg: LineWidget::getSelection should return caret pos if actual selection is empty - njs_log: fix: when wrapping, also update leaf zone idx and zone offset -- otherwise, isFinished may return false-positive * njs_log: check for failed processRange (processId == 0) + njs_log: added RangeFind::getProcessId accessor + njs_log: populate mini index file in log server - njs_log: fix: incorrect calculation of m_zoneOffset in CountingRepresenterTarget * njs_log: zone indexing re-design + njs_log: TextFindRangeProcessor/BinaryFindRangeProcessor prototypes are functional + njs_log: added server-side RangeProcessor-s Jancy changelog: + jnc_io_usb: support out-of-order completion of usb transfers - jnc_io: removed incorrect assert (!m_readBuffer.isFull ()) in AsyncIoDevice::bufferedReadImpl_l + jnc_io_usb: added property UsbEndpoint::m_readTimeout - jnc_io_usb: fix: incorrect context for USB transfers - jnc_io_usb: fix: Endpoint::m_isOpen was not properly initialized - jnc_io_usb: fix: usb transfer was not properly allocated prior to fill & submit - jnc_ct: fix: bigendian enums were not handled properly + cmake: add crypto & udev dependencies (needed during static link to libusb & libssh2) - cmake: don't use axl_set_export_version_scrtipt on mac, where the --version-script option is not supported * jnc_io: advance disk file position on windows (overlapped IO requires explicit offsets) + jnc_sys: added sys.formatTimestamp () functions - jnc_ext: fixes re the latest change in axl::sl::HandleTable - jnc_ct: fix: data/class ptr type tuple had incorrect handling of readonly pointers - jnc_io: fix: process 0-lengthed return in FileStream as EOF indicator - jnc_io: minor fix: incorrect logic in AsyncIoDevice::setEvents_l - jnc_io: fix: AsyncIoDevice::m_readOverflowBuffer was not cleared on open; this could leave to inconsisten buffer state when a device is closed during intense IO and then re-opened - jnc_std: remove readonly modifier from fields of struct std.Error - jnc_io: critical bugfix: lock inside markOpaqueGcRoots - jnc_ext: fixes re the latest change in axl::sl::HandleTable - jnc_ct: fix: data/class ptr type tuple had incorrect handling of readonly pointers - jnc_io_base: fix: interpret 0-lengthed serial read on POSIX as EPIPE (broken pipe) - jnc_ext: fixes re the latest change in axl::sl::HandleTable - jnc_ct: fix: data/class ptr type tuple had incorrect handling of readonly pointers QT Property Browser changelog: + qtpb: added QtProperty::valueToolTip and disabledValueText properties - qtpb: fixed displayMode (must be part of StringPropertyManager) + qtpb: added StringPropertyManager::isReadOnly/setReadOnly property + qtpb: added QtTreePropertyBrowser::resizeNameColumnToContents method AXL changelog: - axl_cmake: removed GCC_LINK_FLAG_EXPORTLESS_EXE on mac -- ld here doesn't support --version-script + axl_gui: added QT_NO_VERSION_TAGGING * axl_gui: don't check if caret was visible before, force caret update - axl_enc: fix: UTF-8 -> UTF-32 -> UTF-8 should yield the same length - axl_sl: critical bug fix: TextBoyerMooreFind::find should use length, not size - axl_sl: fix: reverse boyer moore accessor save tail incorrectly * axl_sl: minor update in sl::String: s2 & s3 should return sl::String, not sl::StringRef + axl_gui: added convenient constructors to class HyperText - axl_sl: gcc-related fixes in sl::HandleTable * axl_sl: refactor: sl::HandleTable is now uniform with the other maps ................................................................................ version 3.8.4-a (2018-02-29) * axl_cmake: gcc: export NOTHING from executables and JUST the specified symbols -- from shared libs to improve portability across various Linux distros * jnc_ct: typo fix: ExtensionLibMgr reported a wrong error if dynamic extension could not be loaded ................................................................................ version 3.8.4 (2018-01-26) introduces: new Serial Tap Cable plugin, new streaming mode in Tibbo Device Monitor, all Tibbo Device Monitor-based plugins use generic class io.DeviceMonitor and do IOCTL decoding in Jancy scripts, detection of buggy serial drivers on Windows with fall-back to conservative settings, a few critical bug fixes in the Ninja Scroll logging engine. Main application changelog: + nj_app: add a break between main and session toolbars (this way they initially are displayed on two separate lines, rather than being next to each other on a single line) - nj_srv: fix: relative timestamps (compile times) should use time-zone #0 + nj_log: added log.StdRecordCode.Alert (as a more severe warning on pastel orange background) * nj_app: set GC guard page as the default everywhere; previously, the default for windows x64 was gc-simple-call - nj_app: workaround: avoid calling QIcon::availableSizes () currently, we use static linking to CRT, it means QT dlls use a different memory allocator than the main EXE module; returning templated classes (QList in this particular case) under these conditions is not safe * cmake: added libusb as optional dependency * package: removed nj_io_mon.jncx from all the packages (io_devmon.jncx will be pacakges with all the other jancy extensions) Scripts changelog: - scripts: restore defaults button should not reset port name(s) - scripts: use 'try' in 'gui.ComboBox.m_onEnter' handlers so that a possible exception is not added to the log. * scripts: minor update to the serial log port open message (for consistency) * scripts: make RxBufferFull message optional (and OFF by default) * scripts: rename: ReceiveBufferFull -> ReadBufferFull, TransmitBufferReady -> WriteBufferReady + scripts: new plugin: serial tap cable session * scripts: minor re-factoring in Serial plugin (adjustSerialSettingsForBuggyDrivers -> detectSerialBuggyDriver + setConservativeSerialSettings) this way, it's more convenient to apply to a dual-serial port sessions such as Serial Tap-Cable - scripts: typo fix in Mailslot session: m_syncId is now a member of MailslotSession, not io.Mailslot - scripts: removed ring status line change detection (it's not shown in log/status-bar anyway) + scripts: SerialMon for Linux: implemented termios IOCTL parsing * scripts: renamed io.SerialFlowControl.XOnXOff -> io.SerialFlowControl.XonXoff (for consistency) + scripts: added workaround for buggy drivers such as the one from Prolific * scripts: rename: log.StdRecordCode.RxBufferFulllLossless -> log.StdRecordCode.RxBuffeFull * scripts: moved SerialReadMode to SerialLog.jnc (otherwise, serial monitor fails to compile) + scripts: added overridable method: io.Monitor.processError normally, we also want to close the active connection whenever an error occurs; it has to be done from within the main session class * scripts: changed the order of PID/file ID in monitor sessions + scripts: serial: added more info to port-open log record; merged two props (wait-first-char & check-comstat) into one (read-mode); write read-mode and read-interval changes to the log * scripts: serial: use io.Serial.setupDevice for applying all the settings at once and avoiding multiple SetCommState/tcsetattr calls + scripts: serial: added DTR/RTS properties so it's possible to fully control the serial port from the setting property page * scripts: serial: disable RTS button/property when RTS/CTS is on. * scripts: ported all the remaining plugins to the new Jancy IO model + scripts: create a dedicated class io.Monitor -- it reads from tdevmon in stream mode, accumulates notification package andthen calls the overridable handler Ninja Scroll engine changelog: - njs_log: criticial fix: don't update CachePage::m_indexLeaf inside updateIndexTailLeaf unless we have successfully applied the part buffer (could cause occasional and hard-to-catch crashes) - njs_log: there is no need to check page for null (getPageByIndexLeaf always returns a non-null page ptr) * njs_log: make updateTailLeaf return IndexLeaf* and also assert on growing record count/size - njs_log: critical bugfix: don't unconditionally nullify the current line during fold + njs_log: added overload ServerPeer::writeRecord (const char*) Device Monitor changelog: - dm_app: fix: properly configure monitor on linux (including the final enable call) + dm_app: added the file name wildcard cmd-line switch on linux - dm_win_lib: fix: reading blobs was inefficient (was starting with 0 bytes -- have to start with something reasonable, e.g. 256) - dm_app: fix: monitor was not initially enabled (it was working due to a bug in the driver -- enable counter was ignored) * dm_app: minor update in output format for file name wildcard * dm_app: updates re the latest kernel-module api changes - dm_win_sys_core: critical bugfix: removed the leftover KeAcquireSpinLock inside loop in Connection_p_notifyMessage_l + all-drivers: added a debug suffix to all description strings - dm_win_sys_core: fix: partial notifications had incorrect PendingNotify.m_size field; this resulted in garbaged stream and likely an invalid-signature error * dm_win_sys_core: major update: re-write cancellation race protection and prevent notification order races + dm_win: added a dedicated code dm_NotifyCode_DataDropped for data dropped notifications * dm_win_sys_core: removed const modifier from MemBlock* paramBlockArray this is necessary for copyScatterGatherPartial (in streaming mode) + dm_win_sys_cmn: added copyScatterGatherPartial for copying scatter-gather into multiple buffers - dm_win_sys_core: fix: check for m_enableCount before notification - dm_win_sys: bugfix: DM_IOCTL_SET_FILE_NAME_FILTER should check in buffer size, not out buffer size * dm_win_sys: style: use upper-case for types (DDK/WDK-style) - dm_win_sys_core: fixed warning re UINT -> USHORT conversion + whdc: added test-sign script for testing the drivers under win10 + dm_win_sys: dm_win_lib: added streaming mode (message mode is still available as an option) * dm_win_sys: changed API a bit -- now pending notify limit and file name filter could be set after connection to a device is established (so it's possible to adjust it on-the-fly) - dm_lnx_lkm: removed redundant trailing '...' from printk's * dm_lnx_lkm: switched the order of fields in dm_IoctlDesc (to make it more convenient to use curly initializers) the old API (via Connect_v0302xx) is still available -- the order of fields is adjusted dynamically + dm_lnx_lkm: added debug printk's on setting the IOCTL desc table + dm_lnx_lkm: added support for FIONREAD + dm_lnx_lkm: ported the new streaming notification model (with partial scatter-gather and postponed read completion) to LKM + dm_lnx_lkm: added dm_NotifyCode_DataDropped + dm_lnx_lkm: added function: copyScatterGatherPartial - dm_lnx_lkm: fix: IOCTL argument should not be size_t; use uint32_t instead + dm_lnx_lkm: streaming mode (message mode is still available as an option) + dm_lnx_lkm: added a bunch of IOCTL codes for post-connect configuration + dm_lnx_lkm: added support for file-name filtering (so it's possible to hook a driver and then receive notifications for all the device it's serving) Jancy changelog: - jnc_io_base: fix: in io::FileStream::open PIPE_READMODE_MESSAGE is only applicable to named pipes (when GetFileType returns FILE_TYPE_PIPE) - jnc_io_base: bugfix: length of \\.\pipe\ and \\.\mailslot\ prefixes was calculated incorrectly - jnc_io_base: bugfix: don't read in io.FileStream if it was opened with io.FileFlags.WriteOnly + jnc_io_base: ensure \\.\pipe\ prefix in io.NamedPipe.open - jnc_io_xxx: critical bugfix: all the newly ported IO classes had null markOpaqueGcRoots (instead, should call AsyncIoDevice::markOpaqueGcRoots) + jnc_ct: added utf8_t, utf16_t, utf32_t to jnc_StdTypedefs.jnc (for stdlib doc generation) - cmake: fix: -D_JNC_DYNAMIC_EXTENSION_LIB must be added prior to axl_set_pch * jnc_io_xxx: rename: ReceiveBufferFull -> ReadBufferFull, TransmitBufferReady -> WriteBufferReady - jnc_ct: critical bugfix: octal constant tokens were converted to numbers using the decimal radix - jnc_io_devmon: don't check getIncomingDataSize (not really necessary) - jnc_io_base: don't check getIncomingDataSize (not really necessary) * jnc_ct: when searching in namespaces, don't go to parent namespaces of base types * jnc_io_base: rename XOnXOff -> XonXoff (for consistency) - jnc_ct: fix: use module global symbol map (m_functionMap) for maping global variables on llvm versions < 4.0.0 * jnc_ct: use '?' prefix for global variables (just like we do for functions) * jnc_ct: changed the implementation of Module::mapVariable - jnc_io_devmon: POSIX fix: m_ioThreadEvent.wait () -> sleepIoThread () - jnc_sys: typo fix: incorrect flag assignments in sys.SystemInfo * jnc_sys: fix: OsFlag's had wrong values - jnc_io_usb: POSIX compilation fix: include "axl_io_psx_Pipe.h" was missing - jnc_io_pcap: POSIX compilation fix: m_ioThreadEvent.wait () -> sleepIoThread () - jnc_io_base: POSIX compilation fix: createIncomingConnection () -> m_incomingConnectionPool.get () + jnc_std: added functions: strncmp, strnicmp, strneq, strnieq, strichr, stristr + jnc_io_base: added function: io.getSymbolicLinkTarget - jnc_io_base, jnc_io_usb, jnc_io_pcap: removed unnecessary declarations of the now-missing event params - jnc_io_base: fix: removed the now-missing Mailslot.m_syncId field - jnc_io_devmon: fix: m_overlappedIo was not allocated/freed + jnc_std: added property: std.StringBuilder.m_sz (which is always non-null and zero-terminated) + jnc_io_base: added method: io.File.flush () + jnc_io_base: added io.Serial.setupDevice for setting all the setting with one call * jnc_io_base: replace ^ with != (reads cleaner) * jnc_sys: changed sys.g_systemInfo to a variable (instead of a property) and map it directly + jnc_ct: added a pragma-todo-warning re retval coercion on MSC 32-bit + jnc_api, jnc_ct: added support for mapping global variables - jnc_io_usb: fixed warning re singed-unsigned-comparison + jnc_api: added NOMINMAX definition under windows * jnc_io_ssh: use AsyncIoDevice::setSetting for changing read block size * jnc_io_usb: ported io.UsbEndpoint to the new IO architecture * jnc_io_pcap: ported io.Pcap to the new IO architecture * jnc_io_base: ported io.NamedPipe, io.Mailslot, io.FileStream to the new IO architecture * jnc_io_base: io.SocketAddressResolver now uses completion routine arg rather than event field * jnc_io_devmon: moved all overlapped-related fields in io::DeviceMonitor to struct OverlappedIo * jnc_io_base: moved all overlapped-related fields in io::Socket & io::Serial to struct OverlappedIo * jnc_io_cmn: removed overlapped read list & overlapped write block from the base class AsyncIoDevice + jnc_io: added tdemon-based device monitoring extensions library io_devmon.jncx - jnc_rt: bugfix: class field boxes of base types were not added during allocation + jnc_std: added standard error guids: errno, winerror, ntstatus + jnc_std: added overloads in std.StringBuilder for dealing with UTF-16 & UTF-32 - jnc_io: bugfix: AsyncIoEvent_ReceiveBufferFull was not cleared in AsyncIoDevice::bufferedRead - jnc_ct: fix: choosing overloads could end prematurely (incorrectly reporting ambiguous call) - jnc_ct: fix: when up-casting class pointers, don't check safe pointers for null + jnc_ct: added standard typedefs: utf8_t, utf16_t, utf32_t * jnc_api: move warning suppressions to a dedicated file (no pragma once) + doc: added --ignore-import io_base.jncx cmdline switch in stdlib documentation + jnc_app: added a command line option for adding ignored imports + jnc_ct, jnc_api: added ignored import set - jnc_ct: removed the unneeded file path string cache AXL changelog: * axl_io_win: when enumerating serial ports, use SPDRP_FRIENDLYNAME first, then SPDRP_DEVICEDESC as a fallback (SPDRP_FRIENDLYNAME yields a description just like in the Device Manager) - axl_io: typo fix: SerialSettings constructor didn't propagate dtr & rts values + axl_g: added macros _strnicmp/_wcsnicmp on POSIX (mapping to strncasecmp/wcsncasecmp) + axl_io: implemented getSymbolicLinkTarget for POSIX (via readlink) - axl_io: fixed missing 'const' qualifier in SharedMemoryTransportBase::initializeMapping () + axl_io: added io::getSymbolicLinkTarget (implemented on windows via NtQuerySymbolicLinkObject) + axl_core: added axl_sys_win_NtDll.h/cpp to store native NT declarations * axl_io: on windows, setting all serial settings via DCB affects DTR & RTS; therefore, we must include it in io::SerialSettings and update it whenever we modify flow control * axl_io_win: enumerate serial ports using GUID_DEVCLASS_PORTS (a driver may fail or choose not to register the GUID_DEVINTERFACE_COMPORT interface) * axl_g: g::Module::getSystemInfo should return a const-pointer * axl_g: removed leading underscore from AXL_CPP_xxx_VERSION defines (for consistency) + axl_g: added NOMINMAX definition under windows + axl_err: added a constructor overload for err::Error to allow passing string literals as errors + axl_sl: added an assert to StringRef::attach (length must not be -1) + axl_mem: added a simple mem::Pool template class for fixed-sized memory pools - axl_io: fix: must clear flow control fields in the DCB prior to setting the new value * axl_g: minor cleanup of the warning suppression file ................................................................................ version 3.8.3 (2017-12-15) introduces: major redesign of Jancy IO model, support for guard-page-based GC safe-points on Windows x64, advanced IO & buffering options in plugins Main application changelog: * nj_app: show error message in message box only if there's no plugin startup dialog * nj_srv: always return 0 on success; print error messages to stderr - nj_app: critical bugfix: don't nullify SessionStartupSyncReqSlot in processMsg_OnStartupCompleted (could lead to a deadlock if plugin failed to load properly) - nj_app: bugfix: receiving transmit-disabled notification should not affect the transmit pane unless the document is active + nj_log: added StdRecordCode.RxBufferFullLossless & StdRecordCode.RxBufferFullLossy + nj_srv: add errors & exceptions to the main log - nj_gui: bugfix: incorrect check EnumProperty::setCurrentIndex (should be >= count) - njs_srv: fix: check m_workerThreadTerminateFlag in worker thread request processing loop - nj_app: bugfix: next-time combo box in crash report dialog was not serialized properly - nj_app: bugfix: usage report and crash reports could not be disabled (even for paid licenses) - the check for a paid license was made too early (before license mgr initialization) - nj_srv: crash during compilation stage caused invalid manifest collection (log is not opened) + nj_app: allow guard page safe points on win64 - nj_app: bugfix: transmitting a file caused invalid selection in history combo - nj_app: bugfix: submitting usage report during the initial open (e.g. `ioninja serial`) lead to a crash * nj_srv: link to dbghelp.lib on windows. somehow it worked without explicit linking on msvc10, but it doesnt on msvc14 - nj_app: fix: handle server process exit (e.g. during system shutdown/restart) Scripts changelog: + scripts: ported tcp connection socket, udp socket, ssh channel, tcp proxy and serial to the new jancy io model + scripts: added advanced buffering options to serial and all socket-based plugins: * read parallelism * read block size * rx buffer size * tx buffer size * keep read block size * keep write block size + scripts: added advanced socket options to all socket-based plugins: * tcp keep-alives * tcp nagle * tcp reset * re-use address + scripts: added advanced serial port options to the serial plugin: * read interval * comstat check * wait for the first char Ninja Scroll engine changelog: + njs_wdg: added support for ESC D, ESC M - njs_wdg: fix: properly handle newline inside a scroll-region - njs_wdg: fix: when deleting lines, fill the space with background color - njs_wdg: fix: terminal widget did not always invalidate necessary lines on scroll + njs_wdg: improved support for xterm scroll regions - njs_wdg: bugfix: cursor pos should be re-validated after console size change (could lead to crashes on terminal resize) Jancy changelog: * jnc_io: use the new axl::io::Serial::open to open serial port in asynchrounous mode + jnc_sys: added sys.g_systemInfo property + jnc_api: added alias _JNC_CPU_IA32 (the same as _JNC_CPU_X86) - jnc_ct: fix: set value to ValueKind_Void when const-casting to (void) - jnc_ct: fix: incorrect check for void value in ControlFlowMgr::ret (const Value&) + jnc_io: added SocketOption_TcpKeepAlive (translates to SO_KEEPALIVE) + jnc_ct: fix: handle returning of values from void functions + test: added a test for checking the recent modification re gc shadow stack frame maps - jnc_ct: critical bugfix: for-loop had incorrect sequence of jump/close-scope (could lead to premature release of temp gc-heap vars) * jnc_ct, jnc_rt: critical update: changed the way shadow stack frame maps are initialized and set * jnc_ct: remove Unit* argument from OperatorMgr::parseXxx (...) set of functions; instead, set current unit explicitly (the same spot where we open namespaces) * jnc_io_base: redesigned io.Socket + jnc_io_ssj: redesigned class io.SshChannel + jnc_io_base: redesign of io.Serial class (using async event model) + jnc_io_cmn, jnc_io_base: added io.AsyncIoDevice (will be base for all asynchronous IO classes: Serial, Socket, SshChannel, etc) * jnc_ct: bool should belong to TypeKindFlag_Integer - jnc_ct: incorrect assert in ClassType::markGcRootsImpl -- opaque classes may be derived from! - jnc_ct: fix: bitwise-xor operator should keep bitflag enum type (just like bitwise-or) * jnc_rt: switch to vectored exception handling on windows; remove seh frames remove jnc_handleSehException; * jnc_rt: by default use gc guard page and no explicit check-calls everywhere + jnc_rt, jnc_ct: added rt::ExceptionMgr to handle null-ptr-access & div-by-zero with signals on POSIX and with vectored exceptions on Windows * jnc_ct: split entry block into two: alloca & prologue + jnc_ct: ported to llvm-5.0 AXL changelog: - axl_io: fix: clear "bad" termios attributes + axl_io: apply read interval via c_cc VTIME: + axl_io: modified io::Serial::open to allow choosing sync vs async using io::FileFlag-s + axl_g: added alias _AXL_CPU_IA32 (the same as _AXL_CPU_X86) * axl_sl: treat uninitialized empty CircularBuffer as valid + axl_io: added axl::io::win::Socket::wsaGetOverlappedResult (...) methods + axl_sl: added sl::CircularBuffer:drop method + axl_sl: added sl::Handle::takeOver method + axl_sl: added a simple circular buffer class sl::CircularBuffer + axl_sys_win: try to FormatMessage (FORMAT_MESSAGE_FROM_HMODULE) for getting NTSTATUS description if RtlNtStatusToDosErrorFunc failed (returned the same code) ................................................................................ version 3.8.2 (2017-11-24) introduces: major optimization in ninja scroll logging engine for bin-text lines and large log files (plus a few critical bugfixes), a critical bugfix in jancy scripting engine, hi-precision (sub-microsecond) timestamps on windows 8+, crash reports, usage reports, new version popup notifications. Main application changelog: - nj_doc: fix: reset current directory to root in StorageParser::finalize - nj_app: bugfix: clicking "reset terminal" in terminal context menu was incorrectly directed to the active document (wrong for floating terminals) + nj_app: added floating/tabbed items to the terminal context menu + nj_app: implemented play-log-in-terminal functionality + nj_app: collect and submit crash-reports (configurable: always-on/confirm/ off) + nj_app: added a popup dialog when a new version is found (configurable: popup/asteris/off) + nj_app: encrypt usage and crash reports (configurable) - nj_app: set fixed size for the status-bar (to prevent if from being stretched by plugins) - nj_app: don't do any network requests until a user presses "Agree" on the initial nag screen - nj_app: bugfix: clicking Remove All on the Add-on Plugins page could lead to a crash - nj_app: bugfix: layerPluginUsageStats argument list was not null-terminated (caused occasional crashes) - nj_app: use RtlGetVersion instead of GetVersionEx (which may lie about the actual OS version depending on the app' manifest) + nj_app: generate a unique installation ID and submit it in every usage report * conf: changed comments from // to # + all: generate linker debug information in Release builds + package: create an extra archive with pdb files + legal: added privacy.txt file with detailed description of our privacy policy Scripts changelog: + scripts: sniffer: added handling of io.PcapEventCode.IoError + scripts: ssh: track console size changes during connect + scripts: added default remote port setting to TCP, UDP & SSH sessions + scripts: use std.getPreciseTimestamp in log - scripts: removed debug printfs + scripts: added PID information to all tdevmon-based monitors + scripts: added gui.ComboBoxHistory class extenstion all the scripts now use it instead of (now removed) gui.ComboBox.addEditTextToHistory * wizards: change icons for all the plugins (previously it was a tennis ball from the Echo plugin, now it's a generic "plugin" icon) Ninja Scroll engine changelog: - njs_log: critical bugfix: merge-id should be a part of each index leaf (not just merged ones) * njs_log: only processUiEvents on rebuild (otherwise, it introduces unnecessary latency on incremental log updates) * njs_wdg: don't scroll to bottom on resize by default (do that for terminal widget only) - njs_log: critical bugfix: in bin-text line we should check for enc::utfIsPrintableNonMark (not just enc::utfIsPrintable) -- could cause occasional crashes - njs_log: fix: codec for wchar_t is platform-dependent (utf16_t/utf32_t) + njs_log: show tooltips with HEX-ASCII/U+ notation for bin-text lines - njs_log: fix: default copy processing for bin-text lines should take actual data bytes, not binText string (because binText is translated regarding tabs/unprintable chars) * njs_log: major update: don't hide '\r' and '\n' in bin-text-lines (show as unprintable char) - njs_log: fix: keyboard jumps over tabs in bin-text lines - njs_log: fix: update m_partIdx of the bin-text line if it's empty during add-data - njs_log: critical bugfix: bin-text lines incorrectly handled multibyte unicode chars being split inside the code-point * njs_log: major optimization update: - optimized index tree re-balancing - delayed UI updates on index rebuild - added support for incremental re-indexing (large logs are now immediatly usable) - UTF buffer-based batch decoding (previously it was per-code-point) * njs_wdg: don't auto-scroll terminal console on write (use the same logic as with the log -- if the bottom line is visible, then scroll to bottom) + njs_wdg: added support for CSI L/M (insert/delete lines), CSI d/G (set cursor line/col) and CSI !p (soft terminal reset) - njs_log: fix: empty log was not handled properly in CacheMgr::processCache Jancy changelog: - jnc_ct: major update/bugfix: StdFunc_AllocateXxx/StdFunc_TryAllocateXxx should return StdType_AbstractDataPtr, not StdType_DataPtrStruct. this under certain circumstances could cause premature release of temporaries which in turn was leading to UB including crashes - jnc_rt: fix: assertion failure could still occasionally fire * jnc_ct: remove dummy field from StdType_AbstractData; instead, just force-set flags (gc-root & non-pod) + jnc_io_pcap: added event io.PcapEventCode.IoError + jnc_sys: added std.getPreciseTimestamp => axl::sys::getPreciseTimestamp * jnc_ct: cleaned up using-sets implementation (now applicable to imports and orphans) AXL changelog: - axl_io: critical bugfix: non-atomic file size grow in io::SharedMemoryTransportBase on POSIX (could lead to SIGBUS) + axl_ini: support empty sections in .ini files (may be useful to reset to root directory) - axl_g: fix: _AXL_GCC_ASAN was detected incorrectly on clang - axl_io: critical bugfix: block size for file copying should be a multiple of systemInfo->m_mappingAlignFactor + axl_gui: added support for tooltips + axl_enc: added access to the accumulator in CodePointDecoder * axl_io: changed default MappedFile read-ahead size to 64K * axl_gui: minor update in WidgetDriver::postThreadMsg API + axl_gui: added Engine::processUiEvents + axl_enc: major update in char codecs (support for buffer decoding in CodePointDecoder, support for single-pass decoding + codepoint map calculation) + axl_cry: added axl::cry::Rsa::publicEncrypt/privateEncrypt/ publicDecrypt/privateDecrypt + axl_cry: added cry::AesKey wrapper class for AES block encryption + axl_sys: implemented hi-res timestamps on mac (via mach_absolute_time) for testing (production version is still using gettimeofday) - axl_sl: bugfix in PackIntTrunc: va_arg was called twice - axl_sys: removed qpc-based precise timestamps on windows; instead, use GetSystemTimePreciseAsFileTime available in win8+ + axl_gui: added support for ansi attr inversion - cmake: don't use -static-libgcc/-static-libstdc++ on clang (not supported) ................................................................................ version 3.8.0 (2017-10-20) introduces: major terminal emulator redesign, regular expression colorizer layer plugin, add-on plugin management system, support for layer plugin persistency in saved log files and session files, support for key authentification in Jancy class io.SshChannel and in the SSH plugin, new Jancy class jnc.RegexDfa for compiling and matching dynamic regular expressions (uses the same engine as the 'reswitch' statement). Main application changelog: * nj_app: major redesign of the terminal widget - now it can be floating or tabbed - can be fixed-sized or auto-sized - when it's auto-sized, the size tooltip is shown on resize * nj_app: terminal: fixed bugs in arrow key mapping * nj_app: added tab close button, i need it to add it to the terminal tab, it's closable now (but not the log tab!) * nj_app: delay terminal console size adjustment (otherwise, lines are cropped prematurely) * nj_app: inverted the terminal mouse roles when xterm mouse-mode is set: send clicks by default; select/context-menu when Ctrl is pressed * nj_app: re-design of transmit history: now text transmit, binary transmit and file transmit all have independent histories. previously having shared history for text+binary transmit caused problems with escape-sequence in the text pane * nj_app: fixed persistency for the file transmit page (previously it was always empty on session start, even when we've set the file previously) * nj_app: added support for layers in saved session files * nj_app: added per-plugin resource directories * nj_app: save document settings as defaults upon closing the settings dlg * nj_app: fix: actions for recent files in the file menu were not connected * nj_gui: added support for enabling/disabling for action (link) properties * nj_srv: apply default settings on add layer * nj_srv:suspend/resume log server on add & remove layer suspending helps avoiding premature rebuilding of log index when layer adds converters/representers * nj_gui: added methods: gui.PropertyGrid.removeProperty and gui.GroupProperty.removeProperty * nj_app: added user plugin setting page * nj_app: set fixed size for the nag dialog (measure by the image) * nj_app: disable already added layers in the "new-layer" drop-down menu * nj_srv: added doc.PluginHost.m_logThreadScheduler * nj_srv: added doc.PluginHost.m_pluginGuid * nj_srv: added support for multi-class-guids in log files * nj_srv: adapted log api to the new representer stack architecture * nj_srv: moved std record code representer into a dedicated class * nj_srv: save log file now takes the last log record file in converter stack * nj_app: brought back the Add Layer toolbar button * qtpb: hide alpha channel in color properties * qtpb: adjusted the display format in flag properties * qtpb: added QVariant user data to properties * nj_gui: added gui.ColorProperty, gui.ActionProperty, gui.FlagProperty, gui.FileProperty * nj_gui: fix: insert properties to the group of particular plugin * nj_app: added tooltip label (QToolTip has certain issues with widget activation/deactivation). i need something simple and predictable to show terminal console size * nj_app: updated icons (also, added a terminal icon) * nj_app: fixed buddies and tab order on all the dialogs * package: added NSPrincipalClass=NSApplication to Info.plist in Mac packages (crucial for high-DPI support) Scripts changelog: * scripts: fix: modbus plugin should use a volatile variable for checking for role inversion (the value of property is not volatile and not guaranteed to return the correct result after the change). timing is critical on startup (if we apply a modbus rtu layer with role inversion to an already captured log) * scripts: MosBus RTU: added support for role inversion: TX/RX - Master/Slave also, improved the handling of invalid ModBus frames * scripts: fixed regex colorizer race issues (log thread vs main thread) * scripts: minor fixes in the file and hw-serial-mon plugins * scripts: added the 'Remove all extra patterns' action to the regex colorizer plugin * wizards: bugfix in syntax highlighter wizard (length should be updated each iteration) * wizards: fixed a typo in TX/RX test plugin wizard * scripts: added gui.rgb function * scripts: ssh: added key authentication * scripts: serial: removed flow control combo box (available via property grid) * scripts: added regex colorizer layer Ninja Scroll engine changelog: * njs_wdg: added support for CSI set scroll region command * njs_log: write bin-format to clipboard on bin-copy mode * njs_log: added "smart" copy logic for bin-hex lines: when selecting in the hex part, the copied text will contain hex codes; when selecting in the text part; the actual text will be copied * njs_log: added support for CopyBinKind_HexView * njs_wdg: added support for mouse mode change notifications * njs_log: critical bug fix in njs::Server::processSyncReqList * njs_wdg: terminal: added support for CSI n P (erase chars) * njs_wdg: fixed a repaint problem on full erase * njs_log: added support for multiple class guids in a single log file (crucial for io ninja layers) * njs_log: moved fold flags to a dedicated fold file (now we don't have to enforce read-write when opening logs; also, it's possible to have multiple log servers working with the same log file) * njs_log: added support for suspend/resume (may be necessary when building complex layer stacks) * njs_log: added support for user callbacks in the log thread (necessary to synchronize io ninja converter layers) * njs_log: show page boundaries under debug Device Monitor changelog: * dm_lnx_lkm: fix: in-header inline functions must be static to make gcc happy * make: added variable LINUX_BUILD_DIR to override build dir when needed * dm_lnx_lkm: implemented write-protection disabling for arm32 now tdevmon can be used on Tibbo LTPS LTPP3 boards for serial monitoring * dm_lnx_lkm: use do_div instead of direct int64 division on arm32 * dm_lnx_lkm: bugfix: Device_p_unhook did Hook_stop sequence incorrectly * dm_lnx_lkm: warning fix: ioctl arg is long, must be cast to (uintptr_t) before casting to (void*) * cmake: added an option for lkm target in cmake project Jancy changelog: * jnc_ext: fix: consumed length calculation in jnc.RegexState did not work properly for negative offsets * jnc_ext: added support for buffer replay after a successful match in incremental jnc.RegexState/jnc.RegexDfa * jnc_ct: critical bugfix: reactor iface classes were not properly shared * jnc_ct: bugfix: skipping non-trailing default arguments crashed the compiler (need to do explicit check for null jnc::ct::Value-s) * jnc_ct: allow finishing commas in named-based curly initializers * jnc_rtl: implement full reset in RegexState::reset * jnc_rt: added Runtime::m_userData field (rather convenient when there are multiple runtimes, like with ioninja plugin stack) * jnc_rtl: removed RegexDfa.incrementalMatch * jnc_rtl: added RegexDfa class * jnc_io_base: typo fix in io.Socket * jnc_io_base: minor sync bugfix in io.Serial (m_ioFlags must be accessed under lock) * jnc_io_ssh: added support for key authentication * jnc_io_ssh: bugfix: SshChannel::write returned 0 on success (must return the actual size) * jnc_ct: fix: OperatorMgr::getConditionalOperatorResultType should use closure-aware types of operands AXL changelog: * axl_io: fix: io::SharedMemoryTransport did not release the lock on open-error * axl_gui: export TextPainter::buildBinTextString for public use (the same code which is used for producing hex-view strings) * axl_sl: minor fix in sl::ListBase::moveXxx to allow usage of these methods from sl::BoxList * axl_io: typo fix in the POSIX impl of io::getDir * axl_io: bug fix in the POSIX impl of io::copyFile * axl_sl: added sl::List::eraseHead/eraseTail for consistency * axl_io: expose const io::File* via io::SharedMemoryTransport::getFile (for uniformity with io::MappedFile) * axl_io: io::MappedFile now provides information about the actual end of a mapping * axl_io: expose const io::File* via io::MappedFile::getFile * axl_io: added io::copyFile () overload (accepting a const io::File* instead of a source file name) * axl_fsm: fix: calling RegexCompiler::makeDfa with an empty regex caused a crash ................................................................................ version 3.7.8 (2017-09-15) * devmon: criticial bugfix: opportunistic BSOD (read beyond the end of a buffer during scatter-gather collection on IRP_MJ_CREATE/ IRP_MJ_CREATE_NAMED_PIPE/IRP_MJ_CREATE_MAILSLOT) * devmon: fix: self-hooking attempts detection and prevention in tdevmon for Linux * devmon: fix: tdevmon --stop-core-service always failed as long as there is at least a single filter device attached * devmon: fix: if the core service could not be stopped, MSI would misbehave: it could failed instead of asking for a reboot or do not ask for reboot at all * plugins: SerialMon: extend port combo (space is unused, anyway) * plugins: Serial: added read buffer size setting * plugins: ModBus: added support for field-clicks in decoded ModBus messages * plugins: ModBus: bugfix: upon a successful decode of a ModBus message, a chunk of raw data was doubled * nj_app: added terminal settings for backspace key mode, home-end key mode and function key mode * nj_app: added proper handling of double-click in terminal * nj_app: remember last open-file dir * nj_app: fix: on Windows and Mac ignore extension case when auto-detecting open-file type * nj_srv: reset base timestamp to the first line of the log if it's not empty otherwise, it produces weird "minus" times when opening existing logs and/or sessions * nj_gui: added properties m_minValue, m_maxValue, m_spinBoxStep to the class gui.IntProperty * axl_sys: fix: month number should be one-based, not zero-based * njs_log: fix: handle double-click on hyperlinks as a normal click (don't select-word) * njs_wdg: added support for character sets (in particular, line-drawing character set) in the terminal widget * njs_log: added support for backward-bin-range-highlighting ................................................................................ version 3.7.7 (2017-08-31) introduces: Tibbo Device Monitor for Linux, Serial Monitor plugin for Linux, support for monitoring the Fast IO and remote pipe/mailslot connections on Windows, dual WHDC-compatible signing of Windows drivers with SHA-1 and SHA-256 EV certificates for Windows 10 1607+ compatibility, two critical BSOD fixes, dynamic structures in Jancy language. * nj_app: added the "What's New" dialog * nj_app: cleaned up QT widget/dialog layout issues * nj_app: removed the "Key Translation" terminal setting (never was fully implemented); added the 'Enter key mode' setting (CR/LF/CR-LF) instead * nj_io_mon: added support dual device monitoring (e.g. \device\namedpipe and \device\lanmanredirector); this allows for monitoring remote pipe/mailslots * moved all *.jncx into 'extensions' dir in tar package * devmon: file name wildcards can contain multiple \r - separated wildcards; to pass a file name must match all the wildcards using AND logic) * devmon: added notifications for FastIoRead/FastIoWrite/FastIoDeviceControl -- this is crucial for monitoring the named pipe IO on Windows (otherwise, a substantial part of pipe traffic is unlogged) * devmon: improvement: MSI installer should not ask for reboot during upgrade unless that's really necessary -- before it *may* have asked for reboot even when services could be cleanly stopped * devmon: fix: IRP_MJ_FILE_SYSTEM_CONTROL file id and data was not properly displayed in tdevmon console utility * devmon: critical bugfix: BSOD on METHOD_NEITHER IOCTLs when either IN or OUT buffer is NULL (due to unconditional MmGetSystemAddressForMdlSafe on NULL MDL) * devmon: critical bugfix: an opprtunistic BSOD crash during open file notification on IRP_MJ_CREATE/IRP_MJ_CREATE_NAMED_PIPE/ IRP_MJ_CREATE_MAILSLOT -- due to incorrect usage of FILE_OBJECT::FileName * devmon: ported tdevmon console application to Linux * devmon: added Linux loadable kernel module (LKM) and usermode library * devmon: added scripts for WHDC signing with the new EV certificate * devmon: bugfix: a leak in HashTable_remove (entry was removed, but not actually freed) * cmake: added QT_COMPILING_QSTRING_COMPAT_CPP and QT_COMPILING_QIMAGE_COMPAT_CPP to QT-based modules. this way, the resulting binary has less import symbols and is more likely to run when linked against older versions of QT * cmake: added gcc settings for -static-libgcc and -static-libstdc++ (static by default). this way, the resulting binaries are more likely to run on different linux distros * ported Serial Monitor plugin to Linux * jancy: added dynamic structs (dynamic layour via non-const-sized arrays) * axl: fixed typos in sl::String::getLeftSubstring/getRightSubstring * axl: catch out-of-memory error in Array::reserve * axl: added assert to getMinPower2Gt to catch values with highest-bit set to one * njscroll: fixed a regression introduced with dual bin hex lines CachedLine::isBin was broken, which lead to incorrect painting of bin-text lines ................................................................................ version 3.7.5 (2017-07-06) * njscroll: ensure visible cursor on paste * njscroll: scroll the widget if necessary on insert/delete data * sh: updated build-packages shell scripts for all opensource projects -- should use cpack rather than hand-made shell scripts (which are all removed now) * nj_app: added support for time-limited evaluation licenses * nj_app: re-designed the license dialog * ecckey: added support for time-limited (expiring) product keys * ecckey: added srand() -- otherwise, product key padding is always the same * jnc_sys: added g_env property for accessing system environment variables ................................................................................ version 3.7.4 (2017-06-03) * nj_app: bugfix: having both a session and a log opened and then closing first the session and then ioninja lead to a crash * njs_log: auto-convert logs from ioninja 3.5.x * nj_app: removed api.conf (not needed anymore) ................................................................................ version 3.7.3 (2017-05-17) internal release. * jnc_ct: ported to llvm-4.0; compiles and runs under llvm versions 3.4.2 to llvm-4.0.0 * jnc_ct: named import types used in orphaned functions/reactors are re-anchored (no more need to qualify nested types in orphaned methods) * njs_log: bugfix: crash if dual bin hex block happen to span cache page boundaries * nj_app: bugfix: hex editor incorrectly reported selected range if cursor was at ASCII-EOL position ................................................................................ version 3.7.2 (2017-05-03) introduces: Hardware Serial Monitor for UART/SPI/I2C; USB Endpoint Terminal; dual binary blocks in Ninja Scroll Engine. * axl_gui: bugfix: TextPainter::drawHyperBinHex incorrectly checked for an empty attr array * nj_app: bugfix: when a session was created after closing a previous one, session property grid was often inaccessible for editing * axl_gui: shift+Tab support * nj_app, nj_log: added support for dual-bin view * nj_log: break record support * nj_gui: proper group property support * axl_gui: make HyperText use UTF-32 for text storage; this way makes it possible to use unicode chars in IO Ninja text log lines * jnc_ct: implemented const casts for class pointers -- this is critical for doing class-ptr upcasts from variants * jnc_ct: critical bugfix: don't fallback to llvm cast post-compile * jnc_ct: allow casts to void (crucial for conditional operators) * jnc_std: bugfix in Array::insert/Buffer::insert methods (they always copied new data into the beginning) * njs_log: added PartKind_Break for inserting breaks between mergeable messages ................................................................................ version 3.7.1 (2017-04-14) introduces new features in Jancy language: 'reswitch' statement; 'cmut' modifier; variant containers (arrays, lists, hash tables, rb-trees); redirectable stdio; raw literals; indexer properties; disposable pointers; declarations in reactors. * scripts: move io_ModBus.jnc/io_TcpIp.jnc to common folder (not really api) * jnc_ct: allow writing formatting literals as f"..." ($"..." is also ok) * axl_err: bugfix: StdErrorCode_String incorrectly handled string length (off-by-one) * ioninja: fix: master encoding was never really saved (reset to UTF-8 each time) * jnc_ct: fix: array->ptr casts, also for const values (required for variants) * jnc_std: cleaned up std classes StringBuilder/HashTable/RbTree * jnc_std: removed unused structs/classes (std.BufferRef/std.StringRef etc) * jnc_std: added std.RbTree, redesigned std.HashTable * jnc_ct: bugfix: thunk function compilation failed if function had call-conv-dependent arg coercion * jnc_ct: fix: non-POD struct field access was essentially unchecked * axl_sl: breaking change: eliminated diversity BinTree/BinTreeMap and HashTable/HashTableMap * jnc_ct: major update: redesign of dual modifiers, implemented dual modifier 'cmut' (container mutability). * jnc_std: added std.Array class * jnc_std: added gets, print, perror and make stdio adjustable by the host application (via jnc::setStdio) * jnc_ct: relaxed the requirement to use 'indexed' modifier when declaring indexed properties * axl_sl: bugfix in sl::CmdLineParser -- parse switch prematurely terminated the switch value upon discovering a space * jnc_ct: added support for raw literals (non-escape-decoded) * jnc_ct: redesign of automatons -> regex switches * jnc_rt: suppress unwinding on longjmp on windows x64 (doesn't work properly -- at least with LLVM 3.9.1) * scripts: remove types in bindable aliases, remove terminating semicolons from curly-initialized declarations * jnc_ct: update in grammar: allow curly-initialized declarations to be non-terminated with ';' * jnc_rt: fix: assert in GcHeap::parkAtSafePoint could occasionally fire due to its wrong placement -- it should be placed *before* atomicDec (&m_handshakeCount) * jnc_ct: indexer properties implemented * jnc_ct: function redirection implemented * jnc_ct: alias redesign * jnc_ct: major update: member & index operators for variants * jnc_ct: disposable pointers * jnc_ct: redesign of automatons -> regex switches * axl_sl: bugfix in sl::Pack -- size calculation for simple types did not advance va_list * axl_fsm: supportfor simple quantifiers, e.g \h{8} * axl_fsm: capturing groups * axl_sl: added support for and-not operation to BitMap::merge * jnc_ct: allow declarations in reactors * jnc_ext: move gc stuff from std to sys * jnc_ct: redesign module constructors/destructors (allow one-per-unit) * jnc_ct: removed 'delete' operator (prolly, never gonna be supported) ................................................................................ version 3.7.0 (2016-12-20) provides a critical fix in Serial plugin. * jnc_io_base: major update in Serial class -- fixed EV_RXCHAR-related data loss and completely removed interval timeouts on windows. As it turns out, certain drivers do not follow WinAPI guidelines on EV_RXCHAR notifications and serial timeouts and it may cause IO Ninja to hang indefinitely * nj_app: proper updates of transmit pane during switching and closing of documents * don't disable transmit pane in monitor and linked sessions (could be used as a scratch-pad). "send" button is disabled anyways * dm_app: bugfix: %lld implies 64-bit, but the argument was intptr_t; it caused a crash during monitoring on 32-bit machines * njscroll: assertions in mergeEditTransactions could actually fire (if we select and then replace by typing) * njscroll: make selectAll (Ctrl+A) keep the cursor in the same pane it was before (Hex-vs-Ascii) * nj_app: keep transmit histories separate for different sessions; also, don't save/restore histories (only current blocks). ................................................................................ version 3.6.8 (2016-11-25) * axl_sys: add unix-windows time epoch difference to POSIX timestamps * axl_enc: critical bugfix in Base32 implementation * axl_cry: critical bugfix: we should update signature size after ECDSA_sign * axl_sys: bugfix in POSIX timed wait (absolute timespec was calculated incorrectly) * jnc_io: bugfix: on POSIX checking socket for FD_WRITE should happen AFTER connect * nj_ssh: rename io.SshEvent->io.SshEventCode (to reflect change in jnc_ssh) * jnc_ct: support for $! in formatting literals (expands to std.getLastError ().m_description) * jnc_api: critical bugfix: propagateLastError should use axl::err:getLastError, not jnc_getLastError * scripts: update scripts to use the new properties io.Socket.m_isSocketEventEnabled and io.FileStream.m_isFileStreamEventEnabled * scripts: read all incoming data before closing the socket in disconnect event handler * all the libs/frameworks added as submodules; list of submodules: axl, doxyrest, ecckey, graco, jancy, njscroll, qtpropertybrowser, minhook devmon * axl: fix: sl::String & ref::Buf should handle in-buffer copies/inserts/ appends properly (either by in-buffer shifts or by add-reffing the original buffer to keep it intact) * jnc_io: Serial::setDtr/setRts should modify property-holding values * axl_enc: UTF trie is now ICU-based * jancy: allow untyped aliases; mostly it's done to allow simple aliasing of 'dispose' method, like: alias dispose = close * jancy: typo: setas declaration had no effect * jancy: fix: io.File was not properly added to IoLib * ioninja: use _wfopen for log file on windows (otherwise it doesnt work for unicode-user-names) * ioninja: show command line output if server process finishes BEFORE transport has been established. * jancy: typo in jnc_Type.h (jnc::TypeKind_Long was mapped to int32, not to int64) * axl: support for \v in escape encoding engine * jnc_ct: multiline literals syntax change: i feel it's better to make it look like python docstrings, using triple quotation """ * jnc_ct: unified hex/octal/binary/decimal constants/literals and added support for multiline binary literals 0x""", 0o""", 0b""", 0n""" * jancy: remove int8..int64 keywords, instead use the same keyword system as in C/Java: int, char, short, long + one non-standard keyword: intptr. char -- signed 8-bit int, short -- signed 16-bit int, int -- signed 32-bit int, long -- signed 64-bit int. the rest is defined just like in stdint.h: int8_t, int16_t, etc. this way it's much easier to switch between C and Jancy (i constantly make typos myself). * jancy: remove C pseudo-inheritance via JNC_BEGIN_INHERITED_STRUCT alas, this approach doesn't work on gcc anyway; ................................................................................ version 3.6.7 (2016-07-28) * all: suppress -rdynamic by default. turns out, (at least) on Linux, CMake adds -rdynamic to the link flags, which results in dll hell on steroids * axl: remove kernel32.GetThreadId dependency (missing on Windows XP) * devmon: print extended information message when driver's signature is rejected (may happen on vanilla Windows 7 because of SHA-2 certificates) * ioninja: tx/rx test wizard * ioninja: layers should be able to filter transmission (before transmission was directed to the main plugin (head of plugin stack) * ioninja: if layer representer is unable to represent a log message, we need to fall back to the previous representer (before it worked only for log converters) * jancy: critical bugfix: lifting variables could lead to incorrect current gc shadow stack frame * ioninja: bugfix: if the 2nd (or later) plugin passed in command-line failed compilation, both ioninja and ioninja-server processes remained in limbo state. * ioninja: answering machine wizard generated a project which would not compile out-of-the-box * axl: critical bugfix: buffer overrun in axl::enc::CharCodec class * ioninja: installer should put bundled packages into user temp folder, not to INSTALLDIR; otherwise it's impossible to delete em afterwards (not with UAC on) so previsouly on all UAC machines we had winpcap.exe and tdevmon64.msi remaining after installation. the solution is to use a temp folder (SUPPORTDIR). It is generated using ProductCode, which will be new every MSI build. in this case we don't have to worry about conflicts and we can delete this folder without elevation. * ioninja: critical bugfix: installer checked tdevmonc.sys version incorrectly: ioninja uses major-minor-revision versioning, windows uses major-minor-build-revision versioning. MSI used ioninja version rather than windows version; this resulted in "...installed version appears to be older..." message all the time (even when it's not) * jancy: remove server stuff; re-organize JncApp structure * axl: extra utility methods in StringRef * axl: reverseMemMem using BoyerMooreFind * axl: ref::BufHdr methods for checking pointer being inside/outside * axl: wrapper for lua_pushvalue; support for relaying arguments to LuaStringTemplate::process * axl: major redesign: String/StringRef; Array/ArrayRef * ioninja: automatic pad-file generation ................................................................................ version 3.6.5 (2016-05-13) * ioninja: transmit history fixes: use hex-exncoding for transmit history because it seems like QT has problems with variant lists, x86 crashes inside QT list conversions (reproduced in isolated test app) * ioninja: don't add empty blocks to transmit history * ioninja: update transmit history buttons after load * jancy: important grammar update: type_name_or_expr should use expression_0, not expression; dynamic sizeof/countof/typeof should use expression, not type_name_or_expr. this way we prevent generating code for unused values and at the same type allow sizeof (struct-field) and countof (struct-field) * njscroll: typo caused only a single line to be processed (introduced when fixing reversed cache processors) * jancy: critical bugfix: after lifting a variable we need to propagate new frame map down the scope stack * axl: bugfix: after adding special handling of zero-utf32_t methods in sl::String enc::EscapeEncoding ::decode started to incorrectly parse \0 escape sequence. should use append (c, 1) instead * jancy: unary ! operator for variants * jancy: critical bugfix: continueBlock in for-loop should be set at loopBlock, not conditionBlock * cmake: sanitiser flags should also be added to CMAKE_SHARED_LINKER_FLAGS_DEBUG (for Xcode) ................................................................................ version 3.6.4 (2016-05-12) * ioninja: file transmit dialog is now aware of incomplete transmissions and does retransmissions accordingly * ioninja: persistency for transmit widgets (text, binary, file) * jancy: io_base.jncx: TransmitBufferOverflow event removed (it was not really implemented anyway, and TX buffer overflow should be checked during send/write) * jancy: io_base.jncx: TransmitBufferReady event is implemented for sockets * jancy: io_base.jncx: synchronous and asynchronous socket modes * ioninja: log all jancy exceptions in ioninja-server-system-log * jancy: cricitcal bugfix: Runtime::uninitializeThread should restore exception recovery snapshot even when thread is being uninitialized otherwise there is a potential race: exception could have left GC shadow stack in invalid state, and it could be accessed if another thread happen to perform a collection simultaneously with GcHeap::unregisterMutatorThread trying to GcHeap::waitIdleAndLock () * jancy: fix Timer::stop () from within onTimer event -- before it deadlocked * jancy: HashVariant should invert bigendians -- otherwise the same values will fall into different buckets * jancy: typo in sys.Timer.wait () -- single shot timer was satisfied immediatly * axl: bugfix: BinaryBoyerMoore should use uchar_t, not char -- equality comparisons failed because of that * axl: bugfix in FSM library: hexcode escapes were parsed incorrectly * axl: added support for hex-literals in RegExpCompiler * jancy: strstr & memmem * axl: memmem via in BinaryBoyerMooreFind * jancy: bugfix: each regexp in automaton function should FIRST set the block, THEN open scope (LLVM bugchecked with unterminated blocks if formatting literals were used within actions of automaton) ................................................................................ version 3.6.3 (2016-05-04) introduces: Tibbo Device Monitor security management; new IO Ninja sessions: Mailslot and Mailslot Monitor; inter-character delays during transmission in IO Ninja Serial session. * ioninja: setting dialog minimum size is properly calculated (looked bad on Mac and Linux KDE before); setting dialog now also installs event filter to disable mouse wheel in comboboxes and spinboxes -- otherwise it really breaks the flow of wheel scrolling and produces unwanted setting changes * axl: bugfix: Mac OSX axl_cf & axl_iok libraries had multi-CFRelease bug which occasionally crashed serial port enumerator * cmake: add sanitiser flags to CMAKE_EXE_LINKER_FLAGS as well — Xcode fails to link sanitised executables otherwise * ioninja: serial session: inter-char delay; also removed data-bits, stop-bits, parity combo-boxes from toolbar (it takes too much space) * jancy: keyword rename: thread -> threadlocal (otherwise it's too conflict-prone) * jancy: bugfix: sys.Event and sys.Lock should enter wait regions before waiting * jancy: jnc_sys library (Lock, Event, Thread, Timer) implemented * jancy: run destructors in dedicated destruct-thread (instead of running them synchronously during collection) * axl: new methods: sys::Thread::wait, sys::Thread::terminate * jancy: IPV6_HDRINCL is apparently windows-only -- use IP_HDRINCL instead on *nix * jancy: fix broken #ifdef structure (error introduced when implementing FileFlag_WriteOnly support) * axl: ifdef win-specific test code * ioninja: mailslot & mailslot monitor plugins. mailslot uses io.Mailslot from io_base.jncx to create server mailslot; mailslot monitor uses a io.MailslotMon in io_mon.jncx * devmon: --show-sd option doesn't really need KEY_WRITE access * jancy: raw sockets (almost useless on windows except for ICMP/IGMP) on *nix should be much more convenient for low-level network IO than pcap * devmon: access management monitor function is now controlled by configurable SD (security descriptor) stored in service parameters regkey; access is checked during IOCTL_DM_CONNECT; default SD allows access for Administrators only; if SD is not found in service parameters regkey or is not valid, then default SD is used. * axl: sys::win::Sid major improvements (name lookups, sid lookups, parsing etc) * axl: sl::String should handle copy, append, insert of 0 as NULL (otherwise it's very easy to misuse); if actual utf32_t 0 assign/append/insert is required, this can be achieved by specifying "count" implicitly * axl: sys::getTimestampFromTimeval * axl: ref::Buf::getSize () method * axl: timestamps in io::PCap -- essential when reading from file * devmon: keyboard & mouse service callbacks moved to tdevmonp.sys * devmon: support for IRP_MJ_CREATE_MAILSLOT monitoring * jancy: io.Mailslot class * jancy: support for write-only in io.FileStream * ioninja: Mailslot plugin * jancy: conditional operator with bitflag enums and zero * axl: io::FileFlag_WriteOnly * jancy: add isReusableAddress parameter to Socket::open () * njscroll: bugfix: reversed cache processor cause out-of-bounds access to line array ................................................................................ version 3.6.2 (2016-04-15) * ioninja: replace empty filter in Named Pipe Mon with * -- this way we will not be notified of already-opened nameless files * jancy: sl::String -> String conversion requires explicit .cc () method call * jancy: update to prev bugfix: adding GC roots in schedule launcher function is not enough, cause internalPrologue adds a gc-safe-point which will fire BEFORE adding GC roots in schedule launcher. instead, add roots in internalPrologue directly. later on, remove it, also remove no-collect call-sites and instead add ALL user-allocated data to something like call-site-gc-root-set * jancy: critical bugfix: schedule launcher functions should mark gc-root arguments (otherwise it's extremely error-prone when calling scheduled function pointers from C++). bug discovered during crash analysis in Answering Machine under debug build. listener function is scheduled in the main thread, and it makes a gc-copy of parameter block. Parameter block gets collected during allocation of closure object (debug build runs gc-collect on every allocation), then dangling pointer gets saved in the closure object * all: add debug suffix to version strings * all: replace strlen/wcslen with safe NULL-checked axl_strlen/axl_wcslen * axl: make axl::sl::StringDetails::calcLength null-ptr safe * ioninja: Plugin::transmitTo/Plugin::transmitToNext methods * jancy: toupper/tolower in jnc_std * qtpropertybrowser: added support for changing property label style (bold, italic, underlined, color) * ioninja: parametrized packet template actions * ioninja: bugfix in reading/writing of bigendian bitfields in packet template widget * ioninja: setSrcAddress/setDstAddress actions in TCP/IP packet library. * jancy: bugfix: inplace const cast destroyed original const (also, fired an assert on cast bool->int during prepareOperand) * axl: bugfix: enc::EscapeEncoding::encode should clear target string first * jancy: Type::getDeclarationString ................................................................................ version 3.6.1 (2016-04-11) * ioninja: macro variable _IONJ_CRASH_DUMP to turn on/off Windows error-mode in ioninja-server (for Vlad Yershov crashdump request) * ioninja: updated icons from leonid (pipe listener, pipe monitor, modbus analyzer) * ioninja: pipe listener and pipe monitor icons from leonid * ioninja: proper removal of plugins should also modify common-among-plugins nj::log::LogRepresenter * njscroll: sync request should not wait if io thread is already stopped/stopping * njscroll: restore previous target record file upon converter removal * njscroll: fix uint32_t/uint64_t warning on x86 * jancy: parseConstIntegerExpression should take int64_t, not intptr_t EnumConst::m_value should also be int64_t, not intptr_t added limit checks for array bounds and enum constants * jancy: 02_dialog sample is now correctly garbage-collected (-1 size trigger removed, opaque-gc-roots marked) * ioninja: remove all layers upon log destruction -- otherwise remove-layer leaves log in an invalid state (referencing desturcted and deallocated layer objects) * jancy: re-prime after destruct is just wrong -- it damages child class fields. also, need to figure out why we even need zeroing of Multicast fields after destruct. seems like a wrong and error-prone design. * ioninja: udp session has "show packet header" filter (to produce clean log when udp socket is used in one-to-one communication) * ioninja: serial session and serialmon session use "true" as default value for log filter properties * ioninja: default values when reading from doc.Storage * ioninja: modbus analyzer plugin; modbus packet library * ioninja: packet template mgr also adds fields from base types * ioninja: io_mon uses timestamp recorded by devmon (rather than current) * devmon: add timestamps to notifications. currently i provide completion timestamps only, but space is reserved for start timestamp as well. start timestamp would require pool allocation on irp start, so im not sure if it's necessary. later i can add it while staying binary-compatible. * jancy: bugfix: gc heap should check if TLS belongs to the same runtime (bug discovered during multi-layer ioninja session, each layer has its own runtime) * ioninja: serial session should get initial parity from combo box, not from property * axl: critical bugfix: io::Serial did not handle parity setting properly * ioninja: description update * cmake: add -Wno-incompatible-ms-struct warning suppression * jancy: llvm integer constant values were read incorrectly. address sanitizer helped to pin read overflow for integer constants (unconditional load of 8-bytes). changed to 1, 2, 4, 8 byte load depending on type. * ioninja: add AXL_GCC_MSC_STRUCT to 8-byte-aligned types (log.Log and doc.PluginHost) * jancy: add AXL_GCC_MSC_STRUCT to class boxes * axl: AXL_GCC_MSC_STRUCT macro for enforcing MSC-layout * axl: bool-vs-bool_t warning fix in io::win::File::setSize ................................................................................ version 3.6.0 (2016-04-04) introduces: Jancy exceptions and disposable variables (resource management) Tibbo Device Monitor FileSystem Filters; IO Ninja Named Pipe Monitor plugin; relative timestamps; actions in packet templates. * jancy: critical bugfix: switch statement could damage gc shadow stack frame maps (incorrect map after break) * ioninja: new icons for pipe monitor and stopwatch * jancy: support for multiple kinds of alignment in classboxes * devmon: don't use FSRTL per-stream contexts cause we didn't test it - npfs.sys does not support it * devmon: replace ULONGLONG m_fileId with UINT_PTR m_fileId while preserving the layout (using unions) * ioninja: menu items for setting base timestamp as current line or current time * njscroll: new design for relative timestamps relative timestamps are per-logwidget now, relative to adjustable epoch (instead of baked into log in form of epoch records) * ioninja: pipe mon should inspect FSCTL, not IOCTL (for listen/disconnect requests) * devmon: support for IRP_MJ_FILE_SYSTEM_CONTROL (otherwise pipe-mon did not see listen/disconnect requests) * ioninja: pipemon - merge fileIdChanged and other informational messages (accepted, disconnected, closed) * ioninja: log message style unification (unable-to vs cannot, error (details) vs error: details) * ioninja: pipemon improvements: file-id cache & open error handling * ioninja: pipe mon plugin * axl: make win::FileHandle::getOverlappedResult return size_t, not dword_t (very easy to misuse on amd64) * axl: escape-encoding did not encode backslash properly * ioninja: escape-encode string values * ioninja: critical bugfix: FileStream hang on close * devmon: file name filter redesign -- instead of caching *all* file-objects and storing isMatch flag, we now only cache matching file-objects also, file name checks are only done during create/create-named-pipe requests -- microsoft states that FILE_OBJECT::FileName is only valid during IRP_MJ_CREATE/IRP_MJ_CREATE_NAMED_PIPE. * devmon: HashTable_removeKey should return TRUE/FALSE depending on whether the key was found * devmon: neither-method ioctl should also use AssociatedIrp.SystemBuffer for output buffer -- if IRP_BUFFERED_IO is set * devmon: support for FSRTL stream contexts (turns out, npfs.sys does not support them anyway) * devmon: HashTable method renames (remove->removeKey; removeEntry->remove find-> findValue; findEntry -> find) * devmon: critical bugfix: with NEITHER_IO and IRP_BUFFERED_IO we have to manually copy the buffer from AssociatedIrp.SystemBuffer (which would be done by IopCompleteRequest later, during APC completion) * devmon: we should remove file-object from cache also on unsuccessful open/create requests; therefore, it makes sense to rename isClose -> isLastRequest. * devmon: bugfix: we did not add CacheEntry to cacheMapEntry->m_value (so cache was essentially useless) * devmon: bugfix: incorrect setup for dm_ConnectParams * devmon: make wildcard string comparison in lowercase * devmon: file name wildcard filter * ioninja: session-started log record (epoch timestamp) we need some uniform rule for relative timestamps in different sessions. the problem is, often times establishing connection takes time and/or multiple steps, so it's difficult to use as time epoch. suggested solution is: before even attempting any new connection operation (resolving/parsing/connecting/etc), create an epoch record "Session started" (light bulb icon) * ioninja: relative timestamps * njscroll: relative timestamps * ioninja: update data ptr range check in log representor * jancy: replace rangeLength with rangeEnd in rt::DataPtrValidator it makes runtime bounds checks shorter * ioninja: having exception in ioninja-server during sync request loop caused ioninja-app to hang. on exception we have to cancel all sync requests first. * njscroll: rename MultiRangeHilite to OverlayHilite * ioninja: increase fade timeout (so it slowly fades) * ioninja: invalid check for unsigned/bigendian in PacketTemplateMgr * ioninja: keep/fade hilite timeouts adjusted to 750/500 msec * ioninja: checksum calculations for TCP/IP stack protocol headers * njscroll: bugfix: incorrect fade animation of multi-range highlight spanning multiple lines (typo, actually) * jancy: critical bugfix: dynamic sizeof/dynamic countof returned incorrect result for incremented pointers * ioninja: packet template action methods modified parts are highlighted in red (flash, then fade) * njscroll: leave 4-bit cursor mode when writing data * jancy: separate calc-layout and compile stages; * jancy: fix attribute block assignment for declarations * njscroll: multi-range hilites; fade animation for multi-range hilites. this is crucial for the ability to hilite modified areas * axl: gui subsystem: alpha rects & animation support * jancy: disable variant operators proper implementation requires more advanced redesign than i assumed initially. for member assignments, property address operators, indexation etc special new type like TypeKind_VariantRef must be introduced. importance/implementation-difficultly ratio is too low for now variants will be used for storage only. * jancy: eleviate dbl-ptr-size limitation on type size that can be stored in Variant; it was really annoying when you couldn't store long literal in variant, now it is allowed to store arbitrary sized values (large values will be stored as references) * jancy: disable tests if jnc_app is not built * ioninja: remove no-terminal flag from UDP session -- it will allow redirecting from/to UDP sockets * jancy: test10 did not zero-terminate memcat-generated buffer (which halted address-sanitizer on Mac in printf) no need to zero-terminate memcat-buffer automatically -- printf is unsafe, anyway * jancy: no need to zero memory in StdLib::memCat * jancy: force simple GC safe points if we compile with address sanitizer hitting GC guard page does not make address sanitizer happy. so just use simple GC safe point call if we make a sanitized build * axl: add macro to check whether we compile with address sanitizer * graco: add pthread to test_cpp * jancy: typo TypeKind_Void/ValueKind_Void * jancy: add full path to units (otherwise imports may be searched in the wrong sequence) * axl: io::findFilePath should also check *firstDir before trying (otherwise it will effectively search in current dir) * jancy: all old tests are added to the test suit in the future as during debugging of jancy compiler/runtime problems, corresponding test should be added to test/test_jnc folder * jancy: invalid function sequence in std.String/std.StringBuilder * jancy: HashTable classes didnt' properly mark opaque GC roots * jancy: allow multiple typedefs for the same name (as long as type matches) * jancy: fix CallConv::getThisArgValue with respect to argument coercion (applied to struct/union methods on amd64, both Microsoft x64 and SystemV) * jancy: don't erase allocas of lifted variables until the very end (they may be already stored in Value-s) * FunctionMgr::callStaticConstructor calls LlvmIrBuilder directly (OperatorMgr complained about conversion of function-ptr to thin-data-ptr in non-unsafe region) * jancy: incorrect assert in Value::getFieldOffset * jancy: test_qt had incorrect highlighting for dynamiclib * jancy: appending char array to fmt-literal should trim zero-termination (if any) * jancy: sample of disposable pattern in jancy * jancy: incorrect assertions in exception-handling code * graco: simple console test for graco cpp back-end (will use it later for testing and further development of graco) * axl: RagelLexer should check length for -1 (and use strlen) * jancy: separate between cross-scope and cross-function landing pads. we must restore previous gc shadow stack frame on exception landing pads -- even when the function has no roots. * jancy: major redesign of exception handling and scope escapes replace multiple allocas for sjlj-frames with a single re-usable sjlj-frame array; also much cleaner implementation for setting the correct sjlj-frame via landing-pad-blocks * jancy: try expression and try statement; try expression truely catches exceptions now (instead of just locking throw-if errorcode handling like before) * jancy: remove tmp gc root scopes (add tmp roots to user scope) this potentially keeps temp objects lingering longer than they are needed, but it greatly simplifies everything * jancy: when opening user scope frame map we should also update tmp stack root frame map insert point * jancy: bugfix: tmp gc root insert location was not alwats cleared between functions * jancy: we must open tmp gc stack root map in the beginning of statement/declaration (because of phi-functions) * jancy: when opening gc shadow stack frame map we need to zero gc roots even when we roots are not re-used (because of loops) use corelib function for simplicity * jancy: everything compiles, all the tests are passed (but some ioninja sessions crash on run) * jancy: sjlj struct * axl: rename LongJmp -> Sjlj also change layout of SjljTry struct (to make it usable from jancy) * jancy: initial commit for new exception model. new tokens, new grammar, no new code generation logic - yet. * ioninja: displaying functions as clickable actions in packet template widget * axl: AXL_NO_ASAN macro * jancy: bugfix: strlen should FIRST check the range, then NULL subtle bug, discovered by GCC address sanitizer * jancy: bugfix: off-by-one bug in MulticastImpl::removeHandler * jancy: bugfix: clear friendset and dual ptr type tuple map in Namespace::clear * jancy: jnc_sys extension library skeleton * jancy: minor fix in jnc_ext_Pch.h (after axl namespace shuffle) * axl: minor namespace shuffle (mt:: moved to sys:: some mt:: members moved to sl::) * axl: remove lex-related classes from axl_core and move them to axl_lex lib * ioninja: added all standard high-speed baud rates to the serial session * jancy: attribute values; clang-specific issues to be worked out pch settings for gcc do not work out-of-the-box * ioninja: package script fixes after latest cmake changes * bulldozer renamed to graco (grammar-compiler) * jancy: disposable pattern (raii replacement) * jancy: fixes in samples/02_dialog (compiles & runs) * jancy: fixes in samples/01_export (compiles & runs) * jancy: bugfix in stack lifting for structs with constructors * jancy: re-prime after destruct (may prevent tricky bugs like the previous one) * jancy: critical: replace MulticastImpl::~MulticastImpl with Multicast::destruct. turned out, newer GCC may optimize things out of destructors! * ioninja: remove debug printfs * ioninja: make ioninja compile with or without devmon * ioninja: remove devmon inclusions from main ioninja CMakeLists.txt (move it to MSI installer project) * jancy: also apply --source-name to the first file in list * jancy: multiple files can be passed to command-line compiler jancy.exe * jancy: cmd line app runs function by default (rather than compile-only) some sanity checks for the entry point function type * ioninja: compile profiling * jancy: always place alloca's in the entry block turns out it may cause stack overflow otherwise (alloca's in looped block) * jancy: bugfix: array_suffix incorrectly parsed expressions starting with integer (because this special "shortcut" rule). shortcut rule removed * jancy: check division by zero * jancy: anydata pointers * ioninja: remove transmit pane size limitations ................................................................................ version 3.5.5 (2016-01-08) * ioninja: typo in SerialSession.onParityChanged () * njscroll: bugfix: once record is hidden, it was impossible to un-hide it (even if filter were to return true) -- hidden bit was kind of sticky. * ioninja: add an option to disable terminal pane for stream sessions (as an performance tweak; plus it might also help to isolate problems when crashes occur) * ioninja: don't emit SerialStatusLineChanged event on IOCTL_SERIAL_GET_MODEMSTATUS, insteqd keep track of the latest status line and emit event only when some line actually chanes * njscroll: critical bugfix: incorrect destruct sequence in CacheMgr * ioninja: start log server suspended when opening log file * njscroll: support for starting server in suspended state, resume later. this is important for opening ioninja logs (before representer is set) * ioninja: change shutdown sequence (stop log server IO thread in the beginning, but close record file in the very end) * njscroll: bugfix: NotifyCode_RebuildCompleted was never issued on amd64, resulting in hang-on-log-rebuild * ioninja: serial session port prop is now gui.StringProperty (without port list suggestion) * njscroll: bugfix: incorrect cursor advance when typing at the end of hex-pane * njscroll: bugfix: incorrect logic for changing console size * axl: use CLOCK_REALTIME_COARSE only if it's available (fallback to CLOCK_REALTIME otherwise -- older Linuxes don't have CLOCK_REALTIME_COARSE) * axl: make libudev optional (use find_path to determine whether libudev is installed and choose whether to build AXL wrappers for it). sys::lnx::SerialPortEnumerator simply returns a fixed list of devices if libudev is not available * axl: don't use C++ rtti typeid anymore * cmake: make GCC rtti optional and OFF by default using RTTI under GCC is really annoying. AXL used RTTI to get nicely formatted typenames, however under GCC typeid (T).name () gives a mangled name anyway. Even bigger issue is that it's impossible to derive from an interface class (with virtual functions) defined in a -fno-rtti library (and LLVM uses -fno-rtti by default, so it would require to rebuild LLVM with LLVM_REQUIRES_RTTI=1). * axl: bugfix: memory leak in cf::TypeRef::getDescription () ................................................................................ version 3.5.4 (2015-12-31) * axl: minor update re moving time functions to axl::sys namespace * axl: fsm subsystem is separated into a dedicated lib * axl: cf lib (Mac OSX Core Foundation Framework wrappers) * axl: iok lib (Mac OSX IOKit Framework wrappers) * ioninja: serial enumeration is implemented on Mac (using IOKit) * jancy: detect USB serial disconnect io.Serial implementation for POSIX * jancy: io_base.jncx should link to libudev * axl: sys::lnx::Udev classes * axl: sys::lnx::SerialPortEnumerator (via udev) * ioninja: terminal scrollback limit implemented (translates to Terminal::setHistoryLimit) * ioninja: gui.ComboBox.clear () method * ioninja: refresh com port list in both Serial and SerialMon sessions * ioninja: handling IoError in SerialSession (especially important during USB serial ports surprise removal) * ioninja: log error format change: (error-desc) -> : error-desc * njscroll: TerminalWidget history limit implemented * jancy: IoError event for various IO classes (particularly important for USB serial ports) * jancy: FileStream overlapped bugfix (potential lost of read blocks) * axl: serial port enumerator * njscroll: bugfix in TerminalWidget: terminal could crashed on invalid input due to unverified escRestoreCursor ................................................................................ version 3.5.2 (2015-12-21) * ioninja: bugfix: File->Exit caused a hang * ioninja: dock state persistency fix * ioninja: font family should not be altered if it's not set properly * jancy: first add library, then do forcedExport * jancy: forcedExport did not check for addImport result * ioninja: mac dmg installer background image update * ioninja: update nj_io_mon to reflect the latest jancy change (.jncx is now .zip) * jancy: extension lib redesign: .jncx is now a .zip archive with .jnc source files and .bin dynamic library * axl: io::getTempDir * ioninja: add /d switch when signing installer (otherwise UAC displays some random tmp file name) * devmon: MSI installer fixes (did not work with UAC on) * axl: bugfix in AccessToken::getTokenInformation * jancy: remove jncx-info -- .jncx file is going to be a .zip archive * ioninja: installer can now execute nested MSIs * axl: zip read support (library axl_zip, class axl::zip::ZipReader) * ioninja: bugfix: installer did not ask to install Device Monitor if WinPcap feature was not selected * ioninja: rephrased installer message "XX-bit version already installed" * devmon: check for admin rights before admin-sensitive operations * devmon: update removeAllPnpFilters to ignore devices with no physical name (yes, it might happen in win10) * axl: simple access token wrappers * axl: sid wrappers * ioninja: proper handling of SSH re-authentification (need to reconnect when user name changes) * ioninja: appearance settings (fonts & colors) * njscroll: bugfix: icon placement was calculated incorrectly * njscroll: also, icon placement must be updated upon font change. * njscroll: critical bugfix: fold record should nullify current line * ioninja: bugfix: Serial was using wrong settings on open (should use combo boxes, not properties) * ioninja: zip package on windows changed to 7z * ioninja: mac packages (tar & dmg) * unix tar packages now use xz compression * ioninja: mac app bundle support * jancy: bugfix: jancy.exe crashed on --help command line switch (--import-dir had missing value) * ioninja: bug fix: session menu was created too late (caused an occasional crash) * bugfix: QT toolbar buttons had background on MacOS X ................................................................................ version 3.5.1 (2015-11-24) * ioninja: session link re-implemented (via dedicated Session Link dialog) ................................................................................ version 3.5.0 (2015-11-20) introduces: Jancy dynamic extensions (.jncx); Jancy multi-line literals; new Tibbo Device Monitor service for Windows with support for early attach to PNP devices; Serial Monitor plugin uses new Tibbo Device Monitor; Jancy compiles and runs on Mac OSX; * jancy: io::Socket::open did not translate io::AddressFamily_Ip6 to AF_INET6 * jancy: io::SshChannel did not report libssh2 errors properly (should use libssh2_session_last_error) * ioninja: hex-view & plain-text icons resized to 20x20 * all: port to MaxOSX * jancy: critical bugfix: using _alloca to determine stack epoch is not safe. turned out under certain conditions the first _alloca was above subsequent _alloca's (initializeThread () also uses up some stack). so we better use ExceptionRecordSnapshot pointer on stack, which is guaranteed to be above any subsequent stack allocations. * all: add -fPIC to all libraries. on amd64 gcc refuses to build shared objects unless all used static libraries are compiled with -fPIC. so, let's add -fPIC to all static libraries (libssh2/openssl for amd64 were also rebuilt with -fPIC) * ioninja: include .jncx extensions into deb & rpm package * ioninja: don't automatically add scipts/api to import path (rather, use paths.conf -- it's more consistent and more flexible) * ioninja: if server process terminates normally, just wait (rather than abruptly cancel pending requests -- this might result in losing compile error messages) * axl: allow read from SharedMemoryTransport even after remote disconnect * ioninja: add io_base.jncx. io_pcap.jncx and io_ssh.jncx to tar package * ioninja: premature termination of ioninja-server should report some error (before it was "no error") * ioninja: . in paths.conf should refer to conf dir, not to bin dir * axl: no need to have pvoid_cast (int) specialization on gcc * all: Version.h.in -> version.h.in * ioninja: msi and zip packages include tdevmon.msi and extensions: io_base.jncx , io_pcap.jncx, io_ssh.jncx, io_pcap.jncx * devmon: disable damn OACR in wdk build * ioninja: serialmon bugfix (m_dataSize was not set) * ioninja: SrvLib was not really added to module (printf/trace were not linked properly) * ioninja: serialmon had missing JNC_BEGIN_CALL_SITE around jnc::rt::memDup also, it's necessary to protect m_eventParamArray against race conditions in enumOpaqueGcRoots (we use JNC_BEGIN_CALL_SITE for that) * sh: devmon added to build scripts * ioninja: switch from old tdevmon to new tdevmon * ioninja: error propagation in shared extension lib nj_io_mon.jncx * jancy: error propagation in shared extension libraries io_*.jncx * devmon: cmake prefix change: DM_xxx -> DEVMON_xxx * axl: err::ErrorHdr& -> err::ErrorHdr* * devmon: forced stop support (for uninstall/reinstall). in case safe stop is not possible, service is still stopped (but the driver actually remains in memory in limbo state (reboot is required) * devmon: prevent unsafe filter device stoppage even in debug build (otherwise it's difficult to test release-expected behaviour) * devmon: critical bugfix in FilterDevice_dispatchCreate: caused a BSOD for non-exclusive devices. * devmon: msi package executes tdevmon.exe to perform necessary service actions (create, start, stop etc) * all: version.h.in VERSION_FULL is now defined as MAKELONG (MAKEWORD (VERSION_REVISION, VERSION_MINOR), VERSION_MAJOR) this is to allow specifying version in a natural way (2 hex digits for each version part, e.g.: 0x10203 --> 1.2.3) * devmon: critical bugfix: m_exclusiveFileCount did not account for initial ObDereferenceObject * axl: class sys::win::Process; sys::win::syncExec () * devmon: MSI package prototype * devmon: driver signing (now that the new Tibbo code-sigining installed) * devmon: listing devices (all or devices of specified class) * devmon: getting device info * devmon: installing/removing PNP filters using physical device name or device class * devmon: removing PNP filters for all devices * axl: support for enumerators in sys::win::DeviceInfo * devmon: starting and stopping core service should also update service start type * devmon: stats for PNP beacon device * devmon: proper propagation of DeviceType and DeviceCharacteristics in both FilterDevice and PnpDevice. * devmon: major update: support for early pnp device attach via pnp filter driver tdevmonp.sys * axl: setupapi wrappers (sys::win::DeviceInfo) * axl: better overlapped IO support in io::win::File/io::win::FileHandle * devmon: application displays driver version, description and build time * devmon: all the binary data of read/write/ioctl requests is displayed in hex-view * devmon: supports for driver description, build time and asynchronous reads in client library * devmon: build driver with cmake (invokes WDK build as custom command) * devmon: handle IRP_MJ_INTERNAL_DEVICE_CONTROL * devmon: don't copy extra bytes besides the header on ntm_NotifyFlag_InsufficientBuffer * devmon: provide information on driver description and build time * axl: mt::win::WaitableTimer * devmon: initial release of the new device monitor (driver, library and application) * cmake: WDK support * ioninja: old njdm (device monitor) is removed * axl: sys::win::Service/ServiceMgr wrappers for SCM * jancy: multi-line literals * enumeration of source files in extension libraries. * axl: mt::DynamicLibrary method renames (load -> open; release -> close) * axl: add pvoid_cast specialization for int (othersize it was impossible to use pvoid_cast (NULL) on 64-bit systems) * ioninja: remove lib-prefix from jancy extension io_mon.jncx * jancy: remove lib-prefix from jancy extensions io_base, io_pcap, io_ssh * axl: remove extern "C" from AXL_EXPORT macro (must specify it explicitly) * ioninja: link jnc.stdLib explicitly * jancy: stdLib must be linked explicitly due to the link-order importance * jancy: llvm tag decoration bugfix. * ioninja: migration to the new jancy extension model * jancy: jnc::rt::RuntimeRef -> jnc::rt::Runtime (opaque in shared extensions) * jancy: jnc2cpp.pl is made public * jancy: minor bugfixes in jnc_io_base jnc sources. * jancy: major extension framework redesign; now suitable for shared libraries as well. * axl: rtl->sl (bad naming, besides, rtl is now used in jancy lib, and there it really means run-time-support-lib) * jancy: extension framework is somewhat functional * axl: bugfix in rtl::StringSlice::isEmpty * axl: GUID_Xxx -> g_xxxGuid * axl: minor improvements in rtl::StringCache * axl: rtl::BoxList::copy () * axl: rtl::StringSlice ................................................................................ version 3.4.11 (2015-09-25) * ioninja: save-session and load-session are functional * njscroll: better to make renameRecordFile copy the file (on Windows it's not possible to remove FILE_FLAG_DELETE_ON_CLOSE flag unless using undocumented methods) * bugfix: io::MappedFile::write did not update m_fileSize. * ioninja: remove unlink for CmdLineFlag_TmpLogFile (now it's done automatically in njs::Server * njscroll: support for io::FileFlag_DeleteOnClose (also on POSIX) * njscroll: extra file flags argument for rename record file method * njscroll: support for layer removal * support for record file renaming * njscroll: njs::LayerMgr::removeLayer () * axl: io.renameFile (), io::copyFile (), io::deleteFile () * axl: io::MappedFile::write method (uses io::File::writeAt) ................................................................................ version 3.4.10 (2015-09-23) * ioninja: serial session: all serial settings are available via toolbar combo boxes * ioninja: pass plugin and log settings via temporary files during document creation * njscroll: additional BinDataConfig argument in njs::Server::create () * ioninja: bugfix: gui::ComboBox::setCurrentIndex did not update value field m_currentIndex * axl: io.TemporaryFile (on windows uses FileFlag_DeleteOnClose, on POSIX deletes file in destructor) * ioninja: setting for gc-safe-point method (write-barrier vs simple-call) * jancy: support for simple gc-safe-points via call (rather than write barrier). write barrier safe points are not currently possible on win64 because SEH 64 relies on being able to walk the call stack, and it doesnt work with llvm-jitted functions * jancy: critical bugfix in linux garbage collector * jancy: system V on amd64 incorrectly passed 128-bit structures * ioninja: support for redirecting of dbg::trace to ioninja-server-log * axl: support for redirection of dbg::trace to a file * axl: io::SharedMemoryTransport uses io::Mapping directly (without the overhead of io::MappedFile) ................................................................................ version 3.4.9 (2015-09-16) * jancy: critical bugfix: crash on windows 10 due to different base address of ntdll.dll (__chkstk was too far, more than 4GB away from the generated code, therefore relative call was not possible) ................................................................................ version 3.4.8 (2015-09-14) introduces: new Jancy pointer safety model; new Jancy garbage collector implementation; support for retro-colorization in Ninja Scroll engine; Syntax Highlighter plugin wizard in IO Ninja; new setting UI in IO Ninja * ioninja: apply method for Jancy Settings page * ioninja: set acceleration=true for large-value spin-boxes * jancy: setters for stack size limit, gc heap size trigger and gc period size trigger * ioninja: Colorizer plugin wizard is now called Syntax Highlighter plugin wizard; by default it generates a full C-language syntax highlighter including keywords, comments, and literals. * jancy: bugfix: accessing autoget property field of parent class did not work * jancy: improvement: allow non-closure-aware function ptr casts * jancy: jnc.AutomatonFunc typedef * jancy: function ptr type should update its signature on calc-layout. * jancy: minor bugfix in qt_test syntax highlighters * jancy: remove pseudo-chars ^/$ from jnc.Recognizer * axl: remove pseudo-chars ^/$ from FSM (was not an efficient implementation anyway) * ioninja: serial mon session now has filters for serial setting changes, serial control line changes, serial status line changes. * ioninja: show session settings by default when a session is open * jancy: JNC_END_CALL_SITE should only leave no collect region if no exception happened (otherwise gc shadow stack might contain invalid entries which will lead to crash) * ioninja: colorizer plugin wizard * ioninja: bugfix: protocol analyzer wizard used incorrect automaton declaration * njscroll: retro-colorize should redraw all the affected lines (previously only the last line was redrawn) * ioninja: colorization of protocol headers in network sniffer * ioninja: retro-colorize support * jancy: support for line continuation sequences in regexp literals * axl: support for line continuation sequences in FSM compiler * njscroll: bugfix: retro-colorize should drop CacheBinLineFlag_FinalAttrArrayReady * jancy: bugfixes in jnc.Recognizer: updating currentOffset should synchronously update lexemeOffset and currentOffset * jancy: changing lexemeLengthLimit didn't update lexeme buffer accordingly * njscroll: retro-colorization support * njscroll: bugfix: addPartBuffer did not properly update longest line length if lines were unmerged * njscroll: RepresenterTarget::writeRecord for strings. * ioninja: toolbar button binary data view switch * ioninja: critical bugfix: call-function-in-worker-thread req entry must be removed INSIDE jancy call site -- otherwise FunctionPtr might be deleted during gc-mark * ioninja: rebuild log progress dialog * ioninja: critical bugfix in all io-related classes: waiting functions should be enclosed in gc-wait regions (deadlocks otherwise) * ioninja: bugfixes in dialog classes construction * njscroll: rebuild log progress notifications * njscroll: remove half-impltemented colorizer architecture * jancy: JANCY_CALL_SITE_FINALLY * axl: AXL_MT_LONG_JMP_FINALLY * ioninja: bump up the size of setting dialog * ioninja: under kubuntu page area of setting dialog was too small to accomodate the minimum size of some pages * jancy: bugfixes in jnc::callFunction/jnc::callFunctionPtr * axl: remove mulDiv64 -- (bad performance and non-amd64 compatible); use simpler and faster approach with cast-to-double. * ioninja: jancy settings page is functional * ioninja: gc trigger sizes/stack limit size are being passed in command line and in setJancySettings msg * ioninja: gc stats is being collected by ioninja-server and displayed on jancy settings page. * jancy: gc alloc size trigger * jancy: gc stats is available. * njscroll: use axl::g::getPreciseTimestamp for log record timestamps and for profiling * axl: critical bugfix re timestamps on windows: now there are axl::g::getTimestamp () using GetSystemTimeAsFileTime and axl::g::getPreciseTimestamp () using QPC * ioninja: no need to unparent property widget in ~SettingDlg * ioninja: major update: new settings dialog * ioninja: all objects created by layers now consolidated and can be removed all together * ioninja: remove-layer and remove-all-layers are functional * jancy: markOpaqueGcRoots func should be a member function rather than static * jancy: improvement/simplification in weak function/property pointers: weak mask is gone -- only 'this' arg can be made weak * jancy: no weakening-operator is required now * jancy: scheduled function pointers are properly weak-traced now. * ioninja: better design for main thread scheduler (as dedicated opaque class) * jancy: add TypeFlag_GcRoot if class type has mark opaque gc roots func * ioninja: major redesign: each plugin has its own runtime (now it's possible to remove plugins one-by-one) * jancy: jnc::construct/jnc::destruct moved to axl * jancy: rename JNC_BEGIN/JNC_END to JNC_BEGIN_CALL_SITE/JNC_END_CALL_SITE * jancy: JNC_BEGIN_CALL_SITE_NO_COLLECT for creating non-collectible call sites * jancy: support for direct function calls (when already inside call site) * axl: memory allocation and ref-counting model redesign: * axl: factories are gone (were poorly designed anyway) * axl: support for easy switching of base allocator * axl: support for constructor arguments (!) * axl: switch from explicit destruct function pointer to virtual destructor in RefCount * axl: decrease of size for child and in-place RefCount objects * ioninja: minor api redesign: use opaque class fields instead of pointers wherever possible (before it was impossible to instantiate opaque classes as variables or fields) * ioninja: remove FileDlg, LoginDlg etc dialogs from plugin host (should be created by plugins as needed) * jancy: bugfix: reactor layout could not be calculated due to the bug in lookupIdentifierType -- variable or field always yielded DataRef (for classes should be ClassRef) * jancy: ApiBase --> ApiBaseTailPadding ; this is to allow arguments in base constructors. * ioninja: don't allocate log on gc-heap (it's static anyway) * jancy: critical bugfix: new (p) T () -> new (p) T * jancy: prevent zero-initializing already-primed headers * jancy: allocate large structs/unions/arrays directly on the gc-heap * jancy: minor bugfix: in multi-declarator declarations with implicit storage specifier, the first deduced storage specifier was used for all the other declarators (without re-evaluation) * ioninja: bugfixes and updates re io object on POSIX * jancy: bugfixes and updates re GC on POSIX * axl: mt.atomic functions for size_t on POSIX * ioninja: minor bugfix in io.Ssh: 64-bit size_t <-> int cast * ioninja: prevent unnecessary setError in Ssh::write () * ioninja: major cleanup of api prime/construct calls * jancy: ApiClassBox is gone; ClassBox does not implicitly call constructor * ioninja: major update of all the API re latest jancy change in opaque classes design * jancy: major opaque class redesign: allow deriving from opaque classes, allocation as variables or fields etc -- basically, opaque classes are now just like normal classes but with opaque padding. 'operator new' is gone. * axl: minor StringCache bugfixes * jancy: bugfix: variable declaration for non-creatable types caused a crash * ioninja: bugfix: exception in log representer caused in 'result' being used without initialization * ioninja: critical bugfix: jancy exception in plugin constructor lead to deadlock (mutator thread has been not unregistered) * jancy: callFunction uses new axl-mt-long-jmp-try * jancy: JNC_END_EX returns status (so JNC_CATCH can be in many cases omitted) * jancy: more strict checks on ExceptionRecoverySnapshot. * axl: long-jmp-try can now return status via AXL_MT_END_LONG_JMP_TRY_EX (so AXL_MT_LONG_JMP_CATCH can be in many cases omitted) * jancy: exception recovery snapshots * jancy: handle destructor exceptions individually. * ioninja: remove debug printf's from io_PCapDeviceUi.jnc * jancy: memory leak in jnc.StringHashTable and jnc.VariantHashTable * ioninja: bugfix: no collect regions in Serial::fireSerialEvent and PCap::firePCapEvent * jancy: major update: multicasts & snapshots now use gc heap only instead of malloc/free (in-destructors) * ioninja: bugfix: serial log had skipped trailing argument in formatting literal * jancy: disallow argument skipping in formatting literals * jancy: formatting literal improvements: remove special gc handling (use fat pointer instead) * jancy: check for unused formatting literal arguments * axl: minor fix re io.UsbDevice on amd64 * jancy: optimized method addRootArray for adding continual regions of roots * ioninja: major update of all api implementation classes re latest jancy changes * jancy: majort redesign of garbage collector and pointer-related structures * axl: minor update of mem-tracker report format * jancy: allow nested JNC_BEGIN-s (keep thread init count in tls) * ioninja: all the plugins compile * jancy: markStackGcRoot accepts target scope * jancy: StdFunction_CreateDataPtrValidator * jancy: jnc.memDup * jancy: LeanDataPtrValidator from class ptr * jancy: create reactor bindsite variables in entry block * ioninja: minor serial log colorization fix * axl: io.UsbDevice cleanup of 64-bit incompatibilities ................................................................................ version 3.4.7 (2015-09-07) * axl: undo broken QPC implementation of timestamps ................................................................................ version 3.4.6 (2015-07-16) * ioninja: devmon32 caused crash on installation -- replaced with the stable one from ioninja-2.3.5 * ioninja: minor serial log colorization fix * axl: io.UsbDevice cleanup of 64-bit incompatibilities * changelog: force re-generation of changelog.txt every time * axl: err::SystemErrorCode_ObjectNameNotFound->ENOINT * axl: minor bugfix in hex-encoding * jancy: support for binary numbers and binary-literals (token is still called HexLiteral -- it yields the same results in all regards) * axl: improvements in libusb support; extended test for libusb enumeration * axl: minor update in ref::Buf (use pointers instead of references) * jancy: bugfix: formatting literals did not handle int64/uint64 properly * axl: high-resolution timestamps on windows (GetSystemFileAsFileTime proved to be way imprecise) ................................................................................ version 3.4.5 (2015-06-23) * ioninja: bugfixes in scripts (re moving network adapter UI from API to common) * ioninja: updates re IP-defragmentation in all pcap-based plugins (Network Sniffer, TCP Flow Mon, UDP Flow Mon) * jancy: bugfix: deleteUnreachableBlocks used llvm::Value::hasOneUse () while it should have used llvm::Value::use_empty () * jancy: bugfix: logical or/and should promote reachability flag BEFORE compiling the second operand. * jancy: bugfix: struct/union member functions did not work (due to incorrect lean this-pointer) * jancy: bugfix: locally declared named types did not work (due to missing calc-layout) * ioninja: tcp-flow-mon, udp-flow-mon plugin updates * ioninja: hide "add new layer" button (not relevant now) * ioninja: gui.ComboBox crashed on addEditTextToHistory with null-string * ioninja: io.PCap.openFile * ioninja: ip4 header fragmentation fields * axl: io::parseSocketAddress with empty string now yields zero'ed ip4 * axl: io::PCap::openFile * jancy: jnc.List class * jancy: jnc.StringHashTable, jnc.VariantHashTable * jancy: bigendian bitfield support * ioninja: context menus for hex-edit & terminal widgets * bugfix in context menu (mouse-drag was not released) * njscroll: improvements in undo/redo: sanity checks, clear/setData/writeData registers with transaction history, caret update post setData/clear * njscroll: undo/redo in hex-edit widget * njscroll: select word on double-click * axl: don't disply 0.0.0.0 when formatting IPv4 address (display port only) * ioninja: Displaying update error message in About dialog in a single line. * ioninja: Displaying error description in About dialog when update fails. ................................................................................ version 3.4.4 (2015-06-08) * ioninja: bugfix: test code in MainWindow::onHelpAbout caused a crash * ioninja: update session to reflect recent jancy change re dynamic sizeof/dynamic countof * ioninja: serial session improvements * ioninja: gui.ComboBox.adjustSizeToContents method * jancy: dynamic sizeof/dynamic countof now require pointers rather than references * ioninja: serial: only report when current value is different from the previously reported one * jancy: bugfix: variantRelationalOperator did not work * njscroll: timestamp visibility setting (never, smart, verbose) * njscroll: add CursorFlag_EnsureVisible when setting cursor on mouse move (very useful when selecting data in big log so it's possible to jerk mouse around to scroll) * axl: force english for windows error description (otherwise it causes problems with chinese windows and njscroll log engine) * ioninja: change log update, website update * ioninja: rollback defaults of auto-convert single lf/single cr to lf/cr pair to FALSE (just wasted almost an hour trying to figure out why mc doesn't work in ssh session) * njscroll: bugfix: xterm saved cursor and caret attr should be part of screen buffer * njscroll: bugfix: invalid bin line size was used in cache processors (bug introduced with recent changes in unicode drawing) ................................................................................ version 3.4.3 (2015-06-01) introduces: TCP Flow Monitor, UDP Flow Monitor, proper display of unicode characters spanning across line borders, member operator for jancy enums * axl: release 5.3.7 * jancy: release 1.5.5 * ioninja: rollback defaults of auto-convert single lf/single cr to lf/cr pair to FALSE * njscroll: bugfix: xterm saved cursor and caret attr should be part of screen buffer * njscroll: bugfix: invalid bin line size was used in cache processors (bug introduced with recent changes in unicode drawing) * jancy: adjust function tag of std functions memcpy, memset, strlen etc as to avoid mapping conflicts * jancy: use zeroInitialize rather than store for stack variables * jancy: add memset, memcpy, memmove to global mapping (required by llvm intrinsics) * jancy: bugfix: getMemberOperatorResultType () and memberOperator () should use OpFlag_KeepEnum when preparing operand (now that we have enum member operators for simplified enum value checking) * jancy: remove explicit cast requirement for integer truncations (it's really annoying) * ioninja: tcp-flow-mon explicit cast size_t->uint32_t * jancy: bugfix: using enum constants from within the same enum caused calc-layout recursion error * jancy: bugfix: deleteUnreachableBlocks might have lead to situation when block is marked unreachable but still had uses. changed to a fixed-point computation to delete unreachable blocks in proper order * jancy: llvm.memcpy, llvm.memset, llvm.memmove * zero-initialize large variables with llvm.memset (rather than store) * jancy: member operator for enums (allows skip writing fully-qualifed member names when you need to check the value of a enum variable/field) * ioninja: tcp flow monitor/udp flow monitor icons from leo * ioninja: change the size of buffer back to 1600 (apparently, windows does not reassemble IP-fragmented datagrams, so it doesn't really matter) * added minhook library and test (for api hooking in ioninja) * cmake: create_flag_setting improvements: modify both C and C++ flags * automatically detect configuration-independent/configuration-specific flags. * ioninja: change min/max packet size limits to 0..65536 * ioninja: tcp flow mon session: support for out-of-order TCP segments * ioninja: udp session: read buffer should be 65535 * udp flow mon sessions: read buffer should be 1600 (no IP fragmentation supported yet) * ioninja: bugfix: sniffer session did not handle invalid UDP/TCP sizes properly * ethernet frame buffer was too small (should be 1600) * ioninja: filter combo in sniffer * bugfix in tcp flow mon * ioninja: re-arrange plugin groups (UDP is now client, TCP proxy is now server) * axl: io::SockAddr::parse also accepts single port string (results in IPv4 with zero-ed address) * ioninja: UDP flow monitor * axl: bugfix: rtl::String::insertSpace did not work properly on libc (memcpy vs memmove) * ioninja: TCP flow monitor (uses pcap to build clean TCP data flow log) * axl: SockAddr utils for equality checking and filter matching * ioninja: clean-up of test code in ioninja-server * ioninja: support for job objects (turns out to be unreliable and have *a lot* of corner cases) * support for waiting for parent object, so any of the following will terminate server process: 1) disconnect message or 2) shared-memory transport disconnect or 3) parent process finished * axl: mt::win::JobObject wrapper * ioninja: prevent windows crash & send report dialog when ioninja-server crashes * ioninja: remove windows-vs-linux closeKind configuration (always use SO_LINGER) * axl: test_mini simple socket test re graceful close/reset * ioninja: bugfix: doc.Storage incorrectly saved empty strings (as '(null)' values) * ioninja: --root flag was ignored * ioninja: sniffer session should use device name if description is null * jancy: strdup should return null for empty strings * ioninja: bugfix: socket property disconnectKind (graceful/reset) did not work * ioninja: disconnect message (rather than waiting for stdin to be closed) reading stdin interferes with the new design of gdb debugging * ioninja: major redesign of debugger interface: instead of initially staring ioninja-server in suspended state to give gdb a chance to attach and resume it later, we now start gdb directly. communication with gdb is supposed to be done via TCP port passed in a command line (e.g. -d=1234). * njscroll: pending cursor validation (when we set cursor into an un-cached area) * njscroll: don't scroll to bottom on resize unless the vertical scroll bar is maxed (before it was cursor based, which was really annoying) * njscroll: bugfix in CacheBinHexLine::addBinData: now we need to manually check if the line is full (and if yes, then try to fill extra utf bytes) * njscroll: let BinLine decide the size of accepted chunk (bin hex lines did that outside of addBinData, which now is wrong cause we want to save extra bytes past end-of-line for better UTF display) * njscroll: save up to 3 extra bytes in bin-hex lines (may help with proper UTF display) * ioninja: add changelog to windows packages zip/msi * ioninja: changelog * jancy: major bugfix: const 64-bit integer arithmetics used 32-bit operations (potentially resulting in garbage in high bits of results) * axl/njscroll: update in unicode bintext painting: use buffer past end-of-line (if available) to correctly display characters which are encoded acroll line boundaries * ioninja: CMakeLists.txt had qt rpath-link added twice (removed old one) * cmake: remove rpath when compiling release unix binaries * that also requires manually adding rpath-link (otherwise linker failes * to build qt-dependent binaries) * axl: warning suppression for gcc64 * ioninja: debian package depends field * debian dependency calc perl script ................................................................................ version 3.4.2 (2015-05-13) * don't try to display utf combining marks in hex-view and hex-editor (it turns into a mess anyways) * bugfix: merge threshold didnt work as expected (milliseconds were not converted to 100-nanoseconds) * bugfixes re suspended/resume states under linux * bugfix: removing packet template crashed ninja * 3 extra std log record codes (plain text, hyper text, bin) * msvc redistributables were not included in zip packages * jancy: critical bugfix in checkVariantScopeLevel re TypeFlag_StructRet ................................................................................ version 3.4.1 (2015-05-06) * jancy: critical bugfix: gc root variables should be zero-initialized even if they have initializer (cause initializer can induce gc-run) * jancy: critical bugfix: variant should have TypeFlag_StructRet (otherwise it results in invalid argument/retval ABI) ................................................................................ version 3.4.0 (2015-05-05) introduces: IPv6 support, named regexps and standard character classes in automatons, variants, dynamic library access, SSH session re-authentication, x-term changeable terminal console size * bugfix: scripts did not compile under x64 due to size_t->int cast (made cast explicit) * jancy: critical bugfix in gc (due to typo destructGuards of other threads were not marked) * jancy: null default for automatonFunc in jnc.Recognizer constructor * remove extra space from labels like "Address: " (now toolbar injects space widgets) * minor updates/bugfixes in jnc.Recognizer * jancy: bugfix: member automatons produced compile error (did not take 'this' into account) * axl bugfix: RegExpCompiler skipped repeat-char after ')' * jancy: recognizer samples updates * jancy: update re new regexp engine: AutomatonResult type (to distinguish between error and stop) * support for named regexp definitions in automatons * major regexp engine improvements: support for ^ $ anchors * support for std char classes \w \W \s \S \d \D \h \H * tcp plugin, ssh plugin -- minor updates in log record logic * size hints for toolbar combo boxes * forced spacings before toolbar labels and combo boxes * network adapter properties update in all plugins * AF_INET and AF_INET6 constants are exported into script namespaces (AF_INET6 is platform-dependent) * jancy: support for export of constants into script namespace * change 'debug-info' switch to 'debug' * jancy: bugfix: debug info for variant type * IPv6 support * IPv6 support updates: socket fixes, host name resolving, network adapter enumeration * adjust property grid drop-down width using QComboBox::sizeHint * linux fixes re latest socket changes * struct SockAddr as union of sockaddr_in and sockaddr_in6 * replace all out args of type sockaddr* with SockAddr* (preparation for IPv6 support in ninja) * network adapter enumeration * comply with WSAAddressToStringA on windows (or with inet_ntop otherwise) * IPv6 parsing and formatting linux fixes * IPv6 address parsing and formatting * jancy: check variant scope levels * throw long-jmp exceptions if library function is called from within non-throwing scope * check pointer should either soft-throw or long-jmp-throw (ignore try operators) * full-clear runtime in Runtime::destroy (caused crashes) * mt.win.Library fixes * remove duplicate strings in dynamic library error messages * jnc.Library uses axl.DynamicLibrary, works on Windows and POSIX * mt.DynamicLibrary class * update tar-building scripts to remove '.' * jancy: major update: unsafe functions, unsafe regions, dynamic libraries * jancy: declarator syntax update (so it's possible to use 'throws' and 'const' modifiers in any sequence) * SSH channel improvements: re-authenticate, console size change handling * jancy: std function jnc.throw () * jancy: bugfix: cast from variant did not handle null variant * gui.LoginDlg, gui.MessageDlg * remove 'object' (use 'class' instead) and 'object ' (use 'variant' instead) * jancy: variant relational operator (at runtime) * jancy: allow casts non-POD* --> POD thin* * jancy: make variants, structs, unions and arrays nullable (assigning null means zero-initialize) ................................................................................ version 3.3.3 (2015-03-31) * bugfix: crash during binary transmit page destruction due to incorrect destruct order * enforce min and max sizes in HexEditWidget::setData * bugfix: unexpected jump to the next location when opening find dialog with something selected in log * bugfix: memory leak fix in Array::reserve * find dialog improvements * support for copying into string/array rather than clipboard * bugfix in property factory (properties were not deleted) * re-organize packet template widget * only update properties within modification range * hex edit widget dataChanged event now contains info about modified range * jancy: variant support in formatting literals * jancy: variant type basic functionality implemented * jancy: remove jnc_VariantType.h * typo in copy/paste/undo/redo shortcut handling * bugfix: packages did not include packets.conf ................................................................................ version 3.3.2 (2015-03-16) * jancy: increase default stack limit (turned out jancy dialog sample failed with stack overflow on amd64) * axl: support for catchless long-jmp try * jancy: c++ exceptions replaced with long_jmp-based exceptions * axl: long_jmp-based exceptions (jancy: hard-throws do not work well with c++ exceptions) * cmake: fix CMP0043 warnings on newer CMake versions * jancy: critical bugfix in pointer arithmetics: increment of fat pointer was broken after pointer struct unification * jancy: remove thin-vs-fat varieties of check-ptr functions (doesn't work well under x64) * support for post-compile LLVM IR emission * jancy: namespace stack should also contain scope field (otherwise evaluateAlias nullifies current scope -- it opens namespace, in which alias was declared) * jancy: should also null-check class pointers before accessing vtable * jancy: property ptr vtable loads should add PtrTypeFlag_Safe to function pointers * jancy: all vtable entries should have PtrTypeFlag_Safe * jancy: also null-check thin function and property ptrs * jancy: null ptr checks use soft-throws if possible * jancy: function ptr and property ptr structs are the same for all pointers (cast is done at pointer access) * jancy: data ptr range checks use soft-throws if possible * jancy: data pointer struct is now the same for all pointers (cast is done at pointer access rather than pointer check) * jancy: prevent throw loops (catch label marks scope as non-catching) ................................................................................ version 3.3.1 (2015-03-06) * important bugfixes in automaton functions * IDE plugin wizard updates * support for hex-code escape sequence in regexp \x00 * DFA should use accept context of the NFA state with the lowest ID ................................................................................ version 3.3.0 (2015-03-04) introduces: automatons and recognizers, IDE wizards, import facilities * recognizers and automaton functions * IDE plugin wizards updates re automaton functions * IDE session plugin wizard is functional * bugfix: API slot conflicts * doc.Plugin.transmitString method * log.Writer should be allocated on heap, not on stack * jancy: std functions: strcat, strdup, memdup * bugfix: conflict between std api slots vs user api slots * jancy: bugfix: member automatons did not account for 'this' argument * jancy: minor update in comments in recognizer sample * jancy: test sequence fix * jancy: minor gcc fixes * jancy: bugfix in CallConv64::createArgVariables () * jancy: automaton samples (plus minor bugfixes) * axl: err::getError --> err::getLastError * axl: rtl::AutoPtrArray update * jancy: on linux gc-stratgy requires stack module before JITting * jancy: eof handling in recognizers * jancy: major update: automaton functions * axl: fsm library (finite state machines) * minor updates in protocol analyzer wizard * log.attachConverter accepts extra representerFunc argument * jancy: allow implicit casts void* to char* and to uchar_t* * minor updates in scripts and wizards * jancy: memchr, strchr is changed to return char* * Cast_Array should have OpFlag_LoadArrayRef (for now, to be removed later) * jancy: const-cast for arrays * allow implicit casts between integer types of the same size * udp socket compass button * jancy: minor updates in stdFunction.jnc and stdTypes.jnc * jancy: update in jnc2cpp.pl: support for namespaces so io ninja IDE can properly add standard items * plugin default settings should also be used when creating session by plugin file path * udp session: auto-switch remote address setting * paths.conf update: user-plugin-dir * debug trace support * fixes regarding failed add-layer * udp session: uses std log record codes TX & RX * updates re latest jancy changes * layer IDE wizards (answering machine and protocol analyzer) are finally functional * jancy: remove current thread module dependencies * operator new takes extra type* parameter * extra std functions for memory ops * bugfixes in pointer diff operator * jancy: mark heap allocations in new operator as temp stack roots * bugfixes regarding plugin open process * msi fixes in Add/Remove Programs entries * bugfix in PacketPad.jnc creation * minor gcc vararg fix * all plugins use import facilities to reduce compilation time * log representer is now a function rather than class (to enforce its stateless nature) * jancy: optional types and functions in API declarations * minor modifications in imports implementation * jancy: import declaration * setData checks for minDataSize * bugfix in CMakeLists.txt tests * improved logic for backspace from hex0 + cursor4bit * major redesign of packet templates * HexEditWidget bugfix in replaceSelection * HexEditWidget bugfixes in setDataSizeLimits * bugfixes and improvements in HexEditWidget * website -- introduction update * jancy: website markdown files * website markdown files * mascot update * minor update on wizard files * sessions and layers dirs are merged together (pugins dir) * wizards dir added (3 wizards: session, protocol analyzer layer, answering machine layer) * wizards.conf added * geeky ninja icon * package cleanup before the release * jancy: linux fixes * JNC_GC_ROOT_ENUMERATOR -> JNC_OPAQUE_CLASS * intptr->int warnings suppressed * jancy: dialog sample (properties, events, reactive programming) * jancy: gc bugfixes * preConstructor -> preconstructor * opaque class setup must specify actual size * export sample ................................................................................ version 3.2.5 (2014-12-31) * linux requires special handling of Ctrl+ * jancy: linux bugfix re multicast destructors * TerminalWidget should kill selection on screen buffer change * bugfix in TerminalScreenBuffer::getLine () * new defaults for ssh channel * pty: xterm * address: sdf.org:22 * user: new * bugfix in TerminalWidget (TerminalLine* could be referred from both m_history and m_console) * bugfix: paint always painted all the way down till the end of console * copy/paste support in terminal * axl: ecc-key: set utf8 for console output * xterm mouse support * application cursor key mode support in TerminalWidget * xterm support * jancy: bugfix: jnc.FmtLiteral must be a root (even though it has no fat pointers) * support for connect cancellation in SSH channel * intercept ctrl+ keys in terminal widget (optional) * exceptions in plugin constructor were not handled properly (main app remained waiting) * jancy: 'const' post-declarator modifier is made part of declarator_suffix (so 'throws' and 'const' can be specified in any order * changelog: show all comits after the latest release also * jancy: construction sequence change: field constructors -> field initializers -> property constructors -> preconstructor -> constructor (before field initializers were called as part of a preconstructor) * update ioninja api to re-used IfaceHdr of basetype (applies to Property->IntProperty and Plugin->Session/Layer) * jancy: major structural refactoring: * common code from DerivableType and Property moved to NamedTypeBlock * static and member destructors are called in reverse order of corresponding constructors * property constructors and field initializers implementation * class re-uses IfaceHdr from the first parent * jancy: VTable -> vtable * property getDefaultConstructor () removed -- properties don't have overloaded constructors anyway * jancy: property constructors, destructors, field initializers -- work in simple cases (still need to refine) * opaque class GC root enumerator placeholders * axl: CPCap -> PCap * jancy: allocate memory for formatting literals from GC heap * jancy: gc-mark opaque classes, multicasts and multicast snapshots * axl: bugfix: hexcode buffer must be at least 9 chars long * axl: bugfix in escape encoding -- must force null-termination of a hex code * axl: escape encoding now supports unicode characters \u \U * if pattern is incremental then start from the last found location * axl: bugfix: incremental boyer-moore find should use offset in case of empty pattern * axl: boyer-moore find should actually succeed on empty pattern * JNC_API_XXX --> JNC_XXX * jancy: JNC_API_XXX --> JNC_XXX * hexedit should paste text as hex if the cursor is in hex area * bugfix: copy from bintext line * jancy: prevent adding fields and virtual methods to extension namespaces (before it was possible to cheat by using in-property firleds or virtuals) * jancy: reactor recursion protection * refinement of comments in samples * jancy: sample pack comment updates by dima * jancy: minor sample updates * jancy: bugfix: remove TokenKind_Signed * jancy: gcc callconv fixes * jancy: major sample pack update * jancy: major redesign of extension namespaces * using declaration implemented * jancy: bugfix: arg_pass1 did not add parentheses into token list * jancy: bugfix: bitflag enum did not accept '0' (cause of recent integer const type change unsigned vs signed) * jancy: support for escape sequences in single-quoted literals * jancy: more bugfixes regarding try/catch/finally * jancy: bugfixes regarding try/catch/finally * jancy: jnc.setPosixError, jnc.setStringError std functions * jancy: bugfix: getInt32TypeKind_u/getInt64TypeKind_u should actually return signed types (otherwise all the integer constants are unsigned) * jancy: support for 'bindingof' without parentheses in 'onevent' statment * 'extend' -> 'extension' (for symmetry: extend is a verb, namespace is a noun) * jancy: allow casts from non-POD* to POD const* * jancy: update of the last commit * jancy: bugfix: tls object header was not constructed properly * variable scope level is NOT variabl->getScope ()->getLevel () (for example, local statics, or local tls variables) * jancy: assert statements implemented * changelog: linux fixes * changelog: created perl utility to generate changelog out of git commits * scripts updated to use dynamic sizeof instead of jnc.getDataPtrSpan * jancy: jnc.getDataPtrSpan is removed (not needed now when we have dynamic sizeof) * scripts brought to conformance with the latest jancy changes (i.e. dynamic casts and static new) * jancy: bugfix: getHeapVariableObjHdr caused a crash (cause of null type) * removed static new/stack new operators from jancy samples * jancy: prevent dynamic casts const->non-const * prevent casts non-pod -> void* * support for dynamic casts of arrays * jancy: variable object headers * dynamic casts * dynamic sizeof * dynamic countof * jancy: scripts brought to conformance with latest jancy grammar changes * jancy: grammar bugfix (now that we have dynamic sizeof/countof/typeof, type_name_or_expr must return Value, not Type*) * jancy: unmanaged heap -> gone * jancy: pragma pack -> gone * jancy: pack -> alignment * jancy: fenum -> bitflag enum * jancy: cenum -> exposed enum * jancy: dconst -> readonly * jancy: devent -> gone * jancy: dtypeof -> dynamic typeof * dynamic sizeof * dynamic countof * dynamic cast ................................................................................ version 3.2.3 (2014-11-17) * handle LIBSSH2_ERROR_EGAIN in SshChannel::write () * jancy: ragel highlighters included headers from src dir (which required adding src dir to includes) * cursor selection in ASCII area did not work properly * axl: MappedFile bugfix: under POSIX mapping view beyond end-of-file caused bus error ................................................................................ version 3.2.2 (2014-11-14) * post-fold caret, selection and hilite validation and update * sessions use ansi-escape sequences for hyper text * bugfix: don't update CachePage::m_indexLeaf.m_lineCount int CachePage::insertRemoveLines (already done in CacheMgr::onFoldRecordCompleted) * validate and update caret pos after fold completed * axl: HyperText -- actually, it should ignore \n: line-handling should be done before feeding data to HyperText * axl: bugfixes and updates * axl: AnsiAttrParser and HyperText bugfixes and updates * bugfix: length used before initialization * log widget validate cursor pos takes selAnchor into account * hex-edit widget validate cursor pos takes selAnchor into account * axl:fast widget scrolling support (instead of full redraw) * corner button bug fixes and adaptation for fast scrolling * axl:ansi attributes * hyper text uses ansi attributes instead of <> tags * forced limit in JncRepresenterTarget::addPart () -- Sniffer plugin occasionally crashed on bad packets * workaround: corner button was drawn on black background on linux * axl: bugfix: std palette did not mask out alpha channel * bugfix: widget should stop caret timer on destruction * axl: QT monospace font force integer metrics * QT std palette * axl: TextPaint update * LogWidget/HexEditWidget/Terminal widget update to use new TextPaint * cmake: include_directories should not be part of master CMakeLists.txt files * activationFinished signal should use int status (moc doesn't do well with nested typedefs) ................................................................................ version 3.2.1 (2014-11-10) * axl: default font flags should be 0, not -1 * axl: major gui subsystem redesign * axl: ecc-key -- linux update * nj_keygen is removed (no need anymore) * axl: ecc-key utility for generating license keys & product keys * LicenseMgr update -- rely on axl::cry::EcKey * support for 2 license kinds and 3 keys (personal, workgroup licenses + activation key) * axl: ecc product keys implemented * axl: open-ssl wrappers (axl::cry) * all codecs moved to axl::enc namespace * base32 encoding implemented ................................................................................ version 3.2.0 (2014-11-03) introduces: Linux packages, Java naming convention, log search functionality, auto-update, option to sudo plugins under Linux * update-database change (split by os-cpu) * shell script updates (rpmbuild and debpkg should be sudone) * axl: gcc fixups in BoyerMooreFind * signed-unsigned comparison warning fix * reverse find implemented * LogWidget::processCache -- support for reverse line order (if startLine > lastLine) * bugfix: mouse wheel delta can actually be less than 120 * so need to accumulate deltas * find improvements * switch to new boyer-moore find * text-find and binary-find * case-sensitive and whole-word-only features are functional * (find-prev not yet) * hex-edit data-changed notification * find uses new boyer-moore instead of boyer-moore horspool * jancy: tests->test * axl: boyer-moore bugfixes * tests->test * axl: boyer-moore enhancements: * whole-word support * pass offset in incremental-find * find and reverse-find return same offsets * axl: full boyer-moore (good-skip/bad-skip) * axl: horspool variation (bad-skip only) * axl: utf support in boyer-moore find * axl: case-insensitive find (unicode-aware, but no special cases) * axl: reverse boyer-moore find * axl: incremental boyer-moorefind * cmake: configure_file_w_permissions doesn't try to detect whether the full dst path was specified or not (use CMAKE_CURRENT_BINARY_DIR for output) * package scripts bugfixes * auto-update file format redesign (to support multiple installation types: msi, zip, deb, rpm, tar) * bugfix in AniLabelWidget * AniLabelWidget optimization attempt. CPU load showed 5% on Release build when About dialog was shown. ridiculous! i supposed switching from QTimer to QBasicTimer, caching rich text and drawing only the visible part of it would speed up animation. turns out, no. the solution happened to be drawing background by hand, cpu load dropped to reasonable values after that * typo in transportFlags * hide run-as-root without layout distortion (change QHBoxLayout->QWidget container) * run as root via sudo * delete session temporary files * also, fixups regarding closing of the transport when terminating on * errors * axl: attach/detach file handles (io.File, io.MappedFile, io.SharedMemoryTransport) * axl: FileFlag_DeleteOnClose calls unlink () on linux * desktop file for deb & rpm packages * remove tmp files generated as a result of erroneous linux conf files * jancy: don't create imports when parsing std function declarations * linux fixes * linux packages * package update (use specialized paths-*.cmake, without unnecessary libs/tools) * zip package * msi package update (do not expand paths.conf on installation * keep conf files in ./conf dir) * detect conf dir * expand std paths in paths.conf * axl: getExeFilePath (), getExeFileDir () * zip packages for publishing * jancy: std function declarations are moved to jnc file just like std types * internal types are hidden from public jnc namespace * support for jnc.String/jnc.StringRef/jnc.ConstBuffer/jnc.ConstBufferRef/jnc.BufferRef in formatting literals * StdLib.getErrorDescription is moved to dedcated type jnc.Error (this way property m_description is not mapped unless type jnc.Error is really used) * jancy: return error if formatting literal doesn't know how to format a value * jancy: automatically cast from Derivable& to Derivable* * jancy: operator cdecl ... () is added to String and StringRef * jancy: operator ... / operator cdecl ... (to specify how to pass types in vararg functions) * jancy: typo in jnc_String.jnc * jancy: struct constructor cast should be prevented not via type map, but rather via simple bool flag -- multistep conversions should be disallowed anyway * jancy: String/StringRef/StringBuilder * jancy: ConstBuffer/ConstBufferRef/BufferRef/Buffer std types draft * jancy: support for skipping the first function overload * jancy: prevent infinite recursion when trying struct constructor casts * jancy: bugfix: formatting literal was losing the ending portion * jancy: formatting literal improvements (support for indexed-based argument injection) * jancy: function_suffix_rslv to allow C++-style constructors * jancy: setas declaration -- for specifying setter argument types * jancy: getArgCastKind for Value arrays * if CastOp::cast (): if constCast fails, fall back to llvmCast (essential for constructor-casts) * CastOp_Struct uses constructor-casts as a last-resort cast * jancy: std typedefs (size_t, uint_t etc) * jnc.String/StringRef draft * update re latest jancy changes * jancy: api overload mapping redesing * api macros for mapping struct and union members * jancy: overloaded function support via JNC_API_XXX macros * enum ApiSlotId -> enum ApiSlot * axl: replace ListLink with Entry in ListData -- this way it's easier to debug (can walk and inspect the whole list in locals/watch) * jancy: std type definitions are moved to perl-processed jancy source files (instead of manually assembling struct types by hand) * sh: test projects shell script, testing is made part of full rebuild * jancy: decided to remove throw conditions (it's never really needed * but it requires not-so-elegant syntax, a dedicated keyword and tricky error propagation logic) * sh: small updates in shell script output * cmake: disable linker warning 4221 (no public symbols in a source file) * update for the last fix: turns out, the style is not automatically deleted but it is altered upon during (and maybe after) setStyle (). therefore, we have to use the new instance every time and also make sure it doesn't linger indefinitely * bugfix: plugin list widget style should be dynamically created rather than static * ensure all stylesheets use namespaces * don't pass full source file list in command line, instead pass a single plugin file * switching read-only mode set 2px-wide caret (must be 1px) * axl: CMakeLists.txt update * axl: remove length limit in dbg::trace * axl: make gcc happy about names from base template type * axl: rename crc16 (used in Packetizer) to "checksum16" (cause it was not crc16) * remove redundant ...Kind suffixes from enum names (after java-style conversion) * keygen: signed/unsigned comparison warning * axl: Iterator redesign: instead of storing ListLink pointer, it's better to store Entry pointer -- this way it's easier to see contents of iterator in the debugger * linux fixes * qtWidget -> QtWidget * keygen: fixed size_t -> int warnings on amd64 builds * java naming convention * jancy: java naming convention * bulldozer: java naming convention * axl: type names brought to java naming convention * axl: variables, fields, functions brought to java naming convention * keygen: during linux port attempt it stopped compiling under windows restore for now, refactor/port later * windows shell scripts update -- detect CPU by default * don't build keygen on linux yet * keygen doesn't compile on linux and needs minor porting. but it has to be refactored anyway, so postpone that for now * linux shell script updates * calculate build times * halt build process on any error * use native processor architecture by default * accept processor aliases (x86/i386, amd64/x86_64/x64) * bugfix: shell script rebuild-all calculated elapsed time incorrectly * wix installer fix (incorrect redist dir) * shell script updates: add calc-time-diff script to calculate build times * switch to lowercase (most examples on the web use lowercase) * wix installer updates * shell scripts no longer copies stuff into files/ dir before invoking heat/candle/light (instead, it uses original files directly) * INSTALLDIR layout has been redesigned a little bit: executables, redistributables and conf files go into INSTALLDIR/bin * uninstall shortcut is created * remove 'scripts' folder from the project (no more CMakeLists.txt in 'scripts') originally it was useful to edit plugin and api .jnc files from Visual Studio. now it's much more convenient to do with IO Ninja IDE ................................................................................ version 3.1.2 (2014-09-23) * trim user name and product key * disabling activation bugfixes * activation disabled * sample packet-templates.jnc is put into scripts/samples * nj_keygen app * sh: build for windows no longer requires WIX in the PATH * installer build scripts re-engineered * installers for linux: deb, rpm, tar * bulldozer: bugfix: CppParserUtils.lua should be prepended with '/' * axl: bugfix: incorrect posix flags in CFile::Open * cmake: Paths.cmake.template had QT_DLL_DIR missing * bulldozer: frame for c++ parser is split into 2 files (CppParser.cpp.in and CppParser.h.in) * lua support code is put into CppParserUtils.lua * bulldozer.cmake is updated to support generation of both *.llk.cpp and *.llk.h files in one go * sh: update: clean everything first, then build * cmake: bugfixes: added @ONLY for generated cmake modules * sh: update of linux set-variables shell script * jancy: update: on 64-bit there are no divdi3/moddi3 * jancy: add mappings for divdi3/udivdi3/moddi3/umoddi3 * cmake: bugfix: generated files in cmake/latest had TARGET_CPU already substituted, need to use @ONLY * debug trace in PaintLineRange * sitara transfer plugin * bugfix: serial session port-open did not use current values of Baud and FlowControl combos * crc16 * typo in CMakeLists.txt * bugfix: filteransmitpage -- m_progressDlg was not nullified (caused a crash) * git: remove set-variables.template, remove set-variables from gitignore * git: remove cmake/latest/*.* from history * git: typo in gitignore * cmake: generated cmake files from the latest build are placed in cmake/latest * cmake:sh: cmake and build shell script updates for linux * cmake: sh: major refactoring of cmake and shell scripts * linux fixes * cmake: updates for linux * axl: libusb support ................................................................................ version 3.1.1 (2014-08-28) * fold record-related bugfixes: bindata config was not passed and follow-up foldrecord line indices were not re-indexed properly * log file save / load works now (before there were access issues) * remove io::EFileFlag_ReadOnly from record file open -- otherwise cannot fold * add line feed \n to record, index node and merge point signatures * axl: shared memory transport: add line feed \n to message signature * tmp-log-file command line switch -- adds io::EFileFlag_DeleteOnClose when opening log file * axl: shared memory transport uses io::EFileFlag_DeleteOnClose when creating transport file * axl: add FILE_SHARE_DELETE flag to file open flags -- important when using io::EFileFlag_DeleteOnClose * bugfix: not all the property grid calls were properly tunneled * jancy: always create alloca in entry block * otherwise it causes crash due to garbled address of __chkstk on windows 8 * actually, it's an LLVM bug (incorrect sign-extension of address during lowering -- most likely they store address in 'int'), but the easy workaround turns out to be simply move allocas to entry block * bulldozer: version info, cmdline parsing via axl facilities * udp session: save last port in combo box history * git: remove set-variables.bat from history * jancy: bugfix: atoi was declared incorrectly * sh: to avoid confusion, renamed 'build' folders to 'sh' -- 'build' is commonly used as build location (='prj' in our case) * one week worth of refactoring ................................................................................ version 3.1.0 (2014-08-15) initial public release of IO Ninja 3 (accumulation of 3.0.x improvements) * showing error message when trying to install 32-Bit and 64-Bit versions at the same time * axl: bugfix: incorrect cast in return from -1 * include tag suffix and cpu suffix in version string * axl: dword_t -> size_t (otherwise it's very error-prone on win64) * version info resources * visualizing state about linked or layered sessions through MDI tab icons * copying redistributables from the folder named after TARGET_CPU specified in set-variables.bat ................................................................................ version 3.0.21 (2014-08-13) * added null-ptr checks to keyboard handlers (crashed on empty log) * removed old stdin-stdout transport (use shared memory transport) * use stdin in ioninja-server to control life time (once stdin is disconnected, terminate ioninja-server process) * remove m_menuAction from Document (not really necessary) * each session has its own menu (before menu items from different sesssion accumulated in stdMenu (SessionMenu)) * added icon for the executable on windows * document didn't remove widget from status bar on deactivation * cmake: copy_qt_dll_files incorrectly created Debug or Release file (instead of the directory) which, in turn, prevented subsequent builds * jancy: on MSVC it is illegal to create zero-length array, so CApiBaseT was adjusted * bugfix: scroll buttons in MDI's tab bar displayed transparent * changed it to white background with a solid border matching rest of the tabs * a couple of gcc warning-related fixes * bulldozer: a couple of gcc warning-related fixes * compiles and runs on linux-x86_64 -- finally * jancy: x86_64 System V ABI support * cmake: gcc setting for no-invalid-offsetof warning * jancy: gcc tail-padding issue workaround * axl: shared memory transport for POSIX * shrinking tabs in MDI's tab bar as much as possible before showing scroll buttons * 64-bit installer * 64-bit installer can be run by setting TARGET_CPU flag in set-variables.bat to 'amd64' * minor bugfixes in jancy files * tests for running ioninja-server on all official plugins * -x switch for passing plugin project file instead of full list of jancy source files * axl: CParserT::ParseFile * axl: CString 'operator +' for utf32_t (was missing) * axl: CMapping and CSimpleMappedFile updates * bugfix: struct LineAttr was incorrectly declared (layout inconsistency ninja scroll C++ vs jancy) * jancy: bugfix: incorrect struct aligned size calculation * jancy: remove SRet attribute from Microsoft x64 calling convention (LLVM JIT crashes if sret is present) * remove compile warnings * jancy: bugfixes re amd64 * jancy: bugfix: calling convention was not properly assigned to user functions * jancy: thiscall support * default calling convention for methods is still cdecl (unless explicitly specified as 'thiscall') * axl: rtl::CAutoPtrArrayT * jancy: Microsoft x64 calling convention implemented. IO Ninja runs under amd64 * copy QT dlls * cmake: copy QT dlls for ioninja and JncQtTest * bugfixes: uint_t -> size_t (important on amd64) * cmake: macro for copying QT dlls -- important when 2 builds of QT (both x86 & amd64) present on a computer * axl: bugfix: register format should be uintptr_t, not uint_t * jancy: bugfix: formatting literal for char array reference ................................................................................ version 3.0.19 (2014-07-28) * replace app-srv communications via stdin/stdout with shared memory transport, results in dramatic performance improvement under windows * axl: shared memory transport * simple mapped file * cross-platform mapping object * forgot to uncomment subsystem linker pragma * save log as text progress dialog, start session by specifying either session name, or session plugin path * jancy: when adding methods to a class, no need to overwrite tags (Parser should do it) * wrong QT file filter (extensions should be space-separated) * StatusBar.m_pane should be a const property * jancy: function tagging critucal temp-fix (operator-new -> operator_new) * show line/col/offset status panes for log documents * different cache page size defaults * cache process cancellation * find progress, find completion notifications * find dialog progress bar & cancellation support ................................................................................ version 3.0.18 (2014-07-18) * bugfix: installer did not find correct files for updating WinPcap and Serial Monitor ................................................................................ version 3.0.17 (2014-07-17) * re-engineer action UI in all sessions: replace pairs of action (like Open/Close, Connect/Disconnect etc) with single action with toggled semantic * added 2 properties to gui.Action: m_text & m_icon ................................................................................ version 3.0.16 (2014-07-16) * mark inactive MDI tabs which have unseen log records * status panes for the rest of plugins (file, pipe listener, serial monitor, network sniffer, tcp listener, tcp proxy udp socket) * status panes for Serial plugin * jancy: reactor starter should also bind to bind-sites in skipped branches of operators &&, ||, ? * currently, && and || are replaced with full-circuit evaluation via bitwise & and | * obviously, this is not a 100% clean solution * in the future on potentially skipped bind-sites should be flagged (if skipped in starter, then delay-bind) * jancy: bugfix: reactors potentially stored invalid event pointer in bindsite * status panes for SSH Channel plugin * status panes for Listener Socket plugin * status bar API * status panes for Connection Socket plugin * jancy: bugfix: static fields/variables with initializers were checked incorrectly * jancy: static field initialization * find dialog Cancel button connection * make a compilation-time define for choosing whether or not to show cache miss using different background color * NetworkSniffer Session: apply capture filter when pcap is open * improvemnts in copy from log (use the application/njs-bin) format in addition to text * edit commands support for HexEditWidget * Copy Bin as Jancy: Hex-literal command * improvements in paste operation in hex editor * copy/paste in hex editor * registry formats support (hex editor should copy both textual representation, which depends on cursor pos AND the actual binary data) * save log as text fixes: * \r\n on windows * keep IsTimestampVisible setting * keep IsIconVisible setting * keep IsOffsetVisible setting * different background for hexedit hex and ascii panes * read only mode for hex edit * new logo hexedit -- always have 1 line * even when there is no data * linux fixes * build scripts: mkdir --> mkdir -p * sniffer session: incorrect replace (new io.PCapDeviceDescList --> * io.createPCapDeviceDescList) * io_Socket updates re disconnect event * io_SocketAddress compatibility fixes ................................................................................ version 3.0.15 (2014-07-02) * sign binaries (including installer MSI) * jancy: change default throw conditions: retval < 0 for signed integers * retval == -1 for unsigned integers * update scripts as they don't need explicit cast literal->char const* in conditional expressions * jancy: array ref -> data ptr conversion is not performed by default anymore, instead, now it's an optional flag to PrepareOperand and PrepareOperandType. adjust GetConditionalOperatorResult: works for literals and keeps references if true and false types match ................................................................................ version 3.0.14 (2014-07-02) * TCP close kind property, TCP disconnect kind flags in SocketEvents, added 'from' information to Connect log record, added 'close-kind' and 'initiator' information to Disconnect log record ................................................................................ version 3.0.13 (2014-07-01) * msi installer now includes qico.dll -- turns out QT needs a plugin for .ico support * remove record size limit to decide whether to buffer or not (it causes empty "stripes"). instead, always buffer during incremental update (non-rebuild). also, enforce check for missing parts in cache mgr (instead of assert) * don't report disconnect if GetIncomingDataSize () is zero -- there is a race with the main thread, so 0 is actually normal * jancy: bitwise & operator yields fenum if one of the operands is fenum ................................................................................ version 3.0.11 (2014-06-23) * jancy: replace no_specifier -> wo_specifier in *.llk files * bulldozer: generation of "clean" EBNF presentation of input grammar * all the plugins now create opaque classes with 'new operator' (instead of 'createXxx' functions) * jancy: operator new for opaque classes * small bugfixes after linux port * api.conf and plugins.conf are made platform-dependent * sh: update set-variables.template for linux * git: remove set-variables from git history * git: update gitignore to include build/linux/set-variables * bugfixes: sockets, SSH * posix socket used incorrect error code for asynchronous connect * SSH channel was reporting incorrect event after TCP connect completed * include --debug flag for ioninja-server process on linux if NDEBUG flag is not set * sh: build scripts for linux * axl: remove ui_mainwindow.h * bugfixes: linux version is now functional * axl:gcc-compliance: project compiles on linux * jancy: bugfix: tmp gc roots were unconditionally nullified * nullify gc-root happened post-statement regardless of whether the block * is reachable or not. this caused an abort in MCJIT cause code was * injected past basic-block terminator (return statement). the solution is * to only nullify tmp gc rool list if the block is reachable * bugfix: installer did not overwrite all files when used in repair mode * bugfix: installer did not configure paths.conf due to missing rights * using a deferred custom action for gaining elevated rights. Must also use a further custom action for setting custom data for the deferred custom action * bugfix: corner button displayed too small ................................................................................ version 3.0.11 (2014-06-12) * new icon resources * bugfix: bin text map was calculated incorrectly if the data block ended in-between multi-unit code point.. * bugfix: bin text map for the lines terminated with '\n' * typo in SnifferLog_Ip.jnc * document activate/deactivate improvements: use mdiArea->activeSubWindow instead of event argument * save current transmit page * removed merged record count tracking from index mgr (not releavant) * bugfixes: hiding messages did not properly work before. remove binary record count, merged record count and foldable record count from index leaf (not really relevant) * instead add hidden record count (important for caching). binary and foldable record count must still be tracked in index mgr (to determine whether changing bin-data-config should finalize the current leaf or not) * bugfix: serial log filter used incorrect flag variable for status line change check * bugfix: CIndexMgr incorrectly determined whether the first part was merged or not (relied on PartIdx, which gets reset every time parts are not merged). replace it with IsFirstPart flag * packet template editor dialog -- remove icon from the caption * bugfix: io::CSerial should force-set settings after open (otherwise baudRate, flowControl and other properties get out-of-sync, and, more importantly, read interval might be invalid (serial.read might wait for the whole buffer to fill) * bugfixes: SSH & TCP connection should close socket when remote side closes connection (otherwise there is a possible syncId mix up with SocketAddressResolver) * replace ProgressDlg and QFileDlg members with pointers -- this way plugin startup dialog for the documents shows up faster and response better (most likely, QFileDlg constructors initiates some jobs in background?) * bulldozer: lookahead statement syntax change ................................................................................ version 3.0.10 (2014-06-09) * file transmit is functional * resources update by leo: plugin icons, file icons, installer splash & banner ................................................................................ version 3.0.9 (2014-06-03) * bugfix: unexpected mdi tab switch after transmit pane tab switch (findNextPrevChild issue) * bring back file transmit page * proxy session icon * improvements of focus handling (set focus to contents of tab widget on current tab change) * small icons for drop down menus / tabs * big icons update from leo * small icons * new icons * log widget, terminal widget & hex edit widget now provide events for handling cursor pos change * ioninja main window displays line, col, offset, range in status bar * bugfix: incremental find should be reset when lines are not merged * basic find functionality is implemented (no case-insensitive/whole-words yet) * MRU list implemented * save-log-as-text is functional * log widget keyboard handling fixes * new layer dialog brought to consistency (vs new session dialog style) * log copy/save-bin-to-file is functional * corrected edit button title in binary transmit settings * cache processing prototypes (find, copy, copy-bin-as, save-bin-as-file, save-log-as-text) * plugin groups * remove CCopyMgr, CFindMgr -- they will be part of CLogWidget * add dropdown for New Layer toolbar command * bugfix: MDI area's tab bar and sub window was drawn too far to the right * implemented group functionality for New Session dialog's list view (including test groups) * displaying corner button in packet template property grid over header * bugfix: shortcut for 'New Session' action didn't work * modified MDI tab close icons * bugfix: MDI area's tab bar was drawn to far to the right * made selected MDI tab and MDI pane look connected by removing tab border * revert back TX & RX codes (not really important -- just so it matches with previously saved logs) * major update of logging engine * fold flags are now stored in record file rather than index file -- this allows for persistency of fold state across log file rebuilds/reopens * record code no longer needs to have mergeable flags: parts are what's merged, not records * instead of log filter which generates secondary log we now have 2 options: 1) simple filter just hides unwanted messages (using fold flag field) and does NOT generate secondary log and 2) converter, which does generate secondary log. when only simple filter is attached, fold state persist across log file rebuilds * bugfix: 'New Session' action in menu also contained drop down list * separated 'New Session' action in two actions one containing drop down list used in toolbar and one without used in standard menu * drop down list in New Session action with list of all session providers * using rectangular MDI tabs with custom close icon * jancy: bugfix: COperatorMgr::GetArgCastKind didn't take default arguments into account * added corner button to packet template property grid * displaying Packet Template Editor when clicked * qtpropertybrowser: Added method for access to tree widget * bugfix: Packet Template Editor wasn't centered relative to the settings dialog * displaying message in About dialog when update check failed * corrected name in About dialog's team info label ................................................................................ version 3.0.8 (2014-05-22) * bugfix: corner button not positioned correctly in terminal widget * this was due to sizeHint() being called after updatePos() resulting in an incorrect corner button size * UI/API prototype for copy/find * save/load log is functional * ClearCache -> Rebuild (cause it's not just clear cache but also clear index) * clear part buffer after UpdateIndex (cause subsequent SetBinDataConfig might re-send what's left in the buffer) * set representer guid on log server create * axl: TGuid::Parse * added readme and license files to installer resources * bugfix: installer couldn't be built because of old reference to session-providers.conf instead of plugins.conf * save -> save session, save session as, save log as * save log implemented * forgot to uncomment subsystem/entry pragma in main.cpp * refactoring of license management UI * animated label widget with team info in AboutDlg * AniLabelWidget (for running line on team info) * implemented license registration and activation (server-side response handling not implemented yet) * listener is now a function* rather than class* -- this allows easy scheduling (we normally want to invoke listener in main thread) * listener sensitivity check (live-records-only vs all-records) * jancy: instead of marking as gc-collectible, add a tmp gc-root for every heap-new (marking as gc-collectible still does not invoke gcEnter/gcLeave if no roots are found). besides, gc-roots are still necessary for temporary closure objects * jancy: mark every function invoking gcAllocate as gc-collectible * jancy: scheduler had 'safe' modifier in function pointer argument -- better take it out (not that necessary, and developers (me included) will constantly bump into 'override signature mismatch' * transmit history maintans 2 current blocks (text & binary) * changing tabs in setting dlg also changes to the corresponding tab in document/transmit widget * bugfix: fold record did not adjust cache page state line idx * bugfix: if fold record line count delta is non-null, invalidation should range all the way to the bottom * bugfix: foldable records calculated line count incorrectly (did not nullify m_pCurrentFoldableRecord) * sniffer interface list now includes IP address and excludes device name (which is real ugly) * generic file session: distinguish between file stream kinds (disk files, pipes, serial devices) * allow writing past EOF for disk files * add clear function for disk files * New Layer action is placed in File Menu and main-toolbar * document-specific actions are disabled if there is no active document * xmodem receive is functional * xmodem transmit is functional * gui.FileDlg, gui.ProgressDlg, io.MappedFile * Link Sessions functionality is now accessible via Setting Dialog rather than session tab context menu * filtering layers are functional (PPP sample) * *.njssp -> *.njplg * jancy: bugfix: POD*->void* should always be implicit * bugfix: pointer difference for void* caused division-by-zero * jancy: bugfix: static new class variables were primed twice, writing data out of allocated range * jancy: bugfix: pointer difference operator did not work * properties for plugins are grouped * already-added layer plugins are disabled * adding layers feature is functional! * ioninja-server compiles and jits additional layers * jancy: CModule - CRuntime pair redesign (move LlvmExecutionEngine to CModule to allow multiple modules to work with the single runtime) -- in preparation for incremental compilation & jitting (adding layers in ioninja-server) * minor design update in AboutDlg check-for-updates * setting dlg: rebuild log layout -> rebuild log widget (to simplify hiding it completely when m_document == NULL) * namespace prefix only for API files * plain names for folders (api, sessions, layers) * currently there is no reason to have namespace prefixes for the rest of plugin files, so as to avoid unnecessary questions i decided to simplify everything to a more conventional and less cryptic scheme * plugin manamenent cleanup * plugin management and api further updates * document model update (2 kinds of plugins: sessions and protocols) * log filtering is functional, serial session provider uses filters to show/hide groups of notification messages * jancy: bugfix: empty condition in for stmt caused a crash on JIT (compiler was creating an invalid basic block graph) * bugfix: API function 'io.createSerialPortList' accidentally removed * added Device Monitor feature to installer * added buttons for adding and removing filters in session settings dialog ................................................................................ version 3.0.7 (2014-04-26) * remove all the serial settings & lines (baud, flowcontrol, dtr, rts etc), from io.SerialMon -- instead of 'state' semantics, they should be represented by 'event' semantics. bugfix in io.SerialLogRepresenter: status line change parts were not merged properly * bugfix: incorrect line range update on tail-leaf-update * nj_srv should close .conf files when its done reading the configuration * serial mon plugin logs all the events (using SerialLogRecordCode / SerialLogRepresenter for most of the records) * jancy: re-fix the previous commits. todo: really clean this shit up * jancy: bugfix: the previous commit has broken certain scenarios (e.g when unnamed union is half way to the field, union-coord was added twice) * jancy: bugfix: resolve import types did not work properly if class had import base * bugfix: nested unnamed structs & unions did not work correctly in some cases (and i suspect still not 100% correct -- double check!) * jancy: creating member closures moved from CParser -> COperatorMgr * when using qualified name for virtual functions don't lookup vtable (get LlvmValue of the parent class) * making use of 'io.createSerialPortList' and 'Document.createSerialPortProperty' in Serial session provider * added io.createSerialPortList and Document.createSerialPortProperty to API * jancy: allow using basetype in functions other than constructors: as type specifiers and as namespaces * background change of combo boxes if local port or target address changed while listening in TCP Proxy session provider * jancy: don't erase unreachable blocks if they were added to function (potentially causes assert failures in LLVM: value is used. most likely this assert is not relevant: block is used from unreachable block, but still) * serial mon plugin base functionality (using tdevmon service) * axl: legacy packetizer (compatible with previous versions of AXL, and tdevmon in particular) * background change of local port combo box in UDP session provider if port changed during open state * added 'gui.ComboBox.m_backgroundColor ' property to API * using address resolver for target address in TCP Proxy session provider * using address resolver for remote address in UDP session provider * refactored UDP session provider to share same code style as the other session providers * out of class definitions * use of State enum * use of ActionId enum * cleaned up Serial session provider * bugfix: io.CSerial had incorrect order of autoget fields * bugfix: io.CSerial did not update autoget fields on serial setting change * jancy: bugfix: getLastError () did not copy the TError struct (previous commit actually had incorrect description: actually it implements host name resolver and proper error handling in SSH channel session) * jancy: bugfix: getLastError () did not copy the TError struct * axl: remove CString::c () (cast to char*) * CString::cc () never returns NULL * socket address resolver implemented * TCP Connection session uses this resolver, allowing specifying address by name * displaying 'Run IO Ninja 3' checkbox in installer only if color depth of screen is 32 bit. this is to avoid that the checkbox otherwise overlays the background (alpha bitmap) with its own control background * io.Socket properties: m_closeKind, m_isNagleEnabled * use these properties in TcpConnection session provider * added default packet template file to installer * creating default packet templates files if none exists * reading and writing packet template file in user's documents directory * only reloading packet template and clearing hex editor when template was modified * bugfix: current data in binary transmit widget not always kept when swichting sessions * bugfix in CHexEditWidget::CalcCursorPos () -- incorrect column calculation * bugfix: hex editor data wasn't applied to array properties in packet template widget ................................................................................ version 3.0.6 (2014-04-21) * loading hex editor data into packet template property widget when transmitting * bugfix: unlink sessions menu item was not connected properly * session linking is implemented * serverProcess_readyRead () slot: replace loop with a single readAll () -- if ioninja-server produces data faster than log widget can update index and cache pages, the loop never exits, and requires extra event processing (to keep ninja responsive) * renamed packet template file (packet_templates.jnc -> packet-templates.jnc) * axl: critical bugfix: MappedFile on Windows sometimes failed View () if aligned end-of-view fell behind mapped-size * loading proper default values in packet template property widget * displaying bit fields with a bit count of 1 as a bool property within packet template widget * highlighting selected packet template property in hex editor * qtpropertybrowser: changed first column's tooltip (property name) with property tooltip * bugfix: pressing Enter in packet template widget caused the transmit action to be triggered * bugfix: packet template file not created when trying to edit a new template file * link sessions menus * support for hexadecimal input for bit fields in packet template widget * removed signed/unsigned checks in packet template widget * warning about errors in packet template editor * include part-buffer in update-tail-leaf notification. this way log-widget can update its cache without the need of sending represnet-request to the log-server * indicating if packet templates are available or not in settings dialog * bugfix: current packet template wasn't selected in settings dialog * removed bit count from bit field properties in packet template widget * renamed "transmit template" to "packet template" * optimized mask creation for bit field modifications in packet template widget * hexedit: highlight on write capability * modified echos in installer build script ................................................................................ version 3.0.5 (2014-04-17) * LogSettingPage: disable 'apply-to-all-log' if log widget is NULL * prompt for unsaved changes before closing transmit template editor * remove main window search loop * sticky log (scroll to bottom when vscroll is maxed) * scroll-to-bottom corner button in log widget * added button for checking for updates in About dialog * jancy: restore original order of resolve-orphans and resolve-import types * templatetransmitmanager -> templatetransmitmgr * jancy: bugfix: DeleteUnreachableBlock caused a dangling pointer write in case last current block was unreachable block * CModule support for calc-layout without actual compilation * bugfix: update check not working correctly * cmake: PCH for MSVC is placed in $(Configuration) subfolder * jancy: bugfix: ensure 8 bytes for const buffer (GetLlvmConst unconditionally reads 8 bytes) ................................................................................ version 3.0.4 (2014-04-16) * catch exceptions in ioninja-server and report them to the application * prompt before closing unsaved changes in transmit template editor * removal of undesired delimiter above TransmitWidget tab implemented transmit templates * jancy: bugfix: bit-field offset calculation during CalcLayout * isTransmitEnabled property -- to disable 'Send' button when there is no connection * bugfix: delete all the page requests from the map when the page is dropped * fold record support in new log engine design * SSH channel session: log messages update (merge all the 'connecting' messages together, so there are no inter-line delimiters) * bugfixes in logging engine * index mgr: finalize leaf on mergable record * cache mgr: set index tail leaf bin data config * bin text line: bin text map calculation and code point decoder state * highlight unprintable chars setting * axl: bugfix in CCharCodec::LoadState/SaveState * bugfixes and updates (mostly re bin-text mode) * new log engine design updates * major redesign of logging engine and protocol (initial commit) * qtpropertybrowser: header column labels can be set via constructor * fixed "mismatched component reference" warning when building installer * sh: build-projects.bat saves and restores current dir (otherwise rebuild-all fails to build installer) * build and installer scripts cleanup * adjusted corner button fade time * added "Run IO Ninja" to exit dialog of installer * msi installer actions DLL project is generated by CMake and is built together with other ioninja binaries * formatted batch scripts * removed directory "icons" from installer * added folder 'redist' to gitignore * WIX installer updates * generate .rl.cpp & .llk.h in output folder to keep source folder clean * WIX installer's build.bat takes a parameter defining base directory for files, redistributables and output * cmake: version templates for ioninja app and installer * initial commit of encoding support in log-plain-text mode * WIX installer * version automation and build script adjustments still missing ................................................................................ version 3.0.2 (2014-04-07) * session startup dialog update (display errors) * remove UTF32->UTF8 conversion in terminal lines (draw UTF32 directly) * axl: support for UTF32 drawing in gui::CTextPaint * session startup dialog * log setting page update * all the dialogs tab order fixups * log setting page: include showСheckerPattern option + some layout modifications * checker pattern colorization (to show merged packet boundaries) ................................................................................ version 3.0.1 (2014-04-02) initial internal release of IO Ninja 3