if (header.isSetField(MsgType.FIELD)) { msgType = header.getString(MsgType.FIELD); if (header.isSetField(MsgSeqNum.FIELD)) { msgSeqNum = header.getInt(MsgSeqNum.FIELD); reject.setInt(RefSeqNum.FIELD, msgSeqNum); reject.getHeader().setInt(LastMsgSeqNumProcessed.FIELD, message.getHeader().getInt(MsgSeqNum.FIELD));
private void optionallySetID(Header header, int field, String value) { if (!value.equals(SessionID.NOT_SET)) { header.setString(field, value); } }
private boolean validatePossDup(Message msg) throws FieldNotFound, IOException { final Message.Header header = msg.getHeader(); final String msgType = header.getString(MsgType.FIELD); if (!msgType.equals(MsgType.SEQUENCE_RESET)) { if (header.isSetField(OrigSendingTime.FIELD)) { final Date origSendingTime = header.getUtcTimeStamp(OrigSendingTime.FIELD); final Date sendingTime = header.getUtcTimeStamp(SendingTime.FIELD); if (origSendingTime.compareTo(sendingTime) > 0) { generateReject(msg, SessionRejectReason.SENDINGTIME_ACCURACY_PROBLEM, 0); generateLogout(); return false; } } else { // QFJ-703 if (requiresOrigSendingTime) { generateReject(msg, SessionRejectReason.REQUIRED_TAG_MISSING, OrigSendingTime.FIELD); return false; } } } return true; }
boolean result = false; final Message.Header header = message.getHeader(); final String msgType = header.getString(MsgType.FIELD); header.setInt(MsgSeqNum.FIELD, num); if (!header.isSetField(LastMsgSeqNumProcessed.FIELD)) { header.setInt(LastMsgSeqNumProcessed.FIELD, getExpectedTargetNum() - 1); message.getHeader().setInt(MsgSeqNum.FIELD, getExpectedSenderNum()); final int msgSeqNum = header.getInt(MsgSeqNum.FIELD); if (persistMessages) { state.set(msgSeqNum, messageString);
boolean result = false; final Message.Header header = message.getHeader(); final String msgType = header.getString(MsgType.FIELD); header.setInt(MsgSeqNum.FIELD, num); if (!header.isSetField(LastMsgSeqNumProcessed.FIELD)) { header.setInt(LastMsgSeqNumProcessed.FIELD, getExpectedTargetNum() - 1); message.getHeader().setInt(MsgSeqNum.FIELD, getExpectedSenderNum()); final int msgSeqNum = header.getInt(MsgSeqNum.FIELD); if (persistMessages) { state.set(msgSeqNum, messageString);
if (header.isSetField(MsgType.FIELD)) { msgType = header.getString(MsgType.FIELD); if (header.isSetField(MsgSeqNum.FIELD)) { msgSeqNum = header.getInt(MsgSeqNum.FIELD); reject.setInt(RefSeqNum.FIELD, msgSeqNum); reject.getHeader().setInt(LastMsgSeqNumProcessed.FIELD, message.getHeader().getInt(MsgSeqNum.FIELD));
boolean result = false; final Message.Header header = message.getHeader(); final String msgType = header.getString(MsgType.FIELD); header.setInt(MsgSeqNum.FIELD, num); if (!header.isSetField(LastMsgSeqNumProcessed.FIELD)) { header.setInt(LastMsgSeqNumProcessed.FIELD, getExpectedTargetNum() - 1); message.getHeader().setInt(MsgSeqNum.FIELD, getExpectedSenderNum()); final int msgSeqNum = header.getInt(MsgSeqNum.FIELD); if (persistMessages) { state.set(msgSeqNum, messageString);
if (header.isSetField(MsgType.FIELD)) { msgType = header.getString(MsgType.FIELD); if (header.isSetField(MsgSeqNum.FIELD)) { msgSeqNum = header.getInt(MsgSeqNum.FIELD); reject.setInt(RefSeqNum.FIELD, msgSeqNum); reject.getHeader().setInt(LastMsgSeqNumProcessed.FIELD, message.getHeader().getInt(MsgSeqNum.FIELD));
final SessionID sessionId) throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue { final Date date = message.getHeader().getUtcTimeStamp(SendingTime.FIELD); final String symbol = message.getField(new Symbol()).getValue(); final CurrencyPair currencyPair = OKCoinFIXAdapters.adaptCurrencyPair(symbol);
StringBuffer sb = new StringBuffer(); try { sb.append("Sending admin level FIX message to ").append(message.getHeader().getField(new TargetCompID()).getValue()); sb.append("\nMessage Type: ").append(message.getHeader().getField(new MsgType()).getValue()); sb.append("\nMessage Sequence Number: ").append(message.getHeader().getField(new MsgSeqNum()).getValue()); sb.append("\nSender ID: ").append(message.getHeader().getField(new SenderCompID()).getValue()); } catch (FieldNotFound e) { sb.append("Sending admin level FIX message..."); if (message.getHeader().getField(new StringField(FIXConstants.FIX_MESSAGE_TYPE)).getValue().equals(FIXConstants.LOGON)) {
String beginString = inMessage.getHeader().getField( new BeginString()).getValue(); if(!FIXDataDictionary.FIX_SYSTEM_BEGIN_STRING.equals(beginString)) {
if (log.isDebugEnabled()) { StringBuffer sb = new StringBuffer(); sb.append("Received FIX message from ").append(message.getHeader().getField(new SenderCompID()).getValue()); sb.append("\nMessage Sequence Number: ").append(message.getHeader().getField(new MsgSeqNum()).getValue()); sb.append("\nReceiver ID: ").append(message.getHeader().getField(new TargetCompID()).getValue()); log.debug(sb.toString()); if (log.isTraceEnabled()) {
public void reverseRoute(Header header) throws FieldNotFound { this.header.removeField(BeginString.FIELD); this.header.removeField(SenderCompID.FIELD); this.header.removeField(SenderSubID.FIELD); this.header.removeField(SenderLocationID.FIELD); this.header.removeField(TargetCompID.FIELD); this.header.removeField(TargetSubID.FIELD); this.header.removeField(TargetLocationID.FIELD); if (header.isSetField(BeginString.FIELD)) { copyField(header, BeginString.FIELD, BeginString.FIELD); copyField(header, TargetLocationID.FIELD, SenderLocationID.FIELD); this.header.removeField(OnBehalfOfCompID.FIELD); this.header.removeField(OnBehalfOfSubID.FIELD); this.header.removeField(DeliverToCompID.FIELD); this.header.removeField(DeliverToSubID.FIELD); copyField(header, DeliverToSubID.FIELD, OnBehalfOfSubID.FIELD); this.header.removeField(OnBehalfOfLocationID.FIELD); this.header.removeField(DeliverToLocationID.FIELD); if (header.getString(BeginString.FIELD).compareTo(FixVersions.BEGINSTRING_FIX41) >= 0) { copyField(header, OnBehalfOfLocationID.FIELD, DeliverToLocationID.FIELD); copyField(header, DeliverToLocationID.FIELD, OnBehalfOfLocationID.FIELD);
public void reverseRoute(Header header) throws FieldNotFound { this.header.removeField(BeginString.FIELD); this.header.removeField(SenderCompID.FIELD); this.header.removeField(SenderSubID.FIELD); this.header.removeField(SenderLocationID.FIELD); this.header.removeField(TargetCompID.FIELD); this.header.removeField(TargetSubID.FIELD); this.header.removeField(TargetLocationID.FIELD); if (header.isSetField(BeginString.FIELD)) { copyField(header, BeginString.FIELD, BeginString.FIELD); copyField(header, TargetLocationID.FIELD, SenderLocationID.FIELD); this.header.removeField(OnBehalfOfCompID.FIELD); this.header.removeField(OnBehalfOfSubID.FIELD); this.header.removeField(DeliverToCompID.FIELD); this.header.removeField(DeliverToSubID.FIELD); copyField(header, DeliverToSubID.FIELD, OnBehalfOfSubID.FIELD); this.header.removeField(OnBehalfOfLocationID.FIELD); this.header.removeField(DeliverToLocationID.FIELD); if (header.getString(BeginString.FIELD).compareTo(FixVersions.BEGINSTRING_FIX41) >= 0) { copyField(header, OnBehalfOfLocationID.FIELD, DeliverToLocationID.FIELD); copyField(header, DeliverToLocationID.FIELD, OnBehalfOfLocationID.FIELD);
final int newSeqNo = endSeqNo; final Header header = sequenceReset.getHeader(); header.setBoolean(PossDupFlag.FIELD, true); initializeHeader(header); header.setUtcTimeStamp(OrigSendingTime.FIELD, header.getUtcTimeStamp(SendingTime.FIELD), includeMillis()); header.setInt(MsgSeqNum.FIELD, beginSeqNo); sequenceReset.setInt(NewSeqNo.FIELD, newSeqNo); sequenceReset.setBoolean(GapFillFlag.FIELD, true); if (receivedMessage != null && enableLastMsgSeqNumProcessed) { try { sequenceReset.getHeader().setInt(LastMsgSeqNumProcessed.FIELD, receivedMessage.getHeader().getInt(MsgSeqNum.FIELD)); } catch (final FieldNotFound e) {
/** * This is a callback for application messages that are being sent to a * counter party. * * @param message QuickFIX message * @param sessionID QuickFIX session ID * @throws DoNotSend This exception aborts message transmission */ public void toApp(Message message, SessionID sessionID) throws DoNotSend { if (log.isDebugEnabled()) { StringBuffer sb = new StringBuffer(); try { sb.append("Sending application level FIX message to ").append(message.getHeader().getField(new TargetCompID()).getValue()); sb.append("\nMessage Type: ").append(message.getHeader().getField(new MsgType()).getValue()); sb.append("\nMessage Sequence Number: ").append(message.getHeader().getField(new MsgSeqNum()).getValue()); sb.append("\nSender ID: ").append(message.getHeader().getField(new SenderCompID()).getValue()); } catch (FieldNotFound e) { sb.append("Sending application level FIX message..."); log.warn("One or more required fields are not found in the response message", e); } log.debug(sb.toString()); if (log.isTraceEnabled()) { log.trace("Message: " + message.toString()); } } if (eventHandler != null) { eventHandler.toApp(this, message, sessionID); } }
/** * This callback notifies when an administrative message is sent from a * counterparty to the FIX engine. * * @param message QuickFIX message * @param sessionID QuickFIX session ID * @throws FieldNotFound * @throws IncorrectDataFormat * @throws IncorrectTagValue * @throws RejectLogon causes a logon reject */ public void fromAdmin(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, RejectLogon { if (log.isDebugEnabled()) { StringBuffer sb = new StringBuffer(); sb.append("Received admin level FIX message from ").append(message.getHeader().getField(new SenderCompID()).getValue()); sb.append("\nMessage Type: ").append(message.getHeader().getField(new MsgType()).getValue()); sb.append("\nMessage Sequence Number: ").append(message.getHeader().getField(new MsgSeqNum()).getValue()); sb.append("\nReceiver ID: ").append(message.getHeader().getField(new TargetCompID()).getValue()); log.debug(sb.toString()); if (log.isTraceEnabled()) { log.trace("Message: " + message.toString()); } } if (eventHandler != null) { eventHandler.fromAdmin(this, message, sessionID); } }
/** * @param receivedMessage if not null, it is the message received and upon which the resend request is generated * @param beginSeqNo * @param endSeqNo * @throws FieldNotFound */ private void generateSequenceReset(Message receivedMessage, int beginSeqNo, int endSeqNo) throws FieldNotFound { final Message sequenceReset = messageFactory.create(sessionID.getBeginString(), MsgType.SEQUENCE_RESET); final Header header = sequenceReset.getHeader(); header.setBoolean(PossDupFlag.FIELD, true); initializeHeader(header); header.setUtcTimeStamp(OrigSendingTime.FIELD, header.getUtcTimeStamp(SendingTime.FIELD), getTimestampPrecision()); header.setInt(MsgSeqNum.FIELD, beginSeqNo); sequenceReset.setInt(NewSeqNo.FIELD, endSeqNo); sequenceReset.setBoolean(GapFillFlag.FIELD, true); if (receivedMessage != null && enableLastMsgSeqNumProcessed) { try { sequenceReset.getHeader().setInt(LastMsgSeqNumProcessed.FIELD, receivedMessage.getHeader().getInt(MsgSeqNum.FIELD)); } catch (final FieldNotFound e) { // should not happen as MsgSeqNum must be present getLog().onErrorEvent("Received message without MsgSeqNum " + getMessageToLog(receivedMessage)); } } sendRaw(sequenceReset, beginSeqNo); getLog().onEvent("Sent SequenceReset TO: " + endSeqNo); }
public void reverseRoute(Header header) throws FieldNotFound { this.header.removeField(BeginString.FIELD); this.header.removeField(SenderCompID.FIELD); this.header.removeField(SenderSubID.FIELD); this.header.removeField(SenderLocationID.FIELD); this.header.removeField(TargetCompID.FIELD); this.header.removeField(TargetSubID.FIELD); this.header.removeField(TargetLocationID.FIELD); if (header.isSetField(BeginString.FIELD)) { copyField(header, BeginString.FIELD, BeginString.FIELD); copyField(header, TargetLocationID.FIELD, SenderLocationID.FIELD); this.header.removeField(OnBehalfOfCompID.FIELD); this.header.removeField(OnBehalfOfSubID.FIELD); this.header.removeField(DeliverToCompID.FIELD); this.header.removeField(DeliverToSubID.FIELD); copyField(header, DeliverToSubID.FIELD, OnBehalfOfSubID.FIELD); this.header.removeField(OnBehalfOfLocationID.FIELD); this.header.removeField(DeliverToLocationID.FIELD); if (header.getString(BeginString.FIELD).compareTo(FixVersions.BEGINSTRING_FIX41) >= 0) { copyField(header, OnBehalfOfLocationID.FIELD, DeliverToLocationID.FIELD); copyField(header, DeliverToLocationID.FIELD, OnBehalfOfLocationID.FIELD);
/** * Get the <code>FIXVersion</code> of the given message. * * @param inMessage a <code>Message</code> value * @return a <code>FIXVersion</code> value * @throws FieldNotFound if the given message is malformed and the version cannot be identified * @throws IllegalArgumentException if the FIX version of the given message is unsupported */ public static FIXVersion getFIXVersion(Message inMessage) throws FieldNotFound { SessionID sessionId = MessageUtils.getSessionID(inMessage); if(sessionId.isFIXT()) { if(inMessage.getHeader().isSetField(quickfix.field.ApplVerID.FIELD)) { return doFixApplicationVersionLookup(inMessage.getHeader().getString(quickfix.field.ApplVerID.FIELD)); } // this is a FIXT message _and_ ApplVerID is _not_ set, we need to know something about the session Session session = Session.lookupSession(sessionId); if(session == null) { throw new UnsupportedOperationException(Messages.APPL_VERID_REQUIRED.getText()); } quickfix.field.ApplVerID defaultAppVerId = session.getTargetDefaultApplicationVersionID(); return getFIXVersion(defaultAppVerId); } else { return doFixVersionLookup(inMessage.getHeader().getString(quickfix.field.BeginString.FIELD)); } } /**