EBS market data decoding

Imported from previous forum

Hello everyone.
As an introduction I have to say this is the first time I’m dealing with Fast and I’ve been developing in java for more that 4 years.
We’re developing a series of gateways to translate between Eurex EBS data ( FAST) and Fix ( the protocol our software supports). We choose to use OpenFast to decode EBS msgs. The thing is when I join a reference channel and get a udp datagram during trading session, I’m always getting a VERSION type of message. Eurex support is telling me that several Fast messages can be sent inside one datagram.
OpenFast has almost no documentation. How I’m I supposed to decode a datagram with more than one fast message?
Any clue?

Thanks in advance,
Augusto.

UDP by nature is an unreliable protocol. Hence, the first message in a datagram always has to be complete and FAST can only work its magic as of the second message. Your assumption of one message per UDP datagram defeats the very purpose of FAST.

You decode the messages within a UDP datagram (first comes the UDP header, then the FAST encoded messages) one after the other. The FAST 1.1 specification explains in detail how to parse each message, starting with the presence map followed by a template identifier and the actual fields.

Regards,
Hanno.

Hello everyone. As an introduction I have to say this is the first time
I’m dealing with Fast and I’ve been developing in java for more that 4
years. We’re developing a series of gateways to translate between Eurex
EBS data ( FAST) and Fix ( the protocol our software supports). We
choose to use OpenFast to decode EBS msgs. The thing is when I join a
reference channel and get a udp datagram during trading session, I’m
always getting a VERSION type of message. Eurex support is telling me
that several Fast messages can be sent inside one datagram. OpenFast has
almost no documentation. How I’m I supposed to decode a datagram with
more than one fast message? Any clue?

Thanks in advance, Augusto.

Hanno said:

UDP by nature is an unreliable protocol. Hence, the first message in a
datagram always has to be complete and FAST can only work its magic as
of the second message. Your assumption of one message per UDP datagram
defeats the very purpose of FAST.

Basically true, but the FAST magic is useful even in a single message if the messages contains Sequences (FIX repeated groups) CME takes advantage of this in their one message/packet UDP feeds.

It is important to note that you have to reset the decoder (clear the dictionaries) between each packet due to the possibility of packet loss.

Dale

Great, thanks for your help. I’ve been able to read further data from the datagram packet. The problem I’m facing now is with the way Openfast works.
I receive the udp datagram, decode it, get a VERSION MSG, continue decoding and there comes the problem. Openfast crashes because the decoding process finds an ID=120 and that’s not defined in the template.
I suppose whenever an ID 120 msg is received, the application should reset the context. I can do only if I had the 120 inside the template. Is there a possible workaround for this? I mean defining somehow an empty id 120 msg inside the template and when the api decodes a message of that kind just do a reset and continue the decoding?

Hope this clears up a bit the problem I’m facing.
Thanks.

[ original email was from Darshan Khedekar - darshan.khedekar.ext@deutsche-boerse.com ]
Hi,

If OpenFAST is FAST SCP 1.0 compatible then it should clear the dictionaries when it receives TID=120. If not your application should reset the dictionaries whenever you see TID=120

Since TID=120 FAST Reset is a FAST SCP defined template Eurex templates do not include it. If the OpenFAST application requires this message template then you may add it to the Eurex templates as well. Please refer to SCP 1.0 for the definition.

Regards,
Darshan

Great, thanks for your help. I’ve been able to read further data from
the datagram packet. The problem I’m facing now is with the way Openfast
works. I receive the udp datagram, decode it, get a VERSION MSG,
continue decoding and there comes the problem. Openfast crashes because
the decoding process finds an ID=120 and that’s not defined in the
template. I suppose whenever an ID 120 msg is received, the application
should reset the context. I can do only if I had the 120 inside the
template. Is there a possible workaround for this? I mean defining
somehow an empty id 120 msg inside the template and when the api decodes
a message of that kind just do a reset and continue the decoding?

Hope this clears up a bit the problem I’m facing. Thanks.