Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
FIX::Session Class Reference

Maintains the state and implements the logic of a FIX session. More...

#include <Session.h>

Collaboration diagram for FIX::Session:
Collaboration graph
[legend]

Public Member Functions

 Session (Application &, MessageStoreFactory &, const SessionID &, const DataDictionaryProvider &, const TimeRange &, int heartBtInt, LogFactory *pLogFactory)
 
virtual ~Session ()
 
void logon ()
 
void logout (const std::string &reason="")
 
bool isEnabled ()
 
bool sentLogon ()
 
bool sentLogout ()
 
bool receivedLogon ()
 
bool isLoggedOn ()
 
void reset () throw ( IOException )
 
void refresh () throw ( IOException )
 
void setNextSenderMsgSeqNum (int num) throw ( IOException )
 
void setNextTargetMsgSeqNum (int num) throw ( IOException )
 
const SessionIDgetSessionID () const
 
void setDataDictionaryProvider (const DataDictionaryProvider &dataDictionaryProvider)
 
const DataDictionaryProvidergetDataDictionaryProvider () const
 
bool isSessionTime (const UtcTimeStamp &time)
 
bool isLogonTime (const UtcTimeStamp &time)
 
bool isInitiator ()
 
bool isAcceptor ()
 
const TimeRangegetLogonTime ()
 
void setLogonTime (const TimeRange &value)
 
const std::string & getSenderDefaultApplVerID ()
 
void setSenderDefaultApplVerID (const std::string &senderDefaultApplVerID)
 
const std::string & getTargetDefaultApplVerID ()
 
void setTargetDefaultApplVerID (const std::string &targetDefaultApplVerID)
 
bool getSendRedundantResendRequests ()
 
void setSendRedundantResendRequests (bool value)
 
bool getCheckCompId ()
 
void setCheckCompId (bool value)
 
bool getCheckLatency ()
 
void setCheckLatency (bool value)
 
int getMaxLatency ()
 
void setMaxLatency (int value)
 
int getLogonTimeout ()
 
void setLogonTimeout (int value)
 
int getLogoutTimeout ()
 
void setLogoutTimeout (int value)
 
bool getResetOnLogon ()
 
void setResetOnLogon (bool value)
 
bool getResetOnLogout ()
 
void setResetOnLogout (bool value)
 
bool getResetOnDisconnect ()
 
void setResetOnDisconnect (bool value)
 
bool getRefreshOnLogon ()
 
void setRefreshOnLogon (bool value)
 
bool getMillisecondsInTimeStamp ()
 
void setMillisecondsInTimeStamp (bool value)
 
int getTimestampPrecision ()
 
void setTimestampPrecision (int precision)
 
bool getPersistMessages ()
 
void setPersistMessages (bool value)
 
bool getValidateLengthAndChecksum ()
 
void setValidateLengthAndChecksum (bool value)
 
void setResponder (Responder *pR)
 
bool send (Message &)
 
void next ()
 
void next (const UtcTimeStamp &timeStamp)
 
void next (const std::string &, const UtcTimeStamp &timeStamp, bool queued=false)
 
void next (const Message &, const UtcTimeStamp &timeStamp, bool queued=false)
 
void disconnect ()
 
int getExpectedSenderNum ()
 
int getExpectedTargetNum ()
 
LoggetLog ()
 
const MessageStoregetStore ()
 
const HeartBtInt & getHeartBtInt () const
 

Static Public Member Functions

static bool sendToTarget (Message &message, const std::string &qualifier="") throw ( SessionNotFound )
 
static bool sendToTarget (Message &message, const SessionID &sessionID) throw ( SessionNotFound )
 
static bool sendToTarget (Message &, const SenderCompID &senderCompID, const TargetCompID &targetCompID, const std::string &qualifier="") throw ( SessionNotFound )
 
static bool sendToTarget (Message &message, const std::string &senderCompID, const std::string &targetCompID, const std::string &qualifier="") throw ( SessionNotFound )
 
static std::set< SessionIDgetSessions ()
 
static bool doesSessionExist (const SessionID &)
 
static SessionlookupSession (const SessionID &)
 
static SessionlookupSession (const std::string &, bool reverse=false)
 
static bool isSessionRegistered (const SessionID &)
 
static SessionregisterSession (const SessionID &)
 
static void unregisterSession (const SessionID &)
 
static size_t numSessions ()
 

Private Types

typedef std::map< SessionID, Session *> Sessions
 
typedef std::set< SessionIDSessionIDs
 

Private Member Functions

bool send (const std::string &)
 
bool sendRaw (Message &, int msgSeqNum=0)
 
bool resend (Message &message)
 
void persist (const Message &, const std::string &) throw ( IOException )
 
void insertSendingTime (Header &)
 
void insertOrigSendingTime (Header &, const UtcTimeStamp &when=UtcTimeStamp())
 
void fill (Header &)
 
bool isGoodTime (const SendingTime &sendingTime)
 
bool checkSessionTime (const UtcTimeStamp &timeStamp)
 
bool isTargetTooHigh (const MsgSeqNum &msgSeqNum)
 
bool isTargetTooLow (const MsgSeqNum &msgSeqNum)
 
bool isCorrectCompID (const SenderCompID &senderCompID, const TargetCompID &targetCompID)
 
bool shouldSendReset ()
 
bool validLogonState (const MsgType &msgType)
 
void fromCallback (const MsgType &msgType, const Message &msg, const SessionID &sessionID)
 
void doBadTime (const Message &msg)
 
void doBadCompID (const Message &msg)
 
bool doPossDup (const Message &msg)
 
bool doTargetTooLow (const Message &msg)
 
void doTargetTooHigh (const Message &msg)
 
void nextQueued (const UtcTimeStamp &timeStamp)
 
bool nextQueued (int num, const UtcTimeStamp &timeStamp)
 
void nextLogon (const Message &, const UtcTimeStamp &timeStamp)
 
void nextHeartbeat (const Message &, const UtcTimeStamp &timeStamp)
 
void nextTestRequest (const Message &, const UtcTimeStamp &timeStamp)
 
void nextLogout (const Message &, const UtcTimeStamp &timeStamp)
 
void nextReject (const Message &, const UtcTimeStamp &timeStamp)
 
void nextSequenceReset (const Message &, const UtcTimeStamp &timeStamp)
 
void nextResendRequest (const Message &, const UtcTimeStamp &timeStamp)
 
void generateLogon ()
 
void generateLogon (const Message &)
 
void generateResendRequest (const BeginString &, const MsgSeqNum &)
 
void generateSequenceReset (int, int)
 
void generateHeartbeat ()
 
void generateHeartbeat (const Message &)
 
void generateTestRequest (const std::string &)
 
void generateReject (const Message &, int err, int field=0)
 
void generateReject (const Message &, const std::string &)
 
void generateBusinessReject (const Message &, int err, int field=0)
 
void generateLogout (const std::string &text="")
 
void populateRejectReason (Message &, int field, const std::string &)
 
void populateRejectReason (Message &, const std::string &)
 
bool verify (const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
 
bool set (int s, const Message &m)
 
bool get (int s, Message &m) const
 
MessagenewMessage (const std::string &msgType) const
 

Static Private Member Functions

static bool addSession (Session &)
 
static void removeSession (Session &)
 

Private Attributes

Applicationm_application
 
SessionID m_sessionID
 
TimeRange m_sessionTime
 
TimeRange m_logonTime
 
std::string m_senderDefaultApplVerID
 
std::string m_targetDefaultApplVerID
 
bool m_sendRedundantResendRequests
 
bool m_checkCompId
 
bool m_checkLatency
 
int m_maxLatency
 
bool m_resetOnLogon
 
bool m_resetOnLogout
 
bool m_resetOnDisconnect
 
bool m_refreshOnLogon
 
int m_timestampPrecision
 
bool m_persistMessages
 
bool m_validateLengthAndChecksum
 
SessionState m_state
 
DataDictionaryProvider m_dataDictionaryProvider
 
MessageStoreFactorym_messageStoreFactory
 
LogFactorym_pLogFactory
 
Responderm_pResponder
 
Mutex m_mutex
 

Static Private Attributes

static Sessions s_sessions
 
static SessionIDs s_sessionIDs
 
static Sessions s_registered
 
static Mutex s_mutex
 

Detailed Description

Maintains the state and implements the logic of a FIX session.

Definition at line 45 of file Session.h.

Member Typedef Documentation

◆ SessionIDs

typedef std::set< SessionID > FIX::Session::SessionIDs
private

Definition at line 234 of file Session.h.

◆ Sessions

typedef std::map< SessionID, Session* > FIX::Session::Sessions
private

Definition at line 233 of file Session.h.

Constructor & Destructor Documentation

◆ Session()

FIX::Session::Session ( Application application,
MessageStoreFactory messageStoreFactory,
const SessionID sessionID,
const DataDictionaryProvider dataDictionaryProvider,
const TimeRange sessionTime,
int  heartBtInt,
LogFactory pLogFactory 
)

Definition at line 41 of file Session.cpp.

References addSession(), checkSessionTime(), FIX::MessageStoreFactory::create(), FIX::LogFactory::create(), FIX::SessionState::heartBtInt(), FIX::SessionState::initiate(), FIX::SessionState::log(), m_application, m_messageStoreFactory, m_pLogFactory, m_sessionID, m_state, FIX::Application::onCreate(), FIX::SessionState::onEvent(), reset(), FIX::SessionState::store(), and FIX::TYPE::UtcTimeStamp.

47 : m_application( application ),
48  m_sessionID( sessionID ),
49  m_sessionTime( sessionTime ),
50  m_logonTime( sessionTime ),
54  m_checkCompId( true ),
55  m_checkLatency( true ),
56  m_maxLatency( 120 ),
57  m_resetOnLogon( false ),
58  m_resetOnLogout( false ),
59  m_resetOnDisconnect( false ),
60  m_refreshOnLogon( false ),
62  m_persistMessages( true ),
64  m_dataDictionaryProvider( dataDictionaryProvider ),
65  m_messageStoreFactory( messageStoreFactory ),
66  m_pLogFactory( pLogFactory ),
67  m_pResponder( 0 )
68 {
69  m_state.heartBtInt( heartBtInt );
70  m_state.initiate( heartBtInt != 0 );
72  if ( m_pLogFactory )
74 
76  reset();
77 
78  addSession( *this );
80  m_state.onEvent( "Created session" );
81 }
virtual MessageStore * create(const SessionID &)=0
virtual void onCreate(const SessionID &)=0
Notification of a session begin created.
DataDictionaryProvider m_dataDictionaryProvider
Definition: Session.h:338
virtual Log * create()=0
MessageStoreFactory & m_messageStoreFactory
Definition: Session.h:339
static bool addSession(Session &)
Definition: Session.cpp:1559
bool m_checkLatency
Definition: Session.h:327
SessionID m_sessionID
Definition: Session.h:319
void reset()
Definition: Session.h:66
bool initiate() const
Definition: SessionState.h:68
bool m_checkCompId
Definition: Session.h:326
int m_timestampPrecision
Definition: Session.h:333
int m_maxLatency
Definition: Session.h:328
Application & m_application
Definition: Session.h:318
bool m_resetOnLogon
Definition: Session.h:329
std::string m_senderDefaultApplVerID
Definition: Session.h:323
LogFactory * m_pLogFactory
Definition: Session.h:340
TimeRange m_logonTime
Definition: Session.h:321
SessionState m_state
Definition: Session.h:337
std::string m_targetDefaultApplVerID
Definition: Session.h:324
bool m_validateLengthAndChecksum
Definition: Session.h:335
bool checkSessionTime(const UtcTimeStamp &timeStamp)
Definition: Session.h:255
void onEvent(const std::string &string)
Definition: SessionState.h:204
bool m_resetOnDisconnect
Definition: Session.h:331
TimeRange m_sessionTime
Definition: Session.h:320
bool m_persistMessages
Definition: Session.h:334
bool m_sendRedundantResendRequests
Definition: Session.h:325
Responder * m_pResponder
Definition: Session.h:341
bool m_resetOnLogout
Definition: Session.h:330
MessageStore * store()
Definition: SessionState.h:89
bool m_refreshOnLogon
Definition: Session.h:332
void heartBtInt(const HeartBtInt &value)
Definition: SessionState.h:94
const char ApplVerID_FIX50[]
Definition: FixValues.h:182

◆ ~Session()

FIX::Session::~Session ( )
virtual

Definition at line 83 of file Session.cpp.

References FIX::MessageStoreFactory::destroy(), FIX::LogFactory::destroy(), FIX::SessionState::log(), m_messageStoreFactory, m_pLogFactory, m_state, removeSession(), and FIX::SessionState::store().

84 {
85  removeSession( *this );
87  if ( m_pLogFactory && m_state.log() )
89 }
MessageStoreFactory & m_messageStoreFactory
Definition: Session.h:339
virtual void destroy(Log *)=0
LogFactory * m_pLogFactory
Definition: Session.h:340
SessionState m_state
Definition: Session.h:337
virtual void destroy(MessageStore *)=0
static void removeSession(Session &)
Definition: Session.cpp:1573
MessageStore * store()
Definition: SessionState.h:89

Member Function Documentation

◆ addSession()

bool FIX::Session::addSession ( Session s)
staticprivate

Definition at line 1559 of file Session.cpp.

References m_sessionID, s_mutex, s_sessionIDs, and s_sessions.

Referenced by Session().

1560 {
1561  Locker locker( s_mutex );
1562  Sessions::iterator it = s_sessions.find( s.m_sessionID );
1563  if ( it == s_sessions.end() )
1564  {
1565  s_sessions[ s.m_sessionID ] = &s;
1566  s_sessionIDs.insert( s.m_sessionID );
1567  return true;
1568  }
1569  else
1570  return false;
1571 }
static Sessions s_sessions
Definition: Session.h:344
static SessionIDs s_sessionIDs
Definition: Session.h:345
static Mutex s_mutex
Definition: Session.h:347

◆ checkSessionTime()

bool FIX::Session::checkSessionTime ( const UtcTimeStamp timeStamp)
inlineprivate

Definition at line 255 of file Session.h.

References FIX::SessionState::getCreationTime(), FIX::TimeRange::isInSameRange(), m_sessionTime, and m_state.

Referenced by next(), Session(), and setResponder().

256  {
257  UtcTimeStamp creationTime = m_state.getCreationTime();
258  return m_sessionTime.isInSameRange( timeStamp, creationTime );
259  }
UtcTimeStamp getCreationTime() const
Definition: SessionState.h:189
SessionState m_state
Definition: Session.h:337
TimeRange m_sessionTime
Definition: Session.h:320
static bool isInSameRange(const UtcTimeOnly &start, const UtcTimeOnly &end, const DateTime &time1, const DateTime &time2)
Definition: TimeRange.h:76

◆ disconnect()

void FIX::Session::disconnect ( )

Definition at line 613 of file Session.cpp.

References FIX::SessionState::clearQueue(), FIX::Responder::disconnect(), FIX::SessionState::logoutReason(), m_application, m_mutex, m_pResponder, m_resetOnDisconnect, m_sessionID, m_state, FIX::SessionState::onEvent(), FIX::Application::onLogout(), FIX::SessionState::receivedLogon(), FIX::SessionState::receivedReset(), FIX::SessionState::resendRange(), FIX::SessionState::reset(), FIX::SessionState::sentLogon(), FIX::SessionState::sentLogout(), and FIX::SessionState::sentReset().

Referenced by next(), nextLogon(), nextLogout(), FIX::SocketInitiator::onDisconnect(), FIX::SocketAcceptor::onDisconnect(), FIX::ThreadedSocketConnection::read(), reset(), setResponder(), and verify().

614 {
615  Locker l(m_mutex);
616 
617  if ( m_pResponder )
618  {
619  m_state.onEvent( "Disconnecting" );
620 
622  m_pResponder = 0;
623  }
624 
625  if ( m_state.receivedLogon() || m_state.sentLogon() )
626  {
627  m_state.receivedLogon( false );
628  m_state.sentLogon( false );
630  }
631 
632  m_state.sentLogout( false );
633  m_state.receivedReset( false );
634  m_state.sentReset( false );
637  if ( m_resetOnDisconnect )
638  m_state.reset();
639 
640  m_state.resendRange( 0, 0 );
641 }
virtual void onLogout(const SessionID &)=0
Notification of a session logging off or disconnecting.
SessionID m_sessionID
Definition: Session.h:319
bool receivedReset() const
Definition: SessionState.h:62
bool sentReset() const
Definition: SessionState.h:65
Application & m_application
Definition: Session.h:318
SessionState m_state
Definition: Session.h:337
bool receivedLogon() const
Definition: SessionState.h:53
ResendRange resendRange() const
Definition: SessionState.h:85
std::string logoutReason() const
Definition: SessionState.h:150
bool sentLogon() const
Definition: SessionState.h:59
void onEvent(const std::string &string)
Definition: SessionState.h:204
virtual void disconnect()=0
Mutex m_mutex
Definition: Session.h:342
bool m_resetOnDisconnect
Definition: Session.h:331
Responder * m_pResponder
Definition: Session.h:341
bool sentLogout() const
Definition: SessionState.h:56

◆ doBadCompID()

void FIX::Session::doBadCompID ( const Message msg)
private

Definition at line 1152 of file Session.cpp.

References generateLogout(), generateReject(), and FIX::SessionRejectReason_COMPID_PROBLEM.

Referenced by isCorrectCompID(), and verify().

1153 {
1155  generateLogout();
1156 }
void generateReject(const Message &, int err, int field=0)
Definition: Session.cpp:805
void generateLogout(const std::string &text="")
Definition: Session.cpp:996
const int SessionRejectReason_COMPID_PROBLEM
Definition: FixValues.h:169

◆ doBadTime()

void FIX::Session::doBadTime ( const Message msg)
private

Definition at line 1146 of file Session.cpp.

References generateLogout(), generateReject(), and FIX::SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM.

Referenced by isCorrectCompID(), and verify().

1147 {
1149  generateLogout();
1150 }
const int SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM
Definition: FixValues.h:154
void generateReject(const Message &, int err, int field=0)
Definition: Session.cpp:805
void generateLogout(const std::string &text="")
Definition: Session.cpp:996

◆ doesSessionExist()

bool FIX::Session::doesSessionExist ( const SessionID sessionID)
static

Definition at line 1490 of file Session.cpp.

References s_mutex, and s_sessions.

Referenced by getDataDictionaryProvider().

1491 {
1492  Locker locker( s_mutex );
1493  return s_sessions.end() != s_sessions.find( sessionID );
1494 }
static Sessions s_sessions
Definition: Session.h:344
static Mutex s_mutex
Definition: Session.h:347

◆ doPossDup()

bool FIX::Session::doPossDup ( const Message msg)
private

Definition at line 1158 of file Session.cpp.

References generateLogout(), generateReject(), FIX::FieldMap::getField(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::FIELD::MsgType, FIX::MsgType_SequenceReset, FIX::FIELD::OrigSendingTime, FIX::FIELD::SendingTime, FIX::SessionRejectReason_REQUIRED_TAG_MISSING, and FIX::SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM.

Referenced by doTargetTooLow(), and isCorrectCompID().

1159 {
1160  const Header & header = msg.getHeader();
1161  OrigSendingTime origSendingTime;
1162  SendingTime sendingTime;
1163  MsgType msgType;
1164 
1165  header.getField( msgType );
1166  header.getField( sendingTime );
1167 
1168  if ( msgType != MsgType_SequenceReset )
1169  {
1170  if ( !header.getFieldIfSet( origSendingTime ) )
1171  {
1172  generateReject( msg, SessionRejectReason_REQUIRED_TAG_MISSING, origSendingTime.getTag() );
1173  return false;
1174  }
1175 
1176  if ( origSendingTime > sendingTime )
1177  {
1179  generateLogout();
1180  return false;
1181  }
1182  }
1183  return true;
1184 }
const int OrigSendingTime
const char MsgType_SequenceReset[]
Definition: FixValues.h:12
const int SendingTime
const int SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM
Definition: FixValues.h:154
void generateReject(const Message &, int err, int field=0)
Definition: Session.cpp:805
void generateLogout(const std::string &text="")
Definition: Session.cpp:996
const int SessionRejectReason_REQUIRED_TAG_MISSING
Definition: FixValues.h:153
const int MsgType

◆ doTargetTooHigh()

void FIX::Session::doTargetTooHigh ( const Message msg)
private

Definition at line 1206 of file Session.cpp.

References FIX::FIELD::BeginString, FIX::IntConvertor::convert(), generateResendRequest(), getExpectedTargetNum(), FIX::FieldMap::getField(), FIX::Message::getHeader(), m_sendRedundantResendRequests, m_state, FIX::FIELD::MsgSeqNum, FIX::SessionState::onEvent(), FIX::SessionState::queue(), FIX::SessionState::resendRange(), and FIX::SessionState::resendRequested().

Referenced by isCorrectCompID(), nextLogon(), and verify().

1207 {
1208  const Header & header = msg.getHeader();
1209  BeginString beginString;
1210  MsgSeqNum msgSeqNum;
1211  header.getField( beginString );
1212  header.getField( msgSeqNum );
1213 
1214  m_state.onEvent( "MsgSeqNum too high, expecting "
1216  + " but received "
1217  + IntConvertor::convert( msgSeqNum ) );
1218 
1219  m_state.queue( msgSeqNum, msg );
1220 
1221  if( m_state.resendRequested() )
1222  {
1224 
1225  if( !m_sendRedundantResendRequests && msgSeqNum >= range.first )
1226  {
1227  m_state.onEvent ("Already sent ResendRequest FROM: " +
1228  IntConvertor::convert (range.first) + " TO: " +
1229  IntConvertor::convert (range.second) +
1230  ". Not sending another.");
1231  return;
1232  }
1233  }
1234 
1235  generateResendRequest( beginString, msgSeqNum );
1236 }
int getExpectedTargetNum()
Definition: Session.h:225
std::pair< int, int > ResendRange
Definition: SessionState.h:83
void generateResendRequest(const BeginString &, const MsgSeqNum &)
Definition: Session.cpp:718
void queue(int msgSeqNum, const Message &message)
Definition: SessionState.h:155
static std::string convert(signed_int value)
bool resendRequested() const
Definition: SessionState.h:80
SessionState m_state
Definition: Session.h:337
ResendRange resendRange() const
Definition: SessionState.h:85
void onEvent(const std::string &string)
Definition: SessionState.h:204
const int BeginString
const int MsgSeqNum
bool m_sendRedundantResendRequests
Definition: Session.h:325

◆ doTargetTooLow()

bool FIX::Session::doTargetTooLow ( const Message msg)
private

Definition at line 1186 of file Session.cpp.

References doPossDup(), generateLogout(), getExpectedTargetNum(), FIX::FieldMap::getField(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::FIELD::MsgSeqNum, and FIX::FIELD::PossDupFlag.

Referenced by isCorrectCompID(), and verify().

1187 {
1188  const Header & header = msg.getHeader();
1189  PossDupFlag possDupFlag(false);
1190  MsgSeqNum msgSeqNum;
1191  header.getFieldIfSet(possDupFlag);
1192  header.getField( msgSeqNum );
1193 
1194  if ( !possDupFlag )
1195  {
1196  std::stringstream stream;
1197  stream << "MsgSeqNum too low, expecting " << getExpectedTargetNum()
1198  << " but received " << msgSeqNum;
1199  generateLogout( stream.str() );
1200  throw std::logic_error( stream.str() );
1201  }
1202 
1203  return doPossDup( msg );
1204 }
int getExpectedTargetNum()
Definition: Session.h:225
void generateLogout(const std::string &text="")
Definition: Session.cpp:996
const int PossDupFlag
const int MsgSeqNum
bool doPossDup(const Message &msg)
Definition: Session.cpp:1158

◆ fill()

void FIX::Session::fill ( Header header)
private

Definition at line 114 of file Session.cpp.

References FIX::SessionID::getBeginString(), getExpectedSenderNum(), FIX::SessionID::getSenderCompID(), FIX::SessionID::getTargetCompID(), insertSendingTime(), FIX::SessionState::lastSentTime(), m_sessionID, m_state, FIX::FIELD::MsgSeqNum, and FIX::FieldMap::setField().

Referenced by generateBusinessReject(), generateHeartbeat(), generateLogon(), generateLogout(), generateReject(), generateResendRequest(), generateSequenceReset(), generateTestRequest(), and sendRaw().

115 {
116  UtcTimeStamp now;
117  m_state.lastSentTime( now );
118  header.setField( m_sessionID.getBeginString() );
119  header.setField( m_sessionID.getSenderCompID() );
120  header.setField( m_sessionID.getTargetCompID() );
121  header.setField( MsgSeqNum( getExpectedSenderNum() ) );
122  insertSendingTime( header );
123 }
int getExpectedSenderNum()
Definition: Session.h:224
SessionID m_sessionID
Definition: Session.h:319
const TargetCompID & getTargetCompID() const
Definition: SessionID.h:57
void lastSentTime(const UtcTimeStamp &value)
Definition: SessionState.h:101
SessionState m_state
Definition: Session.h:337
void insertSendingTime(Header &)
Definition: Session.cpp:91
const BeginString & getBeginString() const
Definition: SessionID.h:53
const int MsgSeqNum
const SenderCompID & getSenderCompID() const
Definition: SessionID.h:55

◆ fromCallback()

void FIX::Session::fromCallback ( const MsgType &  msgType,
const Message msg,
const SessionID sessionID 
)
private

Definition at line 1137 of file Session.cpp.

References FIX::Application::fromAdmin(), FIX::Application::fromApp(), FIX::Message::isAdminMsgType(), m_application, and m_sessionID.

Referenced by isCorrectCompID(), and verify().

1139 {
1140  if ( Message::isAdminMsgType( msgType ) )
1142  else
1144 }
static bool isAdminMsgType(const MsgType &msgType)
Definition: Message.h:300
SessionID m_sessionID
Definition: Session.h:319
virtual void fromApp(const Message &, const SessionID &)=0
Notification of app message being received from target.
virtual void fromAdmin(const Message &, const SessionID &)=0
Notification of admin message being received from target.
Application & m_application
Definition: Session.h:318

◆ generateBusinessReject()

void FIX::Session::generateBusinessReject ( const Message message,
int  err,
int  field = 0 
)
private

Definition at line 931 of file Session.cpp.

References FIX::FIELD::BusinessRejectReason, FIX::BusinessRejectReason_APPLICATION_NOT_AVAILABLE, FIX::BusinessRejectReason_APPLICATION_NOT_AVAILABLE_TEXT, FIX::BusinessRejectReason_CONDITIONALLY_REQUIRED_FIELD_MISSING, FIX::BusinessRejectReason_CONDITIONALLY_REQUIRED_FIELD_MISSING_TEXT, FIX::BusinessRejectReason_DELIVERTO_FIRM_NOT_AVAILABLE_AT_THIS_TIME, FIX::BusinessRejectReason_DELIVERTO_FIRM_NOT_AVAILABLE_AT_THIS_TIME_TEXT, FIX::BusinessRejectReason_NOT_AUTHORIZED, FIX::BusinessRejectReason_NOT_AUTHORIZED_TEXT, FIX::BusinessRejectReason_OTHER, FIX::BusinessRejectReason_OTHER_TEXT, FIX::BusinessRejectReason_UNKNOWN_ID, FIX::BusinessRejectReason_UNKNOWN_ID_TEXT, FIX::BusinessRejectReason_UNKNOWN_MESSAGE_TYPE, FIX::BusinessRejectReason_UNKNOWN_SECURITY, FIX::BusinessRejectReason_UNKNOWN_SECURITY_TEXT, FIX::BusinessRejectReason_UNSUPPORTED_MESSAGE_TYPE_TEXT, FIX::IntConvertor::convert(), FIX::FIELD::DefaultApplVerID, fill(), FIX::FieldMap::getField(), FIX::Message::getHeader(), FIX::SessionState::incrNextTargetMsgSeqNum(), FIX::SessionID::isFIXT(), m_senderDefaultApplVerID, m_sessionID, m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, FIX::MsgType_BusinessMessageReject, newMessage(), FIX::SessionState::onEvent(), populateRejectReason(), FIX::FIELD::RefMsgType, FIX::FIELD::RefSeqNum, sendRaw(), and FIX::FieldMap::setField().

Referenced by isCorrectCompID(), and next().

932 {
933  SmartPtr<Message> pMsg(newMessage("j"));
934  Message & reject = *pMsg;
935 
936  reject.getHeader().setField( MsgType( MsgType_BusinessMessageReject ) );
937  if( m_sessionID.isFIXT() )
938  reject.setField( DefaultApplVerID(m_senderDefaultApplVerID) );
939  fill( reject.getHeader() );
940  MsgType msgType;
941  MsgSeqNum msgSeqNum;
942  message.getHeader().getField( msgType );
943  message.getHeader().getField( msgSeqNum );
944  reject.setField( RefMsgType( msgType ) );
945  reject.setField( RefSeqNum( msgSeqNum ) );
946  reject.setField( BusinessRejectReason( err ) );
948 
949  const char* reason = 0;
950  switch ( err )
951  {
954  break;
957  break;
960  break;
963  break;
966  break;
969  break;
972  break;
975  break;
976  };
977 
978  if ( reason && field )
979  {
980  populateRejectReason( reject, field, reason );
981  m_state.onEvent( "Message " + msgSeqNum.getString() + " Rejected: "
982  + reason + ":" + IntConvertor::convert( field ) );
983  }
984  else if ( reason )
985  {
986  populateRejectReason( reject, reason );
987  m_state.onEvent( "Message " + msgSeqNum.getString()
988  + " Rejected: " + reason );
989  }
990  else
991  m_state.onEvent( "Message " + msgSeqNum.getString() + " Rejected" );
992 
993  sendRaw( reject );
994 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
const int BusinessRejectReason_UNKNOWN_ID
Definition: FixValues.h:1194
void populateRejectReason(Message &, int field, const std::string &)
Definition: Session.cpp:1009
const int RefMsgType
const int BusinessRejectReason_OTHER
Definition: FixValues.h:1186
const char BusinessRejectReason_NOT_AUTHORIZED_TEXT[]
Definition: Values.h:59
const int BusinessRejectReason_APPLICATION_NOT_AVAILABLE
Definition: FixValues.h:1190
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
const int BusinessRejectReason_NOT_AUTHORIZED
Definition: FixValues.h:1193
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
SessionID m_sessionID
Definition: Session.h:319
const char BusinessRejectReason_CONDITIONALLY_REQUIRED_FIELD_MISSING_TEXT[]
Definition: Values.h:58
static std::string convert(signed_int value)
const int BusinessRejectReason_UNKNOWN_MESSAGE_TYPE
Definition: FixValues.h:1195
const char BusinessRejectReason_UNKNOWN_ID_TEXT[]
Definition: Values.h:54
const int BusinessRejectReason_CONDITIONALLY_REQUIRED_FIELD_MISSING
Definition: FixValues.h:1191
std::string m_senderDefaultApplVerID
Definition: Session.h:323
const char BusinessRejectReason_APPLICATION_NOT_AVAILABLE_TEXT[]
Definition: Values.h:57
const char BusinessRejectReason_UNSUPPORTED_MESSAGE_TYPE_TEXT[]
Definition: Values.h:56
const int BusinessRejectReason_UNKNOWN_SECURITY
Definition: FixValues.h:1188
const int BusinessRejectReason_DELIVERTO_FIRM_NOT_AVAILABLE_AT_THIS_TIME
Definition: FixValues.h:1192
SessionState m_state
Definition: Session.h:337
const char BusinessRejectReason_OTHER_TEXT[]
Definition: Values.h:53
const bool isFIXT() const
Definition: SessionID.h:61
void onEvent(const std::string &string)
Definition: SessionState.h:204
const char MsgType_BusinessMessageReject[]
Definition: FixValues.h:50
const int DefaultApplVerID
void fill(Header &)
Definition: Session.cpp:114
const int MsgSeqNum
const int RefSeqNum
const char BusinessRejectReason_UNKNOWN_SECURITY_TEXT[]
Definition: Values.h:55
const char BusinessRejectReason_DELIVERTO_FIRM_NOT_AVAILABLE_AT_THIS_TIME_TEXT[]
Definition: Values.h:60
const int BusinessRejectReason
const int MsgType

◆ generateHeartbeat() [1/2]

void FIX::Session::generateHeartbeat ( )
private

Definition at line 764 of file Session.cpp.

References fill(), FIX::Message::getHeader(), FIX::FIELD::MsgType, newMessage(), sendRaw(), and FIX::FieldMap::setField().

Referenced by isCorrectCompID(), next(), and nextTestRequest().

765 {
766  SmartPtr<Message> pMsg(newMessage("0"));
767  Message & heartbeat = *pMsg;
768 
769  heartbeat.getHeader().setField( MsgType( "0" ) );
770  fill( heartbeat.getHeader() );
771  sendRaw( heartbeat );
772 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
void fill(Header &)
Definition: Session.cpp:114
const int MsgType

◆ generateHeartbeat() [2/2]

void FIX::Session::generateHeartbeat ( const Message testRequest)
private

Definition at line 774 of file Session.cpp.

References fill(), FIX::FieldMap::getField(), FIX::Message::getHeader(), FIX::FIELD::MsgType, newMessage(), sendRaw(), FIX::FieldMap::setField(), and FIX::FIELD::TestReqID.

775 {
776  SmartPtr<Message> pMsg(newMessage("0"));
777  Message & heartbeat = *pMsg;
778 
779  heartbeat.getHeader().setField( MsgType( "0" ) );
780  fill( heartbeat.getHeader() );
781  try
782  {
783  TestReqID testReqID;
784  testRequest.getField( testReqID );
785  heartbeat.setField( testReqID );
786  }
787  catch ( FieldNotFound& ) {}
788 
789  sendRaw( heartbeat );
790 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
void fill(Header &)
Definition: Session.cpp:114
const int TestReqID
const int MsgType

◆ generateLogon() [1/2]

void FIX::Session::generateLogon ( )
private

Definition at line 673 of file Session.cpp.

References FIX::FIELD::DefaultApplVerID, FIX::FIELD::EncryptMethod, fill(), FIX::Message::getHeader(), FIX::SessionState::heartBtInt(), FIX::SessionID::isFIXT(), FIX::SessionState::lastReceivedTime(), logon(), m_refreshOnLogon, m_resetOnLogon, m_senderDefaultApplVerID, m_sessionID, m_state, FIX::FIELD::MsgType, newMessage(), refresh(), FIX::SessionState::reset(), FIX::FIELD::ResetSeqNumFlag, sendRaw(), FIX::SessionState::sentLogon(), FIX::FieldMap::setField(), shouldSendReset(), and FIX::SessionState::testRequest().

Referenced by isCorrectCompID(), next(), and nextLogon().

674 {
675  SmartPtr<Message> pMsg(newMessage("A"));
676  Message & logon = *pMsg;
677 
678  logon.getHeader().setField( MsgType( "A" ) );
679  logon.setField( EncryptMethod( 0 ) );
680  logon.setField( m_state.heartBtInt() );
681  if( m_sessionID.isFIXT() )
682  logon.setField( DefaultApplVerID(m_senderDefaultApplVerID) );
683  if( m_refreshOnLogon )
684  refresh();
685  if( m_resetOnLogon )
686  m_state.reset();
687  if( shouldSendReset() )
688  logon.setField( ResetSeqNumFlag(true) );
689 
690  fill( logon.getHeader() );
691  UtcTimeStamp now;
692  m_state.lastReceivedTime( now );
693  m_state.testRequest( 0 );
694  m_state.sentLogon( true );
695  sendRaw( logon );
696 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
void lastReceivedTime(const UtcTimeStamp &value)
Definition: SessionState.h:108
int testRequest() const
Definition: SessionState.h:77
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
SessionID m_sessionID
Definition: Session.h:319
void refresh()
Definition: Session.h:68
bool m_resetOnLogon
Definition: Session.h:329
std::string m_senderDefaultApplVerID
Definition: Session.h:323
const int EncryptMethod
SessionState m_state
Definition: Session.h:337
const bool isFIXT() const
Definition: SessionID.h:61
bool shouldSendReset()
Definition: Session.cpp:1106
bool sentLogon() const
Definition: SessionState.h:59
const int DefaultApplVerID
void fill(Header &)
Definition: Session.cpp:114
const int ResetSeqNumFlag
bool m_refreshOnLogon
Definition: Session.h:332
const int MsgType
void heartBtInt(const HeartBtInt &value)
Definition: SessionState.h:94
void logon()
Definition: Session.h:55

◆ generateLogon() [2/2]

void FIX::Session::generateLogon ( const Message aLogon)
private

Definition at line 698 of file Session.cpp.

References FIX::FIELD::DefaultApplVerID, FIX::FIELD::EncryptMethod, fill(), FIX::FieldMap::getField(), FIX::Message::getHeader(), FIX::FIELD::HeartBtInt, FIX::SessionID::isFIXT(), logon(), m_senderDefaultApplVerID, m_sessionID, m_state, FIX::FIELD::MsgType, newMessage(), FIX::SessionState::receivedReset(), FIX::FIELD::ResetSeqNumFlag, sendRaw(), FIX::SessionState::sentLogon(), and FIX::FieldMap::setField().

699 {
700  SmartPtr<Message> pMsg(newMessage("A"));
701  Message & logon = *pMsg;
702 
703  EncryptMethod encryptMethod;
704  HeartBtInt heartBtInt;
705  logon.setField( EncryptMethod( 0 ) );
706  if( m_sessionID.isFIXT() )
707  logon.setField( DefaultApplVerID(m_senderDefaultApplVerID) );
708  if( m_state.receivedReset() )
709  logon.setField( ResetSeqNumFlag(true) );
710  aLogon.getField( heartBtInt );
711  logon.getHeader().setField( MsgType( "A" ) );
712  logon.setField( heartBtInt );
713  fill( logon.getHeader() );
714  sendRaw( logon );
715  m_state.sentLogon( true );
716 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
const int HeartBtInt
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
SessionID m_sessionID
Definition: Session.h:319
bool receivedReset() const
Definition: SessionState.h:62
std::string m_senderDefaultApplVerID
Definition: Session.h:323
const int EncryptMethod
SessionState m_state
Definition: Session.h:337
const bool isFIXT() const
Definition: SessionID.h:61
bool sentLogon() const
Definition: SessionState.h:59
const int DefaultApplVerID
void fill(Header &)
Definition: Session.cpp:114
const int ResetSeqNumFlag
const int MsgType
void logon()
Definition: Session.h:55

◆ generateLogout()

void FIX::Session::generateLogout ( const std::string &  text = "")
private

Definition at line 996 of file Session.cpp.

References fill(), FIX::Message::getHeader(), logout(), m_state, FIX::FIELD::MsgType, FIX::MsgType_Logout, newMessage(), sendRaw(), FIX::SessionState::sentLogout(), FIX::FieldMap::setField(), and FIX::FIELD::Text.

Referenced by doBadCompID(), doBadTime(), doPossDup(), doTargetTooLow(), isCorrectCompID(), next(), nextLogout(), and reset().

997 {
998  SmartPtr<Message> pMsg(newMessage("5"));
999  Message & logout = *pMsg;
1000 
1001  logout.getHeader().setField( MsgType( MsgType_Logout ) );
1002  fill( logout.getHeader() );
1003  if ( text.length() )
1004  logout.setField( Text( text ) );
1005  sendRaw( logout );
1006  m_state.sentLogout( true );
1007 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
SessionState m_state
Definition: Session.h:337
const int Text
void logout(const std::string &reason="")
Definition: Session.h:57
void fill(Header &)
Definition: Session.cpp:114
const char MsgType_Logout[]
Definition: FixValues.h:13
bool sentLogout() const
Definition: SessionState.h:56
const int MsgType

◆ generateReject() [1/2]

void FIX::Session::generateReject ( const Message message,
int  err,
int  field = 0 
)
private

Definition at line 805 of file Session.cpp.

References FIX::BeginString_FIX42, FIX::IntConvertor::convert(), fill(), FIX::SessionID::getBeginString(), getExpectedTargetNum(), FIX::FieldMap::getField(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::SessionState::incrNextTargetMsgSeqNum(), m_sessionID, m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, FIX::MsgType_Logon, FIX::MsgType_SequenceReset, newMessage(), FIX::SessionState::onEvent(), populateRejectReason(), FIX::SessionState::receivedLogon(), FIX::FIELD::RefMsgType, FIX::FIELD::RefSeqNum, FIX::Message::reverseRoute(), sendRaw(), FIX::FIELD::SessionRejectReason, FIX::SessionRejectReason_COMPID_PROBLEM, FIX::SessionRejectReason_COMPID_PROBLEM_TEXT, FIX::SessionRejectReason_INCORRECT_DATA_FORMAT_FOR_VALUE, FIX::SessionRejectReason_INCORRECT_DATA_FORMAT_FOR_VALUE_TEXT, FIX::SessionRejectReason_INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP, FIX::SessionRejectReason_INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP_TEXT, FIX::SessionRejectReason_INVALID_MSGTYPE, FIX::SessionRejectReason_INVALID_MSGTYPE_TEXT, FIX::SessionRejectReason_INVALID_TAG_NUMBER, FIX::SessionRejectReason_INVALID_TAG_NUMBER_TEXT, FIX::SessionRejectReason_REQUIRED_TAG_MISSING, FIX::SessionRejectReason_REQUIRED_TAG_MISSING_TEXT, FIX::SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM, FIX::SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM_TEXT, FIX::SessionRejectReason_TAG_APPEARS_MORE_THAN_ONCE, FIX::SessionRejectReason_TAG_APPEARS_MORE_THAN_ONCE_TEXT, FIX::SessionRejectReason_TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE, FIX::SessionRejectReason_TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE_TEXT, FIX::SessionRejectReason_TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER, FIX::SessionRejectReason_TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER_TEXT, FIX::SessionRejectReason_TAG_SPECIFIED_WITHOUT_A_VALUE, FIX::SessionRejectReason_TAG_SPECIFIED_WITHOUT_A_VALUE_TEXT, FIX::SessionRejectReason_VALUE_IS_INCORRECT, FIX::SessionRejectReason_VALUE_IS_INCORRECT_TEXT, and FIX::FieldMap::setField().

Referenced by doBadCompID(), doBadTime(), doPossDup(), isCorrectCompID(), next(), and nextSequenceReset().

806 {
807  std::string beginString = m_sessionID.getBeginString();
808 
809  SmartPtr<Message> pMsg(newMessage("3"));
810  Message & reject = *pMsg;
811 
812  reject.getHeader().setField( MsgType( "3" ) );
813  reject.reverseRoute( message.getHeader() );
814  fill( reject.getHeader() );
815 
816  MsgSeqNum msgSeqNum;
817  MsgType msgType;
818 
819  message.getHeader().getField( msgType );
820  if( message.getHeader().getFieldIfSet( msgSeqNum ) )
821  {
822  if( msgSeqNum.getString() != "" )
823  reject.setField( RefSeqNum( msgSeqNum ) );
824  }
825 
826  if ( beginString >= FIX::BeginString_FIX42 )
827  {
828  if( msgType.getString() != "" )
829  reject.setField( RefMsgType( msgType ) );
830  if ( (beginString == FIX::BeginString_FIX42
832  || beginString > FIX::BeginString_FIX42 )
833  {
834  reject.setField( SessionRejectReason( err ) );
835  }
836  }
837  if ( msgType != MsgType_Logon && msgType != MsgType_SequenceReset
838  && msgSeqNum == getExpectedTargetNum() )
840 
841  const char* reason = 0;
842  switch ( err )
843  {
846  break;
849  break;
852  break;
855  break;
858  break;
861  break;
864  break;
867  break;
870  break;
873  break;
876  break;
879  };
880 
881  if ( reason && ( field || err == SessionRejectReason_INVALID_TAG_NUMBER ) )
882  {
883  populateRejectReason( reject, field, reason );
884  m_state.onEvent( "Message " + msgSeqNum.getString() + " Rejected: "
885  + reason + ":" + IntConvertor::convert( field ) );
886  }
887  else if ( reason )
888  {
889  populateRejectReason( reject, reason );
890  m_state.onEvent( "Message " + msgSeqNum.getString()
891  + " Rejected: " + reason );
892  }
893  else
894  m_state.onEvent( "Message " + msgSeqNum.getString() + " Rejected" );
895 
896  if ( !m_state.receivedLogon() )
897  throw std::runtime_error( "Tried to send a reject while not logged on" );
898 
899  sendRaw( reject );
900 }
int getExpectedTargetNum()
Definition: Session.h:225
const char SessionRejectReason_COMPID_PROBLEM_TEXT[]
Definition: Values.h:47
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
void populateRejectReason(Message &, int field, const std::string &)
Definition: Session.cpp:1009
const int RefMsgType
const char BeginString_FIX42[]
Definition: Values.h:34
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
const char SessionRejectReason_INCORRECT_DATA_FORMAT_FOR_VALUE_TEXT[]
Definition: Values.h:44
const char SessionRejectReason_TAG_APPEARS_MORE_THAN_ONCE_TEXT[]
Definition: Values.h:50
const char SessionRejectReason_INVALID_TAG_NUMBER_TEXT[]
Definition: Values.h:38
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
SessionID m_sessionID
Definition: Session.h:319
const int SessionRejectReason_TAG_APPEARS_MORE_THAN_ONCE
Definition: FixValues.h:157
const int SessionRejectReason_TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER
Definition: FixValues.h:158
const char SessionRejectReason_VALUE_IS_INCORRECT_TEXT[]
Definition: Values.h:43
const char MsgType_SequenceReset[]
Definition: FixValues.h:12
static std::string convert(signed_int value)
const int SessionRejectReason_INVALID_MSGTYPE
Definition: FixValues.h:155
const char SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM_TEXT[]
Definition: Values.h:48
const int SessionRejectReason
const char SessionRejectReason_INVALID_MSGTYPE_TEXT[]
Definition: Values.h:49
const char SessionRejectReason_REQUIRED_TAG_MISSING_TEXT[]
Definition: Values.h:39
const int SessionRejectReason_SENDINGTIME_ACCURACY_PROBLEM
Definition: FixValues.h:154
const char SessionRejectReason_TAG_SPECIFIED_WITHOUT_A_VALUE_TEXT[]
Definition: Values.h:42
const int SessionRejectReason_INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP
Definition: FixValues.h:160
const char SessionRejectReason_INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP_TEXT[]
Definition: Values.h:52
SessionState m_state
Definition: Session.h:337
bool receivedLogon() const
Definition: SessionState.h:53
const int SessionRejectReason_INCORRECT_DATA_FORMAT_FOR_VALUE
Definition: FixValues.h:166
const int SessionRejectReason_TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE
Definition: FixValues.h:162
const BeginString & getBeginString() const
Definition: SessionID.h:53
void onEvent(const std::string &string)
Definition: SessionState.h:204
const char MsgType_Logon[]
Definition: FixValues.h:14
const char SessionRejectReason_TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER_TEXT[]
Definition: Values.h:51
void fill(Header &)
Definition: Session.cpp:114
const int SessionRejectReason_COMPID_PROBLEM
Definition: FixValues.h:169
const int MsgSeqNum
const char SessionRejectReason_TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE_TEXT[]
Definition: Values.h:40
const int SessionRejectReason_INVALID_TAG_NUMBER
Definition: FixValues.h:152
const int RefSeqNum
const int SessionRejectReason_REQUIRED_TAG_MISSING
Definition: FixValues.h:153
const int MsgType
const int SessionRejectReason_TAG_SPECIFIED_WITHOUT_A_VALUE
Definition: FixValues.h:164
const int SessionRejectReason_VALUE_IS_INCORRECT
Definition: FixValues.h:165

◆ generateReject() [2/2]

void FIX::Session::generateReject ( const Message message,
const std::string &  str 
)
private

Definition at line 902 of file Session.cpp.

References FIX::BeginString_FIX42, fill(), FIX::SessionID::getBeginString(), FIX::FieldMap::getField(), FIX::Message::getHeader(), FIX::SessionState::incrNextTargetMsgSeqNum(), m_sessionID, m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, FIX::MsgType_Logon, FIX::MsgType_SequenceReset, newMessage(), FIX::SessionState::onEvent(), FIX::FIELD::RefMsgType, FIX::FIELD::RefSeqNum, FIX::Message::reverseRoute(), sendRaw(), FIX::FieldMap::setField(), and FIX::FIELD::Text.

903 {
904  std::string beginString = m_sessionID.getBeginString();
905 
906  SmartPtr<Message> pMsg(newMessage("3"));
907  Message & reject = *pMsg;
908 
909  reject.getHeader().setField( MsgType( "3" ) );
910  reject.reverseRoute( message.getHeader() );
911  fill( reject.getHeader() );
912 
913  MsgType msgType;
914  MsgSeqNum msgSeqNum;
915 
916  message.getHeader().getField( msgType );
917  message.getHeader().getField( msgSeqNum );
918  if ( beginString >= FIX::BeginString_FIX42 )
919  reject.setField( RefMsgType( msgType ) );
920  reject.setField( RefSeqNum( msgSeqNum ) );
921 
922  if ( msgType != MsgType_Logon && msgType != MsgType_SequenceReset )
924 
925  reject.setField( Text( str ) );
926  sendRaw( reject );
927  m_state.onEvent( "Message " + msgSeqNum.getString()
928  + " Rejected: " + str );
929 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
const int RefMsgType
const char BeginString_FIX42[]
Definition: Values.h:34
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
SessionID m_sessionID
Definition: Session.h:319
const char MsgType_SequenceReset[]
Definition: FixValues.h:12
SessionState m_state
Definition: Session.h:337
const BeginString & getBeginString() const
Definition: SessionID.h:53
const int Text
void onEvent(const std::string &string)
Definition: SessionState.h:204
const char MsgType_Logon[]
Definition: FixValues.h:14
void fill(Header &)
Definition: Session.cpp:114
const int MsgSeqNum
const int RefSeqNum
const int MsgType

◆ generateResendRequest()

void FIX::Session::generateResendRequest ( const BeginString &  beginString,
const MsgSeqNum &  msgSeqNum 
)
private

Definition at line 718 of file Session.cpp.

References FIX::FIELD::BeginSeqNo, FIX::BeginString_FIX41, FIX::BeginString_FIX42, FIX::IntConvertor::convert(), FIX::FIELD::EndSeqNo, fill(), generateSequenceReset(), getExpectedTargetNum(), FIX::Message::getHeader(), m_state, FIX::FIELD::MsgType, newMessage(), FIX::SessionState::onEvent(), FIX::SessionState::resendRange(), sendRaw(), and FIX::FieldMap::setField().

Referenced by doTargetTooHigh(), and isCorrectCompID().

719 {
720  SmartPtr<Message> pMsg(newMessage("2"));
721  Message & resendRequest = *pMsg;
722 
723  BeginSeqNo beginSeqNo( ( int ) getExpectedTargetNum() );
724  EndSeqNo endSeqNo( msgSeqNum - 1 );
725  if ( beginString >= FIX::BeginString_FIX42 )
726  endSeqNo = 0;
727  else if( beginString <= FIX::BeginString_FIX41 )
728  endSeqNo = 999999;
729  resendRequest.getHeader().setField( MsgType( "2" ) );
730  resendRequest.setField( beginSeqNo );
731  resendRequest.setField( endSeqNo );
732  fill( resendRequest.getHeader() );
733  sendRaw( resendRequest );
734 
735  m_state.onEvent( "Sent ResendRequest FROM: "
736  + IntConvertor::convert( beginSeqNo ) +
737  " TO: " + IntConvertor::convert( endSeqNo ) );
738 
739  m_state.resendRange( beginSeqNo, msgSeqNum - 1 );
740 }
int getExpectedTargetNum()
Definition: Session.h:225
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
const int BeginSeqNo
const char BeginString_FIX42[]
Definition: Values.h:34
const int EndSeqNo
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
static std::string convert(signed_int value)
SessionState m_state
Definition: Session.h:337
ResendRange resendRange() const
Definition: SessionState.h:85
const char BeginString_FIX41[]
Definition: Values.h:35
void onEvent(const std::string &string)
Definition: SessionState.h:204
void fill(Header &)
Definition: Session.cpp:114
const int MsgType

◆ generateSequenceReset()

void FIX::Session::generateSequenceReset ( int  beginSeqNo,
int  endSeqNo 
)
private

Definition at line 743 of file Session.cpp.

References FIX::IntConvertor::convert(), fill(), FIX::FIELD::GapFillFlag, FIX::FieldMap::getField(), FIX::Message::getHeader(), insertOrigSendingTime(), m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, newMessage(), FIX::FIELD::NewSeqNo, FIX::SessionState::onEvent(), FIX::FIELD::PossDupFlag, FIX::FIELD::SendingTime, sendRaw(), and FIX::FieldMap::setField().

Referenced by generateResendRequest(), isCorrectCompID(), and nextResendRequest().

744 {
745  SmartPtr<Message> pMsg(newMessage("4"));
746  Message & sequenceReset = *pMsg;
747 
748  NewSeqNo newSeqNo( endSeqNo );
749  sequenceReset.getHeader().setField( MsgType( "4" ) );
750  sequenceReset.getHeader().setField( PossDupFlag( true ) );
751  sequenceReset.setField( newSeqNo );
752  fill( sequenceReset.getHeader() );
753 
754  SendingTime sendingTime;
755  sequenceReset.getHeader().getField( sendingTime );
756  insertOrigSendingTime( sequenceReset.getHeader(), sendingTime );
757  sequenceReset.getHeader().setField( MsgSeqNum( beginSeqNo ) );
758  sequenceReset.setField( GapFillFlag( true ) );
759  sendRaw( sequenceReset, beginSeqNo );
760  m_state.onEvent( "Sent SequenceReset TO: "
761  + IntConvertor::convert( newSeqNo ) );
762 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
const int NewSeqNo
static std::string convert(signed_int value)
const int SendingTime
const int GapFillFlag
SessionState m_state
Definition: Session.h:337
void onEvent(const std::string &string)
Definition: SessionState.h:204
void fill(Header &)
Definition: Session.cpp:114
const int PossDupFlag
const int MsgSeqNum
void insertOrigSendingTime(Header &, const UtcTimeStamp &when=UtcTimeStamp())
Definition: Session.cpp:103
const int MsgType

◆ generateTestRequest()

void FIX::Session::generateTestRequest ( const std::string &  id)
private

Definition at line 792 of file Session.cpp.

References fill(), FIX::Message::getHeader(), FIX::FIELD::MsgType, newMessage(), sendRaw(), FIX::FieldMap::setField(), and FIX::FIELD::TestReqID.

Referenced by isCorrectCompID(), and next().

793 {
794  SmartPtr<Message> pMsg(newMessage("1"));
795  Message & testRequest = *pMsg;
796 
797  testRequest.getHeader().setField( MsgType( "1" ) );
798  fill( testRequest.getHeader() );
799  TestReqID testReqID( id );
800  testRequest.setField( testReqID );
801 
802  sendRaw( testRequest );
803 }
Message * newMessage(const std::string &msgType) const
Definition: Session.cpp:492
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
void fill(Header &)
Definition: Session.cpp:114
const int TestReqID
const int MsgType

◆ get()

bool FIX::Session::get ( int  s,
Message m 
) const
private

◆ getCheckCompId()

bool FIX::Session::getCheckCompId ( )
inline

Definition at line 137 of file Session.h.

References m_checkCompId.

Referenced by FIX::HttpConnection::processSession().

138  { return m_checkCompId; }
bool m_checkCompId
Definition: Session.h:326

◆ getCheckLatency()

bool FIX::Session::getCheckLatency ( )
inline

Definition at line 142 of file Session.h.

References m_checkLatency.

Referenced by FIX::HttpConnection::processSession().

143  { return m_checkLatency; }
bool m_checkLatency
Definition: Session.h:327

◆ getDataDictionaryProvider()

const DataDictionaryProvider& FIX::Session::getDataDictionaryProvider ( ) const
inline

◆ getExpectedSenderNum()

int FIX::Session::getExpectedSenderNum ( )
inline

◆ getExpectedTargetNum()

int FIX::Session::getExpectedTargetNum ( )
inline

◆ getHeartBtInt()

const HeartBtInt& FIX::Session::getHeartBtInt ( ) const
inline

Definition at line 230 of file Session.h.

References FIX::SessionState::heartBtInt(), and m_state.

230 { return m_state.heartBtInt(); }
SessionState m_state
Definition: Session.h:337
void heartBtInt(const HeartBtInt &value)
Definition: SessionState.h:94

◆ getLog()

Log* FIX::Session::getLog ( )
inline

◆ getLogonTime()

const TimeRange& FIX::Session::getLogonTime ( )
inline

Definition at line 117 of file Session.h.

References m_logonTime.

118  { return m_logonTime; }
TimeRange m_logonTime
Definition: Session.h:321

◆ getLogonTimeout()

int FIX::Session::getLogonTimeout ( )
inline

Definition at line 152 of file Session.h.

References FIX::SessionState::logonTimeout(), and m_state.

Referenced by FIX::HttpConnection::processSession().

153  { return m_state.logonTimeout(); }
int logonTimeout() const
Definition: SessionState.h:71
SessionState m_state
Definition: Session.h:337

◆ getLogoutTimeout()

int FIX::Session::getLogoutTimeout ( )
inline

Definition at line 157 of file Session.h.

References FIX::SessionState::logoutTimeout(), and m_state.

Referenced by FIX::HttpConnection::processSession().

158  { return m_state.logoutTimeout(); }
int logoutTimeout() const
Definition: SessionState.h:74
SessionState m_state
Definition: Session.h:337

◆ getMaxLatency()

int FIX::Session::getMaxLatency ( )
inline

Definition at line 147 of file Session.h.

References m_maxLatency.

Referenced by FIX::HttpConnection::processSession().

148  { return m_maxLatency; }
int m_maxLatency
Definition: Session.h:328

◆ getMillisecondsInTimeStamp()

bool FIX::Session::getMillisecondsInTimeStamp ( )
inline

Definition at line 182 of file Session.h.

References m_timestampPrecision.

Referenced by FIX::HttpConnection::processSession().

183  { return (m_timestampPrecision == 3); }
int m_timestampPrecision
Definition: Session.h:333

◆ getPersistMessages()

bool FIX::Session::getPersistMessages ( )
inline

Definition at line 200 of file Session.h.

References m_persistMessages.

Referenced by FIX::HttpConnection::processSession().

201  { return m_persistMessages; }
bool m_persistMessages
Definition: Session.h:334

◆ getRefreshOnLogon()

bool FIX::Session::getRefreshOnLogon ( )
inline

Definition at line 177 of file Session.h.

References m_refreshOnLogon.

Referenced by FIX::HttpConnection::processSession().

178  { return m_refreshOnLogon; }
bool m_refreshOnLogon
Definition: Session.h:332

◆ getResetOnDisconnect()

bool FIX::Session::getResetOnDisconnect ( )
inline

Definition at line 172 of file Session.h.

References m_resetOnDisconnect.

Referenced by FIX::HttpConnection::processSession().

173  { return m_resetOnDisconnect; }
bool m_resetOnDisconnect
Definition: Session.h:331

◆ getResetOnLogon()

bool FIX::Session::getResetOnLogon ( )
inline

Definition at line 162 of file Session.h.

References m_resetOnLogon.

Referenced by FIX::HttpConnection::processSession().

163  { return m_resetOnLogon; }
bool m_resetOnLogon
Definition: Session.h:329

◆ getResetOnLogout()

bool FIX::Session::getResetOnLogout ( )
inline

Definition at line 167 of file Session.h.

References m_resetOnLogout.

Referenced by FIX::HttpConnection::processSession().

168  { return m_resetOnLogout; }
bool m_resetOnLogout
Definition: Session.h:330

◆ getSenderDefaultApplVerID()

const std::string& FIX::Session::getSenderDefaultApplVerID ( )
inline

Definition at line 122 of file Session.h.

References m_senderDefaultApplVerID.

Referenced by FIX::MessageCracker::crack().

123  { return m_senderDefaultApplVerID; }
std::string m_senderDefaultApplVerID
Definition: Session.h:323

◆ getSendRedundantResendRequests()

bool FIX::Session::getSendRedundantResendRequests ( )
inline

Definition at line 132 of file Session.h.

References m_sendRedundantResendRequests.

Referenced by FIX::HttpConnection::processSession().

bool m_sendRedundantResendRequests
Definition: Session.h:325

◆ getSessionID()

const SessionID& FIX::Session::getSessionID ( ) const
inline

◆ getSessions()

std::set< SessionID > FIX::Session::getSessions ( )
static

◆ getStore()

const MessageStore* FIX::Session::getStore ( )
inline

Definition at line 228 of file Session.h.

References m_state.

228 { return &m_state; }
SessionState m_state
Definition: Session.h:337

◆ getTargetDefaultApplVerID()

const std::string& FIX::Session::getTargetDefaultApplVerID ( )
inline

Definition at line 127 of file Session.h.

References m_targetDefaultApplVerID.

128  { return m_targetDefaultApplVerID; }
std::string m_targetDefaultApplVerID
Definition: Session.h:324

◆ getTimestampPrecision()

int FIX::Session::getTimestampPrecision ( )
inline

Definition at line 190 of file Session.h.

References m_timestampPrecision.

191  { return m_timestampPrecision; }
int m_timestampPrecision
Definition: Session.h:333

◆ getValidateLengthAndChecksum()

bool FIX::Session::getValidateLengthAndChecksum ( )
inline

Definition at line 205 of file Session.h.

References m_validateLengthAndChecksum.

206  { return m_validateLengthAndChecksum; }
bool m_validateLengthAndChecksum
Definition: Session.h:335

◆ insertOrigSendingTime()

void FIX::Session::insertOrigSendingTime ( Header header,
const UtcTimeStamp when = UtcTimeStamp () 
)
private

Definition at line 103 of file Session.cpp.

References FIX::BeginString_FIX42, FIX::BeginString_FIXT11, FIX::SessionID::getBeginString(), m_sessionID, m_timestampPrecision, FIX::FIELD::OrigSendingTime, and FIX::FieldMap::setField().

Referenced by generateSequenceReset(), and resend().

104 {
105  bool showMilliseconds = false;
107  showMilliseconds = true;
108  else
109  showMilliseconds = m_sessionID.getBeginString() >= BeginString_FIX42;
110 
111  header.setField( OrigSendingTime(when, showMilliseconds ? m_timestampPrecision : 0) );
112 }
const int OrigSendingTime
const char BeginString_FIX42[]
Definition: Values.h:34
const char BeginString_FIXT11[]
Definition: Values.h:30
SessionID m_sessionID
Definition: Session.h:319
int m_timestampPrecision
Definition: Session.h:333
const BeginString & getBeginString() const
Definition: SessionID.h:53

◆ insertSendingTime()

void FIX::Session::insertSendingTime ( Header header)
private

Definition at line 91 of file Session.cpp.

References FIX::BeginString_FIX42, FIX::BeginString_FIXT11, FIX::SessionID::getBeginString(), m_sessionID, m_timestampPrecision, FIX::FIELD::SendingTime, and FIX::FieldMap::setField().

Referenced by fill(), and resend().

92 {
93  UtcTimeStamp now;
94  bool showMilliseconds = false;
96  showMilliseconds = true;
97  else
98  showMilliseconds = m_sessionID.getBeginString() >= BeginString_FIX42;
99 
100  header.setField( SendingTime(now, showMilliseconds ? m_timestampPrecision : 0) );
101 }
const char BeginString_FIX42[]
Definition: Values.h:34
const char BeginString_FIXT11[]
Definition: Values.h:30
SessionID m_sessionID
Definition: Session.h:319
int m_timestampPrecision
Definition: Session.h:333
const int SendingTime
const BeginString & getBeginString() const
Definition: SessionID.h:53

◆ isAcceptor()

bool FIX::Session::isAcceptor ( )
inline

Definition at line 114 of file Session.h.

References FIX::SessionState::initiate(), and m_state.

115  { return !m_state.initiate(); }
bool initiate() const
Definition: SessionState.h:68
SessionState m_state
Definition: Session.h:337

◆ isCorrectCompID()

bool FIX::Session::isCorrectCompID ( const SenderCompID &  senderCompID,
const TargetCompID &  targetCompID 
)
inlineprivate

◆ isEnabled()

bool FIX::Session::isEnabled ( )
inline

◆ isGoodTime()

bool FIX::Session::isGoodTime ( const SendingTime &  sendingTime)
inlineprivate

Definition at line 249 of file Session.h.

References m_checkLatency, and m_maxLatency.

Referenced by verify().

250  {
251  if ( !m_checkLatency ) return true;
252  UtcTimeStamp now;
253  return labs( now - sendingTime ) <= m_maxLatency;
254  }
bool m_checkLatency
Definition: Session.h:327
int m_maxLatency
Definition: Session.h:328

◆ isInitiator()

bool FIX::Session::isInitiator ( )
inline

Definition at line 112 of file Session.h.

References FIX::SessionState::initiate(), and m_state.

Referenced by FIX::HttpConnection::processRoot(), and FIX::HttpConnection::processSession().

113  { return m_state.initiate(); }
bool initiate() const
Definition: SessionState.h:68
SessionState m_state
Definition: Session.h:337

◆ isLoggedOn()

bool FIX::Session::isLoggedOn ( )
inline

◆ isLogonTime()

bool FIX::Session::isLogonTime ( const UtcTimeStamp time)
inline

Definition at line 110 of file Session.h.

References FIX::TimeRange::isInRange(), and m_logonTime.

Referenced by next(), and nextLogon().

111  { return m_logonTime.isInRange(time); }
static bool isInRange(const UtcTimeOnly &start, const UtcTimeOnly &end, const DateTime &time)
Definition: TimeRange.h:43
TimeRange m_logonTime
Definition: Session.h:321

◆ isSessionRegistered()

bool FIX::Session::isSessionRegistered ( const SessionID sessionID)
static

Definition at line 1531 of file Session.cpp.

References s_mutex, and s_registered.

Referenced by getDataDictionaryProvider(), FIX::SocketConnection::isValidSession(), registerSession(), and FIX::ThreadedSocketConnection::setSession().

1532 {
1533  Locker locker( s_mutex );
1534  return s_registered.end() != s_registered.find( sessionID );
1535 }
static Mutex s_mutex
Definition: Session.h:347
static Sessions s_registered
Definition: Session.h:346

◆ isSessionTime()

bool FIX::Session::isSessionTime ( const UtcTimeStamp time)
inline

Definition at line 108 of file Session.h.

References FIX::TimeRange::isInRange(), and m_sessionTime.

Referenced by FIX::Initiator::connect(), FIX::SocketInitiator::doConnect(), FIX::ThreadedSocketInitiator::doConnect(), FIX::HttpConnection::processRoot(), and FIX::HttpConnection::processSession().

109  { return m_sessionTime.isInRange(time); }
static bool isInRange(const UtcTimeOnly &start, const UtcTimeOnly &end, const DateTime &time)
Definition: TimeRange.h:43
TimeRange m_sessionTime
Definition: Session.h:320

◆ isTargetTooHigh()

bool FIX::Session::isTargetTooHigh ( const MsgSeqNum &  msgSeqNum)
inlineprivate

Definition at line 260 of file Session.h.

References FIX::SessionState::getNextTargetMsgSeqNum(), and m_state.

Referenced by nextLogon(), nextResendRequest(), and verify().

261  { return msgSeqNum > ( m_state.getNextTargetMsgSeqNum() ); }
int getNextTargetMsgSeqNum() const
Definition: SessionState.h:179
SessionState m_state
Definition: Session.h:337

◆ isTargetTooLow()

bool FIX::Session::isTargetTooLow ( const MsgSeqNum &  msgSeqNum)
inlineprivate

Definition at line 262 of file Session.h.

References FIX::SessionState::getNextTargetMsgSeqNum(), and m_state.

Referenced by nextResendRequest(), and verify().

263  { return msgSeqNum < ( m_state.getNextTargetMsgSeqNum() ); }
int getNextTargetMsgSeqNum() const
Definition: SessionState.h:179
SessionState m_state
Definition: Session.h:337

◆ logon()

void FIX::Session::logon ( )
inline

◆ logout()

void FIX::Session::logout ( const std::string &  reason = "")
inline

◆ lookupSession() [1/2]

Session * FIX::Session::lookupSession ( const SessionID sessionID)
static

◆ lookupSession() [2/2]

Session * FIX::Session::lookupSession ( const std::string &  string,
bool  reverse = false 
)
static

Definition at line 1506 of file Session.cpp.

References FIX::FIELD::BeginString, FIELD_GET_REF, FIX::Message::getHeader(), lookupSession(), FIX::FIELD::SenderCompID, FIX::Message::setStringHeader(), and FIX::FIELD::TargetCompID.

1507 {
1508  Message message;
1509  if ( !message.setStringHeader( string ) )
1510  return 0;
1511 
1512  try
1513  {
1514  const Header& header = message.getHeader();
1515  const BeginString& beginString = FIELD_GET_REF( header, BeginString );
1516  const SenderCompID& senderCompID = FIELD_GET_REF( header, SenderCompID );
1517  const TargetCompID& targetCompID = FIELD_GET_REF( header, TargetCompID );
1518 
1519  if ( reverse )
1520  {
1521  return lookupSession( SessionID( beginString, SenderCompID( targetCompID ),
1522  TargetCompID( senderCompID ) ) );
1523  }
1524 
1525  return lookupSession( SessionID( beginString, senderCompID,
1526  targetCompID ) );
1527  }
1528  catch ( FieldNotFound& ) { return 0; }
1529 }
static Session * lookupSession(const SessionID &)
Definition: Session.cpp:1496
void reverse(I begin, I end)
Definition: pugixml.cpp:6009
const int TargetCompID
const int SenderCompID
const int BeginString
#define FIELD_GET_REF(MAP, FLD)
Definition: FieldMap.h:376

◆ newMessage()

Message * FIX::Session::newMessage ( const std::string &  msgType) const
private

Definition at line 492 of file Session.cpp.

References FIX::DataDictionaryProvider::getApplicationDataDictionary(), FIX::SessionID::getBeginString(), FIX::DataDictionary::getHeaderOrderedFields(), FIX::DataDictionary::getMessageOrderedFields(), FIX::DataDictionaryProvider::getSessionDataDictionary(), FIX::DataDictionary::getTrailerOrderedFields(), FIX::Message::isAdminMsgType(), FIX::SessionID::isFIXT(), FIX::DataDictionary::isMessageFieldsOrderPreserved(), m_dataDictionaryProvider, m_senderDefaultApplVerID, and m_sessionID.

Referenced by generateBusinessReject(), generateHeartbeat(), generateLogon(), generateLogout(), generateReject(), generateResendRequest(), generateSequenceReset(), generateTestRequest(), and isCorrectCompID().

493 {
494  Message * msg = 0;
495 
496  const DataDictionary& sessionDD =
498  if (!sessionDD.isMessageFieldsOrderPreserved())
499  {
500  msg = new Message();
501  }
502  else
503  {
504  const message_order & hdrOrder = sessionDD.getHeaderOrderedFields();
505  const message_order & trlOrder = sessionDD.getTrailerOrderedFields();
506  if (!m_sessionID.isFIXT() || Message::isAdminMsgType(msgType) )
507  {
508  const message_order & msgOrder = sessionDD.getMessageOrderedFields(msgType);
509  msg = new Message(hdrOrder, trlOrder, msgOrder);
510  }
511  else
512  {
513  const DataDictionary& applicationDD =
515  const message_order & msgOrder = applicationDD.getMessageOrderedFields(msgType);
516  msg = new Message(hdrOrder, trlOrder, msgOrder);
517  }
518  }
519 
520  return msg;
521 }
static bool isAdminMsgType(const MsgType &msgType)
Definition: Message.h:300
message_order const & getMessageOrderedFields(const std::string &msgType) const
DataDictionaryProvider m_dataDictionaryProvider
Definition: Session.h:338
SessionID m_sessionID
Definition: Session.h:319
std::string m_senderDefaultApplVerID
Definition: Session.h:323
const DataDictionary & getSessionDataDictionary(const BeginString &beginString) const
const DataDictionary & getApplicationDataDictionary(const ApplVerID &applVerID) const
const bool isFIXT() const
Definition: SessionID.h:61
const BeginString & getBeginString() const
Definition: SessionID.h:53

◆ next() [1/4]

void FIX::Session::next ( )

◆ next() [2/4]

void FIX::Session::next ( const UtcTimeStamp timeStamp)

Definition at line 130 of file Session.cpp.

References FIX::SessionState::alreadySentLogon(), checkSessionTime(), disconnect(), generateHeartbeat(), generateLogon(), generateLogout(), generateTestRequest(), FIX::SessionState::heartBtInt(), isEnabled(), isLoggedOn(), isLogonTime(), FIX::SessionState::logonTimedOut(), FIX::SessionState::logoutReason(), FIX::SessionState::logoutTimedOut(), m_state, FIX::SessionState::needHeartbeat(), FIX::SessionState::needTestRequest(), FIX::SessionState::onEvent(), FIX::SessionState::receivedLogon(), reset(), FIX::SessionState::sentLogout(), FIX::SessionState::shouldSendLogon(), FIX::SessionState::testRequest(), FIX::SessionState::timedOut(), and FIX::SessionState::withinHeartBeat().

131 {
132  try
133  {
134  if ( !checkSessionTime(timeStamp) )
135  { reset(); return; }
136 
137  if( !isEnabled() || !isLogonTime(timeStamp) )
138  {
139  if( isLoggedOn() )
140  {
141  if( !m_state.sentLogout() )
142  {
143  m_state.onEvent( "Initiated logout request" );
145  }
146  }
147  else
148  return;
149  }
150 
151  if ( !m_state.receivedLogon() )
152  {
153  if ( m_state.shouldSendLogon() && isLogonTime(timeStamp) )
154  {
155  generateLogon();
156  m_state.onEvent( "Initiated logon request" );
157  }
158  else if ( m_state.alreadySentLogon() && m_state.logonTimedOut() )
159  {
160  m_state.onEvent( "Timed out waiting for logon response" );
161  disconnect();
162  }
163  return ;
164  }
165 
166  if ( m_state.heartBtInt() == 0 ) return ;
167 
168  if ( m_state.logoutTimedOut() )
169  {
170  m_state.onEvent( "Timed out waiting for logout response" );
171  disconnect();
172  }
173 
174  if ( m_state.withinHeartBeat() ) return ;
175 
176  if ( m_state.timedOut() )
177  {
178  m_state.onEvent( "Timed out waiting for heartbeat" );
179  disconnect();
180  }
181  else
182  {
183  if ( m_state.needTestRequest() )
184  {
185  generateTestRequest( "TEST" );
187  m_state.onEvent( "Sent test request TEST" );
188  }
189  else if ( m_state.needHeartbeat() )
190  {
192  }
193  }
194  }
195  catch ( FIX::IOException& e )
196  {
197  m_state.onEvent( e.what() );
198  disconnect();
199  }
200 }
bool isEnabled()
Definition: Session.h:59
void generateHeartbeat()
Definition: Session.cpp:764
bool needHeartbeat() const
Definition: SessionState.h:138
int testRequest() const
Definition: SessionState.h:77
bool needTestRequest() const
Definition: SessionState.h:143
void reset()
Definition: Session.h:66
bool shouldSendLogon() const
Definition: SessionState.h:115
bool timedOut() const
Definition: SessionState.h:133
bool isLogonTime(const UtcTimeStamp &time)
Definition: Session.h:110
void generateLogon()
Definition: Session.cpp:673
void disconnect()
Definition: Session.cpp:613
bool withinHeartBeat() const
Definition: SessionState.h:127
SessionState m_state
Definition: Session.h:337
bool receivedLogon() const
Definition: SessionState.h:53
bool checkSessionTime(const UtcTimeStamp &timeStamp)
Definition: Session.h:255
std::string logoutReason() const
Definition: SessionState.h:150
bool logonTimedOut() const
Definition: SessionState.h:117
void generateTestRequest(const std::string &)
Definition: Session.cpp:792
void onEvent(const std::string &string)
Definition: SessionState.h:204
void generateLogout(const std::string &text="")
Definition: Session.cpp:996
bool logoutTimedOut() const
Definition: SessionState.h:122
bool sentLogout() const
Definition: SessionState.h:56
IO Error.
Definition: Exceptions.h:238
void heartBtInt(const HeartBtInt &value)
Definition: SessionState.h:94
bool alreadySentLogon() const
Definition: SessionState.h:116
bool isLoggedOn()
Definition: Session.h:65

◆ next() [3/4]

void FIX::Session::next ( const std::string &  msg,
const UtcTimeStamp timeStamp,
bool  queued = false 
)

Definition at line 1267 of file Session.cpp.

References disconnect(), FIX::DataDictionaryProvider::getApplicationDataDictionary(), FIX::SessionID::getBeginString(), FIX::DataDictionaryProvider::getSessionDataDictionary(), FIX::identifyType(), FIX::SessionID::isFIXT(), m_dataDictionaryProvider, m_senderDefaultApplVerID, m_sessionID, m_state, m_validateLengthAndChecksum, FIX::MsgType_Logon, next(), FIX::SessionState::onEvent(), and FIX::SessionState::onIncoming().

1268 {
1269  try
1270  {
1271  m_state.onIncoming( msg );
1272  const DataDictionary& sessionDD =
1274  if( m_sessionID.isFIXT() )
1275  {
1276  const DataDictionary& applicationDD =
1278  next( Message( msg, sessionDD, applicationDD, m_validateLengthAndChecksum ), timeStamp, queued );
1279  }
1280  else
1281  {
1282  next( Message( msg, sessionDD, m_validateLengthAndChecksum ), timeStamp, queued );
1283  }
1284  }
1285  catch( InvalidMessage& e )
1286  {
1287  m_state.onEvent( e.what() );
1288 
1289  try
1290  {
1291  if( identifyType(msg) == MsgType_Logon )
1292  {
1293  m_state.onEvent( "Logon message is not valid" );
1294  disconnect();
1295  }
1296  } catch( MessageParseError& ) {}
1297  throw e;
1298  }
1299 }
DataDictionaryProvider m_dataDictionaryProvider
Definition: Session.h:338
void next()
Definition: Session.cpp:125
SessionID m_sessionID
Definition: Session.h:319
std::string m_senderDefaultApplVerID
Definition: Session.h:323
void disconnect()
Definition: Session.cpp:613
const DataDictionary & getSessionDataDictionary(const BeginString &beginString) const
SessionState m_state
Definition: Session.h:337
const DataDictionary & getApplicationDataDictionary(const ApplVerID &applVerID) const
bool m_validateLengthAndChecksum
Definition: Session.h:335
const bool isFIXT() const
Definition: SessionID.h:61
const BeginString & getBeginString() const
Definition: SessionID.h:53
void onIncoming(const std::string &string)
Definition: SessionState.h:200
void onEvent(const std::string &string)
Definition: SessionState.h:204
const char MsgType_Logon[]
Definition: FixValues.h:14
MsgType identifyType(const std::string &message)
Parse the type of a message from a string.
Definition: Message.h:417

◆ next() [4/4]

void FIX::Session::next ( const Message message,
const UtcTimeStamp timeStamp,
bool  queued = false 
)

Definition at line 1301 of file Session.cpp.

References FIX::FIELD::ApplVerID, FIX::FIELD::BeginString, FIX::BeginString_FIX42, FIX::BusinessRejectReason_CONDITIONALLY_REQUIRED_FIELD_MISSING, FIX::BusinessRejectReason_UNKNOWN_MESSAGE_TYPE, checkSessionTime(), FIX::FIELD::DefaultApplVerID, disconnect(), FIX::FieldNotFound::field, FIX::InvalidTagNumber::field, FIX::RequiredTagMissing::field, FIX::TagNotDefinedForMessage::field, FIX::NoTagValue::field, FIX::IncorrectTagValue::field, FIX::IncorrectDataFormat::field, FIX::TagOutOfOrder::field, FIX::RepeatedTag::field, FIX::RepeatingGroupCountMismatch::field, FIELD_GET_REF, FIELD_THROW_IF_NOT_FOUND, generateBusinessReject(), generateLogout(), generateReject(), FIX::DataDictionaryProvider::getApplicationDataDictionary(), FIX::SessionID::getBeginString(), FIX::FieldMap::getField(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::DataDictionaryProvider::getSessionDataDictionary(), FIX::SessionState::incrNextTargetMsgSeqNum(), FIX::Message::isApp(), FIX::SessionID::isFIXT(), isLoggedOn(), LOGEX, m_dataDictionaryProvider, m_sessionID, m_state, m_targetDefaultApplVerID, FIX::FIELD::MsgType, FIX::MsgType_Heartbeat, FIX::MsgType_Logon, FIX::MsgType_Logout, FIX::MsgType_Reject, FIX::MsgType_ResendRequest, FIX::MsgType_SequenceReset, FIX::MsgType_TestRequest, next(), nextHeartbeat(), nextLogon(), nextLogout(), nextQueued(), nextReject(), nextResendRequest(), nextSequenceReset(), nextTestRequest(), FIX::SessionState::onEvent(), reset(), FIX::FIELD::SenderCompID, FIX::SessionRejectReason_INCORRECT_DATA_FORMAT_FOR_VALUE, FIX::SessionRejectReason_INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP, FIX::SessionRejectReason_INVALID_MSGTYPE, FIX::SessionRejectReason_INVALID_TAG_NUMBER, FIX::SessionRejectReason_REQUIRED_TAG_MISSING, FIX::SessionRejectReason_TAG_APPEARS_MORE_THAN_ONCE, FIX::SessionRejectReason_TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE, FIX::SessionRejectReason_TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER, FIX::SessionRejectReason_TAG_SPECIFIED_WITHOUT_A_VALUE, FIX::SessionRejectReason_VALUE_IS_INCORRECT, setTargetDefaultApplVerID(), FIX::FIELD::TargetCompID, FIX::Message::toApplVerID(), FIX::DataDictionary::validate(), and verify().

1302 {
1303  const Header& header = message.getHeader();
1304 
1305  try
1306  {
1307  if ( !checkSessionTime(timeStamp) )
1308  { reset(); return; }
1309 
1310  const MsgType& msgType = FIELD_GET_REF( header, MsgType );
1311  const BeginString& beginString = FIELD_GET_REF( header, BeginString );
1312  // make sure these fields are present
1315 
1316  if ( beginString != m_sessionID.getBeginString() )
1317  throw UnsupportedVersion();
1318 
1319  if( msgType == MsgType_Logon )
1320  {
1321  if( m_sessionID.isFIXT() )
1322  {
1323  const DefaultApplVerID& applVerID = FIELD_GET_REF( message, DefaultApplVerID );
1324  setTargetDefaultApplVerID(applVerID);
1325  }
1326  else
1327  {
1329  }
1330  }
1331 
1332  const DataDictionary& sessionDataDictionary =
1334 
1335  if( m_sessionID.isFIXT() && message.isApp() )
1336  {
1337  ApplVerID applVerID = m_targetDefaultApplVerID;
1338  header.getFieldIfSet(applVerID);
1339  const DataDictionary& applicationDataDictionary =
1341  DataDictionary::validate( message, &sessionDataDictionary, &applicationDataDictionary );
1342  }
1343  else
1344  {
1345  sessionDataDictionary.validate( message );
1346  }
1347 
1348  if ( msgType == MsgType_Logon )
1349  nextLogon( message, timeStamp );
1350  else if ( msgType == MsgType_Heartbeat )
1351  nextHeartbeat( message, timeStamp );
1352  else if ( msgType == MsgType_TestRequest )
1353  nextTestRequest( message, timeStamp );
1354  else if ( msgType == MsgType_SequenceReset )
1355  nextSequenceReset( message, timeStamp );
1356  else if ( msgType == MsgType_Logout )
1357  nextLogout( message, timeStamp );
1358  else if ( msgType == MsgType_ResendRequest )
1359  nextResendRequest( message,timeStamp );
1360  else if ( msgType == MsgType_Reject )
1361  nextReject( message, timeStamp );
1362  else
1363  {
1364  if ( !verify( message ) ) return ;
1366  }
1367  }
1368  catch ( MessageParseError& e )
1369  { m_state.onEvent( e.what() ); }
1370  catch ( RequiredTagMissing & e )
1372  catch ( FieldNotFound & e )
1373  {
1374  if( header.getField(FIELD::BeginString) >= FIX::BeginString_FIX42 && message.isApp() )
1375  {
1377  }
1378  else
1379  {
1381  if ( header.getField(FIELD::MsgType) == MsgType_Logon )
1382  {
1383  m_state.onEvent( "Required field missing from logon" );
1384  disconnect();
1385  }
1386  }
1387  }
1388  catch ( InvalidTagNumber & e )
1389  { LOGEX( generateReject( message, SessionRejectReason_INVALID_TAG_NUMBER, e.field ) ); }
1390  catch ( NoTagValue & e )
1392  catch ( TagNotDefinedForMessage & e )
1394  catch ( InvalidMessageType& )
1396  catch ( UnsupportedMessageType& )
1397  {
1398  if ( header.getField(FIELD::BeginString) >= FIX::BeginString_FIX42 )
1400  else
1401  { LOGEX( generateReject( message, "Unsupported message type" ) ); }
1402  }
1403  catch ( TagOutOfOrder & e )
1405  catch ( IncorrectDataFormat & e )
1407  catch ( IncorrectTagValue & e )
1408  { LOGEX( generateReject( message, SessionRejectReason_VALUE_IS_INCORRECT, e.field ) ); }
1409  catch ( RepeatedTag & e )
1411  catch ( RepeatingGroupCountMismatch & e )
1413  catch ( InvalidMessage& e )
1414  { m_state.onEvent( e.what() ); }
1415  catch ( RejectLogon& e )
1416  {
1417  m_state.onEvent( e.what() );
1418  generateLogout( e.what() );
1419  disconnect();
1420  }
1421  catch ( UnsupportedVersion& )
1422  {
1423  if ( header.getField(FIELD::MsgType) == MsgType_Logout )
1424  nextLogout( message, timeStamp );
1425  else
1426  {
1427  generateLogout( "Incorrect BeginString" );
1429  }
1430  }
1431  catch ( IOException& e )
1432  {
1433  m_state.onEvent( e.what() );
1434  disconnect();
1435  }
1436 
1437  if( !queued )
1438  nextQueued( timeStamp );
1439 
1440  if( isLoggedOn() )
1441  next();
1442 }
const int ApplVerID
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
#define FIELD_THROW_IF_NOT_FOUND(MAP, FLD)
Definition: FieldMap.h:378
DataDictionaryProvider m_dataDictionaryProvider
Definition: Session.h:338
const char BeginString_FIX42[]
Definition: Values.h:34
void nextReject(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:312
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
void next()
Definition: Session.cpp:125
static ApplVerID toApplVerID(const BeginString &value)
Definition: Message.h:307
const char MsgType_ResendRequest[]
Definition: FixValues.h:10
SessionID m_sessionID
Definition: Session.h:319
const int SessionRejectReason_TAG_APPEARS_MORE_THAN_ONCE
Definition: FixValues.h:157
void nextTestRequest(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:287
void reset()
Definition: Session.h:66
const int SessionRejectReason_TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER
Definition: FixValues.h:158
void nextResendRequest(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:344
const char MsgType_SequenceReset[]
Definition: FixValues.h:12
const int SessionRejectReason_INVALID_MSGTYPE
Definition: FixValues.h:155
static void validate(const Message &message, const DataDictionary *const pSessionDD, const DataDictionary *const pAppID)
Validate a message.
const int BusinessRejectReason_UNKNOWN_MESSAGE_TYPE
Definition: FixValues.h:1195
const int BusinessRejectReason_CONDITIONALLY_REQUIRED_FIELD_MISSING
Definition: FixValues.h:1191
void disconnect()
Definition: Session.cpp:613
const DataDictionary & getSessionDataDictionary(const BeginString &beginString) const
const int TargetCompID
const int SessionRejectReason_INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP
Definition: FixValues.h:160
void generateReject(const Message &, int err, int field=0)
Definition: Session.cpp:805
SessionState m_state
Definition: Session.h:337
const DataDictionary & getApplicationDataDictionary(const ApplVerID &applVerID) const
std::string m_targetDefaultApplVerID
Definition: Session.h:324
#define LOGEX(method)
Definition: Session.cpp:38
const int SessionRejectReason_INCORRECT_DATA_FORMAT_FOR_VALUE
Definition: FixValues.h:166
bool checkSessionTime(const UtcTimeStamp &timeStamp)
Definition: Session.h:255
const bool isFIXT() const
Definition: SessionID.h:61
const int SessionRejectReason_TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE
Definition: FixValues.h:162
void nextHeartbeat(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:280
const BeginString & getBeginString() const
Definition: SessionID.h:53
const char MsgType_TestRequest[]
Definition: FixValues.h:9
const int SenderCompID
void onEvent(const std::string &string)
Definition: SessionState.h:204
void nextLogon(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:202
const char MsgType_Logon[]
Definition: FixValues.h:14
const int DefaultApplVerID
void generateLogout(const std::string &text="")
Definition: Session.cpp:996
void generateBusinessReject(const Message &, int err, int field=0)
Definition: Session.cpp:931
const int BeginString
const int SessionRejectReason_INVALID_TAG_NUMBER
Definition: FixValues.h:152
const char MsgType_Logout[]
Definition: FixValues.h:13
void nextQueued(const UtcTimeStamp &timeStamp)
Definition: Session.cpp:1238
const char MsgType_Heartbeat[]
Definition: FixValues.h:8
const int SessionRejectReason_REQUIRED_TAG_MISSING
Definition: FixValues.h:153
void nextLogout(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:295
#define FIELD_GET_REF(MAP, FLD)
Definition: FieldMap.h:376
void setTargetDefaultApplVerID(const std::string &targetDefaultApplVerID)
Definition: Session.h:129
const int MsgType
const int SessionRejectReason_TAG_SPECIFIED_WITHOUT_A_VALUE
Definition: FixValues.h:164
void nextSequenceReset(const Message &, const UtcTimeStamp &timeStamp)
Definition: Session.cpp:319
const char MsgType_Reject[]
Definition: FixValues.h:11
const int SessionRejectReason_VALUE_IS_INCORRECT
Definition: FixValues.h:165
bool isLoggedOn()
Definition: Session.h:65

◆ nextHeartbeat()

void FIX::Session::nextHeartbeat ( const Message heartbeat,
const UtcTimeStamp timeStamp 
)
private

Definition at line 280 of file Session.cpp.

References FIX::SessionState::incrNextTargetMsgSeqNum(), m_state, nextQueued(), and verify().

Referenced by isCorrectCompID(), and next().

281 {
282  if ( !verify( heartbeat ) ) return ;
284  nextQueued( timeStamp );
285 }
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
SessionState m_state
Definition: Session.h:337
void nextQueued(const UtcTimeStamp &timeStamp)
Definition: Session.cpp:1238

◆ nextLogon()

void FIX::Session::nextLogon ( const Message logon,
const UtcTimeStamp timeStamp 
)
private

Definition at line 202 of file Session.cpp.

References disconnect(), doTargetTooHigh(), generateLogon(), FIX::FieldMap::getField(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::SessionState::heartBtInt(), FIX::SessionState::incrNextTargetMsgSeqNum(), FIX::SessionState::initiate(), isEnabled(), isLoggedOn(), isLogonTime(), isTargetTooHigh(), m_application, m_refreshOnLogon, m_resetOnLogon, m_sessionID, m_state, FIX::FIELD::MsgSeqNum, nextQueued(), FIX::SessionState::onEvent(), FIX::Application::onLogon(), FIX::SessionState::receivedLogon(), FIX::SessionState::receivedReset(), refresh(), FIX::SessionState::reset(), FIX::FIELD::ResetSeqNumFlag, FIX::FIELD::SenderCompID, FIX::SessionState::sentReset(), FIX::SessionState::shouldSendLogon(), FIX::FIELD::TargetCompID, and verify().

Referenced by isCorrectCompID(), and next().

203 {
204  SenderCompID senderCompID;
205  TargetCompID targetCompID;
206  logon.getHeader().getField( senderCompID );
207  logon.getHeader().getField( targetCompID );
208 
209  if( m_refreshOnLogon )
210  refresh();
211 
212  if( !isEnabled() )
213  {
214  m_state.onEvent( "Session is not enabled for logon" );
215  disconnect();
216  return;
217  }
218 
219  if( !isLogonTime(timeStamp) )
220  {
221  m_state.onEvent( "Received logon outside of valid logon time" );
222  disconnect();
223  return;
224  }
225 
226  ResetSeqNumFlag resetSeqNumFlag(false);
227  logon.getFieldIfSet(resetSeqNumFlag);
228  m_state.receivedReset( resetSeqNumFlag );
229 
230  if( m_state.receivedReset() )
231  {
232  m_state.onEvent( "Logon contains ResetSeqNumFlag=Y, reseting sequence numbers to 1" );
233  if( !m_state.sentReset() ) m_state.reset();
234  }
235 
237  {
238  m_state.onEvent( "Received logon response before sending request" );
239  disconnect();
240  return;
241  }
242 
243  if( !m_state.initiate() && m_resetOnLogon )
244  m_state.reset();
245 
246  if( !verify( logon, false, true ) )
247  return;
248  m_state.receivedLogon( true );
249 
250  if ( !m_state.initiate()
251  || (m_state.receivedReset() && !m_state.sentReset()) )
252  {
253  logon.getFieldIfSet(m_state.heartBtInt());
254  m_state.onEvent( "Received logon request" );
255  generateLogon( logon );
256  m_state.onEvent( "Responding to logon request" );
257  }
258  else
259  m_state.onEvent( "Received logon response" );
260 
261  m_state.sentReset( false );
262  m_state.receivedReset( false );
263 
264  MsgSeqNum msgSeqNum;
265  logon.getHeader().getField( msgSeqNum );
266  if ( isTargetTooHigh( msgSeqNum ) && !resetSeqNumFlag )
267  {
269  }
270  else
271  {
273  nextQueued( timeStamp );
274  }
275 
276  if ( isLoggedOn() )
278 }
bool isEnabled()
Definition: Session.h:59
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
virtual void onLogon(const SessionID &)=0
Notification of a session successfully logging on.
SessionID m_sessionID
Definition: Session.h:319
bool shouldSendLogon() const
Definition: SessionState.h:115
void refresh()
Definition: Session.h:68
bool initiate() const
Definition: SessionState.h:68
bool isLogonTime(const UtcTimeStamp &time)
Definition: Session.h:110
bool receivedReset() const
Definition: SessionState.h:62
void doTargetTooHigh(const Message &msg)
Definition: Session.cpp:1206
void generateLogon()
Definition: Session.cpp:673
bool sentReset() const
Definition: SessionState.h:65
Application & m_application
Definition: Session.h:318
bool m_resetOnLogon
Definition: Session.h:329
void disconnect()
Definition: Session.cpp:613
bool isTargetTooHigh(const MsgSeqNum &msgSeqNum)
Definition: Session.h:260
const int TargetCompID
SessionState m_state
Definition: Session.h:337
bool receivedLogon() const
Definition: SessionState.h:53
const int SenderCompID
void onEvent(const std::string &string)
Definition: SessionState.h:204
const int ResetSeqNumFlag
const int MsgSeqNum
void nextQueued(const UtcTimeStamp &timeStamp)
Definition: Session.cpp:1238
bool m_refreshOnLogon
Definition: Session.h:332
void heartBtInt(const HeartBtInt &value)
Definition: SessionState.h:94
void logon()
Definition: Session.h:55
bool isLoggedOn()
Definition: Session.h:65

◆ nextLogout()

void FIX::Session::nextLogout ( const Message logout,
const UtcTimeStamp timeStamp 
)
private

Definition at line 295 of file Session.cpp.

References disconnect(), generateLogout(), FIX::SessionState::incrNextTargetMsgSeqNum(), m_resetOnLogout, m_state, FIX::SessionState::onEvent(), FIX::SessionState::reset(), FIX::SessionState::sentLogout(), and verify().

Referenced by isCorrectCompID(), and next().

296 {
297  if ( !verify( logout, false, false ) ) return ;
298  if ( !m_state.sentLogout() )
299  {
300  m_state.onEvent( "Received logout request" );
301  generateLogout();
302  m_state.onEvent( "Sending logout response" );
303  }
304  else
305  m_state.onEvent( "Received logout response" );
306 
308  if ( m_resetOnLogout ) m_state.reset();
309  disconnect();
310 }
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
void disconnect()
Definition: Session.cpp:613
SessionState m_state
Definition: Session.h:337
void onEvent(const std::string &string)
Definition: SessionState.h:204
void generateLogout(const std::string &text="")
Definition: Session.cpp:996
void logout(const std::string &reason="")
Definition: Session.h:57
bool m_resetOnLogout
Definition: Session.h:330
bool sentLogout() const
Definition: SessionState.h:56

◆ nextQueued() [1/2]

void FIX::Session::nextQueued ( const UtcTimeStamp timeStamp)
private

Definition at line 1238 of file Session.cpp.

References getExpectedTargetNum().

Referenced by isCorrectCompID(), next(), nextHeartbeat(), nextLogon(), nextReject(), and nextTestRequest().

1239 {
1240  while ( nextQueued( getExpectedTargetNum(), timeStamp ) ) {}
1241 }
int getExpectedTargetNum()
Definition: Session.h:225
void nextQueued(const UtcTimeStamp &timeStamp)
Definition: Session.cpp:1238

◆ nextQueued() [2/2]

bool FIX::Session::nextQueued ( int  num,
const UtcTimeStamp timeStamp 
)
private

Definition at line 1243 of file Session.cpp.

References FIX::IntConvertor::convert(), FIX::FieldMap::getField(), FIX::Message::getHeader(), FIX::SessionState::incrNextTargetMsgSeqNum(), m_state, FIX::FIELD::MsgType, FIX::MsgType_Logon, FIX::MsgType_ResendRequest, next(), FIX::SessionState::onEvent(), and FIX::SessionState::retrieve().

1244 {
1245  Message msg;
1246  MsgType msgType;
1247 
1248  if( m_state.retrieve( num, msg ) )
1249  {
1250  m_state.onEvent( "Processing QUEUED message: "
1251  + IntConvertor::convert( num ) );
1252  msg.getHeader().getField( msgType );
1253  if( msgType == MsgType_Logon
1254  || msgType == MsgType_ResendRequest )
1255  {
1257  }
1258  else
1259  {
1260  next( msg, timeStamp, true );
1261  }
1262  return true;
1263  }
1264  return false;
1265 }
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
void next()
Definition: Session.cpp:125
bool retrieve(int msgSeqNum, Message &message)
Definition: SessionState.h:157
const char MsgType_ResendRequest[]
Definition: FixValues.h:10
static std::string convert(signed_int value)
SessionState m_state
Definition: Session.h:337
void onEvent(const std::string &string)
Definition: SessionState.h:204
const char MsgType_Logon[]
Definition: FixValues.h:14
const int MsgType

◆ nextReject()

void FIX::Session::nextReject ( const Message reject,
const UtcTimeStamp timeStamp 
)
private

Definition at line 312 of file Session.cpp.

References FIX::SessionState::incrNextTargetMsgSeqNum(), m_state, nextQueued(), and verify().

Referenced by isCorrectCompID(), and next().

313 {
314  if ( !verify( reject, false, true ) ) return ;
316  nextQueued( timeStamp );
317 }
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
SessionState m_state
Definition: Session.h:337
void nextQueued(const UtcTimeStamp &timeStamp)
Definition: Session.cpp:1238

◆ nextResendRequest()

void FIX::Session::nextResendRequest ( const Message resendRequest,
const UtcTimeStamp timeStamp 
)
private

Definition at line 344 of file Session.cpp.

References FIX::FIELD::ApplVerID, FIX::FIELD::BeginSeqNo, FIX::BeginString_FIX42, FIX::IntConvertor::convert(), FIX::FIELD::EndSeqNo, generateSequenceReset(), FIX::SessionState::get(), FIX::DataDictionaryProvider::getApplicationDataDictionary(), FIX::SessionID::getBeginString(), getExpectedSenderNum(), FIX::FieldMap::getField(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::DataDictionary::getHeaderOrderedFields(), FIX::DataDictionary::getMessageOrderedFields(), FIX::SessionState::getNextSenderMsgSeqNum(), FIX::DataDictionaryProvider::getSessionDataDictionary(), FIX::DataDictionary::getTrailerOrderedFields(), FIX::SessionState::incrNextTargetMsgSeqNum(), FIX::Message::isAdminMsgType(), FIX::SessionID::isFIXT(), FIX::DataDictionary::isMessageFieldsOrderPreserved(), isTargetTooHigh(), isTargetTooLow(), m_dataDictionaryProvider, m_mutex, m_persistMessages, m_senderDefaultApplVerID, m_sessionID, m_state, m_validateLengthAndChecksum, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, next(), FIX::SessionState::onEvent(), resend(), send(), FIX::Message::setStringHeader(), FIX::Message::toString(), and verify().

Referenced by isCorrectCompID(), and next().

345 {
346  if ( !verify( resendRequest, false, false ) ) return ;
347 
348  Locker l( m_mutex );
349 
350  BeginSeqNo beginSeqNo;
351  EndSeqNo endSeqNo;
352  resendRequest.getField( beginSeqNo );
353  resendRequest.getField( endSeqNo );
354 
355  m_state.onEvent( "Received ResendRequest FROM: "
356  + IntConvertor::convert( beginSeqNo ) +
357  " TO: " + IntConvertor::convert( endSeqNo ) );
358 
359  std::string beginString = m_sessionID.getBeginString();
360  if ( (beginString >= FIX::BeginString_FIX42 && endSeqNo == 0) ||
361  (beginString <= FIX::BeginString_FIX42 && endSeqNo == 999999) ||
362  (endSeqNo >= getExpectedSenderNum()) )
363  { endSeqNo = getExpectedSenderNum() - 1; }
364 
365  if ( !m_persistMessages )
366  {
367  endSeqNo = EndSeqNo(endSeqNo + 1);
369  if( endSeqNo > next )
370  endSeqNo = EndSeqNo(next);
371  generateSequenceReset( beginSeqNo, endSeqNo );
372  return;
373  }
374 
375  std::vector < std::string > messages;
376  m_state.get( beginSeqNo, endSeqNo, messages );
377 
378  std::vector < std::string > ::iterator i;
379  MsgSeqNum msgSeqNum(0);
380  MsgType msgType;
381  int begin = 0;
382  int current = beginSeqNo;
383  std::string messageString;
384 
385  for ( i = messages.begin(); i != messages.end(); ++i )
386  {
387  SmartPtr<FIX::Message> pMsg;
388  std::string strMsgType;
389  const DataDictionary& sessionDD =
391  if (sessionDD.isMessageFieldsOrderPreserved())
392  {
393  std::string::size_type equalSign = (*i).find("\00135=");
394  equalSign += 4;
395  std::string::size_type soh = (*i).find_first_of('\001', equalSign);
396  strMsgType = (*i).substr(equalSign, soh - equalSign);
397 #ifdef HAVE_EMX
398  if (FIX::Message::isAdminMsgType(strMsgType) == false)
399  {
400  equalSign = (*i).find("\0019426=", soh);
401  if (equalSign == std::string::npos)
402  throw FIX::IOException("EMX message type (9426) not found");
403 
404  equalSign += 6;
405  soh = (*i).find_first_of('\001', equalSign);
406  if (soh == std::string::npos)
407  throw FIX::IOException("EMX message type (9426) soh char not found");
408  strMsgType.assign((*i).substr(equalSign, soh - equalSign));
409  }
410 #endif
411  }
412 
413  if( m_sessionID.isFIXT() )
414  {
415  Message msg;
416  msg.setStringHeader(*i);
417  ApplVerID applVerID;
418  if( !msg.getHeader().getFieldIfSet(applVerID) )
419  applVerID = m_senderDefaultApplVerID;
420 
421  const DataDictionary& applicationDD =
423  if (strMsgType.empty())
424  pMsg.reset( new Message( *i, sessionDD, applicationDD, m_validateLengthAndChecksum ));
425  else
426  {
427  const message_order & hdrOrder = sessionDD.getHeaderOrderedFields();
428  const message_order & trlOrder = sessionDD.getTrailerOrderedFields();
429  const message_order & msgOrder = applicationDD.getMessageOrderedFields(strMsgType);
430  pMsg.reset( new Message( hdrOrder, trlOrder, msgOrder, *i, sessionDD, applicationDD, m_validateLengthAndChecksum ));
431  }
432  }
433  else
434  {
435  if (strMsgType.empty())
436  pMsg.reset( new Message( *i, sessionDD, m_validateLengthAndChecksum ));
437  else
438  {
439  const message_order & hdrOrder = sessionDD.getHeaderOrderedFields();
440  const message_order & trlOrder = sessionDD.getTrailerOrderedFields();
441  const message_order & msgOrder = sessionDD.getMessageOrderedFields(strMsgType);
442  pMsg.reset(new Message(hdrOrder, trlOrder, msgOrder, *i, sessionDD, m_validateLengthAndChecksum ));
443  }
444  }
445 
446  Message & msg = *pMsg;
447 
448  msg.getHeader().getField( msgSeqNum );
449  msg.getHeader().getField( msgType );
450 
451  if( (current != msgSeqNum) && !begin )
452  begin = current;
453 
454  if ( Message::isAdminMsgType( msgType ) )
455  {
456  if ( !begin ) begin = msgSeqNum;
457  }
458  else
459  {
460  if ( resend( msg ) )
461  {
462  if ( begin ) generateSequenceReset( begin, msgSeqNum );
463  send( msg.toString(messageString) );
464  m_state.onEvent( "Resending Message: "
465  + IntConvertor::convert( msgSeqNum ) );
466  begin = 0;
467  }
468  else
469  { if ( !begin ) begin = msgSeqNum; }
470  }
471  current = msgSeqNum + 1;
472  }
473  if ( begin )
474  {
475  generateSequenceReset( begin, msgSeqNum + 1 );
476  }
477 
478  if ( endSeqNo > msgSeqNum )
479  {
480  endSeqNo = EndSeqNo(endSeqNo + 1);
481  int next = m_state.getNextSenderMsgSeqNum();
482  if( endSeqNo > next )
483  endSeqNo = EndSeqNo(next);
484  generateSequenceReset( beginSeqNo, endSeqNo );
485  }
486 
487  resendRequest.getHeader().getField( msgSeqNum );
488  if( !isTargetTooHigh(msgSeqNum) && !isTargetTooLow(msgSeqNum) )
490 }
const int ApplVerID
const int BeginSeqNo
bool send(Message &)
Definition: Session.cpp:523
static bool isAdminMsgType(const MsgType &msgType)
Definition: Message.h:300
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
int getExpectedSenderNum()
Definition: Session.h:224
DataDictionaryProvider m_dataDictionaryProvider
Definition: Session.h:338
const char BeginString_FIX42[]
Definition: Values.h:34
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
const int EndSeqNo
void next()
Definition: Session.cpp:125
message_order const & getHeaderOrderedFields() const
SessionID m_sessionID
Definition: Session.h:319
static std::string convert(signed_int value)
bool isTargetTooLow(const MsgSeqNum &msgSeqNum)
Definition: Session.h:262
void generateSequenceReset(int, int)
Definition: Session.cpp:743
std::string m_senderDefaultApplVerID
Definition: Session.h:323
bool isTargetTooHigh(const MsgSeqNum &msgSeqNum)
Definition: Session.h:260
const DataDictionary & getSessionDataDictionary(const BeginString &beginString) const
void get(int b, int e, std::vector< std::string > &m) const
Definition: SessionState.h:174
SessionState m_state
Definition: Session.h:337
const DataDictionary & getApplicationDataDictionary(const ApplVerID &applVerID) const
bool m_validateLengthAndChecksum
Definition: Session.h:335
const bool isFIXT() const
Definition: SessionID.h:61
const BeginString & getBeginString() const
Definition: SessionID.h:53
void onEvent(const std::string &string)
Definition: SessionState.h:204
Mutex m_mutex
Definition: Session.h:342
bool m_persistMessages
Definition: Session.h:334
const int MsgSeqNum
bool resend(Message &message)
Definition: Session.cpp:643
int getNextSenderMsgSeqNum() const
Definition: SessionState.h:177
IO Error.
Definition: Exceptions.h:238
const int MsgType

◆ nextSequenceReset()

void FIX::Session::nextSequenceReset ( const Message sequenceReset,
const UtcTimeStamp timeStamp 
)
private

Definition at line 319 of file Session.cpp.

References FIX::IntConvertor::convert(), FIX::FIELD::GapFillFlag, generateReject(), getExpectedTargetNum(), FIX::FieldMap::getFieldIfSet(), m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::NewSeqNo, FIX::SessionState::onEvent(), FIX::SessionRejectReason_VALUE_IS_INCORRECT, FIX::SessionState::setNextTargetMsgSeqNum(), and verify().

Referenced by isCorrectCompID(), and next().

320 {
321  bool isGapFill = false;
322  GapFillFlag gapFillFlag;
323  if ( sequenceReset.getFieldIfSet( gapFillFlag ) )
324  {
325  isGapFill = gapFillFlag;
326  }
327 
328  if ( !verify( sequenceReset, isGapFill, isGapFill ) ) return ;
329 
330  NewSeqNo newSeqNo;
331  if ( sequenceReset.getFieldIfSet( newSeqNo ) )
332  {
333  m_state.onEvent( "Received SequenceReset FROM: "
335  " TO: " + IntConvertor::convert( newSeqNo ) );
336 
337  if ( newSeqNo > getExpectedTargetNum() )
339  else if ( newSeqNo < getExpectedTargetNum() )
341  }
342 }
int getExpectedTargetNum()
Definition: Session.h:225
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
void setNextTargetMsgSeqNum(int n)
Definition: SessionState.h:183
const int NewSeqNo
static std::string convert(signed_int value)
const int GapFillFlag
void generateReject(const Message &, int err, int field=0)
Definition: Session.cpp:805
SessionState m_state
Definition: Session.h:337
void onEvent(const std::string &string)
Definition: SessionState.h:204
const int MsgSeqNum
const int SessionRejectReason_VALUE_IS_INCORRECT
Definition: FixValues.h:165

◆ nextTestRequest()

void FIX::Session::nextTestRequest ( const Message testRequest,
const UtcTimeStamp timeStamp 
)
private

Definition at line 287 of file Session.cpp.

References generateHeartbeat(), FIX::SessionState::incrNextTargetMsgSeqNum(), m_state, nextQueued(), and verify().

Referenced by isCorrectCompID(), and next().

288 {
289  if ( !verify( testRequest ) ) return ;
290  generateHeartbeat( testRequest );
292  nextQueued( timeStamp );
293 }
bool verify(const Message &msg, bool checkTooHigh=true, bool checkTooLow=true)
Definition: Session.cpp:1034
void generateHeartbeat()
Definition: Session.cpp:764
void incrNextTargetMsgSeqNum()
Definition: SessionState.h:187
SessionState m_state
Definition: Session.h:337
void nextQueued(const UtcTimeStamp &timeStamp)
Definition: Session.cpp:1238

◆ numSessions()

size_t FIX::Session::numSessions ( )
static

Definition at line 1553 of file Session.cpp.

References s_mutex, and s_sessions.

Referenced by getDataDictionaryProvider(), and FIX::HttpConnection::processRoot().

1554 {
1555  Locker locker( s_mutex );
1556  return s_sessions.size();
1557 }
static Sessions s_sessions
Definition: Session.h:344
static Mutex s_mutex
Definition: Session.h:347

◆ persist()

void FIX::Session::persist ( const Message message,
const std::string &  messageString 
)
throw (IOException
)
private

Definition at line 663 of file Session.cpp.

References FIX::SessionState::incrNextSenderMsgSeqNum(), m_persistMessages, m_state, FIX::FIELD::MsgSeqNum, and FIX::SessionState::set().

Referenced by sendRaw().

665 {
666  MsgSeqNum msgSeqNum;
667  message.getHeader().getField( msgSeqNum );
668  if( m_persistMessages )
669  m_state.set( msgSeqNum, messageString );
671 }
bool set(int s, const std::string &m)
Definition: SessionState.h:172
SessionState m_state
Definition: Session.h:337
void incrNextSenderMsgSeqNum()
Definition: SessionState.h:185
bool m_persistMessages
Definition: Session.h:334
const int MsgSeqNum

◆ populateRejectReason() [1/2]

void FIX::Session::populateRejectReason ( Message reject,
int  field,
const std::string &  text 
)
private

Definition at line 1009 of file Session.cpp.

References FIX::BeginString_FIX42, FIX::SessionID::getBeginString(), FIX::FieldMap::getField(), FIX::Message::getHeader(), m_sessionID, FIX::FIELD::MsgType, FIX::MsgType_Reject, FIX::FIELD::RefTagID, FIX::FieldMap::setField(), and FIX::FIELD::Text.

Referenced by generateBusinessReject(), generateReject(), and isCorrectCompID().

1011 {
1012  MsgType msgType;
1013  reject.getHeader().getField( msgType );
1014 
1015  if ( msgType == MsgType_Reject
1017  {
1018  reject.setField( RefTagID( field ) );
1019  reject.setField( Text( text ) );
1020  }
1021  else
1022  {
1023  std::stringstream stream;
1024  stream << text << " (" << field << ")";
1025  reject.setField( Text( stream.str() ) );
1026  }
1027 }
const char BeginString_FIX42[]
Definition: Values.h:34
SessionID m_sessionID
Definition: Session.h:319
const BeginString & getBeginString() const
Definition: SessionID.h:53
const int Text
const int RefTagID
const int MsgType
const char MsgType_Reject[]
Definition: FixValues.h:11

◆ populateRejectReason() [2/2]

void FIX::Session::populateRejectReason ( Message reject,
const std::string &  text 
)
private

Definition at line 1029 of file Session.cpp.

References FIX::FieldMap::setField(), and FIX::FIELD::Text.

1030 {
1031  reject.setField( Text( text ) );
1032 }
const int Text

◆ receivedLogon()

bool FIX::Session::receivedLogon ( )
inline

Definition at line 64 of file Session.h.

References m_state, and FIX::SessionState::receivedLogon().

Referenced by isLoggedOn().

64 { return m_state.receivedLogon(); }
SessionState m_state
Definition: Session.h:337
bool receivedLogon() const
Definition: SessionState.h:53

◆ refresh()

void FIX::Session::refresh ( )
throw (IOException
)
inline

◆ registerSession()

Session * FIX::Session::registerSession ( const SessionID sessionID)
static

Definition at line 1537 of file Session.cpp.

References isSessionRegistered(), lookupSession(), s_mutex, and s_registered.

Referenced by getDataDictionaryProvider(), FIX::SocketConnection::read(), and FIX::ThreadedSocketConnection::setSession().

1538 {
1539  Locker locker( s_mutex );
1540  Session* pSession = lookupSession( sessionID );
1541  if ( pSession == 0 ) return 0;
1542  if ( isSessionRegistered( sessionID ) ) return 0;
1543  s_registered[ sessionID ] = pSession;
1544  return pSession;
1545 }
static Session * lookupSession(const SessionID &)
Definition: Session.cpp:1496
static bool isSessionRegistered(const SessionID &)
Definition: Session.cpp:1531
Session(Application &, MessageStoreFactory &, const SessionID &, const DataDictionaryProvider &, const TimeRange &, int heartBtInt, LogFactory *pLogFactory)
Definition: Session.cpp:41
static Mutex s_mutex
Definition: Session.h:347
static Sessions s_registered
Definition: Session.h:346

◆ removeSession()

void FIX::Session::removeSession ( Session s)
staticprivate

Definition at line 1573 of file Session.cpp.

References m_sessionID, s_mutex, s_registered, s_sessionIDs, and s_sessions.

Referenced by ~Session().

1574 {
1575  Locker locker( s_mutex );
1576  s_sessions.erase( s.m_sessionID );
1577  s_sessionIDs.erase( s.m_sessionID );
1578  s_registered.erase( s.m_sessionID );
1579 }
static Sessions s_sessions
Definition: Session.h:344
static SessionIDs s_sessionIDs
Definition: Session.h:345
static Mutex s_mutex
Definition: Session.h:347
static Sessions s_registered
Definition: Session.h:346

◆ resend()

bool FIX::Session::resend ( Message message)
private

Definition at line 643 of file Session.cpp.

References FIX::FieldMap::getField(), FIX::Message::getHeader(), insertOrigSendingTime(), insertSendingTime(), m_application, m_sessionID, FIX::FIELD::MsgSeqNum, FIX::FIELD::PossDupFlag, FIX::FIELD::SendingTime, FIX::FieldMap::setField(), and FIX::Application::toApp().

Referenced by nextResendRequest().

644 {
645  SendingTime sendingTime;
646  MsgSeqNum msgSeqNum;
647  Header& header = message.getHeader();
648  header.getField( sendingTime );
649  header.getField( msgSeqNum );
650  insertOrigSendingTime( header, sendingTime );
651  header.setField( PossDupFlag( true ) );
652  insertSendingTime( header );
653 
654  try
655  {
656  m_application.toApp( message, m_sessionID );
657  return true;
658  }
659  catch ( DoNotSend& )
660  { return false; }
661 }
SessionID m_sessionID
Definition: Session.h:319
const int SendingTime
virtual void toApp(Message &, const SessionID &)=0
Notification of app message being sent to target.
Application & m_application
Definition: Session.h:318
void insertSendingTime(Header &)
Definition: Session.cpp:91
const int PossDupFlag
const int MsgSeqNum
void insertOrigSendingTime(Header &, const UtcTimeStamp &when=UtcTimeStamp())
Definition: Session.cpp:103

◆ reset()

void FIX::Session::reset ( )
throw (IOException
)
inline

◆ send() [1/2]

bool FIX::Session::send ( Message message)

Definition at line 523 of file Session.cpp.

References FIX::Message::getHeader(), FIX::FIELD::OrigSendingTime, FIX::FIELD::PossDupFlag, FIX::FieldMap::removeField(), and sendRaw().

Referenced by nextResendRequest(), sendRaw(), sendToTarget(), and setResponder().

524 {
525  message.getHeader().removeField( FIELD::PossDupFlag );
526  message.getHeader().removeField( FIELD::OrigSendingTime );
527  return sendRaw( message );
528 }
const int OrigSendingTime
bool sendRaw(Message &, int msgSeqNum=0)
Definition: Session.cpp:530
const int PossDupFlag

◆ send() [2/2]

bool FIX::Session::send ( const std::string &  string)
private

Definition at line 606 of file Session.cpp.

References m_pResponder, m_state, FIX::SessionState::onOutgoing(), and FIX::Responder::send().

607 {
608  if ( !m_pResponder ) return false;
609  m_state.onOutgoing( string );
610  return m_pResponder->send( string );
611 }
void onOutgoing(const std::string &string)
Definition: SessionState.h:202
virtual bool send(const std::string &)=0
SessionState m_state
Definition: Session.h:337
Responder * m_pResponder
Definition: Session.h:341

◆ sendRaw()

bool FIX::Session::sendRaw ( Message message,
int  msgSeqNum = 0 
)
private

Definition at line 530 of file Session.cpp.

References fill(), getExpectedSenderNum(), FIX::FieldMap::getFieldIfSet(), FIX::Message::getHeader(), FIX::Message::isAdminMsgType(), isLoggedOn(), m_application, m_mutex, m_sessionID, m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, FIX::SessionState::onEvent(), persist(), FIX::SessionState::receivedReset(), FIX::SessionState::reset(), FIX::FIELD::ResetSeqNumFlag, send(), FIX::SessionState::sentReset(), FIX::FieldMap::setField(), shouldSendReset(), FIX::Application::toAdmin(), FIX::Application::toApp(), and FIX::Message::toString().

Referenced by generateBusinessReject(), generateHeartbeat(), generateLogon(), generateLogout(), generateReject(), generateResendRequest(), generateSequenceReset(), generateTestRequest(), and send().

531 {
532  Locker l( m_mutex );
533 
534  try
535  {
536  Header& header = message.getHeader();
537 
538  MsgType msgType;
539  header.getFieldIfSet(msgType);
540 
541  fill( header );
542  std::string messageString;
543 
544  if ( num )
545  header.setField( MsgSeqNum( num ) );
546 
547  if ( Message::isAdminMsgType( msgType ) )
548  {
549  m_application.toAdmin( message, m_sessionID );
550 
551  if( msgType == "A" && !m_state.receivedReset() )
552  {
553  ResetSeqNumFlag resetSeqNumFlag( false );
554  message.getFieldIfSet(resetSeqNumFlag);
555 
556  if( resetSeqNumFlag )
557  {
558  m_state.reset();
559  message.getHeader().setField( MsgSeqNum(getExpectedSenderNum()) );
560  }
561  m_state.sentReset( resetSeqNumFlag );
562  }
563 
564  message.toString( messageString );
565 
566  if( !num )
567  persist( message, messageString );
568 
569  if (
570  msgType == "A" || msgType == "5"
571  || msgType == "2" || msgType == "4"
572  || isLoggedOn() )
573  {
574  send( messageString );
575  }
576  }
577  else
578  {
579  // do not send application messages if they will just be cleared
580  if( !isLoggedOn() && shouldSendReset() )
581  return false;
582 
583  try
584  {
585  m_application.toApp( message, m_sessionID );
586  message.toString( messageString );
587 
588  if( !num )
589  persist( message, messageString );
590 
591  if ( isLoggedOn() )
592  send( messageString );
593  }
594  catch ( DoNotSend& ) { return false; }
595  }
596 
597  return true;
598  }
599  catch ( IOException& e )
600  {
601  m_state.onEvent( e.what() );
602  return false;
603  }
604 }
bool send(Message &)
Definition: Session.cpp:523
static bool isAdminMsgType(const MsgType &msgType)
Definition: Message.h:300
int getExpectedSenderNum()
Definition: Session.h:224
SessionID m_sessionID
Definition: Session.h:319
bool receivedReset() const
Definition: SessionState.h:62
virtual void toApp(Message &, const SessionID &)=0
Notification of app message being sent to target.
bool sentReset() const
Definition: SessionState.h:65
Application & m_application
Definition: Session.h:318
void persist(const Message &, const std::string &)
Definition: Session.cpp:663
SessionState m_state
Definition: Session.h:337
virtual void toAdmin(Message &, const SessionID &)=0
Notification of admin message being sent to target.
bool shouldSendReset()
Definition: Session.cpp:1106
void onEvent(const std::string &string)
Definition: SessionState.h:204
Mutex m_mutex
Definition: Session.h:342
void fill(Header &)
Definition: Session.cpp:114
const int ResetSeqNumFlag
const int MsgSeqNum
const int MsgType
bool isLoggedOn()
Definition: Session.h:65

◆ sendToTarget() [1/4]

bool FIX::Session::sendToTarget ( Message message,
const std::string &  qualifier = "" 
)
throw (SessionNotFound
)
static

Definition at line 1444 of file Session.cpp.

Referenced by getDataDictionaryProvider(), and sendToTarget().

1446 {
1447  try
1448  {
1449  SessionID sessionID = message.getSessionID( qualifier );
1450  return sendToTarget( message, sessionID );
1451  }
1452  catch ( FieldNotFound& ) { throw SessionNotFound(); }
1453 }
static bool sendToTarget(Message &message, const std::string &qualifier="")
Definition: Session.cpp:1444

◆ sendToTarget() [2/4]

bool FIX::Session::sendToTarget ( Message message,
const SessionID sessionID 
)
throw (SessionNotFound
)
static

Definition at line 1455 of file Session.cpp.

References lookupSession(), send(), and sendToTarget().

1457 {
1458  message.setSessionID( sessionID );
1459  Session* pSession = lookupSession( sessionID );
1460  if ( !pSession ) throw SessionNotFound();
1461  return pSession->send( message );
1462 }
static Session * lookupSession(const SessionID &)
Definition: Session.cpp:1496
Session(Application &, MessageStoreFactory &, const SessionID &, const DataDictionaryProvider &, const TimeRange &, int heartBtInt, LogFactory *pLogFactory)
Definition: Session.cpp:41

◆ sendToTarget() [3/4]

bool FIX::Session::sendToTarget ( Message message,
const SenderCompID &  senderCompID,
const TargetCompID &  targetCompID,
const std::string &  qualifier = "" 
)
throw (SessionNotFound
)
static

Definition at line 1465 of file Session.cpp.

References FIX::Message::getHeader(), sendToTarget(), and FIX::FieldMap::setField().

1470 {
1471  message.getHeader().setField( senderCompID );
1472  message.getHeader().setField( targetCompID );
1473  return sendToTarget( message, qualifier );
1474 }
static bool sendToTarget(Message &message, const std::string &qualifier="")
Definition: Session.cpp:1444

◆ sendToTarget() [4/4]

bool FIX::Session::sendToTarget ( Message message,
const std::string &  senderCompID,
const std::string &  targetCompID,
const std::string &  qualifier = "" 
)
throw (SessionNotFound
)
static

Definition at line 1477 of file Session.cpp.

References FIX::FIELD::SenderCompID, sendToTarget(), and FIX::FIELD::TargetCompID.

1480 {
1481  return sendToTarget( message, SenderCompID( sender ),
1482  TargetCompID( target ), qualifier );
1483 }
static bool sendToTarget(Message &message, const std::string &qualifier="")
Definition: Session.cpp:1444
const int TargetCompID
const int SenderCompID

◆ sentLogon()

bool FIX::Session::sentLogon ( )
inline

Definition at line 62 of file Session.h.

References m_state, and FIX::SessionState::sentLogon().

Referenced by isLoggedOn().

62 { return m_state.sentLogon(); }
SessionState m_state
Definition: Session.h:337
bool sentLogon() const
Definition: SessionState.h:59

◆ sentLogout()

bool FIX::Session::sentLogout ( )
inline

Definition at line 63 of file Session.h.

References m_state, and FIX::SessionState::sentLogout().

63 { return m_state.sentLogout(); }
SessionState m_state
Definition: Session.h:337
bool sentLogout() const
Definition: SessionState.h:56

◆ set()

bool FIX::Session::set ( int  s,
const Message m 
)
private

◆ setCheckCompId()

void FIX::Session::setCheckCompId ( bool  value)
inline

Definition at line 139 of file Session.h.

References m_checkCompId.

Referenced by FIX::HttpConnection::processSession().

140  { m_checkCompId = value; }
bool m_checkCompId
Definition: Session.h:326

◆ setCheckLatency()

void FIX::Session::setCheckLatency ( bool  value)
inline

Definition at line 144 of file Session.h.

References m_checkLatency.

Referenced by FIX::HttpConnection::processSession().

145  { m_checkLatency = value; }
bool m_checkLatency
Definition: Session.h:327

◆ setDataDictionaryProvider()

void FIX::Session::setDataDictionaryProvider ( const DataDictionaryProvider dataDictionaryProvider)
inline

Definition at line 77 of file Session.h.

References m_dataDictionaryProvider.

78  { m_dataDictionaryProvider = dataDictionaryProvider; }
DataDictionaryProvider m_dataDictionaryProvider
Definition: Session.h:338

◆ setLogonTime()

void FIX::Session::setLogonTime ( const TimeRange value)
inline

Definition at line 119 of file Session.h.

References m_logonTime.

120  { m_logonTime = value; }
TimeRange m_logonTime
Definition: Session.h:321

◆ setLogonTimeout()

void FIX::Session::setLogonTimeout ( int  value)
inline

Definition at line 154 of file Session.h.

References FIX::SessionState::logonTimeout(), and m_state.

Referenced by FIX::HttpConnection::processSession().

155  { m_state.logonTimeout( value ); }
int logonTimeout() const
Definition: SessionState.h:71
SessionState m_state
Definition: Session.h:337

◆ setLogoutTimeout()

void FIX::Session::setLogoutTimeout ( int  value)
inline

Definition at line 159 of file Session.h.

References FIX::SessionState::logoutTimeout(), and m_state.

Referenced by FIX::HttpConnection::processSession().

160  { m_state.logoutTimeout( value ); }
int logoutTimeout() const
Definition: SessionState.h:74
SessionState m_state
Definition: Session.h:337

◆ setMaxLatency()

void FIX::Session::setMaxLatency ( int  value)
inline

Definition at line 149 of file Session.h.

References m_maxLatency.

Referenced by FIX::HttpConnection::processSession().

150  { m_maxLatency = value; }
int m_maxLatency
Definition: Session.h:328

◆ setMillisecondsInTimeStamp()

void FIX::Session::setMillisecondsInTimeStamp ( bool  value)
inline

Definition at line 184 of file Session.h.

References m_timestampPrecision.

Referenced by FIX::HttpConnection::processSession().

185  { if (value)
187  else
189  }
int m_timestampPrecision
Definition: Session.h:333

◆ setNextSenderMsgSeqNum()

void FIX::Session::setNextSenderMsgSeqNum ( int  num)
throw (IOException
)
inline

Definition at line 70 of file Session.h.

References m_state, and FIX::SessionState::setNextSenderMsgSeqNum().

Referenced by FIX::HttpConnection::processSession().

SessionState m_state
Definition: Session.h:337
void setNextSenderMsgSeqNum(int n)
Definition: SessionState.h:181

◆ setNextTargetMsgSeqNum()

void FIX::Session::setNextTargetMsgSeqNum ( int  num)
throw (IOException
)
inline

Definition at line 72 of file Session.h.

References m_state, and FIX::SessionState::setNextTargetMsgSeqNum().

Referenced by FIX::HttpConnection::processSession().

void setNextTargetMsgSeqNum(int n)
Definition: SessionState.h:183
SessionState m_state
Definition: Session.h:337

◆ setPersistMessages()

void FIX::Session::setPersistMessages ( bool  value)
inline

Definition at line 202 of file Session.h.

References m_persistMessages.

Referenced by FIX::HttpConnection::processSession().

203  { m_persistMessages = value; }
bool m_persistMessages
Definition: Session.h:334

◆ setRefreshOnLogon()

void FIX::Session::setRefreshOnLogon ( bool  value)
inline

Definition at line 179 of file Session.h.

References m_refreshOnLogon.

Referenced by FIX::HttpConnection::processSession().

180  { m_refreshOnLogon = value; }
bool m_refreshOnLogon
Definition: Session.h:332

◆ setResetOnDisconnect()

void FIX::Session::setResetOnDisconnect ( bool  value)
inline

Definition at line 174 of file Session.h.

References m_resetOnDisconnect.

Referenced by FIX::HttpConnection::processSession().

175  { m_resetOnDisconnect = value; }
bool m_resetOnDisconnect
Definition: Session.h:331

◆ setResetOnLogon()

void FIX::Session::setResetOnLogon ( bool  value)
inline

Definition at line 164 of file Session.h.

References m_resetOnLogon.

Referenced by FIX::HttpConnection::processSession().

165  { m_resetOnLogon = value; }
bool m_resetOnLogon
Definition: Session.h:329

◆ setResetOnLogout()

void FIX::Session::setResetOnLogout ( bool  value)
inline

Definition at line 169 of file Session.h.

References m_resetOnLogout.

Referenced by FIX::HttpConnection::processSession().

170  { m_resetOnLogout = value; }
bool m_resetOnLogout
Definition: Session.h:330

◆ setResponder()

void FIX::Session::setResponder ( Responder pR)
inline

Definition at line 210 of file Session.h.

References checkSessionTime(), disconnect(), m_pResponder, next(), reset(), send(), and FIX::TYPE::UtcTimeStamp.

Referenced by FIX::ThreadedSocketConnection::setSession(), and FIX::ThreadedSocketConnection::~ThreadedSocketConnection().

211  {
213  reset();
214  m_pResponder = pR;
215  }
void reset()
Definition: Session.h:66
bool checkSessionTime(const UtcTimeStamp &timeStamp)
Definition: Session.h:255
Responder * m_pResponder
Definition: Session.h:341

◆ setSenderDefaultApplVerID()

void FIX::Session::setSenderDefaultApplVerID ( const std::string &  senderDefaultApplVerID)
inline

Definition at line 124 of file Session.h.

References m_senderDefaultApplVerID.

125  { m_senderDefaultApplVerID = senderDefaultApplVerID; }
std::string m_senderDefaultApplVerID
Definition: Session.h:323

◆ setSendRedundantResendRequests()

void FIX::Session::setSendRedundantResendRequests ( bool  value)
inline

Definition at line 134 of file Session.h.

References m_sendRedundantResendRequests.

Referenced by FIX::HttpConnection::processSession().

135  { m_sendRedundantResendRequests = value; }
bool m_sendRedundantResendRequests
Definition: Session.h:325

◆ setTargetDefaultApplVerID()

void FIX::Session::setTargetDefaultApplVerID ( const std::string &  targetDefaultApplVerID)
inline

Definition at line 129 of file Session.h.

References m_targetDefaultApplVerID.

Referenced by next().

130  { m_targetDefaultApplVerID = targetDefaultApplVerID; }
std::string m_targetDefaultApplVerID
Definition: Session.h:324

◆ setTimestampPrecision()

void FIX::Session::setTimestampPrecision ( int  precision)
inline

Definition at line 192 of file Session.h.

References m_timestampPrecision.

193  {
194  if (precision < 0 || precision > 9)
195  return;
196 
197  m_timestampPrecision = precision;
198  }
int m_timestampPrecision
Definition: Session.h:333

◆ setValidateLengthAndChecksum()

void FIX::Session::setValidateLengthAndChecksum ( bool  value)
inline

Definition at line 207 of file Session.h.

References m_validateLengthAndChecksum.

208  { m_validateLengthAndChecksum = value; }
bool m_validateLengthAndChecksum
Definition: Session.h:335

◆ shouldSendReset()

bool FIX::Session::shouldSendReset ( )
private

Definition at line 1106 of file Session.cpp.

References FIX::BeginString_FIX41, FIX::SessionID::getBeginString(), getExpectedSenderNum(), getExpectedTargetNum(), m_resetOnDisconnect, m_resetOnLogon, m_resetOnLogout, and m_sessionID.

Referenced by generateLogon(), isCorrectCompID(), and sendRaw().

1107 {
1108  std::string beginString = m_sessionID.getBeginString();
1109  return beginString >= FIX::BeginString_FIX41
1110  && ( m_resetOnLogon ||
1111  m_resetOnLogout ||
1113  && ( getExpectedSenderNum() == 1 )
1114  && ( getExpectedTargetNum() == 1 );
1115 }
int getExpectedTargetNum()
Definition: Session.h:225
int getExpectedSenderNum()
Definition: Session.h:224
SessionID m_sessionID
Definition: Session.h:319
bool m_resetOnLogon
Definition: Session.h:329
const BeginString & getBeginString() const
Definition: SessionID.h:53
const char BeginString_FIX41[]
Definition: Values.h:35
bool m_resetOnDisconnect
Definition: Session.h:331
bool m_resetOnLogout
Definition: Session.h:330

◆ unregisterSession()

void FIX::Session::unregisterSession ( const SessionID sessionID)
static

Definition at line 1547 of file Session.cpp.

References s_mutex, and s_registered.

Referenced by getDataDictionaryProvider(), FIX::Acceptor::stop(), FIX::SocketConnection::~SocketConnection(), and FIX::ThreadedSocketConnection::~ThreadedSocketConnection().

1548 {
1549  Locker locker( s_mutex );
1550  s_registered.erase( sessionID );
1551 }
static Mutex s_mutex
Definition: Session.h:347
static Sessions s_registered
Definition: Session.h:346

◆ validLogonState()

bool FIX::Session::validLogonState ( const MsgType &  msgType)
private

Definition at line 1117 of file Session.cpp.

References m_state, FIX::MsgType_Logon, FIX::MsgType_Logout, FIX::MsgType_Reject, FIX::MsgType_SequenceReset, FIX::SessionState::receivedLogon(), FIX::SessionState::receivedReset(), FIX::SessionState::sentLogon(), FIX::SessionState::sentLogout(), and FIX::SessionState::sentReset().

Referenced by isCorrectCompID(), and verify().

1118 {
1119  if ( (msgType == MsgType_Logon && m_state.sentReset())
1120  || (m_state.receivedReset()) )
1121  return true;
1122  if ( (msgType == MsgType_Logon && !m_state.receivedLogon())
1123  || (msgType != MsgType_Logon && m_state.receivedLogon()) )
1124  return true;
1125  if ( msgType == MsgType_Logout && m_state.sentLogon() )
1126  return true;
1127  if ( msgType != MsgType_Logout && m_state.sentLogout() )
1128  return true;
1129  if ( msgType == MsgType_SequenceReset )
1130  return true;
1131  if ( msgType == MsgType_Reject )
1132  return true;
1133 
1134  return false;
1135 }
const char MsgType_SequenceReset[]
Definition: FixValues.h:12
bool receivedReset() const
Definition: SessionState.h:62
bool sentReset() const
Definition: SessionState.h:65
SessionState m_state
Definition: Session.h:337
bool receivedLogon() const
Definition: SessionState.h:53
bool sentLogon() const
Definition: SessionState.h:59
const char MsgType_Logon[]
Definition: FixValues.h:14
const char MsgType_Logout[]
Definition: FixValues.h:13
bool sentLogout() const
Definition: SessionState.h:56
const char MsgType_Reject[]
Definition: FixValues.h:11

◆ verify()

bool FIX::Session::verify ( const Message msg,
bool  checkTooHigh = true,
bool  checkTooLow = true 
)
private

Definition at line 1034 of file Session.cpp.

References FIX::IntConvertor::convert(), disconnect(), doBadCompID(), doBadTime(), doTargetTooHigh(), doTargetTooLow(), FIELD_GET_PTR, FIELD_GET_REF, fromCallback(), FIX::Message::getHeader(), isCorrectCompID(), isGoodTime(), isTargetTooHigh(), isTargetTooLow(), FIX::SessionState::lastReceivedTime(), m_sessionID, m_state, FIX::FIELD::MsgSeqNum, FIX::FIELD::MsgType, FIX::SessionState::onEvent(), FIX::SessionState::resendRange(), FIX::SessionState::resendRequested(), FIX::FIELD::SenderCompID, FIX::FIELD::SendingTime, FIX::FIELD::TargetCompID, FIX::SessionState::testRequest(), and validLogonState().

Referenced by isCorrectCompID(), next(), nextHeartbeat(), nextLogon(), nextLogout(), nextReject(), nextResendRequest(), nextSequenceReset(), and nextTestRequest().

1036 {
1037  const MsgType* pMsgType = 0;
1038  const MsgSeqNum* pMsgSeqNum = 0;
1039 
1040  try
1041  {
1042  const Header& header = msg.getHeader();
1043 
1044  pMsgType = FIELD_GET_PTR( header, MsgType );
1045  const SenderCompID& senderCompID = FIELD_GET_REF( header, SenderCompID );
1046  const TargetCompID& targetCompID = FIELD_GET_REF( header, TargetCompID );
1047  const SendingTime& sendingTime = FIELD_GET_REF( header, SendingTime );
1048 
1049  if( checkTooHigh || checkTooLow )
1050  pMsgSeqNum = FIELD_GET_PTR( header, MsgSeqNum );
1051 
1052  if ( !validLogonState( *pMsgType ) )
1053  throw std::logic_error( "Logon state is not valid for message" );
1054 
1055  if ( !isGoodTime( sendingTime ) )
1056  {
1057  doBadTime( msg );
1058  return false;
1059  }
1060  if ( !isCorrectCompID( senderCompID, targetCompID ) )
1061  {
1062  doBadCompID( msg );
1063  return false;
1064  }
1065 
1066  if ( checkTooHigh && isTargetTooHigh( *pMsgSeqNum ) )
1067  {
1068  doTargetTooHigh( msg );
1069  return false;
1070  }
1071  else if ( checkTooLow && isTargetTooLow( *pMsgSeqNum ) )
1072  {
1073  doTargetTooLow( msg );
1074  return false;
1075  }
1076 
1077  if ( (checkTooHigh || checkTooLow) && m_state.resendRequested() )
1078  {
1080 
1081  if ( *pMsgSeqNum >= range.second )
1082  {
1083  m_state.onEvent ("ResendRequest for messages FROM: " +
1084  IntConvertor::convert (range.first) + " TO: " +
1085  IntConvertor::convert (range.second) +
1086  " has been satisfied.");
1087  m_state.resendRange (0, 0);
1088  }
1089  }
1090  }
1091  catch ( std::exception& e )
1092  {
1093  m_state.onEvent( e.what() );
1094  disconnect();
1095  return false;
1096  }
1097 
1098  UtcTimeStamp now;
1099  m_state.lastReceivedTime( now );
1100  m_state.testRequest( 0 );
1101 
1102  fromCallback( pMsgType ? *pMsgType : MsgType(), msg, m_sessionID );
1103  return true;
1104 }
void lastReceivedTime(const UtcTimeStamp &value)
Definition: SessionState.h:108
bool isGoodTime(const SendingTime &sendingTime)
Definition: Session.h:249
std::pair< int, int > ResendRange
Definition: SessionState.h:83
int testRequest() const
Definition: SessionState.h:77
void doBadTime(const Message &msg)
Definition: Session.cpp:1146
SessionID m_sessionID
Definition: Session.h:319
bool validLogonState(const MsgType &msgType)
Definition: Session.cpp:1117
static std::string convert(signed_int value)
bool resendRequested() const
Definition: SessionState.h:80
bool isTargetTooLow(const MsgSeqNum &msgSeqNum)
Definition: Session.h:262
const int SendingTime
void doTargetTooHigh(const Message &msg)
Definition: Session.cpp:1206
void disconnect()
Definition: Session.cpp:613
bool isTargetTooHigh(const MsgSeqNum &msgSeqNum)
Definition: Session.h:260
const int TargetCompID
SessionState m_state
Definition: Session.h:337
ResendRange resendRange() const
Definition: SessionState.h:85
void fromCallback(const MsgType &msgType, const Message &msg, const SessionID &sessionID)
Definition: Session.cpp:1137
bool isCorrectCompID(const SenderCompID &senderCompID, const TargetCompID &targetCompID)
Definition: Session.h:264
const int SenderCompID
void onEvent(const std::string &string)
Definition: SessionState.h:204
void doBadCompID(const Message &msg)
Definition: Session.cpp:1152
bool doTargetTooLow(const Message &msg)
Definition: Session.cpp:1186
const int MsgSeqNum
#define FIELD_GET_PTR(MAP, FLD)
Definition: FieldMap.h:374
#define FIELD_GET_REF(MAP, FLD)
Definition: FieldMap.h:376
const int MsgType

Member Data Documentation

◆ m_application

Application& FIX::Session::m_application
private

Definition at line 318 of file Session.h.

Referenced by disconnect(), fromCallback(), nextLogon(), resend(), sendRaw(), and Session().

◆ m_checkCompId

bool FIX::Session::m_checkCompId
private

Definition at line 326 of file Session.h.

Referenced by getCheckCompId(), isCorrectCompID(), and setCheckCompId().

◆ m_checkLatency

bool FIX::Session::m_checkLatency
private

Definition at line 327 of file Session.h.

Referenced by getCheckLatency(), isGoodTime(), and setCheckLatency().

◆ m_dataDictionaryProvider

DataDictionaryProvider FIX::Session::m_dataDictionaryProvider
private

◆ m_logonTime

TimeRange FIX::Session::m_logonTime
private

Definition at line 321 of file Session.h.

Referenced by getLogonTime(), isLogonTime(), and setLogonTime().

◆ m_maxLatency

int FIX::Session::m_maxLatency
private

Definition at line 328 of file Session.h.

Referenced by getMaxLatency(), isGoodTime(), and setMaxLatency().

◆ m_messageStoreFactory

MessageStoreFactory& FIX::Session::m_messageStoreFactory
private

Definition at line 339 of file Session.h.

Referenced by Session(), and ~Session().

◆ m_mutex

Mutex FIX::Session::m_mutex
private

Definition at line 342 of file Session.h.

Referenced by disconnect(), nextResendRequest(), and sendRaw().

◆ m_persistMessages

bool FIX::Session::m_persistMessages
private

Definition at line 334 of file Session.h.

Referenced by getPersistMessages(), nextResendRequest(), persist(), and setPersistMessages().

◆ m_pLogFactory

LogFactory* FIX::Session::m_pLogFactory
private

Definition at line 340 of file Session.h.

Referenced by Session(), and ~Session().

◆ m_pResponder

Responder* FIX::Session::m_pResponder
private

Definition at line 341 of file Session.h.

Referenced by disconnect(), send(), and setResponder().

◆ m_refreshOnLogon

bool FIX::Session::m_refreshOnLogon
private

Definition at line 332 of file Session.h.

Referenced by generateLogon(), getRefreshOnLogon(), nextLogon(), and setRefreshOnLogon().

◆ m_resetOnDisconnect

bool FIX::Session::m_resetOnDisconnect
private

Definition at line 331 of file Session.h.

Referenced by disconnect(), getResetOnDisconnect(), setResetOnDisconnect(), and shouldSendReset().

◆ m_resetOnLogon

bool FIX::Session::m_resetOnLogon
private

◆ m_resetOnLogout

bool FIX::Session::m_resetOnLogout
private

Definition at line 330 of file Session.h.

Referenced by getResetOnLogout(), nextLogout(), setResetOnLogout(), and shouldSendReset().

◆ m_senderDefaultApplVerID

std::string FIX::Session::m_senderDefaultApplVerID
private

◆ m_sendRedundantResendRequests

bool FIX::Session::m_sendRedundantResendRequests
private

◆ m_sessionID

SessionID FIX::Session::m_sessionID
private

◆ m_sessionTime

TimeRange FIX::Session::m_sessionTime
private

Definition at line 320 of file Session.h.

Referenced by checkSessionTime(), and isSessionTime().

◆ m_state

SessionState FIX::Session::m_state
private

◆ m_targetDefaultApplVerID

std::string FIX::Session::m_targetDefaultApplVerID
private

Definition at line 324 of file Session.h.

Referenced by getTargetDefaultApplVerID(), next(), and setTargetDefaultApplVerID().

◆ m_timestampPrecision

int FIX::Session::m_timestampPrecision
private

◆ m_validateLengthAndChecksum

bool FIX::Session::m_validateLengthAndChecksum
private

◆ s_mutex

Mutex FIX::Session::s_mutex
staticprivate

◆ s_registered

Session::Sessions FIX::Session::s_registered
staticprivate

Definition at line 346 of file Session.h.

Referenced by isSessionRegistered(), registerSession(), removeSession(), and unregisterSession().

◆ s_sessionIDs

Session::SessionIDs FIX::Session::s_sessionIDs
staticprivate

Definition at line 345 of file Session.h.

Referenced by addSession(), getSessions(), and removeSession().

◆ s_sessions

Session::Sessions FIX::Session::s_sessions
staticprivate

Definition at line 344 of file Session.h.

Referenced by addSession(), doesSessionExist(), lookupSession(), numSessions(), and removeSession().


The documentation for this class was generated from the following files:

Generated on Wed Aug 28 2019 14:13:46 for QuickFIX by doxygen 1.8.13 written by Dimitri van Heesch, © 1997-2001