123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- /* -*- C++ -*- */
- /****************************************************************************
- ** Copyright (c) 2001-2014
- **
- ** This file is part of the QuickFIX FIX Engine
- **
- ** This file may be distributed under the terms of the quickfixengine.org
- ** license as defined by quickfixengine.org and appearing in the file
- ** LICENSE included in the packaging of this file.
- **
- ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- **
- ** See http://www.quickfixengine.org/LICENSE for licensing information.
- **
- ** Contact ask@quickfixengine.org if any conditions of this licensing are
- ** not clear to you.
- **
- ****************************************************************************/
- #ifndef FIX_EXCEPTIONS_H
- #define FIX_EXCEPTIONS_H
- #include <string>
- #include <stdexcept>
- #include "Utility.h"
- namespace FIX
- {
- /// Base QuickFIX exception type.
- struct Exception : public std::logic_error
- {
- Exception( const std::string& t, const std::string& d )
- : std::logic_error( d.size() ? t + ": " + d : t ),
- type( t ), detail( d )
- {}
- ~Exception() throw() {}
- std::string type;
- std::string detail;
- };
- /// DataDictionary not found for BeginString or ApplVerID
- struct DataDictionaryNotFound : public Exception
- {
- DataDictionaryNotFound( const std::string& v, const std::string& what = "" )
- : Exception( "Could not find data dictionary", what ),
- version( v ) {}
- ~DataDictionaryNotFound() throw() {}
- std::string version;
- };
- /// Field not found inside a message
- struct FieldNotFound : public Exception
- {
- FieldNotFound( int f = 0, const std::string& what = "" )
- : Exception( "Field not found", what ),
- field( f ) {}
- int field;
- };
- /// Unable to convert field into its native format
- struct FieldConvertError : public Exception
- {
- FieldConvertError( const std::string& what = "" )
- : Exception( "Could not convert field", what ) {}
- };
- /// Unable to parse message
- struct MessageParseError : public Exception
- {
- MessageParseError( const std::string& what = "" )
- : Exception( "Could not parse message", what ) {}
- };
- /// Not a recognizable message
- struct InvalidMessage : public Exception
- {
- InvalidMessage( const std::string& what = "" )
- : Exception( "Invalid message", what ) {}
- };
- /// %Application is not configured correctly
- struct ConfigError : public Exception
- {
- ConfigError( const std::string& what = "" )
- : Exception( "Configuration failed", what ) {}
- };
- /// %Application encountered serious error during runtime
- struct RuntimeError : public Exception
- {
- RuntimeError( const std::string& what = "" )
- : Exception( "Runtime error", what ) {}
- };
- /// Tag number does not exist in specification
- struct InvalidTagNumber : public Exception
- {
- InvalidTagNumber( int f = 0, const std::string& what = "" )
- : Exception( "Invalid tag number", what ),
- field( f ) {}
- int field;
- };
- /// Required field is not in message
- struct RequiredTagMissing : public Exception
- {
- RequiredTagMissing( int f = 0, const std::string& what = "" )
- : Exception( "Required tag missing", what ),
- field( f ) {}
- int field;
- };
- /// Field does not belong to message
- struct TagNotDefinedForMessage : public Exception
- {
- TagNotDefinedForMessage( int f = 0, const std::string& what = "" )
- : Exception( "Tag not defined for this message type", what ),
- field( f ) {}
- int field;
- };
- /// Field exists in message without a value
- struct NoTagValue : public Exception
- {
- NoTagValue( int f = 0, const std::string& what = "" )
- : Exception( "Tag specified without a value", what ),
- field( f ) {}
- int field;
- };
- /// Field has a value that is out of range
- struct IncorrectTagValue : public Exception
- {
- IncorrectTagValue( int f = 0, const std::string& what = "" )
- : Exception( "Value is incorrect (out of range) for this tag", what ),
- field( f ) {}
- int field;
- };
- /// Field has a badly formatted value
- struct IncorrectDataFormat : public Exception
- {
- IncorrectDataFormat( int f = 0, const std::string& what = "" )
- : Exception( "Incorrect data format for value", what ),
- field( f ) {}
- int field;
- };
- /// Message is not structured correctly
- struct IncorrectMessageStructure : public Exception
- {
- IncorrectMessageStructure( const std::string& what = "" )
- : Exception( "Incorrect message structure", what ) {}
- };
- /// Field shows up twice in the message
- struct DuplicateFieldNumber : public Exception
- {
- DuplicateFieldNumber( const std::string& what = "" )
- : Exception( "Duplicate field number", what ) {}
- };
- /// Not a known message type
- struct InvalidMessageType : public Exception
- {
- InvalidMessageType( const std::string& what = "" )
- : Exception( "Invalid Message Type", what ) {}
- };
- /// Message type not supported by application
- struct UnsupportedMessageType : public Exception
- {
- UnsupportedMessageType( const std::string& what = "" )
- : Exception( "Unsupported Message Type", what ) {}
- };
- /// Version of %FIX is not supported
- struct UnsupportedVersion : public Exception
- {
- UnsupportedVersion( const std::string& what = "" )
- : Exception( "Unsupported Version", what ) {}
- };
- /// Tag is not in the correct order
- struct TagOutOfOrder : public Exception
- {
- TagOutOfOrder( int f = 0, const std::string& what = "" )
- : Exception( "Tag specified out of required order", what ),
- field( f ) {}
- int field;
- };
- /// Repeated tag not part of repeating group
- struct RepeatedTag : public Exception
- {
- RepeatedTag( int f = 0, const std::string& what = "" )
- : Exception( "Repeated tag not part of repeating group", what ),
- field( f ) {}
- int field;
- };
- /// Repeated group count not equal to actual count
- struct RepeatingGroupCountMismatch : public Exception
- {
- RepeatingGroupCountMismatch( int f = 0, const std::string& what = "" )
- : Exception( "Repeating group count mismatch", what ),
- field( f ) {}
- int field;
- };
- /// Indicates user does not want to send a message
- struct DoNotSend : public Exception
- {
- DoNotSend( const std::string& what = "" )
- : Exception( "Do Not Send Message", what ) {}
- };
- /// User wants to reject permission to logon
- struct RejectLogon : public Exception
- {
- RejectLogon( const std::string& what = "" )
- : Exception( "Rejected Logon Attempt", what ) {}
- };
- /// Session cannot be found for specified action
- struct SessionNotFound : public Exception
- {
- SessionNotFound( const std::string& what = "" )
- : Exception( "Session Not Found", what ) {}
- };
- /// IO Error
- struct IOException : public Exception
- {
- IOException( const std::string& what = "" )
- : Exception( "IO Error", what ) {}
- };
- /// Socket Error
- struct SocketException : public Exception
- {
- SocketException()
- : Exception( "Socket Error", errorToWhat() ) {}
- SocketException( const std::string& what )
- : Exception( "Socket Error", what ) {}
- std::string errorToWhat()
- {
- #ifdef _MSC_VER
- error = WSAGetLastError();
- char buffer[2048];
- FormatMessageA( FORMAT_MESSAGE_FROM_SYSTEM, NULL, error,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- buffer, 2048, NULL );
- return buffer;
- #else
- error = errno;
- return strerror( error );
- #endif
- }
- int error;
- };
- /// Socket send operation failed
- struct SocketSendFailed : public SocketException
- {
- SocketSendFailed() {}
- SocketSendFailed( const std::string& what )
- : SocketException( what ) {}
- };
- /// Socket recv operation failed
- struct SocketRecvFailed : public SocketException
- {
- SocketRecvFailed( int size )
- : SocketException( size == 0 ? "Connection reset by peer." : size < 0 ? errorToWhat() : "Success." ) {}
- SocketRecvFailed( const std::string& what )
- : SocketException( what ) {}
- };
- /// Socket close operation failed
- struct SocketCloseFailed : public SocketException
- {
- SocketCloseFailed() {}
- SocketCloseFailed( const std::string& what )
- : SocketException( what ) {}
- };
- /*! @} */
- }
- #endif //FIX_EXCEPTIONS_H
|