Skip to content

v0.3.0

Choose a tag to compare

@joaquinbejar joaquinbejar released this 14 Jul 13:59
· 125 commits to main since this release
2099810

IronFix 0.3.0

Initiator: live FIX sessions from ironfix-engine (#3)

ironfix-engine now ships a working client-side engine instead of config-only scaffolding:

  • Initiator — TCP dial (with connect timeout), framing via ironfix-transport::FixCodec, and a Logon handshake driven through the ironfix-session typestates (connect() → send_logon() → on_logon_ack()).
  • Background reactor task — owns the socket after logon: automatic Heartbeats, TestRequests with is_timed_out() detection, sequence validation (ResendRequest on gap, SequenceReset-GapFill replies, PossDup handling), and session-level Reject on from_admin/from_app rejection.
  • Connection handle — cloneable outbound sink (send), graceful logout(), wait_closed() (fires on transport drop, counterparty logout, or heartbeat timeout), is_timed_out(), and sequence-state visibility (next_sender_seq/next_target_seq).
  • Application callbacks wired end to end: on_create, on_logon, on_logout, to_admin/from_admin, to_app/from_app.
  • OutboundMessage builder — consumers provide body fields; the engine stamps the header (49/56/50/57/34/52) and trailer.
  • Initiator::with_initial_sequences() for session continuity across consumer-supervised reconnects. Reconnect/backoff itself stays out of scope, per the supervision seam in Layer-V/otc-rfq#388.
  • New example: fix44_engine_client (pairs with fix44_server); the stub fix44_server now sends correct incrementing MsgSeqNum.
  • 11 integration tests covering logon, exchange, logout, transport drop, logon timeout/reject, heartbeats, TestRequest echo, heartbeat timeout, gap → ResendRequest, and sequence continuity.

Acceptor export is deferred: the acceptor-side loop (listener, Logon authentication, per-connection reactors) was not cheap to include here.

Dependency refresh

All external dependencies moved to their latest stable minor versions: tokio 1.52, bytes 1.12, smallvec 1.15, memchr 2.8, rust_decimal 1.42, quick-xml 0.41 (dictionary loader adapted to the new normalized_value(XmlVersion) API), plus futures-util for the reactor's Stream/Sink combinators.

Versioning

Workspace bumped 0.2.0 → 0.3.0 (0.x-major): ironfix-engine grows a new public API surface and dependency floors moved.