# NAME Protocol::FIX ![Build status](https://api.travis-ci.org/binary-com/perl-Protocol-FIX.png "Build status") [![codecov](https://codecov.io/gh/binary-com/perl-Protocol-FIX/branch/master/graph/badge.svg)](https://codecov.io/gh/binary-com/perl-Protocol-FIX) # SYNOPSIS use Protocol::FIX; my $proto = Protocol::FIX->new('FIX44')->extension('t/data/extension-sample.xml'); my $serialized = $proto->serialize_message('IOI', [ SenderCompID => 'me', TargetCompID => 'you', MsgSeqNum => 1, SendingTime => '20090107-18:15:16', IOIID => 'abc', IOITransType => 'CANCEL', IOIQty => 'LARGE', Side => 'BORROW', Instrument => [ Symbol => 'EURUSD', EvntGrp => [ NoEvents => [ [EventType => 'PUT'], [EventType => 'CALL'], [EventType => 'OTHER'] ] ], ], OrderQtyData => [ OrderQty => '499', ], ]); # managed fields (BeginString, MsgType, and CheckSum) are handled automatically, # no need to provide them my ($message_instance, $error) = $proto->parse_message(\$serialized); print("No error on parsing message"); print "Message, ", $message_instance->name, " / ", $message_instance->category, "\n"; print "Field 'SenderCompID' value: ", $message_instance->value('SenderCompID'), "\n"; print "Component 'OrderQtyData' access: ", $message_instance->value('OrderQtyData')->value('OrderQty'), "\n"; my $group = $message_instance->value('Instrument')->value('EvntGrp')->value('NoEvents'); print "0th group 'NoEvents' of component 'Instrument/EvntGrp' access: ", $group->[0]->value('EventType'), "\n"; my $buff = ''; ($message_instance, $error) = $proto->parse_message(\$buff); # no error nor message_instance, as there is no enough data. See also the "eg" folder for sample of FIX-server. # METHODS ### new($class, $version) Creates new protocol instance for the specified FIX protocol version. Currently shipped version is 'FIX44'. The xml with protocol definition was taken at [http://quickfixengine.org/](http://quickfixengine.org/). ### humanize ($buffer) Returns human-readable string for the buffer. I.e. is just substitutes [SOH](https://en.wikipedia.org/wiki/C0_and_C1_control_codes) to " | ". This might be usable during development of own FIX-client/server. ### is\_composite($object) Checks whether the supplied `$object` conforms "composte" concept. I.e. is it is [Field](https://metacpan.org/pod/Field), [LGroup](https://metacpan.org/pod/LGroup), [Component](https://metacpan.org/pod/Component) or [Mesassage](https://metacpan.org/pod/Mesassage). Not for end-user usage. ### field\_by\_name($self, $field\_name) Returns Field object by it's name or dies with error. Not for end-user usage. ### field\_by\_number($self, $field\_number) Returns Field object by it's number or dies with error. Not for end-user usage. ### component\_by\_name($self, $name) Returns Component object by it's name or dies with error. Not for end-user usage. ### message\_by\_name($self, $name) Returns Message object by it's name or dies with error. ### header($self) Returns Message's header Not for end-user usage. ### trailer($self) Returns Message's trailer Not for end-user usage. ### id($self) Returns Protocol's ID string, as it appears in FIX message (BeginString field). Not for end-user usage. ### managed\_composites() Returns list of fields, managed by protocol. Currently the list consists of fields: BeginString, MsgType, and CheckSum Not for end-user usage. ### serialize\_message($self, $message\_name, $payload) Returns serialized string for the supplied `$message_name` and `$payload`. Dies in case of end-user (developer) error, e.g. if mandatory field is absent. ### parse\_message($self, $buff\_ref) my ($message_instance, $error) = $protocol->parse($buff_ref); Tries to parse FIX message in the buffer refernce. In the case of success it returns `MessageInstance` and `$error` is undef. The string in `$buff_ref` will be consumed. In the case of **protocol error**, the `$message_instance` will be undef, and `$error` will contain the error description. The string in `$buff_ref` will be kept untouched. In the case, when there is no enough data in `$buff_ref` both `$error` and `$message_instance` will be undef. The string in `$buff_ref` will be kept untouched, i.e. waiting futher accumulation of bytes from network. In other cases it dies; that indicates either end-user (developer) error or bug in the module. ### extension($self, $extension\_path) Modifies the protocol, by loading XML extension. The extension might contain additional **messages** or **fields**. The extension XML should conform the format as the protocol definition itself, i.e.: