FIX Protocol library implemented in Go
Go Other
Latest commit 98b515f Feb 24, 2017 @cbusbey cbusbey committed on GitHub Merge pull request #280 from GlintPay/feature/SocketMinimumTLSVersion
Feature/socket minimum tls version
Permalink
Failed to load latest commit information.
_sql Add ddl files for creating db and tables Apr 15, 2016
_test messages passed as pointers Oct 6, 2016
_test_data introduces tls configuration Aug 4, 2016
cmd/generate-fix swizzles value and pointer references to tag values, field map methods Oct 10, 2016
config updated documentation Feb 21, 2017
datadictionary Datadictionary/Gen refactor (#140) May 24, 2016
enum Update generated files Sep 11, 2016
field Update generated files Sep 16, 2016
fix40 generated code Oct 10, 2016
fix41 generated code Oct 10, 2016
fix42 generated code Oct 10, 2016
fix43 generated code Oct 10, 2016
fix44 generated code Oct 10, 2016
fix50 generated code Oct 10, 2016
fix50sp1 generated code Oct 10, 2016
fix50sp2 generated code Oct 10, 2016
fixt11 generated code Oct 10, 2016
internal using byte buffer pool for incoming messages Oct 5, 2016
spec refactoring data dictionary to support groups Apr 2, 2014
tag adds 'generated.go' suffix to generated source Aug 16, 2016
vendor remove vendor source Aug 18, 2016
.gitignore remove vendor source Aug 18, 2016
.travis.yml bump travis to go 1.8 Feb 21, 2017
CHANGELOG.md v0.5.0 release notes Sep 1, 2016
CONTRIBUTING.md typo fix Jul 13, 2016
LICENSE.txt added qf license Aug 30, 2013
Makefile adds fix decimal, makefile fixes, DRY fix generator Aug 17, 2016
README.md documentation Aug 18, 2016
acceptor.go messages passed as pointers Oct 6, 2016
application.go messages passed as pointers Oct 6, 2016
connection.go refactors connection, initiator does not attempt connection when not … Aug 12, 2016
connection_internal_test.go using byte buffer pool for incoming messages Oct 5, 2016
doc.go documentation Aug 18, 2016
errors.go reject logon support Aug 17, 2016
errors_test.go More verbose error text on conditionally required field BMR + unit te… May 9, 2016
field.go swizzles value and pointer references to tag values, field map methods Oct 10, 2016
field_map.go reverts some earlier refactoring in fieldmap that introduced addition… Oct 24, 2016
field_map_test.go introduces fix bytes field type Sep 27, 2016
file_log.go fixes file log output for incoming, outgoing Sep 28, 2016
file_log_test.go removes unnecessary string alloc in logging fix messages Sep 27, 2016
filestore.go simplifies settings error handling Aug 13, 2016
filestore_test.go Accept `Settings` instead of `SessionSettings` Apr 18, 2016
fileutil.go Move some generic funcs into fileutil.go Mar 17, 2016
fileutil_test.go Move some generic funcs into fileutil.go Mar 17, 2016
fix_boolean.go Misc field type refactoring (#145) Jun 7, 2016
fix_boolean_test.go Misc field type refactoring (#145) Jun 7, 2016
fix_bytes.go introduces fix bytes field type Sep 27, 2016
fix_bytes_test.go introduces fix bytes field type Sep 27, 2016
fix_decimal.go adds fix decimal, makefile fixes, DRY fix generator Aug 17, 2016
fix_decimal_test.go adds fix decimal, makefile fixes, DRY fix generator Aug 17, 2016
fix_float.go Misc field type refactoring (#145) Jun 7, 2016
fix_float_test.go adds fix decimal, makefile fixes, DRY fix generator Aug 17, 2016
fix_int.go more low hanging allocation fruit for outbound Oct 21, 2016
fix_int_test.go Misc field type refactoring (#145) Jun 7, 2016
fix_string.go Misc field type refactoring (#145) Jun 7, 2016
fix_string_test.go message cap, removed cruft Feb 5, 2016
fix_utc_timestamp.go Misc field type refactoring (#145) Jun 7, 2016
fix_utc_timestamp_test.go Misc field type refactoring (#145) Jun 7, 2016
in_session.go messages passed as pointers Oct 6, 2016
in_session_test.go messages passed as pointers Oct 6, 2016
initiator.go adds SocketConnectHost/Port<n> Aug 14, 2016
latent_state.go message pool for inbound messages Oct 3, 2016
latent_state_test.go moving and renaming test jigs Aug 12, 2016
log.go removes unnecessary string alloc in logging fix messages Sep 27, 2016
logon_state.go messages passed as pointers Oct 6, 2016
logon_state_test.go messages passed as pointers Oct 6, 2016
logout_state.go message pool for inbound messages Oct 3, 2016
logout_state_test.go messages passed as pointers Oct 6, 2016
message.go reverts some earlier refactoring in fieldmap that introduced addition… Oct 24, 2016
message_pool.go messages passed as pointers Oct 6, 2016
message_router.go messages passed as pointers Oct 6, 2016
message_router_test.go messages passed as pointers Oct 6, 2016
message_test.go messages passed as pointers Oct 6, 2016
msg_type.go leverages fixbytes to reduce number of allocations when checking msg … Sep 28, 2016
not_session_time.go message pool for inbound messages Oct 3, 2016
not_session_time_test.go moving and renaming test jigs Aug 12, 2016
null_log.go removes unnecessary string alloc in logging fix messages Sep 27, 2016
parser.go parser shifts buffer to reduce large block allocations Oct 5, 2016
parser_test.go parser shifts buffer to reduce large block allocations Oct 5, 2016
pending_timeout.go state machine knows session time Aug 9, 2016
pending_timeout_test.go lint cleanup Aug 17, 2016
quickfix_test.go messages passed as pointers Oct 6, 2016
registry.go messages passed as pointers Oct 6, 2016
repeating_group.go reverts some earlier refactoring in fieldmap that introduced addition… Oct 24, 2016
repeating_group_test.go swizzles value and pointer references to tag values, field map methods Oct 10, 2016
resend_state.go using byte buffer pool for incoming messages Oct 5, 2016
resend_state_test.go using typed msgType enum in MessageType check Sep 17, 2016
screen_log.go removes unnecessary string alloc in logging fix messages Sep 27, 2016
session.go more low hanging allocation fruit for outbound Oct 21, 2016
session_factory.go adds check latency configuration Oct 1, 2016
session_factory_test.go adds check latency configuration Oct 1, 2016
session_id.go adds sender/target sub and location configuration Sep 24, 2016
session_id_test.go adds sender/target sub and location configuration Sep 24, 2016
session_rejects.go pulled errors into top level package May 16, 2014
session_settings.go simplifies settings error handling Aug 13, 2016
session_settings_test.go fixed parser bug, extracting message builder interface May 11, 2014
session_state.go using byte buffer pool for incoming messages Oct 5, 2016
session_test.go messages passed as pointers Oct 6, 2016
settings.go adds sender/target sub and location configuration Sep 24, 2016
settings_test.go adds sender/target sub and location configuration Sep 24, 2016
sqlstore.go renames SQLStore config settings Aug 19, 2016
sqlstore_test.go renames SQLStore config settings Aug 19, 2016
store.go Alter GetMessages return value. Mar 16, 2016
store_test.go Ensure new sqlstore resets cache immediately Apr 19, 2016
tag.go rem fix subpackage Oct 26, 2015
tag_value.go more low hanging allocation fruit for outbound Oct 21, 2016
tag_value_test.go extracts repeating group interface (#137) May 20, 2016
tls.go fixing tests for MinimumTLSVersion Feb 22, 2017
tls_test.go fixing tests for MinimumTLSVersion Feb 22, 2017
validation.go messages passed as pointers Oct 6, 2016
validation_test.go swizzles value and pointer references to tag values, field map methods Oct 10, 2016

README.md

QuickFIX/Go

GoDoc Build Status Go Report Card

Open Source FIX Protocol library implemented in Go

Getting Started and Documentation

Installation

To install QuickFIX/Go, use go get:

$ go get github.com/quickfixgo/quickfix

Staying up to date

To update QuickFIX/Go to the latest version, use go get -u github.com/quickfixgo/quickfix.

Example Apps

See examples for some simple examples of using QuickFIX/Go.

FIX Message Generation

QuickFIX/Go includes fields, enums, messages, and message components generated from the FIX 4.0 - FIX5.0SP2 specs. For most FIX applications, these generated resources are sufficient. Custom FIX applications may generate source specific to the FIX spec of that application using the generate-fix tool included with QuickFIX/Go.

Following installation, generate-fix is installed to $GOPATH/bin/generate-fix. Run $GOPATH/bin/generate-fix --help for usage instructions.

Developing QuickFIX/Go

If you wish to work on QuickFIX/Go itself, you will first need Go installed on your machine (version 1.6+ is required).

For local dev first make sure Go is properly installed, including setting up a GOPATH.

Next, using Git, clone this repository into $GOPATH/src/github.com/quickfixgo/quickfix.

Installing Dependencies

QuickFIX/Go uses govendor to manage the vendored dependencies. Install govendor with go get:

$ go get github.com/kardianos/govendor

Run govendor sync to install the correct versioned dependencies into `vendor/, which Go 1.6+ automatically recognizes and loads.

$ $GOPATH/bin/govendor sync

Note: No vendored dependencies are included in the QuickFIX/Go source.

Build and Test

The default make target runs go vet and unit tests.

$ make

If this exits with exit status 0, then everything is working!

Acceptance Tests

QuickFIX/Go has a comprehensive acceptance test suite covering the FIX protocol. These are the same tests used across all QuickFIX implementations.

QuickFIX/Go acceptance tests depend on ruby in path.

To run acceptance tests,

    # build acceptance test rig
    make build_accept

    # run acceptance tests
    make accept

Generated Code

For convenience, generated code from the FIX40-FIX50SP2 specs are included in the QuickFIX/Go repo. The source specifications for this generated code is located in spec/. Generated code can be identified by the .generated.go suffix. Any changes to generated code must be captured by changes to source in cmd/generate-fix. After making changes to the code generator source, run the following to re-generate the source

$ make generate

If you are making changes to the generated code, you will need to include the generated source in the same Pull Request as the changes made to the code generator. You should do this in a separate commit from your code, as this makes PR review easier and Git history simpler to read in the future.

Dependencies

If you are developing QuickFIX/Go, there are a few tasks you might need to perform related to dependencies.

Adding a dependency

If you are adding a dependency, you will need update the govendor manifest in the same Pull Request as the code that depends on it. You should do this in a separate commit from your code, as this makes PR review easier and Git history simpler to read in the future.

To add a dependency:

Assuming your work is on a branch called my-feature-branch, the steps look like this:

  1. Add the new package to your GOPATH:

    go get github.com/quickfixgo/my-project
  2. Add the new package to your vendor/ directory:

    govendor add github.com/quickfixgo/my-project
  3. Review the changes in git and commit them.

Updating a dependency

To update a dependency:

  1. Fetch the dependency:

    govendor fetch github.com/quickfixgo/my-project
  2. Review the changes in git and commit them.

Licensing

This software is available under the QuickFIX Software License. Please see the LICENSE.txt for the terms specified by the QuickFIX Software License.