├── config.json ├── .gitattributes ├── env.sh ├── tests ├── unit │ ├── engine │ │ ├── data │ │ │ ├── test_engine_data.ml │ │ │ ├── dune │ │ │ └── sample_fix_data.txt │ │ ├── dune │ │ └── t_fix_io.ml │ ├── core_pp │ │ ├── dune │ │ ├── t_base_types.ml │ │ └── t_datetime.ml │ └── core-util-msg │ │ ├── dune │ │ ├── t_parse_message_util.expected │ │ ├── t_message.ml │ │ └── t_parse_message_util.ml ├── benchs │ └── engine │ │ ├── dune │ │ └── bench_engine_decode.ml ├── test_runner.ml ├── dune ├── parser_test_runner.ml ├── config_parser.iml ├── message_stream.iml └── test_server.ml ├── .dockerignore ├── fix-engine ├── src-runtime │ ├── common.ml │ ├── dune │ ├── runtime.mli │ ├── config.ml │ ├── zmq_engine.ml │ └── fix_io_2.ml ├── src-protocol │ ├── dune │ ├── full_message_tags.iml │ ├── full_admin_enums.iml │ ├── full_admin_tags.iml │ └── full_admin_messages.iml ├── src-core │ ├── dune │ └── ints.iml ├── src-core-utils-msg │ ├── dune │ ├── parse_message_util.mli │ ├── message.mli │ ├── parse_message_util.ml │ ├── message.ml │ └── parser_combinators.mli ├── src │ └── dune ├── src-core-utils-pp │ ├── dune │ └── current_time.iml ├── src-core-pp │ ├── dune │ ├── encode_base_types.iml │ ├── parse_base_types.iml │ └── encode_datetime.iml └── src-protocol-pp │ ├── dune │ ├── encode_full_tags.iml │ ├── parse_full_tags.iml │ ├── full_message_tags_json.iml │ ├── full_message_tags_decoder.iml │ ├── encode_admin_enums.iml │ ├── parse_admin_enums.iml │ ├── full_admin_enums_json.iml │ ├── parse_admin_tags.iml │ ├── encode_admin_tags.iml │ ├── encode_full_messages.iml │ ├── full_admin_tags_json.iml │ ├── full_admin_enums_decoder.iml │ ├── encode_admin_messages.iml │ ├── full_admin_tags_decoder.iml │ ├── full_admin_messages_json.iml │ ├── parse_admin_messages.iml │ ├── full_admin_messages_decoder.iml │ └── full_messages_json.iml ├── dune ├── defs ├── 1e_NotLogonMessage.def ├── 1d_InvalidLogonWrongBeginString.def ├── 1d_InvalidLogonLengthInvalid.def ├── Imandra8_LogonResetReq_Normal.def ├── 13b_UnsolicitedLogoutMessage.def ├── 1d_InvalidLogonBadSendingTime.def ├── 1a_ValidLogonWithCorrectMsgSeqNum.def ├── 7_ReceiveRejectMessage.def ├── 1a_ValidLogonMsgSeqNumTooHigh.def ├── 4b_ReceivedTestRequest.def ├── 2c_MsgSeqNumTooLow.def ├── 2e_PossDupAlreadyReceived.def ├── 2a_MsgSeqNumCorrect.def ├── 10_MsgSeqNumEqual.def ├── 6_SendTestRequest.def ├── 2e_PossDupNotReceived.def ├── 10_MsgSeqNumGreater.def ├── Imandra7_CriticalResetLogon.def ├── 10_MsgSeqNumLess.def ├── 4a_NoDataSentDuringHeartBtInt.def ├── 11b_NewSeqNoEqual.def ├── Imandra9_LogonResetReq_Rewind.def ├── 11a_NewSeqNoGreater.def ├── Imandra10_LogonResetReq_DuringSession.def ├── 14f_IncorrectDataFormat.def ├── 14i_RepeatingGroupCountNotEqual.def ├── 14h_RepeatedTag.def ├── 2b_MsgSeqNumTooHigh.def ├── 14j_modified_OutOfOrderRepeatingGroupMembers.def ├── Imandra1_SessionRejectedBadSeqn.def ├── 14d_TagSpecifiedWithoutValue.def ├── 2d_GarbledMessage.def ├── 3c_GarbledMessage.def ├── 14c_TagNotDefinedForMsgType.def ├── 11c_NewSeqNoLess.def ├── 2f_PossDupOrigSendingTimeTooHigh.def ├── Imandra6_CacheReplayAdminOnly.def ├── Imandra2_SeqResetWithGapFill.def ├── 2g_PossDupNoOrigSendingTime.def ├── Imandra5_SeqResetWithGapFillOvershoot.def ├── 8_OnlyAdminMessages.def ├── 14b_RequiredFieldMissing.def ├── Imandra3_CacheReplayApplication.def ├── 20_SimultaneousResendRequest.def ├── Imandra4_CacheReplayOutOfOrder.def ├── 8_OnlyApplicationMessages.def └── 8_AdminAndApplicationMessages.def ├── client.json ├── model ├── dune └── model.iml ├── .gitignore ├── dune-project ├── .gitmodules ├── INSTALL.md ├── .ocamlformat ├── cloudbuild.yaml ├── Dockerfile ├── model.opam ├── fix-engine.opam └── Makefile /config.json: -------------------------------------------------------------------------------- 1 | { "reset" : true } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.iml linguist-language=OCaml 2 | -------------------------------------------------------------------------------- /env.sh: -------------------------------------------------------------------------------- 1 | eval $(opam env --switch=/usr/local/var/imandra --set-switch) 2 | -------------------------------------------------------------------------------- /tests/unit/engine/data/test_engine_data.ml: -------------------------------------------------------------------------------- 1 | let fix_data = Fix_data.data 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | _site/ 2 | jekyll-resources/ 3 | .sass-cache/ 4 | _opam/ 5 | _build/ 6 | .merlin 7 | **/.merlin -------------------------------------------------------------------------------- /fix-engine/src-runtime/common.ml: -------------------------------------------------------------------------------- 1 | module Log = (val Logs.src_log (Logs.Src.create "fix-engine.runtime")) 2 | -------------------------------------------------------------------------------- /tests/unit/core_pp/dune: -------------------------------------------------------------------------------- 1 | (tests 2 | (names t_datetime t_base_types) 3 | (libraries fix-engine.core_pp zarith) 4 | (flags :standard)) 5 | -------------------------------------------------------------------------------- /dune: -------------------------------------------------------------------------------- 1 | (subdir 2 | vendor/imandra-ptime 3 | (data_only_dirs vendor)) 4 | 5 | (subdir 6 | vendor/imandra-prelude 7 | (data_only_dirs vendor)) 8 | -------------------------------------------------------------------------------- /tests/unit/engine/dune: -------------------------------------------------------------------------------- 1 | (tests 2 | (names t_fix_io) 3 | (libraries fix-engine.runtime test_engine_data lwt lwt.unix qcheck-core 4 | qcheck-core.runner)) 5 | -------------------------------------------------------------------------------- /defs/1e_NotLogonMessage.def: -------------------------------------------------------------------------------- 1 | # If first message is not a Logon, we must disconnect 2 | 3 | iCONNECT 4 | I8=FIX.4.435=034=149=TW52=