FIX::SocketConnection Class Reference

Encapsulates a socket file descriptor (single-threaded). More...

`#include <SocketConnection.h>`

Inheritance diagram for FIX::SocketConnection:
[legend]
Collaboration diagram for FIX::SocketConnection:
[legend]

## Public Types

typedef std::set< SessionID > | Sessions

## Public Member Functions

| SocketConnection (int s, Sessions sessions, SocketMonitor *pMonitor)
| SocketConnection (SocketInitiator &, const SessionID &, int, SocketMonitor *)
virtual | ~SocketConnection ()
int | getSocket () const
Session * | getSession () const
bool | read (SocketConnector &s)
bool | read (SocketAcceptor &, SocketServer &)
bool | processQueue ()
void | signal ()
void | unsignal ()
void | onTimeout ()

## Private Types

typedef std::deque< std::string, ALLOCATOR< std::string > > | Queue

## Private Member Functions

bool | isValidSession ()
void | readFromSocket () throw ( SocketRecvFailed )
bool | readMessage (std::string &msg)
void | readMessages (SocketMonitor &s)
bool | send (const std::string &)
void | disconnect ()
Private Member Functions inherited from FIX::Responder
virtual | ~Responder ()

## Private Attributes

int | m_socket
char | m_buffer [BUFSIZ]
Parser | m_parser
Queue | m_sendQueue
unsigned | m_sendLength
Sessions | m_sessions
Session * | m_pSession
SocketMonitor * | m_pMonitor
Mutex | m_mutex
fd_set | m_fds

## Detailed Description

Encapsulates a socket file descriptor (single-threaded).

Definition at line 63 of file SocketConnection.h.

## Member Typedef Documentation

## Queue

typedef std::deque<std::string, ALLOCATOR<std::string> > FIX::SocketConnection::Queue

private

Definition at line 97 of file SocketConnection.h.

## Sessions

typedef std::set<SessionID> FIX::SocketConnection::Sessions

Definition at line 66 of file SocketConnection.h.

## Constructor & Destructor Documentation

## SocketConnection() [1/2]

FIX::SocketConnection::SocketConnection | ( | int | s,
|  | Sessions | sessions,
|  | SocketMonitor * | pMonitor
| ) |  |

Definition at line 52 of file SocketConnection.cpp.

{
if ( m_pSession )
Session::unregisterSession( m_pSession->getSessionID() );

## SocketConnection() [2/2]

FIX::SocketConnection::SocketConnection | ( | SocketInitiator & | i,
|  | const SessionID & | sessionID,
|  | int | s,
|  | SocketMonitor * | pMonitor
| ) |  |

Definition at line 61 of file SocketConnection.cpp.

{
Locker l( m_mutex );
m_sendQueue.push_back( msg );
processQueue();
signal();
return true;
}

References m_mutex, m_sendQueue, processQueue(), and signal().

## ~SocketConnection()

FIX::SocketConnection::~SocketConnection | ( |  | ) |

virtual

Definition at line 73 of file SocketConnection.cpp.

{
Locker l( m_mutex );
if( !m_sendQueue.size() ) return true;

References m_mutex, and m_sendQueue.

## Member Function Documentation

## disconnect()

void FIX::SocketConnection::disconnect | ( |  | ) |

private virtual

Implements FIX::Responder.

Definition at line 117 of file SocketConnection.cpp.

## getSession()

Session* FIX::SocketConnection::getSession | ( |  | ) | const

inline

Definition at line 73 of file SocketConnection.h.

:
typedef std::deque<std::string, ALLOCATOR<std::string> >

Referenced by FIX::SocketAcceptor::onWrite().

## getSocket()

int FIX::SocketConnection::getSocket | ( |  | ) | const

inline

Definition at line 72 of file SocketConnection.h.

:
typedef std::deque<std::string, ALLOCATOR<std::string> >

## isValidSession()

bool FIX::SocketConnection::isValidSession | ( |  | ) |

private

Definition at line 204 of file SocketConnection.cpp.

{
try
{
return m_parser.readFixMessage( msg );
}
catch ( MessageParseError& ) {}
return true;

References m_parser, and FIX::Parser::readFixMessage().

## onTimeout()

void FIX::SocketConnection::onTimeout | ( |  | ) |

Definition at line 251 of file SocketConnection.cpp.

## processQueue()

bool FIX::SocketConnection::processQueue | ( |  | ) |

Definition at line 89 of file SocketConnection.cpp.

{
m_sendLength = 0;
m_sendQueue.pop_front();
}
return !m_sendQueue.size();
}
void SocketConnection::disconnect()
{
if ( m_pMonitor )
m_pMonitor->drop( m_socket );
}
bool SocketConnection::read( SocketConnector& s )
{
if ( !m_pSession ) return false;
try
{
readFromSocket();
readMessages( s.getMonitor() );
}
catch( SocketRecvFailed& e )

References m_sendLength, and m_sendQueue.

Referenced by FIX::SocketAcceptor::onConnect(), and SocketConnection().

## read() [1/2]

bool FIX::SocketConnection::read | ( | SocketAcceptor & | a,
|  | SocketServer & | s
| ) |  |

Definition at line 140 of file SocketConnection.cpp.

{
m_pSession = 0;
if( a.getLog() )
{
a.getLog()->onEvent( "Session not found for incoming message: " + msg );
a.getLog()->onIncoming( msg );
}
}
if( m_pSession )
m_pSession = a.getSession( msg, *this );
if( m_pSession )
m_pSession->next( msg, UtcTimeStamp() );
if( !m_pSession )
{
s.getMonitor().drop( m_socket );
return false;
}
Session::registerSession( m_pSession->getSessionID() );
return true;
}
else
{
readFromSocket();
readMessages( s.getMonitor() );
return true;
}
}
catch ( SocketRecvFailed& e )
{
if( m_pSession )
m_pSession->getLog()->onEvent( e.what() );
s.getMonitor().drop( m_socket );
}
catch ( InvalidMessage& )
{
s.getMonitor().drop( m_socket );
}
return false;
}
bool SocketConnection::isValidSession()
{
if( m_pSession == 0 )
return false;
SessionID sessionID = m_pSession->getSessionID();
if( Session::isSessionRegistered(sessionID) )
return false;
return !( m_sessions.find(sessionID) == m_sessions.end() );
}
void SocketConnection::readFromSocket()
throw( SocketRecvFailed )
{
ssize_t size = socket_recv( m_socket, m_buffer, sizeof(m_buffer) );
if( size <= 0 ) throw SocketRecvFailed( size );
m_parser.addToStream( m_buffer, size );

## read() [2/2]

bool FIX::SocketConnection::read | ( | SocketConnector & | s | ) |

Definition at line 123 of file SocketConnection.cpp.

{
std::string msg;
try
{
if ( !m_pSession )
{
struct timeval timeout = { 1, 0 };
fd_set readset = m_fds;
while( !readMessage( msg ) )
{
int result = select( 1 + m_socket, &readset, 0, 0, &timeout );
if( result > 0 )
readFromSocket();
else if( result == 0 )

References m_fds, m_pSession, m_socket, readFromSocket(), and readMessage().

## readFromSocket()

void FIX::SocketConnection::readFromSocket | ( |  | ) |
throw | ( | SocketRecvFailed
| ) |  |

private

Definition at line 214 of file SocketConnection.cpp.

{
if( !m_pSession ) return;
std::string msg;
while( readMessage( msg ) )

References m_pSession, and readMessage().

Referenced by read().

## readMessage()

bool FIX::SocketConnection::readMessage | ( | std::string & | msg | ) |

private

Definition at line 222 of file SocketConnection.cpp.

{
m_pSession->next( msg, UtcTimeStamp() );
}
catch ( InvalidMessage& )
{
if( !m_pSession->isLoggedOn() )
s.drop( m_socket );
}

References m_pSession, FIX::Session::next(), and FIX::TYPE::UtcTimeStamp.

Referenced by read(), and readFromSocket().

## readMessages()

void FIX::SocketConnection::readMessages | ( | SocketMonitor & | s | ) |

private

Definition at line 232 of file SocketConnection.cpp.

{
if ( m_pSession ) m_pSession->next();
}
} // namespace FIX

## send()

bool FIX::SocketConnection::send | ( | const std::string & | msg | ) |

private virtual

Implements FIX::Responder.

Definition at line 79 of file SocketConnection.cpp.

{

## signal()

void FIX::SocketConnection::signal | ( |  | ) |

inline

Definition at line 79 of file SocketConnection.h.

Referenced by SocketConnection().

## unsignal()

void FIX::SocketConnection::unsignal | ( |  | ) |

inline

Definition at line 86 of file SocketConnection.h.

Referenced by FIX::SocketAcceptor::onConnect().

## Member Data Documentation

## m_buffer

char FIX::SocketConnection::m_buffer[BUFSIZ]

private

Definition at line 107 of file SocketConnection.h.

## m_fds

fd_set FIX::SocketConnection::m_fds

private

Definition at line 116 of file SocketConnection.h.

Referenced by read().

## m_mutex

Mutex FIX::SocketConnection::m_mutex

private

Definition at line 115 of file SocketConnection.h.

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

## m_parser

Parser FIX::SocketConnection::m_parser

private

Definition at line 109 of file SocketConnection.h.

Referenced by isValidSession().

## m_pMonitor

SocketMonitor* FIX::SocketConnection::m_pMonitor

private

Definition at line 114 of file SocketConnection.h.

## m_pSession

Session* FIX::SocketConnection::m_pSession

private

Definition at line 113 of file SocketConnection.h.

Referenced by read(), readFromSocket(), and readMessage().

## m_sendLength

unsigned FIX::SocketConnection::m_sendLength

private

Definition at line 111 of file SocketConnection.h.

Referenced by processQueue().

## m_sendQueue

Queue FIX::SocketConnection::m_sendQueue

private

Definition at line 110 of file SocketConnection.h.

Referenced by processQueue(), SocketConnection(), and ~SocketConnection().

## m_sessions

Sessions FIX::SocketConnection::m_sessions

private

Definition at line 112 of file SocketConnection.h.

## m_socket

int FIX::SocketConnection::m_socket

private

Definition at line 106 of file SocketConnection.h.

Referenced by read().

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

- SocketConnection.h
- SocketConnection.cpp

FIX::SocketConnection::m_socket
int m_socket
Definition: SocketConnection.h:106
FIX::Session::unregisterSession
static void unregisterSession(const SessionID &)
Definition: Session.cpp:1564
FIX::SocketConnection::m_pSession
Session * m_pSession
Definition: SocketConnection.h:113
FIX::SocketConnection::m_fds
fd_set m_fds
Definition: SocketConnection.h:116
FIX::Session::getSessionID
const SessionID & getSessionID() const
Definition: Session.h:109
FIX::SocketConnection::readMessage
bool readMessage(std::string &msg)
Definition: SocketConnection.cpp:222
FIX::SocketConnection::m_parser
Parser m_parser
Definition: SocketConnection.h:109
FIX::SocketConnection::readFromSocket
void readFromSocket()
Definition: SocketConnection.cpp:214
FIX::Session::registerSession
static Session * registerSession(const SessionID &)
Definition: Session.cpp:1554
FIX::Session::next
void next()
Definition: Session.cpp:142
FIX::socket_recv
ssize_t socket_recv(int s, char *buf, size_t length)
Definition: Utility.cpp:187
FIX::SocketConnection::m_sendLength
unsigned m_sendLength
Definition: SocketConnection.h:111
FIX::TYPE::UtcTimeStamp
@ UtcTimeStamp
Definition: FieldTypes.h:940
FIX::Log::onEvent
virtual void onEvent(const std::string &)=0
FIX::Session::getLog
Log * getLog()
Definition: Session.h:261
FIX::Session::isSessionRegistered
static bool isSessionRegistered(const SessionID &)
Definition: Session.cpp:1548
FIX::SocketConnection::isValidSession
bool isValidSession()
Definition: SocketConnection.cpp:204
FIX::SocketConnection::m_buffer
char m_buffer[BUFSIZ]
Definition: SocketConnection.h:107
FIX::Session::isLoggedOn
bool isLoggedOn()
Definition: Session.h:99
FIX::SocketConnection::disconnect
void disconnect()
Definition: SocketConnection.cpp:117
FIX::SocketConnection::m_sendQueue
Queue m_sendQueue
Definition: SocketConnection.h:110
FIX::SocketConnection::processQueue
bool processQueue()
Definition: SocketConnection.cpp:89
FIX::SocketConnection::m_mutex
Mutex m_mutex
Definition: SocketConnection.h:115
FIX::SocketMonitor::drop
bool drop(int socket)
Definition: SocketMonitor.cpp:115
FIX::Parser::addToStream
void addToStream(const char *str, size_t len)
Definition: Parser.h:82
FIX::Parser::readFixMessage
bool readFixMessage(std::string &str)
Definition: Parser.cpp:76
FIX::SocketConnection::signal
void signal()
Definition: SocketConnection.h:79
FIX::SocketConnection::read
bool read(SocketConnector &s)
Definition: SocketConnection.cpp:123
FIX::SocketConnection::m_pMonitor
SocketMonitor * m_pMonitor
Definition: SocketConnection.h:114
FIX::SocketConnection::m_sessions
Sessions m_sessions
Definition: SocketConnection.h:112
FIX::SocketConnection::readMessages
void readMessages(SocketMonitor &s)
Definition: SocketConnection.cpp:232