quickfix_ruby 1.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/quickfix/Acceptor.cpp +248 -0
- data/ext/quickfix/Acceptor.h +127 -0
- data/ext/quickfix/Allocator.h +9 -0
- data/ext/quickfix/Application.h +127 -0
- data/ext/quickfix/AtomicCount.h +109 -0
- data/ext/quickfix/DOMDocument.h +74 -0
- data/ext/quickfix/DataDictionary.cpp +618 -0
- data/ext/quickfix/DataDictionary.h +539 -0
- data/ext/quickfix/DataDictionaryProvider.cpp +71 -0
- data/ext/quickfix/DataDictionaryProvider.h +70 -0
- data/ext/quickfix/DatabaseConnectionID.h +105 -0
- data/ext/quickfix/DatabaseConnectionPool.h +91 -0
- data/ext/quickfix/Dictionary.cpp +162 -0
- data/ext/quickfix/Dictionary.h +94 -0
- data/ext/quickfix/Event.h +95 -0
- data/ext/quickfix/Exceptions.h +299 -0
- data/ext/quickfix/Field.h +672 -0
- data/ext/quickfix/FieldConvertors.h +863 -0
- data/ext/quickfix/FieldMap.cpp +238 -0
- data/ext/quickfix/FieldMap.h +244 -0
- data/ext/quickfix/FieldNumbers.h +46 -0
- data/ext/quickfix/FieldTypes.cpp +64 -0
- data/ext/quickfix/FieldTypes.h +698 -0
- data/ext/quickfix/Fields.h +31 -0
- data/ext/quickfix/FileLog.cpp +200 -0
- data/ext/quickfix/FileLog.h +112 -0
- data/ext/quickfix/FileStore.cpp +332 -0
- data/ext/quickfix/FileStore.h +129 -0
- data/ext/quickfix/FixFieldNumbers.h +1537 -0
- data/ext/quickfix/FixFields.h +1538 -0
- data/ext/quickfix/FixValues.h +3281 -0
- data/ext/quickfix/FlexLexer.h +188 -0
- data/ext/quickfix/Group.cpp +64 -0
- data/ext/quickfix/Group.h +73 -0
- data/ext/quickfix/HtmlBuilder.h +186 -0
- data/ext/quickfix/HttpConnection.cpp +739 -0
- data/ext/quickfix/HttpConnection.h +78 -0
- data/ext/quickfix/HttpMessage.cpp +149 -0
- data/ext/quickfix/HttpMessage.h +133 -0
- data/ext/quickfix/HttpParser.cpp +49 -0
- data/ext/quickfix/HttpParser.h +54 -0
- data/ext/quickfix/HttpServer.cpp +169 -0
- data/ext/quickfix/HttpServer.h +78 -0
- data/ext/quickfix/Initiator.cpp +289 -0
- data/ext/quickfix/Initiator.h +149 -0
- data/ext/quickfix/Log.cpp +77 -0
- data/ext/quickfix/Log.h +179 -0
- data/ext/quickfix/Message.cpp +580 -0
- data/ext/quickfix/Message.h +370 -0
- data/ext/quickfix/MessageCracker.h +188 -0
- data/ext/quickfix/MessageSorters.cpp +105 -0
- data/ext/quickfix/MessageSorters.h +156 -0
- data/ext/quickfix/MessageStore.cpp +146 -0
- data/ext/quickfix/MessageStore.h +174 -0
- data/ext/quickfix/Mutex.h +131 -0
- data/ext/quickfix/MySQLConnection.h +194 -0
- data/ext/quickfix/MySQLLog.cpp +275 -0
- data/ext/quickfix/MySQLLog.h +145 -0
- data/ext/quickfix/MySQLStore.cpp +331 -0
- data/ext/quickfix/MySQLStore.h +142 -0
- data/ext/quickfix/NullStore.cpp +54 -0
- data/ext/quickfix/NullStore.h +99 -0
- data/ext/quickfix/OdbcConnection.h +266 -0
- data/ext/quickfix/OdbcLog.cpp +252 -0
- data/ext/quickfix/OdbcLog.h +117 -0
- data/ext/quickfix/OdbcStore.cpp +338 -0
- data/ext/quickfix/OdbcStore.h +113 -0
- data/ext/quickfix/PUGIXML_DOMDocument.cpp +112 -0
- data/ext/quickfix/PUGIXML_DOMDocument.h +81 -0
- data/ext/quickfix/Parser.cpp +103 -0
- data/ext/quickfix/Parser.h +57 -0
- data/ext/quickfix/PostgreSQLConnection.h +176 -0
- data/ext/quickfix/PostgreSQLLog.cpp +276 -0
- data/ext/quickfix/PostgreSQLLog.h +144 -0
- data/ext/quickfix/PostgreSQLStore.cpp +334 -0
- data/ext/quickfix/PostgreSQLStore.h +141 -0
- data/ext/quickfix/Queue.h +75 -0
- data/ext/quickfix/QuickfixRuby.cpp +252066 -0
- data/ext/quickfix/QuickfixRuby.h +34 -0
- data/ext/quickfix/Responder.h +43 -0
- data/ext/quickfix/Session.cpp +1487 -0
- data/ext/quickfix/Session.h +335 -0
- data/ext/quickfix/SessionFactory.cpp +274 -0
- data/ext/quickfix/SessionFactory.h +86 -0
- data/ext/quickfix/SessionID.h +170 -0
- data/ext/quickfix/SessionSettings.cpp +189 -0
- data/ext/quickfix/SessionSettings.h +171 -0
- data/ext/quickfix/SessionState.h +231 -0
- data/ext/quickfix/Settings.cpp +100 -0
- data/ext/quickfix/Settings.h +53 -0
- data/ext/quickfix/SharedArray.h +150 -0
- data/ext/quickfix/SocketAcceptor.cpp +222 -0
- data/ext/quickfix/SocketAcceptor.h +75 -0
- data/ext/quickfix/SocketConnection.cpp +238 -0
- data/ext/quickfix/SocketConnection.h +103 -0
- data/ext/quickfix/SocketConnector.cpp +116 -0
- data/ext/quickfix/SocketConnector.h +67 -0
- data/ext/quickfix/SocketInitiator.cpp +260 -0
- data/ext/quickfix/SocketInitiator.h +81 -0
- data/ext/quickfix/SocketMonitor.cpp +335 -0
- data/ext/quickfix/SocketMonitor.h +111 -0
- data/ext/quickfix/SocketServer.cpp +177 -0
- data/ext/quickfix/SocketServer.h +100 -0
- data/ext/quickfix/ThreadedSocketAcceptor.cpp +258 -0
- data/ext/quickfix/ThreadedSocketAcceptor.h +98 -0
- data/ext/quickfix/ThreadedSocketConnection.cpp +209 -0
- data/ext/quickfix/ThreadedSocketConnection.h +82 -0
- data/ext/quickfix/ThreadedSocketInitiator.cpp +268 -0
- data/ext/quickfix/ThreadedSocketInitiator.h +84 -0
- data/ext/quickfix/TimeRange.cpp +173 -0
- data/ext/quickfix/TimeRange.h +258 -0
- data/ext/quickfix/Utility.cpp +537 -0
- data/ext/quickfix/Utility.h +219 -0
- data/ext/quickfix/Values.h +62 -0
- data/ext/quickfix/config.h +0 -0
- data/ext/quickfix/config_windows.h +0 -0
- data/ext/quickfix/extconf.rb +12 -0
- data/ext/quickfix/index.h +37 -0
- data/ext/quickfix/pugiconfig.hpp +72 -0
- data/ext/quickfix/pugixml.cpp +10765 -0
- data/ext/quickfix/pugixml.hpp +1341 -0
- data/ext/quickfix/strptime.h +7 -0
- data/lib/quickfix40.rb +274 -0
- data/lib/quickfix41.rb +351 -0
- data/lib/quickfix42.rb +1184 -0
- data/lib/quickfix43.rb +3504 -0
- data/lib/quickfix44.rb +10721 -0
- data/lib/quickfix50.rb +13426 -0
- data/lib/quickfix50sp1.rb +15629 -0
- data/lib/quickfix50sp2.rb +17068 -0
- data/lib/quickfix_fields.rb +19853 -0
- data/lib/quickfix_ruby.rb +82 -0
- data/lib/quickfixt11.rb +70 -0
- data/spec/FIX40.xml +862 -0
- data/spec/FIX41.xml +1285 -0
- data/spec/FIX42.xml +2746 -0
- data/spec/FIX43.xml +4229 -0
- data/spec/FIX44.xml +6596 -0
- data/spec/FIX50.xml +8137 -0
- data/spec/FIX50SP1.xml +9496 -0
- data/spec/FIX50SP2.xml +10011 -0
- data/spec/FIXT11.xml +313 -0
- data/test/test_DataDictionaryTestCase.rb +268 -0
- data/test/test_DictionaryTestCase.rb +112 -0
- data/test/test_FieldBaseTestCase.rb +24 -0
- data/test/test_MessageTestCase.rb +368 -0
- data/test/test_SessionSettingsTestCase.rb +41 -0
- metadata +193 -0
data/spec/FIXT11.xml
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
|
2
|
+
<fix type='FIXT' major='1' minor='1' servicepack='0'>
|
|
3
|
+
<header>
|
|
4
|
+
<field name='BeginString' required='Y'/>
|
|
5
|
+
<field name='BodyLength' required='Y'/>
|
|
6
|
+
<field name='MsgType' required='Y'/>
|
|
7
|
+
<field name='SenderCompID' required='Y'/>
|
|
8
|
+
<field name='TargetCompID' required='Y'/>
|
|
9
|
+
<field name='OnBehalfOfCompID' required='N'/>
|
|
10
|
+
<field name='DeliverToCompID' required='N'/>
|
|
11
|
+
<field name='SecureDataLen' required='N'/>
|
|
12
|
+
<field name='SecureData' required='N'/>
|
|
13
|
+
<field name='MsgSeqNum' required='Y'/>
|
|
14
|
+
<field name='SenderSubID' required='N'/>
|
|
15
|
+
<field name='SenderLocationID' required='N'/>
|
|
16
|
+
<field name='TargetSubID' required='N'/>
|
|
17
|
+
<field name='TargetLocationID' required='N'/>
|
|
18
|
+
<field name='OnBehalfOfSubID' required='N'/>
|
|
19
|
+
<field name='OnBehalfOfLocationID' required='N'/>
|
|
20
|
+
<field name='DeliverToSubID' required='N'/>
|
|
21
|
+
<field name='DeliverToLocationID' required='N'/>
|
|
22
|
+
<field name='PossDupFlag' required='N'/>
|
|
23
|
+
<field name='PossResend' required='N'/>
|
|
24
|
+
<field name='SendingTime' required='Y'/>
|
|
25
|
+
<field name='OrigSendingTime' required='N'/>
|
|
26
|
+
<field name='XmlDataLen' required='N'/>
|
|
27
|
+
<field name='XmlData' required='N'/>
|
|
28
|
+
<field name='MessageEncoding' required='N'/>
|
|
29
|
+
<field name='LastMsgSeqNumProcessed' required='N'/>
|
|
30
|
+
<component name='HopGrp' required='N'/>
|
|
31
|
+
<field name='ApplVerID' required='N'/>
|
|
32
|
+
<field name='CstmApplVerID' required='N'/>
|
|
33
|
+
</header>
|
|
34
|
+
<trailer>
|
|
35
|
+
<field name='SignatureLength' required='N'/>
|
|
36
|
+
<field name='Signature' required='N'/>
|
|
37
|
+
<field name='CheckSum' required='Y'/>
|
|
38
|
+
</trailer>
|
|
39
|
+
<messages>
|
|
40
|
+
<message msgcat='admin' msgtype='0' name='Heartbeat'>
|
|
41
|
+
<field name='TestReqID' required='N'/>
|
|
42
|
+
</message>
|
|
43
|
+
<message msgcat='admin' msgtype='1' name='TestRequest'>
|
|
44
|
+
<field name='TestReqID' required='Y'/>
|
|
45
|
+
</message>
|
|
46
|
+
<message msgcat='admin' msgtype='2' name='ResendRequest'>
|
|
47
|
+
<field name='BeginSeqNo' required='Y'/>
|
|
48
|
+
<field name='EndSeqNo' required='Y'/>
|
|
49
|
+
</message>
|
|
50
|
+
<message msgcat='admin' msgtype='3' name='Reject'>
|
|
51
|
+
<field name='RefSeqNum' required='Y'/>
|
|
52
|
+
<field name='RefTagID' required='N'/>
|
|
53
|
+
<field name='RefMsgType' required='N'/>
|
|
54
|
+
<field name='SessionRejectReason' required='N'/>
|
|
55
|
+
<field name='Text' required='N'/>
|
|
56
|
+
<field name='EncodedTextLen' required='N'/>
|
|
57
|
+
<field name='EncodedText' required='N'/>
|
|
58
|
+
</message>
|
|
59
|
+
<message msgcat='admin' msgtype='4' name='SequenceReset'>
|
|
60
|
+
<field name='GapFillFlag' required='N'/>
|
|
61
|
+
<field name='NewSeqNo' required='Y'/>
|
|
62
|
+
</message>
|
|
63
|
+
<message msgcat='admin' msgtype='5' name='Logout'>
|
|
64
|
+
<field name='Text' required='N'/>
|
|
65
|
+
<field name='EncodedTextLen' required='N'/>
|
|
66
|
+
<field name='EncodedText' required='N'/>
|
|
67
|
+
</message>
|
|
68
|
+
<message msgcat='admin' msgtype='A' name='Logon'>
|
|
69
|
+
<field name='EncryptMethod' required='Y'/>
|
|
70
|
+
<field name='HeartBtInt' required='Y'/>
|
|
71
|
+
<field name='RawDataLength' required='N'/>
|
|
72
|
+
<field name='RawData' required='N'/>
|
|
73
|
+
<field name='ResetSeqNumFlag' required='N'/>
|
|
74
|
+
<field name='NextExpectedMsgSeqNum' required='N'/>
|
|
75
|
+
<field name='MaxMessageSize' required='N'/>
|
|
76
|
+
<field name='TestMessageIndicator' required='N'/>
|
|
77
|
+
<field name='Username' required='N'/>
|
|
78
|
+
<field name='Password' required='N'/>
|
|
79
|
+
<field name='DefaultApplVerID' required='Y'/>
|
|
80
|
+
<component name='MsgTypeGrp' required='N'/>
|
|
81
|
+
</message>
|
|
82
|
+
</messages>
|
|
83
|
+
<components>
|
|
84
|
+
<component name='HopGrp'>
|
|
85
|
+
<group name='NoHops' required='N'>
|
|
86
|
+
<field name='HopCompID' required='N'/>
|
|
87
|
+
<field name='HopSendingTime' required='N'/>
|
|
88
|
+
<field name='HopRefID' required='N'/>
|
|
89
|
+
</group>
|
|
90
|
+
</component>
|
|
91
|
+
<component name='MsgTypeGrp'>
|
|
92
|
+
<group name='NoMsgTypes' required='N'>
|
|
93
|
+
<field name='RefMsgType' required='N'/>
|
|
94
|
+
<field name='MsgDirection' required='N'/>
|
|
95
|
+
<field name='RefApplVerID' required='N'/>
|
|
96
|
+
<field name='RefCstmApplVerID' required='N'/>
|
|
97
|
+
</group>
|
|
98
|
+
</component>
|
|
99
|
+
</components>
|
|
100
|
+
<fields>
|
|
101
|
+
<field name='BeginSeqNo' number='7' type='SEQNUM'/>
|
|
102
|
+
<field name='BeginString' number='8' type='STRING'/>
|
|
103
|
+
<field name='BodyLength' number='9' type='LENGTH'/>
|
|
104
|
+
<field name='CheckSum' number='10' type='STRING'/>
|
|
105
|
+
<field name='EndSeqNo' number='16' type='SEQNUM'/>
|
|
106
|
+
<field name='MsgSeqNum' number='34' type='SEQNUM'/>
|
|
107
|
+
<field number='35' name='MsgType' type='STRING'>
|
|
108
|
+
<value enum='0' description='HEARTBEAT'/>
|
|
109
|
+
<value enum='1' description='TEST_REQUEST'/>
|
|
110
|
+
<value enum='2' description='RESEND_REQUEST'/>
|
|
111
|
+
<value enum='3' description='REJECT'/>
|
|
112
|
+
<value enum='4' description='SEQUENCE_RESET'/>
|
|
113
|
+
<value enum='5' description='LOGOUT'/>
|
|
114
|
+
<value enum='6' description='INDICATION_OF_INTEREST'/>
|
|
115
|
+
<value enum='7' description='ADVERTISEMENT'/>
|
|
116
|
+
<value enum='8' description='EXECUTION_REPORT'/>
|
|
117
|
+
<value enum='9' description='ORDER_CANCEL_REJECT'/>
|
|
118
|
+
<value enum='A' description='LOGON'/>
|
|
119
|
+
<value enum='B' description='NEWS'/>
|
|
120
|
+
<value enum='C' description='EMAIL'/>
|
|
121
|
+
<value enum='D' description='ORDER_SINGLE'/>
|
|
122
|
+
<value enum='E' description='ORDER_LIST'/>
|
|
123
|
+
<value enum='F' description='ORDER_CANCEL_REQUEST'/>
|
|
124
|
+
<value enum='G' description='ORDER_CANCEL_REPLACE_REQUEST'/>
|
|
125
|
+
<value enum='H' description='ORDER_STATUS_REQUEST'/>
|
|
126
|
+
<value enum='J' description='ALLOCATION_INSTRUCTION'/>
|
|
127
|
+
<value enum='K' description='LIST_CANCEL_REQUEST'/>
|
|
128
|
+
<value enum='L' description='LIST_EXECUTE'/>
|
|
129
|
+
<value enum='M' description='LIST_STATUS_REQUEST'/>
|
|
130
|
+
<value enum='N' description='LIST_STATUS'/>
|
|
131
|
+
<value enum='P' description='ALLOCATION_INSTRUCTION_ACK'/>
|
|
132
|
+
<value enum='Q' description='DONT_KNOW_TRADE'/>
|
|
133
|
+
<value enum='R' description='QUOTE_REQUEST'/>
|
|
134
|
+
<value enum='S' description='QUOTE'/>
|
|
135
|
+
<value enum='T' description='SETTLEMENT_INSTRUCTIONS'/>
|
|
136
|
+
<value enum='V' description='MARKET_DATA_REQUEST'/>
|
|
137
|
+
<value enum='W' description='MARKET_DATA_SNAPSHOT_FULL_REFRESH'/>
|
|
138
|
+
<value enum='X' description='MARKET_DATA_INCREMENTAL_REFRESH'/>
|
|
139
|
+
<value enum='Y' description='MARKET_DATA_REQUEST_REJECT'/>
|
|
140
|
+
<value enum='Z' description='QUOTE_CANCEL'/>
|
|
141
|
+
<value enum='a' description='QUOTE_STATUS_REQUEST'/>
|
|
142
|
+
<value enum='b' description='MASS_QUOTE_ACKNOWLEDGEMENT'/>
|
|
143
|
+
<value enum='c' description='SECURITY_DEFINITION_REQUEST'/>
|
|
144
|
+
<value enum='d' description='SECURITY_DEFINITION'/>
|
|
145
|
+
<value enum='e' description='SECURITY_STATUS_REQUEST'/>
|
|
146
|
+
<value enum='f' description='SECURITY_STATUS'/>
|
|
147
|
+
<value enum='g' description='TRADING_SESSION_STATUS_REQUEST'/>
|
|
148
|
+
<value enum='h' description='TRADING_SESSION_STATUS'/>
|
|
149
|
+
<value enum='i' description='MASS_QUOTE'/>
|
|
150
|
+
<value enum='j' description='BUSINESS_MESSAGE_REJECT'/>
|
|
151
|
+
<value enum='k' description='BID_REQUEST'/>
|
|
152
|
+
<value enum='l' description='BID_RESPONSE'/>
|
|
153
|
+
<value enum='m' description='LIST_STRIKE_PRICE'/>
|
|
154
|
+
<value enum='n' description='XML_MESSAGE'/>
|
|
155
|
+
<value enum='o' description='REGISTRATION_INSTRUCTIONS'/>
|
|
156
|
+
<value enum='p' description='REGISTRATION_INSTRUCTIONS_RESPONSE'/>
|
|
157
|
+
<value enum='q' description='ORDER_MASS_CANCEL_REQUEST'/>
|
|
158
|
+
<value enum='r' description='ORDER_MASS_CANCEL_REPORT'/>
|
|
159
|
+
<value enum='s' description='NEW_ORDER_CROSS'/>
|
|
160
|
+
<value enum='t' description='CROSS_ORDER_CANCEL_REPLACE_REQUEST'/>
|
|
161
|
+
<value enum='u' description='CROSS_ORDER_CANCEL_REQUEST'/>
|
|
162
|
+
<value enum='v' description='SECURITY_TYPE_REQUEST'/>
|
|
163
|
+
<value enum='w' description='SECURITY_TYPES'/>
|
|
164
|
+
<value enum='x' description='SECURITY_LIST_REQUEST'/>
|
|
165
|
+
<value enum='y' description='SECURITY_LIST'/>
|
|
166
|
+
<value enum='z' description='DERIVATIVE_SECURITY_LIST_REQUEST'/>
|
|
167
|
+
<value enum='AA' description='DERIVATIVE_SECURITY_LIST'/>
|
|
168
|
+
<value enum='AB' description='NEW_ORDER_MULTILEG'/>
|
|
169
|
+
<value enum='AC' description='MULTILEG_ORDER_CANCEL_REPLACE'/>
|
|
170
|
+
<value enum='AD' description='TRADE_CAPTURE_REPORT_REQUEST'/>
|
|
171
|
+
<value enum='AE' description='TRADE_CAPTURE_REPORT'/>
|
|
172
|
+
<value enum='AF' description='ORDER_MASS_STATUS_REQUEST'/>
|
|
173
|
+
<value enum='AG' description='QUOTE_REQUEST_REJECT'/>
|
|
174
|
+
<value enum='AH' description='RFQ_REQUEST'/>
|
|
175
|
+
<value enum='AI' description='QUOTE_STATUS_REPORT'/>
|
|
176
|
+
<value enum='AJ' description='QUOTE_RESPONSE'/>
|
|
177
|
+
<value enum='AK' description='CONFIRMATION'/>
|
|
178
|
+
<value enum='AL' description='POSITION_MAINTENANCE_REQUEST'/>
|
|
179
|
+
<value enum='AM' description='POSITION_MAINTENANCE_REPORT'/>
|
|
180
|
+
<value enum='AN' description='REQUEST_FOR_POSITIONS'/>
|
|
181
|
+
<value enum='AO' description='REQUEST_FOR_POSITIONS_ACK'/>
|
|
182
|
+
<value enum='AP' description='POSITION_REPORT'/>
|
|
183
|
+
<value enum='AQ' description='TRADE_CAPTURE_REPORT_REQUEST_ACK'/>
|
|
184
|
+
<value enum='AR' description='TRADE_CAPTURE_REPORT_ACK'/>
|
|
185
|
+
<value enum='AS' description='ALLOCATION_REPORT'/>
|
|
186
|
+
<value enum='AT' description='ALLOCATION_REPORT_ACK'/>
|
|
187
|
+
<value enum='AU' description='CONFIRMATION_ACK'/>
|
|
188
|
+
<value enum='AV' description='SETTLEMENT_INSTRUCTION_REQUEST'/>
|
|
189
|
+
<value enum='AW' description='ASSIGNMENT_REPORT'/>
|
|
190
|
+
<value enum='AX' description='COLLATERAL_REQUEST'/>
|
|
191
|
+
<value enum='AY' description='COLLATERAL_ASSIGNMENT'/>
|
|
192
|
+
<value enum='AZ' description='COLLATERAL_RESPONSE'/>
|
|
193
|
+
<value enum='BA' description='COLLATERAL_REPORT'/>
|
|
194
|
+
<value enum='BB' description='COLLATERAL_INQUIRY'/>
|
|
195
|
+
<value enum='BC' description='NETWORK_STATUS_REQUEST'/>
|
|
196
|
+
<value enum='BD' description='NETWORK_STATUS_RESPONSE'/>
|
|
197
|
+
<value enum='BE' description='USER_REQUEST'/>
|
|
198
|
+
<value enum='BF' description='USER_RESPONSE'/>
|
|
199
|
+
<value enum='BG' description='COLLATERAL_INQUIRY_ACK'/>
|
|
200
|
+
<value enum='BH' description='CONFIRMATION_REQUEST'/>
|
|
201
|
+
<value enum='BI' description='TRADING_SESSION_LIST_REQUEST'/>
|
|
202
|
+
<value enum='BJ' description='TRADING_SESSION_LIST'/>
|
|
203
|
+
<value enum='BK' description='SECURITY_LIST_UPDATE_REPORT'/>
|
|
204
|
+
<value enum='BL' description='ADJUSTED_POSITION_REPORT'/>
|
|
205
|
+
<value enum='BM' description='ALLOCATION_INSTRUCTION_ALERT'/>
|
|
206
|
+
<value enum='BN' description='EXECUTION_ACKNOWLEDGEMENT'/>
|
|
207
|
+
<value enum='BO' description='CONTRARY_INTENTION_REPORT'/>
|
|
208
|
+
<value enum='BP' description='SECURITY_DEFINITION_UPDATE_REPORT'/>
|
|
209
|
+
</field>
|
|
210
|
+
<field name='NewSeqNo' number='36' type='SEQNUM'/>
|
|
211
|
+
<field name='PossDupFlag' number='43' type='BOOLEAN'/>
|
|
212
|
+
<field name='RefSeqNum' number='45' type='SEQNUM'/>
|
|
213
|
+
<field name='SenderCompID' number='49' type='STRING'/>
|
|
214
|
+
<field name='SenderSubID' number='50' type='STRING'/>
|
|
215
|
+
<field name='SendingTime' number='52' type='UTCTIMESTAMP'/>
|
|
216
|
+
<field name='TargetCompID' number='56' type='STRING'/>
|
|
217
|
+
<field name='TargetSubID' number='57' type='STRING'/>
|
|
218
|
+
<field name='Text' number='58' type='STRING'/>
|
|
219
|
+
<field name='Signature' number='89' type='DATA'/>
|
|
220
|
+
<field name='SecureDataLen' number='90' type='LENGTH'/>
|
|
221
|
+
<field name='SecureData' number='91' type='DATA'/>
|
|
222
|
+
<field name='SignatureLength' number='93' type='LENGTH'/>
|
|
223
|
+
<field name='RawDataLength' number='95' type='LENGTH'/>
|
|
224
|
+
<field name='RawData' number='96' type='DATA'/>
|
|
225
|
+
<field name='PossResend' number='97' type='BOOLEAN'/>
|
|
226
|
+
<field name='EncryptMethod' number='98' type='INT'>
|
|
227
|
+
<value description='NONE_OTHER' enum='0'/>
|
|
228
|
+
<value description='PKCS' enum='1'/>
|
|
229
|
+
<value description='DES' enum='2'/>
|
|
230
|
+
<value description='PKCS_DES' enum='3'/>
|
|
231
|
+
<value description='PGP_DES' enum='4'/>
|
|
232
|
+
<value description='PGP_DES_MD5' enum='5'/>
|
|
233
|
+
<value description='PEM_DES_MD5' enum='6'/>
|
|
234
|
+
</field>
|
|
235
|
+
<field name='HeartBtInt' number='108' type='INT'/>
|
|
236
|
+
<field name='TestReqID' number='112' type='STRING'/>
|
|
237
|
+
<field name='OnBehalfOfCompID' number='115' type='STRING'/>
|
|
238
|
+
<field name='OnBehalfOfSubID' number='116' type='STRING'/>
|
|
239
|
+
<field name='OrigSendingTime' number='122' type='UTCTIMESTAMP'/>
|
|
240
|
+
<field name='GapFillFlag' number='123' type='BOOLEAN'/>
|
|
241
|
+
<field name='DeliverToCompID' number='128' type='STRING'/>
|
|
242
|
+
<field name='DeliverToSubID' number='129' type='STRING'/>
|
|
243
|
+
<field name='ResetSeqNumFlag' number='141' type='BOOLEAN'/>
|
|
244
|
+
<field name='SenderLocationID' number='142' type='STRING'/>
|
|
245
|
+
<field name='TargetLocationID' number='143' type='STRING'/>
|
|
246
|
+
<field name='OnBehalfOfLocationID' number='144' type='STRING'/>
|
|
247
|
+
<field name='DeliverToLocationID' number='145' type='STRING'/>
|
|
248
|
+
<field name='XmlDataLen' number='212' type='LENGTH'/>
|
|
249
|
+
<field name='XmlData' number='213' type='DATA'/>
|
|
250
|
+
<field number='347' name='MessageEncoding' type='STRING'>
|
|
251
|
+
<value enum='ISO-2022-JP' description='ISO_2022_JP'/>
|
|
252
|
+
<value enum='EUC-JP' description='EUC_JP'/>
|
|
253
|
+
<value enum='SHIFT_JIS' description='SHIFT_JIS'/>
|
|
254
|
+
<value enum='UTF-8' description='UTF_8'/>
|
|
255
|
+
</field>
|
|
256
|
+
<field name='EncodedTextLen' number='354' type='LENGTH'/>
|
|
257
|
+
<field name='EncodedText' number='355' type='DATA'/>
|
|
258
|
+
<field name='LastMsgSeqNumProcessed' number='369' type='SEQNUM'/>
|
|
259
|
+
<field name='RefTagID' number='371' type='INT'/>
|
|
260
|
+
<field name='RefMsgType' number='372' type='STRING'/>
|
|
261
|
+
<field name='SessionRejectReason' number='373' type='INT'>
|
|
262
|
+
<value description='INVALID_TAG_NUMBER' enum='0'/>
|
|
263
|
+
<value description='REQUIRED_TAG_MISSING' enum='1'/>
|
|
264
|
+
<value description='SENDINGTIME_ACCURACY_PROBLEM' enum='10'/>
|
|
265
|
+
<value description='INVALID_MSGTYPE' enum='11'/>
|
|
266
|
+
<value description='XML_VALIDATION_ERROR' enum='12'/>
|
|
267
|
+
<value description='TAG_APPEARS_MORE_THAN_ONCE' enum='13'/>
|
|
268
|
+
<value description='TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER' enum='14'/>
|
|
269
|
+
<value description='REPEATING_GROUP_FIELDS_OUT_OF_ORDER' enum='15'/>
|
|
270
|
+
<value description='INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP' enum='16'/>
|
|
271
|
+
<value description='NON_DATA_VALUE_INCLUDES_FIELD_DELIMITER' enum='17'/>
|
|
272
|
+
<value description='TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE' enum='2'/>
|
|
273
|
+
<value description='UNDEFINED_TAG' enum='3'/>
|
|
274
|
+
<value description='TAG_SPECIFIED_WITHOUT_A_VALUE' enum='4'/>
|
|
275
|
+
<value description='VALUE_IS_INCORRECT' enum='5'/>
|
|
276
|
+
<value description='INCORRECT_DATA_FORMAT_FOR_VALUE' enum='6'/>
|
|
277
|
+
<value description='DECRYPTION_PROBLEM' enum='7'/>
|
|
278
|
+
<value description='SIGNATURE_PROBLEM' enum='8'/>
|
|
279
|
+
<value description='COMPID_PROBLEM' enum='9'/>
|
|
280
|
+
<value description='OTHER' enum='99'/>
|
|
281
|
+
</field>
|
|
282
|
+
<field name='MaxMessageSize' number='383' type='LENGTH'/>
|
|
283
|
+
<field name='NoMsgTypes' number='384' type='NUMINGROUP'/>
|
|
284
|
+
<field name='MsgDirection' number='385' type='CHAR'>
|
|
285
|
+
<value description='RECEIVE' enum='R'/>
|
|
286
|
+
<value description='SEND' enum='S'/>
|
|
287
|
+
</field>
|
|
288
|
+
<field name='TestMessageIndicator' number='464' type='BOOLEAN'/>
|
|
289
|
+
<field name='Username' number='553' type='STRING'/>
|
|
290
|
+
<field name='Password' number='554' type='STRING'/>
|
|
291
|
+
<field name='NoHops' number='627' type='NUMINGROUP'/>
|
|
292
|
+
<field name='HopCompID' number='628' type='STRING'/>
|
|
293
|
+
<field name='HopSendingTime' number='629' type='UTCTIMESTAMP'/>
|
|
294
|
+
<field name='HopRefID' number='630' type='SEQNUM'/>
|
|
295
|
+
<field name='NextExpectedMsgSeqNum' number='789' type='SEQNUM'/>
|
|
296
|
+
<field name='ApplVerID' number='1128' type='STRING'>
|
|
297
|
+
<value description='FIX27' enum='0'/>
|
|
298
|
+
<value description='FIX30' enum='1'/>
|
|
299
|
+
<value description='FIX40' enum='2'/>
|
|
300
|
+
<value description='FIX41' enum='3'/>
|
|
301
|
+
<value description='FIX42' enum='4'/>
|
|
302
|
+
<value description='FIX43' enum='5'/>
|
|
303
|
+
<value description='FIX44' enum='6'/>
|
|
304
|
+
<value description='FIX50' enum='7'/>
|
|
305
|
+
<value description='FIX50SP1' enum='8'/>
|
|
306
|
+
<value description='FIX50SP2' enum='9'/>
|
|
307
|
+
</field>
|
|
308
|
+
<field name='CstmApplVerID' number='1129' type='STRING'/>
|
|
309
|
+
<field name='RefApplVerID' number='1130' type='STRING'/>
|
|
310
|
+
<field name='RefCstmApplVerID' number='1131' type='STRING'/>
|
|
311
|
+
<field name='DefaultApplVerID' number='1137' type='STRING'/>
|
|
312
|
+
</fields>
|
|
313
|
+
</fix>
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
require 'quickfix_ruby'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
|
|
4
|
+
class TooHigh < Quickfix::StringField
|
|
5
|
+
def initialize(data = nil)
|
|
6
|
+
if( data == nil )
|
|
7
|
+
super(501)
|
|
8
|
+
else
|
|
9
|
+
super(501, data)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class DataDictionaryTestCase < Test::Unit::TestCase
|
|
15
|
+
|
|
16
|
+
def setup
|
|
17
|
+
@object = Quickfix::DataDictionary.new()
|
|
18
|
+
assert_not_nil( @object )
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_addMsgType
|
|
22
|
+
assert( !@object.isMsgType("A") )
|
|
23
|
+
@object.addMsgType("A")
|
|
24
|
+
assert( @object.isMsgType("A") )
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_addMsgField
|
|
28
|
+
assert( !@object.isMsgField( "A", 10 ) )
|
|
29
|
+
assert( !@object.isMsgField( "Z", 50 ) )
|
|
30
|
+
@object.addMsgField( "A", 10 )
|
|
31
|
+
@object.addMsgField( "Z", 50 )
|
|
32
|
+
assert( @object.isMsgField( "A", 10 ) )
|
|
33
|
+
assert( @object.isMsgField( "Z", 50 ) )
|
|
34
|
+
assert( !@object.isMsgField( "A", 50 ) )
|
|
35
|
+
assert( !@object.isMsgField( "Z", 10 ) )
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_addHeaderField
|
|
39
|
+
assert( !@object.isHeaderField( 56 ) )
|
|
40
|
+
assert( !@object.isHeaderField( 49 ) )
|
|
41
|
+
@object.addHeaderField( 56, true )
|
|
42
|
+
@object.addHeaderField( 49, true )
|
|
43
|
+
assert( @object.isHeaderField( 56 ) )
|
|
44
|
+
assert( @object.isHeaderField( 49 ) )
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_addTrailerField
|
|
48
|
+
assert( !@object.isTrailerField( 10 ) )
|
|
49
|
+
@object.addTrailerField( 10, true )
|
|
50
|
+
assert( @object.isTrailerField( 10 ) )
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_addRequiredField
|
|
54
|
+
assert( !@object.isRequiredField( "A", 10 ) )
|
|
55
|
+
assert( !@object.isRequiredField( "Z", 50 ) )
|
|
56
|
+
@object.addRequiredField( "A", 10 )
|
|
57
|
+
@object.addRequiredField( "Z", 50 )
|
|
58
|
+
assert( @object.isRequiredField( "A", 10 ) )
|
|
59
|
+
assert( @object.isRequiredField( "Z", 50 ) )
|
|
60
|
+
assert( !@object.isRequiredField( "A", 50 ) )
|
|
61
|
+
assert( !@object.isRequiredField( "Z", 10 ) )
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_addFieldValue
|
|
65
|
+
assert( !@object.isFieldValue( 12, "f" ) )
|
|
66
|
+
assert( !@object.isFieldValue( 12, "g" ) )
|
|
67
|
+
assert( !@object.isFieldValue( 15, "1" ) )
|
|
68
|
+
assert( !@object.isFieldValue( 18, "2" ) )
|
|
69
|
+
assert( !@object.isFieldValue( 167, "FUT" ) )
|
|
70
|
+
|
|
71
|
+
@object.addFieldValue( 12, "f" )
|
|
72
|
+
@object.addFieldValue( 12, "g" )
|
|
73
|
+
@object.addFieldValue( 15, "1" )
|
|
74
|
+
@object.addFieldValue( 18, "2" )
|
|
75
|
+
@object.addFieldValue( 167, "FUT" )
|
|
76
|
+
|
|
77
|
+
assert( @object.isFieldValue( 12, "f" ) )
|
|
78
|
+
assert( @object.isFieldValue( 12, "g" ) )
|
|
79
|
+
assert( @object.isFieldValue( 15, "1" ) )
|
|
80
|
+
assert( @object.isFieldValue( 18, "2" ) )
|
|
81
|
+
assert( @object.isFieldValue( 167, "FUT" ) )
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_addGroup
|
|
85
|
+
@object.setVersion( "FIX.4.2" )
|
|
86
|
+
|
|
87
|
+
group1 = Quickfix::DataDictionary.new
|
|
88
|
+
group1.addMsgType( "1" )
|
|
89
|
+
group2 = Quickfix::DataDictionary.new
|
|
90
|
+
group2.addMsgType( "2" )
|
|
91
|
+
group3 = Quickfix::DataDictionary.new
|
|
92
|
+
group3.addMsgType( "3" )
|
|
93
|
+
|
|
94
|
+
@object.addGroup( "A", 100, 101, group1 )
|
|
95
|
+
@object.addGroup( "A", 200, 201, group2 )
|
|
96
|
+
@object.addGroup( "A", 300, 301, group3 )
|
|
97
|
+
|
|
98
|
+
result = @object.getGroup( "A", 100 )
|
|
99
|
+
assert_equal( 101, result[0] )
|
|
100
|
+
assert( result[1].isMsgType( "1" ) )
|
|
101
|
+
|
|
102
|
+
result = @object.getGroup( "A", 200 )
|
|
103
|
+
assert_equal( 201, result[0] )
|
|
104
|
+
assert( result[1].isMsgType( "2" ) )
|
|
105
|
+
|
|
106
|
+
result = @object.getGroup( "A", 300 )
|
|
107
|
+
assert_equal( 301, result[0] )
|
|
108
|
+
assert( result[1].isMsgType( "3" ) )
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_addFieldName
|
|
112
|
+
@object.setVersion( "FIX.4.2" )
|
|
113
|
+
|
|
114
|
+
@object.addFieldName( 1, "Account" )
|
|
115
|
+
@object.addFieldName( 11, "ClOrdID" )
|
|
116
|
+
@object.addFieldName( 8, "BeginString" )
|
|
117
|
+
|
|
118
|
+
s = String.new
|
|
119
|
+
@object.getFieldName(1)
|
|
120
|
+
assert_equal( "Account", @object.getFieldName(1) )
|
|
121
|
+
assert_equal( 1, @object.getFieldTag("Account") )
|
|
122
|
+
assert_equal( "ClOrdID", @object.getFieldName(11) )
|
|
123
|
+
assert_equal( 11, @object.getFieldTag("ClOrdID") )
|
|
124
|
+
assert_equal( "BeginString", @object.getFieldName(8) )
|
|
125
|
+
assert_equal( 8, @object.getFieldTag("BeginString") )
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def test_addValueName
|
|
129
|
+
@object.setVersion( "FIX.4.2" )
|
|
130
|
+
|
|
131
|
+
@object.addValueName( 12, "0", "VALUE_12_0" )
|
|
132
|
+
@object.addValueName( 12, "B", "VALUE_12_B" )
|
|
133
|
+
@object.addValueName( 23, "BOO", "VALUE_23_BOO" )
|
|
134
|
+
|
|
135
|
+
assert_equal( "VALUE_12_0", @object.getValueName(12, "0") )
|
|
136
|
+
assert_equal( "VALUE_12_B", @object.getValueName(12, "B") )
|
|
137
|
+
assert_equal( "VALUE_23_BOO", @object.getValueName(23, "BOO") )
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_checkValidTagNumber
|
|
141
|
+
@object.setVersion( Quickfix::BeginString_FIX40() )
|
|
142
|
+
@object.addField( Quickfix::BeginString.field )
|
|
143
|
+
@object.addField( Quickfix::BodyLength.field )
|
|
144
|
+
@object.addField( Quickfix::MsgType.field )
|
|
145
|
+
@object.addField( Quickfix::CheckSum.field )
|
|
146
|
+
@object.addField( Quickfix::TestReqID.field )
|
|
147
|
+
@object.addMsgType( Quickfix::MsgType_TestRequest() )
|
|
148
|
+
@object.addMsgField( Quickfix::MsgType_TestRequest(), Quickfix::TestReqID.field )
|
|
149
|
+
|
|
150
|
+
testReqID = Quickfix::TestReqID.new( "1" )
|
|
151
|
+
message = Quickfix40::TestRequest.new()
|
|
152
|
+
message.setField( testReqID )
|
|
153
|
+
message.setField( TooHigh.new( "value" ) )
|
|
154
|
+
|
|
155
|
+
begin
|
|
156
|
+
@object.validate( message )
|
|
157
|
+
assert( false )
|
|
158
|
+
rescue Quickfix::Exception
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
@object.addField( 501 )
|
|
162
|
+
@object.addMsgField( Quickfix::MsgType_TestRequest(), 501 )
|
|
163
|
+
begin
|
|
164
|
+
@object.validate( message )
|
|
165
|
+
rescue Quickfix::Exception
|
|
166
|
+
assert( false )
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
message.setField( 5000, "value" )
|
|
170
|
+
begin
|
|
171
|
+
@object.validate( message )
|
|
172
|
+
assert( false )
|
|
173
|
+
rescue Quickfix::Exception
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
@object.checkUserDefinedFields( false )
|
|
177
|
+
begin
|
|
178
|
+
@object.validate( message )
|
|
179
|
+
rescue Quickfix::Exception
|
|
180
|
+
assert( false )
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def test_checkHasValue
|
|
185
|
+
message = Quickfix40::TestRequest.new
|
|
186
|
+
message.setField( Quickfix::TestReqID.new )
|
|
187
|
+
|
|
188
|
+
begin
|
|
189
|
+
@object.validate( message )
|
|
190
|
+
assert( false )
|
|
191
|
+
rescue Quickfix::Exception
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def test_checkIsInMessage
|
|
196
|
+
@object.setVersion( Quickfix::BeginString_FIX40() )
|
|
197
|
+
@object.addField( Quickfix::BeginString.field )
|
|
198
|
+
@object.addField( Quickfix::BodyLength.field )
|
|
199
|
+
@object.addField( Quickfix::MsgType.field )
|
|
200
|
+
@object.addField( Quickfix::CheckSum.field )
|
|
201
|
+
@object.addField( Quickfix::TestReqID.field )
|
|
202
|
+
@object.addField( Quickfix::Symbol.field )
|
|
203
|
+
@object.addMsgType( Quickfix::MsgType_TestRequest() )
|
|
204
|
+
@object.addMsgField( Quickfix::MsgType_TestRequest(), Quickfix::TestReqID.field )
|
|
205
|
+
|
|
206
|
+
testReqID = Quickfix::TestReqID.new( "1" )
|
|
207
|
+
|
|
208
|
+
message = Quickfix40::TestRequest.new
|
|
209
|
+
message.setField( testReqID )
|
|
210
|
+
begin
|
|
211
|
+
@object.validate( message )
|
|
212
|
+
rescue Quickfix::Exception
|
|
213
|
+
assert( false )
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
message.setField( Quickfix::Symbol.new("MSFT") )
|
|
217
|
+
begin
|
|
218
|
+
@object.validate( message )
|
|
219
|
+
assert( false )
|
|
220
|
+
rescue Quickfix::Exception
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def test_checkHasRequired
|
|
225
|
+
@object.setVersion( Quickfix::BeginString_FIX40() )
|
|
226
|
+
@object.addField( Quickfix::BeginString.field )
|
|
227
|
+
@object.addField( Quickfix::BodyLength.field )
|
|
228
|
+
@object.addField( Quickfix::MsgType.field )
|
|
229
|
+
@object.addField( Quickfix::SenderCompID.field )
|
|
230
|
+
@object.addField( Quickfix::TargetCompID.field )
|
|
231
|
+
@object.addHeaderField( Quickfix::SenderCompID.field, true )
|
|
232
|
+
@object.addHeaderField( Quickfix::TargetCompID.field, false )
|
|
233
|
+
@object.addField( Quickfix::CheckSum.field )
|
|
234
|
+
@object.addField( Quickfix::TestReqID.field )
|
|
235
|
+
@object.addMsgType( Quickfix::MsgType_TestRequest() )
|
|
236
|
+
@object.addMsgField( Quickfix::MsgType_TestRequest(), Quickfix::TestReqID.field )
|
|
237
|
+
@object.addRequiredField( Quickfix::MsgType_TestRequest(), Quickfix::TestReqID.field )
|
|
238
|
+
|
|
239
|
+
message = Quickfix40::TestRequest.new
|
|
240
|
+
begin
|
|
241
|
+
@object.validate( message )
|
|
242
|
+
assert( false )
|
|
243
|
+
rescue Quickfix::Exception
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
message.getHeader().setField( Quickfix::SenderCompID.new("SENDER") )
|
|
247
|
+
begin
|
|
248
|
+
@object.validate( message )
|
|
249
|
+
assert( false )
|
|
250
|
+
rescue Quickfix::Exception
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
message.setField( Quickfix::TestReqID.new( "1" ) )
|
|
254
|
+
begin
|
|
255
|
+
@object.validate( message )
|
|
256
|
+
rescue Quickfix::Exception
|
|
257
|
+
assert( false )
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
message.getHeader().removeField( Quickfix::SenderCompID.field )
|
|
261
|
+
message.setField( Quickfix::SenderCompID.new("SENDER") )
|
|
262
|
+
begin
|
|
263
|
+
@object.validate( message )
|
|
264
|
+
assert( false )
|
|
265
|
+
rescue Quickfix::Exception
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|