/* * include/haproxy/fix.h * This file contains functions and macros declarations for FIX protocol decoding. * * Copyright 2020 Baptiste Assmann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, version 2.1 * exclusively. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _HAPROXY_FIX_H #define _HAPROXY_FIX_H #include #include #include unsigned int fix_check_id(const struct ist str, const struct ist version); int fix_validate_message(const struct ist msg); struct ist fix_tag_value(const struct ist msg, unsigned int tagid); /* * Return the FIX version string (one of FIX_X_Y macros) corresponding to * or IST_NULL if not found. */ static inline struct ist fix_version(const struct ist str) { /* 7 is the minimal size for the FIX version string */ if (istlen(str) < 7) return IST_NULL; if (isteq(FIX_4_0, str)) return FIX_4_0; else if (isteq(FIX_4_1, str)) return FIX_4_1; else if (isteq(FIX_4_2, str)) return FIX_4_2; else if (isteq(FIX_4_3, str)) return FIX_4_3; else if (isteq(FIX_4_4, str)) return FIX_4_4; else if (isteq(FIX_5_0, str)) return FIX_5_0; return IST_NULL; } /* * Return the FIX tag ID corresponding to if one found or 0 if not. * * full list of tag ID available here, just in case we need to support * more "string" equivalent in the future: * https://www.onixs.biz/fix-dictionary/4.2/fields_by_tag.html */ static inline unsigned int fix_tagid(const struct ist tag) { unsigned id = fix_check_id(tag, IST_NULL); if (id) return id; else if (isteqi(tag, ist("MsgType"))) return FIX_TAG_MsgType; else if (isteqi(tag, ist("CheckSum"))) return FIX_TAG_CheckSum; else if (isteqi(tag, ist("BodyLength"))) return FIX_TAG_BodyLength; else if (isteqi(tag, ist("TargetCompID"))) return FIX_TAG_TargetCompID; else if (isteqi(tag, ist("BeginString"))) return FIX_TAG_BeginString; else if (isteqi(tag, ist("SenderCompID"))) return FIX_TAG_SenderCompID; return 0; } #endif /* _HAPROXY_FIX_H */ /* * Local variables: * c-indent-level: 8 * c-basic-offset: 8 * End: */