@@ -218,12 +218,12 @@ func (s *session) resend(msg Message) error {
218218}
219219
220220//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 {
222222 s .sendMutex .Lock ()
223223 defer s .sendMutex .Unlock ()
224224
225- if err = s .prepMessageForSend (& msg ); err != nil {
226- return
225+ if doNotSend , err : = s .prepMessageForSend (& msg ); err != nil || doNotSend {
226+ return err
227227 }
228228
229229 s .toSend = append (s .toSend , msg )
@@ -233,69 +233,74 @@ func (s *session) queueForSend(msg Message) (err error) {
233233 default :
234234 }
235235
236- return
236+ return nil
237237}
238238
239239//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 {
241241 s .sendMutex .Lock ()
242242 defer s .sendMutex .Unlock ()
243243
244- if err = s .prepMessageForSend (& msg ); err != nil {
245- return
244+ if doNotSend , err : = s .prepMessageForSend (& msg ); err != nil || doNotSend {
245+ return err
246246 }
247247
248248 s .toSend = append (s .toSend , msg )
249249 s .sendQueued ()
250250
251- return
251+ return nil
252252}
253253
254254//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 {
256256
257257 s .sendMutex .Lock ()
258258 defer s .sendMutex .Unlock ()
259259
260260 if resetStore {
261- if err = s .store .Reset (); err != nil {
261+ if err : = s .store .Reset (); err != nil {
262262 return err
263263 }
264264 }
265265
266- if err = s .prepMessageForSend (& msg ); err != nil {
267- return
266+ if doNotSend , err : = s .prepMessageForSend (& msg ); err != nil || doNotSend {
267+ return err
268268 }
269269
270270 s .dropQueued ()
271271 s .toSend = append (s .toSend , msg )
272272 s .sendQueued ()
273273
274- return
274+ return nil
275275}
276276
277- func (s * session ) prepMessageForSend (msg * Message ) (err error ) {
277+ func (s * session ) prepMessageForSend (msg * Message ) (doNotSend bool , err error ) {
278278 s .fillDefaultHeader (* msg )
279279 seqNum := s .store .NextSenderMsgSeqNum ()
280280 msg .Header .SetField (tagMsgSeqNum , FIXInt (seqNum ))
281281
282282 var msgType FIXString
283283 if err = msg .Header .GetField (tagMsgType , & msgType ); err != nil {
284- return err
284+ return
285285 }
286286
287287 if isAdminMessageType (string (msgType )) {
288288 s .application .ToAdmin (* msg , s .sessionID )
289289 } 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+ }
291295 }
292296
293297 var msgBytes []byte
294298 if msgBytes , err = msg .Build (); err != nil {
295299 return
296300 }
297301
298- return s .persist (seqNum , msgBytes )
302+ err = s .persist (seqNum , msgBytes )
303+ return
299304}
300305
301306func (s * session ) persist (seqNum int , msgBytes []byte ) error {
@@ -492,7 +497,11 @@ func (s *session) verifySelect(msg Message, checkTooHigh bool, checkTooLow bool)
492497
493498func (s * session ) fromCallback (msg Message ) MessageRejectError {
494499 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 )) {
496505 return s .application .FromAdmin (msg , s .sessionID )
497506 }
498507
0 commit comments