MessageCracker.h
Go to the documentation of this file.
1 /* -*- C++ -*- */
2 
3 /****************************************************************************
4 ** Copyright (c) 2001-2014
5 **
6 ** This file is part of the QuickFIX FIX Engine
7 **
8 ** This file may be distributed under the terms of the quickfixengine.org
9 ** license as defined by quickfixengine.org and appearing in the file
10 ** LICENSE included in the packaging of this file.
11 **
12 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14 **
15 ** See http://www.quickfixengine.org/LICENSE for licensing information.
16 **
17 ** Contact ask@quickfixengine.org if any conditions of this licensing are
18 ** not clear to you.
19 **
20 ****************************************************************************/
21 
22 #ifndef FIX_MESSAGECRACKER_H
23 #define FIX_MESSAGECRACKER_H
24 
25 #include "fix40/MessageCracker.h"
26 #include "fix41/MessageCracker.h"
27 #include "fix42/MessageCracker.h"
28 #include "fix43/MessageCracker.h"
29 #include "fix44/MessageCracker.h"
30 #include "fix50/MessageCracker.h"
31 #include "fix50sp1/MessageCracker.h"
32 #include "fix50sp2/MessageCracker.h"
33 #include "fixt11/MessageCracker.h"
34 #include "Values.h"
35 #include "Session.h"
36 
37 namespace FIX
38 {
42 class MessageCracker
43  :
44  public FIX40::MessageCracker,
45  public FIX41::MessageCracker,
46  public FIX42::MessageCracker,
47  public FIX43::MessageCracker,
48  public FIX44::MessageCracker,
49  public FIX50::MessageCracker,
50  public FIX50SP1::MessageCracker,
51  public FIX50SP2::MessageCracker,
52  public FIXT11::MessageCracker
53 {
54 public:
55  void crack( const Message& message,
56  const SessionID& sessionID )
57  {
58  const FIX::BeginString& beginString =
59  FIELD_GET_REF( message.getHeader(), BeginString );
60 
61  crack( message, sessionID, beginString );
62  }
63 
64  void crack( const Message& message,
65  const SessionID& sessionID,
66  const BeginString& beginString )
67  {
68  if ( beginString == BeginString_FIX40 )
69  ((FIX40::MessageCracker&)(*this)).crack((const FIX40::Message&) message, sessionID);
70  else if ( beginString == BeginString_FIX41 )
71  ((FIX41::MessageCracker&)(*this)).crack((const FIX41::Message&) message, sessionID);
72  else if ( beginString == BeginString_FIX42 )
73  ((FIX42::MessageCracker&)(*this)).crack((const FIX42::Message&) message, sessionID);
74  else if ( beginString == BeginString_FIX43 )
75  ((FIX43::MessageCracker&)(*this)).crack((const FIX43::Message&) message, sessionID);
76  else if ( beginString == BeginString_FIX44 )
77  ((FIX44::MessageCracker&)(*this)).crack((const FIX44::Message&) message, sessionID);
78  else if ( beginString == BeginString_FIXT11 )
79  {
80  if( message.isAdmin() )
81  {
82  ((FIXT11::MessageCracker&)(*this)).crack((const FIXT11::Message&) message, sessionID);
83  }
84  else
85  {
86  ApplVerID applVerID;
87  if(!message.getHeader().getFieldIfSet(applVerID))
88  {
89  Session* pSession = Session::lookupSession( sessionID );
90  applVerID = pSession->getSenderDefaultApplVerID();
91  }
92 
93  crack( message, sessionID, applVerID );
94  }
95  }
96  }
97 
98  void crack( const Message& message,
99  const SessionID& sessionID,
100  const ApplVerID& applVerID )
101  {
102  if ( applVerID == ApplVerID_FIX40 )
103  ((FIX40::MessageCracker&)(*this)).crack((const FIX40::Message&) message, sessionID);
104  if ( applVerID == ApplVerID_FIX41 )
105  ((FIX41::MessageCracker&)(*this)).crack((const FIX41::Message&) message, sessionID);
106  if ( applVerID == ApplVerID_FIX42 )
107  ((FIX42::MessageCracker&)(*this)).crack((const FIX42::Message&) message, sessionID);
108  if ( applVerID == ApplVerID_FIX43 )
109  ((FIX43::MessageCracker&)(*this)).crack((const FIX43::Message&) message, sessionID);
110  if ( applVerID == ApplVerID_FIX44 )
111  ((FIX44::MessageCracker&)(*this)).crack((const FIX44::Message&) message, sessionID);
112  if ( applVerID == ApplVerID_FIX50 )
113  ((FIX50::MessageCracker&)(*this)).crack((const FIX50::Message&) message, sessionID);
114  if ( applVerID == ApplVerID_FIX50SP1 )
115  ((FIX50SP1::MessageCracker&)(*this)).crack((const FIX50SP1::Message&) message, sessionID);
116  if ( applVerID == ApplVerID_FIX50SP2 )
117  ((FIX50SP2::MessageCracker&)(*this)).crack((const FIX50SP2::Message&) message, sessionID);
118  }
119 
120  void crack( Message& message,
121  const SessionID& sessionID )
122  {
123  const FIX::BeginString& beginString =
124  FIELD_GET_REF( message.getHeader(), BeginString );
125 
126  crack( message, sessionID, beginString );
127  }
128 
129  void crack( Message& message,
130  const SessionID& sessionID,
131  const BeginString& beginString )
132  {
133  if ( beginString == BeginString_FIX40 )
134  ((FIX40::MessageCracker&)(*this)).crack((FIX40::Message&) message, sessionID);
135  else if ( beginString == BeginString_FIX41 )
136  ((FIX41::MessageCracker&)(*this)).crack((FIX41::Message&) message, sessionID);
137  else if ( beginString == BeginString_FIX42 )
138  ((FIX42::MessageCracker&)(*this)).crack((FIX42::Message&) message, sessionID);
139  else if ( beginString == BeginString_FIX43 )
140  ((FIX43::MessageCracker&)(*this)).crack((FIX43::Message&) message, sessionID);
141  else if ( beginString == BeginString_FIX44 )
142  ((FIX44::MessageCracker&)(*this)).crack((FIX44::Message&) message, sessionID);
143  else if ( beginString == BeginString_FIXT11 )
144  {
145  if( message.isAdmin() )
146  {
147  ((FIXT11::MessageCracker&)(*this)).crack((FIXT11::Message&) message, sessionID);
148  }
149  else
150  {
151  ApplVerID applVerID;
152  if(!message.getHeader().getFieldIfSet(applVerID))
153  {
154  Session* pSession = Session::lookupSession( sessionID );
155  applVerID = pSession->getSenderDefaultApplVerID();
156  }
157 
158  crack( message, sessionID, applVerID );
159  }
160  }
161  }
162 
163  void crack( Message& message,
164  const SessionID& sessionID,
165  const ApplVerID& applVerID )
166  {
167  if ( applVerID == ApplVerID_FIX40 )
168  ((FIX40::MessageCracker&)(*this)).crack((FIX40::Message&) message, sessionID);
169  if ( applVerID == ApplVerID_FIX41 )
170  ((FIX41::MessageCracker&)(*this)).crack((FIX41::Message&) message, sessionID);
171  if ( applVerID == ApplVerID_FIX42 )
172  ((FIX42::MessageCracker&)(*this)).crack((FIX42::Message&) message, sessionID);
173  if ( applVerID == ApplVerID_FIX43 )
174  ((FIX43::MessageCracker&)(*this)).crack((FIX43::Message&) message, sessionID);
175  if ( applVerID == ApplVerID_FIX44 )
176  ((FIX44::MessageCracker&)(*this)).crack((FIX44::Message&) message, sessionID);
177  if ( applVerID == ApplVerID_FIX50 )
178  ((FIX50::MessageCracker&)(*this)).crack((FIX50::Message&) message, sessionID);
179  if ( applVerID == ApplVerID_FIX50SP1 )
180  ((FIX50SP1::MessageCracker&)(*this)).crack((FIX50SP1::Message&) message, sessionID);
181  if ( applVerID == ApplVerID_FIX50SP2 )
182  ((FIX50SP2::MessageCracker&)(*this)).crack((FIX50SP2::Message&) message, sessionID);
183  }
184 
185 };
186 }
187 
188 #endif //FIX_MESSAGECRACKER_H
FIX::BeginString_FIX41
const char BeginString_FIX41[]
Definition: Values.h:52
FIX::BeginString_FIX44
const char BeginString_FIX44[]
Definition: Values.h:49
FIX::Session::lookupSession
static Session * lookupSession(const SessionID &)
Definition: Session.cpp:1513
FIX::BeginString_FIX40
const char BeginString_FIX40[]
Definition: Values.h:53
FIX::BeginString_FIX42
const char BeginString_FIX42[]
Definition: Values.h:51
Values.h
FIX::FieldMap::getFieldIfSet
bool getFieldIfSet(FieldBase &field) const
Get a field if set.
Definition: FieldMap.h:180
FIX::SessionID
Unique session id consists of BeginString, SenderCompID and TargetCompID.
Definition: SessionID.h:47
FIX::BeginString_FIXT11
const char BeginString_FIXT11[]
Definition: Values.h:47
FIX::BeginString_FIX43
const char BeginString_FIX43[]
Definition: Values.h:50
FIX::Message::isAdmin
bool isAdmin() const
Definition: Message.h:289
FIX::MessageCracker::crack
void crack(const Message &message, const SessionID &sessionID)
Definition: MessageCracker.h:89
FIX::Session::getSenderDefaultApplVerID
const std::string & getSenderDefaultApplVerID()
Definition: Session.h:156
FIX::Message
Base class for all FIX messages.
Definition: Message.h:134
FIX
Definition: Acceptor.cpp:34
FIX::MessageCracker::crack
void crack(Message &message, const SessionID &sessionID, const BeginString &beginString)
Definition: MessageCracker.h:163
Session.h
FIX::MessageCracker::crack
void crack(const Message &message, const SessionID &sessionID, const BeginString &beginString)
Definition: MessageCracker.h:98
FIELD_GET_REF
#define FIELD_GET_REF(MAP, FLD)
Definition: FieldMap.h:376
FIX::Message::getHeader
const Header & getHeader() const
Getter for the message header.
Definition: Message.h:262
FIX::Session
Maintains the state and implements the logic of a FIX session.
Definition: Session.h:62

Generated on Wed Apr 29 2020 19:41:30 for QuickFIX by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2001