//------------------------------------------------------------------------------------------------- bool FIXReader::read(f8String& to) // read a complete FIX message { char msg_buf[_max_msg_len] = {}; int result(sockRead(msg_buf, _bg_sz)); if (result == static_cast<int>(_bg_sz)) { char bt; size_t offs(_bg_sz); do // get the last chrs of bodylength and ^A { if (sockRead(&bt, 1) != 1) return false; if (!isdigit(bt) && bt != default_field_separator) throw IllegalMessage(msg_buf); msg_buf[offs++] = bt; } while (bt != default_field_separator && offs < _max_msg_len); to.assign(msg_buf, offs); f8String tag, bgstr, len; unsigned result; if ((result = MessageBase::extract_element(to.data(), to.size(), tag, bgstr))) { if (tag != "8") throw IllegalMessage(to); if (bgstr != _session.get_ctx()._beginStr) // invalid FIX version throw InvalidVersion(bgstr); if ((result = MessageBase::extract_element(to.data() + result, to.size() - result, tag, len))) { if (tag != "9") throw IllegalMessage(to); const unsigned mlen(fast_atoi<unsigned>(len.c_str())); if (mlen == 0 || mlen > _max_msg_len - _bg_sz - _chksum_sz) // invalid msglen throw InvalidBodyLength(mlen); // read the body if ((result = sockRead(msg_buf, mlen) != static_cast<int>(mlen))) return false; // read the checksum if ((result = sockRead(msg_buf + mlen, _chksum_sz) != static_cast<int>(_chksum_sz))) return false; to.append(msg_buf, mlen + _chksum_sz); _session.update_received(); //string ts; //cerr << GetTimeAsStringMS(ts, &_session.get_last_received(), 9) << endl; return true; } } throw IllegalMessage(to); } return false; }
QamUdpSocket::QamUdpSocket(QObject* parent ) : QUdpSocket(parent) , m_distAddr( QHostAddress::Null ) , m_distPort( 0 ) , m_hostResolved( false ) { connect( this, SIGNAL( readyRead() ), this, SLOT( sockRead() ) ) ; }