@@ -218,12 +218,12 @@ func (s *session) resend(msg Message) error {
218
218
}
219
219
220
220
//queueForSend will validate, persist, and queue the message for send
221
- func (s * session ) queueForSend (msg Message ) ( err error ) {
221
+ func (s * session ) queueForSend (msg Message ) error {
222
222
s .sendMutex .Lock ()
223
223
defer s .sendMutex .Unlock ()
224
224
225
- if err = s .prepMessageForSend (& msg ); err != nil {
226
- return
225
+ if doNotSend , err : = s .prepMessageForSend (& msg ); err != nil || doNotSend {
226
+ return err
227
227
}
228
228
229
229
s .toSend = append (s .toSend , msg )
@@ -233,69 +233,74 @@ func (s *session) queueForSend(msg Message) (err error) {
233
233
default :
234
234
}
235
235
236
- return
236
+ return nil
237
237
}
238
238
239
239
//send will validate, persist, queue the message and send all messages in the queue
240
- func (s * session ) send (msg Message ) ( err error ) {
240
+ func (s * session ) send (msg Message ) error {
241
241
s .sendMutex .Lock ()
242
242
defer s .sendMutex .Unlock ()
243
243
244
- if err = s .prepMessageForSend (& msg ); err != nil {
245
- return
244
+ if doNotSend , err : = s .prepMessageForSend (& msg ); err != nil || doNotSend {
245
+ return err
246
246
}
247
247
248
248
s .toSend = append (s .toSend , msg )
249
249
s .sendQueued ()
250
250
251
- return
251
+ return nil
252
252
}
253
253
254
254
//dropAndSend will optionally reset the store, validate and persist the message, then drops the send queue and sends the message.
255
- func (s * session ) dropAndSend (msg Message , resetStore bool ) ( err error ) {
255
+ func (s * session ) dropAndSend (msg Message , resetStore bool ) error {
256
256
257
257
s .sendMutex .Lock ()
258
258
defer s .sendMutex .Unlock ()
259
259
260
260
if resetStore {
261
- if err = s .store .Reset (); err != nil {
261
+ if err : = s .store .Reset (); err != nil {
262
262
return err
263
263
}
264
264
}
265
265
266
- if err = s .prepMessageForSend (& msg ); err != nil {
267
- return
266
+ if doNotSend , err : = s .prepMessageForSend (& msg ); err != nil || doNotSend {
267
+ return err
268
268
}
269
269
270
270
s .dropQueued ()
271
271
s .toSend = append (s .toSend , msg )
272
272
s .sendQueued ()
273
273
274
- return
274
+ return nil
275
275
}
276
276
277
- func (s * session ) prepMessageForSend (msg * Message ) (err error ) {
277
+ func (s * session ) prepMessageForSend (msg * Message ) (doNotSend bool , err error ) {
278
278
s .fillDefaultHeader (* msg )
279
279
seqNum := s .store .NextSenderMsgSeqNum ()
280
280
msg .Header .SetField (tagMsgSeqNum , FIXInt (seqNum ))
281
281
282
282
var msgType FIXString
283
283
if err = msg .Header .GetField (tagMsgType , & msgType ); err != nil {
284
- return err
284
+ return
285
285
}
286
286
287
287
if isAdminMessageType (string (msgType )) {
288
288
s .application .ToAdmin (* msg , s .sessionID )
289
289
} else {
290
- s .application .ToApp (* msg , s .sessionID )
290
+ if doNotSendErr := s .application .ToApp (* msg , s .sessionID ); doNotSendErr != nil {
291
+ s .log .OnEventf ("Do Not Send: %v" , doNotSendErr )
292
+ doNotSend = true
293
+ return
294
+ }
291
295
}
292
296
293
297
var msgBytes []byte
294
298
if msgBytes , err = msg .Build (); err != nil {
295
299
return
296
300
}
297
301
298
- return s .persist (seqNum , msgBytes )
302
+ err = s .persist (seqNum , msgBytes )
303
+ return
299
304
}
300
305
301
306
func (s * session ) persist (seqNum int , msgBytes []byte ) error {
@@ -492,7 +497,11 @@ func (s *session) verifySelect(msg Message, checkTooHigh bool, checkTooLow bool)
492
497
493
498
func (s * session ) fromCallback (msg Message ) MessageRejectError {
494
499
var msgType FIXString
495
- if msg .Header .GetField (tagMsgType , & msgType ); isAdminMessageType (string (msgType )) {
500
+ if err := msg .Header .GetField (tagMsgType , & msgType ); err != nil {
501
+ return err
502
+ }
503
+
504
+ if isAdminMessageType (string (msgType )) {
496
505
return s .application .FromAdmin (msg , s .sessionID )
497
506
}
498
507
0 commit comments