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 FIX41_MESSAGECRACKER_H
23 #define FIX41_MESSAGECRACKER_H
24
25
26 #include "../SessionID.h"
27 #include "../Exceptions.h"
28
29 #include "../fix41/Message.h"
30
31 namespace FIX41
32 {
33 class Heartbeat;
34 class TestRequest;
35 class ResendRequest;
36 class Reject;
37 class SequenceReset;
38 class Logout;
39 class IOI;
40 class Advertisement;
41 class ExecutionReport;
42 class OrderCancelReject;
43 class Logon;
44 class News;
45 class Email;
46 class NewOrderSingle;
47 class NewOrderList;
48 class OrderCancelRequest;
49 class OrderCancelReplaceRequest;
50 class OrderStatusRequest;
51 class Allocation;
52 class ListCancelRequest;
53 class ListExecute;
54 class ListStatusRequest;
55 class ListStatus;
56 class AllocationInstructionAck;
57 class DontKnowTrade;
58 class QuoteRequest;
59 class Quote;
60 class SettlementInstructions;
61
62 class MessageCracker
63 {
64 public:
~MessageCracker()65 virtual ~MessageCracker() {}
onMessage(const Message &,const FIX::SessionID &)66 virtual void onMessage( const Message&, const FIX::SessionID& )
67 { throw FIX::UnsupportedMessageType(); }
onMessage(Message &,const FIX::SessionID &)68 virtual void onMessage( Message&, const FIX::SessionID& )
69 { throw FIX::UnsupportedMessageType(); }
onMessage(const Heartbeat &,const FIX::SessionID &)70 virtual void onMessage( const Heartbeat&, const FIX::SessionID& )
71 {}
onMessage(const TestRequest &,const FIX::SessionID &)72 virtual void onMessage( const TestRequest&, const FIX::SessionID& )
73 {}
onMessage(const ResendRequest &,const FIX::SessionID &)74 virtual void onMessage( const ResendRequest&, const FIX::SessionID& )
75 {}
onMessage(const Reject &,const FIX::SessionID &)76 virtual void onMessage( const Reject&, const FIX::SessionID& )
77 {}
onMessage(const SequenceReset &,const FIX::SessionID &)78 virtual void onMessage( const SequenceReset&, const FIX::SessionID& )
79 {}
onMessage(const Logout &,const FIX::SessionID &)80 virtual void onMessage( const Logout&, const FIX::SessionID& )
81 {}
onMessage(const IOI &,const FIX::SessionID &)82 virtual void onMessage( const IOI&, const FIX::SessionID& )
83 { throw FIX::UnsupportedMessageType(); }
onMessage(const Advertisement &,const FIX::SessionID &)84 virtual void onMessage( const Advertisement&, const FIX::SessionID& )
85 { throw FIX::UnsupportedMessageType(); }
onMessage(const ExecutionReport &,const FIX::SessionID &)86 virtual void onMessage( const ExecutionReport&, const FIX::SessionID& )
87 { throw FIX::UnsupportedMessageType(); }
onMessage(const OrderCancelReject &,const FIX::SessionID &)88 virtual void onMessage( const OrderCancelReject&, const FIX::SessionID& )
89 { throw FIX::UnsupportedMessageType(); }
onMessage(const Logon &,const FIX::SessionID &)90 virtual void onMessage( const Logon&, const FIX::SessionID& )
91 {}
onMessage(const News &,const FIX::SessionID &)92 virtual void onMessage( const News&, const FIX::SessionID& )
93 { throw FIX::UnsupportedMessageType(); }
onMessage(const Email &,const FIX::SessionID &)94 virtual void onMessage( const Email&, const FIX::SessionID& )
95 { throw FIX::UnsupportedMessageType(); }
onMessage(const NewOrderSingle &,const FIX::SessionID &)96 virtual void onMessage( const NewOrderSingle&, const FIX::SessionID& )
97 { throw FIX::UnsupportedMessageType(); }
onMessage(const NewOrderList &,const FIX::SessionID &)98 virtual void onMessage( const NewOrderList&, const FIX::SessionID& )
99 { throw FIX::UnsupportedMessageType(); }
onMessage(const OrderCancelRequest &,const FIX::SessionID &)100 virtual void onMessage( const OrderCancelRequest&, const FIX::SessionID& )
101 { throw FIX::UnsupportedMessageType(); }
onMessage(const OrderCancelReplaceRequest &,const FIX::SessionID &)102 virtual void onMessage( const OrderCancelReplaceRequest&, const FIX::SessionID& )
103 { throw FIX::UnsupportedMessageType(); }
onMessage(const OrderStatusRequest &,const FIX::SessionID &)104 virtual void onMessage( const OrderStatusRequest&, const FIX::SessionID& )
105 { throw FIX::UnsupportedMessageType(); }
onMessage(const Allocation &,const FIX::SessionID &)106 virtual void onMessage( const Allocation&, const FIX::SessionID& )
107 { throw FIX::UnsupportedMessageType(); }
onMessage(const ListCancelRequest &,const FIX::SessionID &)108 virtual void onMessage( const ListCancelRequest&, const FIX::SessionID& )
109 { throw FIX::UnsupportedMessageType(); }
onMessage(const ListExecute &,const FIX::SessionID &)110 virtual void onMessage( const ListExecute&, const FIX::SessionID& )
111 { throw FIX::UnsupportedMessageType(); }
onMessage(const ListStatusRequest &,const FIX::SessionID &)112 virtual void onMessage( const ListStatusRequest&, const FIX::SessionID& )
113 { throw FIX::UnsupportedMessageType(); }
onMessage(const ListStatus &,const FIX::SessionID &)114 virtual void onMessage( const ListStatus&, const FIX::SessionID& )
115 { throw FIX::UnsupportedMessageType(); }
onMessage(const AllocationInstructionAck &,const FIX::SessionID &)116 virtual void onMessage( const AllocationInstructionAck&, const FIX::SessionID& )
117 { throw FIX::UnsupportedMessageType(); }
onMessage(const DontKnowTrade &,const FIX::SessionID &)118 virtual void onMessage( const DontKnowTrade&, const FIX::SessionID& )
119 { throw FIX::UnsupportedMessageType(); }
onMessage(const QuoteRequest &,const FIX::SessionID &)120 virtual void onMessage( const QuoteRequest&, const FIX::SessionID& )
121 { throw FIX::UnsupportedMessageType(); }
onMessage(const Quote &,const FIX::SessionID &)122 virtual void onMessage( const Quote&, const FIX::SessionID& )
123 { throw FIX::UnsupportedMessageType(); }
onMessage(const SettlementInstructions &,const FIX::SessionID &)124 virtual void onMessage( const SettlementInstructions&, const FIX::SessionID& )
125 { throw FIX::UnsupportedMessageType(); }
onMessage(Heartbeat &,const FIX::SessionID &)126 virtual void onMessage( Heartbeat&, const FIX::SessionID& ) {}
onMessage(TestRequest &,const FIX::SessionID &)127 virtual void onMessage( TestRequest&, const FIX::SessionID& ) {}
onMessage(ResendRequest &,const FIX::SessionID &)128 virtual void onMessage( ResendRequest&, const FIX::SessionID& ) {}
onMessage(Reject &,const FIX::SessionID &)129 virtual void onMessage( Reject&, const FIX::SessionID& ) {}
onMessage(SequenceReset &,const FIX::SessionID &)130 virtual void onMessage( SequenceReset&, const FIX::SessionID& ) {}
onMessage(Logout &,const FIX::SessionID &)131 virtual void onMessage( Logout&, const FIX::SessionID& ) {}
onMessage(IOI &,const FIX::SessionID &)132 virtual void onMessage( IOI&, const FIX::SessionID& ) {}
onMessage(Advertisement &,const FIX::SessionID &)133 virtual void onMessage( Advertisement&, const FIX::SessionID& ) {}
onMessage(ExecutionReport &,const FIX::SessionID &)134 virtual void onMessage( ExecutionReport&, const FIX::SessionID& ) {}
onMessage(OrderCancelReject &,const FIX::SessionID &)135 virtual void onMessage( OrderCancelReject&, const FIX::SessionID& ) {}
onMessage(Logon &,const FIX::SessionID &)136 virtual void onMessage( Logon&, const FIX::SessionID& ) {}
onMessage(News &,const FIX::SessionID &)137 virtual void onMessage( News&, const FIX::SessionID& ) {}
onMessage(Email &,const FIX::SessionID &)138 virtual void onMessage( Email&, const FIX::SessionID& ) {}
onMessage(NewOrderSingle &,const FIX::SessionID &)139 virtual void onMessage( NewOrderSingle&, const FIX::SessionID& ) {}
onMessage(NewOrderList &,const FIX::SessionID &)140 virtual void onMessage( NewOrderList&, const FIX::SessionID& ) {}
onMessage(OrderCancelRequest &,const FIX::SessionID &)141 virtual void onMessage( OrderCancelRequest&, const FIX::SessionID& ) {}
onMessage(OrderCancelReplaceRequest &,const FIX::SessionID &)142 virtual void onMessage( OrderCancelReplaceRequest&, const FIX::SessionID& ) {}
onMessage(OrderStatusRequest &,const FIX::SessionID &)143 virtual void onMessage( OrderStatusRequest&, const FIX::SessionID& ) {}
onMessage(Allocation &,const FIX::SessionID &)144 virtual void onMessage( Allocation&, const FIX::SessionID& ) {}
onMessage(ListCancelRequest &,const FIX::SessionID &)145 virtual void onMessage( ListCancelRequest&, const FIX::SessionID& ) {}
onMessage(ListExecute &,const FIX::SessionID &)146 virtual void onMessage( ListExecute&, const FIX::SessionID& ) {}
onMessage(ListStatusRequest &,const FIX::SessionID &)147 virtual void onMessage( ListStatusRequest&, const FIX::SessionID& ) {}
onMessage(ListStatus &,const FIX::SessionID &)148 virtual void onMessage( ListStatus&, const FIX::SessionID& ) {}
onMessage(AllocationInstructionAck &,const FIX::SessionID &)149 virtual void onMessage( AllocationInstructionAck&, const FIX::SessionID& ) {}
onMessage(DontKnowTrade &,const FIX::SessionID &)150 virtual void onMessage( DontKnowTrade&, const FIX::SessionID& ) {}
onMessage(QuoteRequest &,const FIX::SessionID &)151 virtual void onMessage( QuoteRequest&, const FIX::SessionID& ) {}
onMessage(Quote &,const FIX::SessionID &)152 virtual void onMessage( Quote&, const FIX::SessionID& ) {}
onMessage(SettlementInstructions &,const FIX::SessionID &)153 virtual void onMessage( SettlementInstructions&, const FIX::SessionID& ) {}
154
155 public:
crack(const Message & message,const FIX::SessionID & sessionID)156 void crack( const Message& message,
157 const FIX::SessionID& sessionID )
158 {
159 const std::string& msgTypeValue
160 = message.getHeader().getField( FIX::FIELD::MsgType );
161
162 if( msgTypeValue == "0" )
163 onMessage( (const Heartbeat&)message, sessionID );
164 else
165 if( msgTypeValue == "1" )
166 onMessage( (const TestRequest&)message, sessionID );
167 else
168 if( msgTypeValue == "2" )
169 onMessage( (const ResendRequest&)message, sessionID );
170 else
171 if( msgTypeValue == "3" )
172 onMessage( (const Reject&)message, sessionID );
173 else
174 if( msgTypeValue == "4" )
175 onMessage( (const SequenceReset&)message, sessionID );
176 else
177 if( msgTypeValue == "5" )
178 onMessage( (const Logout&)message, sessionID );
179 else
180 if( msgTypeValue == "6" )
181 onMessage( (const IOI&)message, sessionID );
182 else
183 if( msgTypeValue == "7" )
184 onMessage( (const Advertisement&)message, sessionID );
185 else
186 if( msgTypeValue == "8" )
187 onMessage( (const ExecutionReport&)message, sessionID );
188 else
189 if( msgTypeValue == "9" )
190 onMessage( (const OrderCancelReject&)message, sessionID );
191 else
192 if( msgTypeValue == "A" )
193 onMessage( (const Logon&)message, sessionID );
194 else
195 if( msgTypeValue == "B" )
196 onMessage( (const News&)message, sessionID );
197 else
198 if( msgTypeValue == "C" )
199 onMessage( (const Email&)message, sessionID );
200 else
201 if( msgTypeValue == "D" )
202 onMessage( (const NewOrderSingle&)message, sessionID );
203 else
204 if( msgTypeValue == "E" )
205 onMessage( (const NewOrderList&)message, sessionID );
206 else
207 if( msgTypeValue == "F" )
208 onMessage( (const OrderCancelRequest&)message, sessionID );
209 else
210 if( msgTypeValue == "G" )
211 onMessage( (const OrderCancelReplaceRequest&)message, sessionID );
212 else
213 if( msgTypeValue == "H" )
214 onMessage( (const OrderStatusRequest&)message, sessionID );
215 else
216 if( msgTypeValue == "J" )
217 onMessage( (const Allocation&)message, sessionID );
218 else
219 if( msgTypeValue == "K" )
220 onMessage( (const ListCancelRequest&)message, sessionID );
221 else
222 if( msgTypeValue == "L" )
223 onMessage( (const ListExecute&)message, sessionID );
224 else
225 if( msgTypeValue == "M" )
226 onMessage( (const ListStatusRequest&)message, sessionID );
227 else
228 if( msgTypeValue == "N" )
229 onMessage( (const ListStatus&)message, sessionID );
230 else
231 if( msgTypeValue == "P" )
232 onMessage( (const AllocationInstructionAck&)message, sessionID );
233 else
234 if( msgTypeValue == "Q" )
235 onMessage( (const DontKnowTrade&)message, sessionID );
236 else
237 if( msgTypeValue == "R" )
238 onMessage( (const QuoteRequest&)message, sessionID );
239 else
240 if( msgTypeValue == "S" )
241 onMessage( (const Quote&)message, sessionID );
242 else
243 if( msgTypeValue == "T" )
244 onMessage( (const SettlementInstructions&)message, sessionID );
245 else onMessage( message, sessionID );
246 }
247
crack(Message & message,const FIX::SessionID & sessionID)248 void crack( Message& message,
249 const FIX::SessionID& sessionID )
250 {
251 FIX::MsgType msgType;
252 message.getHeader().getField(msgType);
253 std::string msgTypeValue = msgType.getValue();
254
255 if( msgTypeValue == "0" )
256 onMessage( (Heartbeat&)message, sessionID );
257 else
258 if( msgTypeValue == "1" )
259 onMessage( (TestRequest&)message, sessionID );
260 else
261 if( msgTypeValue == "2" )
262 onMessage( (ResendRequest&)message, sessionID );
263 else
264 if( msgTypeValue == "3" )
265 onMessage( (Reject&)message, sessionID );
266 else
267 if( msgTypeValue == "4" )
268 onMessage( (SequenceReset&)message, sessionID );
269 else
270 if( msgTypeValue == "5" )
271 onMessage( (Logout&)message, sessionID );
272 else
273 if( msgTypeValue == "6" )
274 onMessage( (IOI&)message, sessionID );
275 else
276 if( msgTypeValue == "7" )
277 onMessage( (Advertisement&)message, sessionID );
278 else
279 if( msgTypeValue == "8" )
280 onMessage( (ExecutionReport&)message, sessionID );
281 else
282 if( msgTypeValue == "9" )
283 onMessage( (OrderCancelReject&)message, sessionID );
284 else
285 if( msgTypeValue == "A" )
286 onMessage( (Logon&)message, sessionID );
287 else
288 if( msgTypeValue == "B" )
289 onMessage( (News&)message, sessionID );
290 else
291 if( msgTypeValue == "C" )
292 onMessage( (Email&)message, sessionID );
293 else
294 if( msgTypeValue == "D" )
295 onMessage( (NewOrderSingle&)message, sessionID );
296 else
297 if( msgTypeValue == "E" )
298 onMessage( (NewOrderList&)message, sessionID );
299 else
300 if( msgTypeValue == "F" )
301 onMessage( (OrderCancelRequest&)message, sessionID );
302 else
303 if( msgTypeValue == "G" )
304 onMessage( (OrderCancelReplaceRequest&)message, sessionID );
305 else
306 if( msgTypeValue == "H" )
307 onMessage( (OrderStatusRequest&)message, sessionID );
308 else
309 if( msgTypeValue == "J" )
310 onMessage( (Allocation&)message, sessionID );
311 else
312 if( msgTypeValue == "K" )
313 onMessage( (ListCancelRequest&)message, sessionID );
314 else
315 if( msgTypeValue == "L" )
316 onMessage( (ListExecute&)message, sessionID );
317 else
318 if( msgTypeValue == "M" )
319 onMessage( (ListStatusRequest&)message, sessionID );
320 else
321 if( msgTypeValue == "N" )
322 onMessage( (ListStatus&)message, sessionID );
323 else
324 if( msgTypeValue == "P" )
325 onMessage( (AllocationInstructionAck&)message, sessionID );
326 else
327 if( msgTypeValue == "Q" )
328 onMessage( (DontKnowTrade&)message, sessionID );
329 else
330 if( msgTypeValue == "R" )
331 onMessage( (QuoteRequest&)message, sessionID );
332 else
333 if( msgTypeValue == "S" )
334 onMessage( (Quote&)message, sessionID );
335 else
336 if( msgTypeValue == "T" )
337 onMessage( (SettlementInstructions&)message, sessionID );
338 else onMessage( message, sessionID );
339 }
340
341 };
342 }
343
344 #endif
345