From f552e7abaff0daf06ac621c079420557e73fe59d Mon Sep 17 00:00:00 2001 From: Shahbaz Chaudhary Date: Sun, 22 May 2011 22:24:19 -0400 Subject: [PATCH] adds more logic to session proc 2 --- handlers/sessionProcessor2.js | 46 +++++++++++++++++++++++++++++-- resources/fixsessionalgorithm.txt | 1 + 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/handlers/sessionProcessor2.js b/handlers/sessionProcessor2.js index 20fce85..9d17986 100644 --- a/handlers/sessionProcessor2.js +++ b/handlers/sessionProcessor2.js @@ -4,7 +4,7 @@ exports.newTemplate= function(isAcceptor,isDuplicate,isAuthentic,getSeqNums, rec var fixutil = require('./fixutils.js'); - +//TODO make sure 'ignored' messages really are not forwarded to the next handler function template(isAcceptor,isDuplicate,isAuthentic,getSeqNums,recordMsg){ var isInitiator = !isAcceptor; @@ -165,8 +165,50 @@ function template(isAcceptor,isDuplicate,isAuthentic,getSeqNums,recordMsg){ //greater than expected else{ //is it resend request? - ...? + if(msgType === '2'){ + //TODO get list of msgs from archive and send them out, but gap fill admin msgs + } + + //did we already send a resend request? + if(self.isResendRequested === false){ + self.isResendRequested = true; + ctx.sendPrev({data:{'35':'2', '7':self.incomingSeqNum, '16':'0'}, type:'data'}); + } + + //send resend-request } + + //==Process sequence-reset with gap-fill + if(msgType === '4' && fix['123'] === 'Y'){ + var newSeqNoStr = fix['36']; + var newSeqNo = parseInt(newSeqNoStr,10); + + if(newSeqNo >= self.incomingSeqNum){ + self.incomingSeqNum = newSeqNo; + } + else{ + var error = '[ERROR] Seq-reset may not decrement sequence numbers: ' + raw; + sys.log(error); + ctx.stream.end(); + ctx.sendNext({data:error, type:'error'}); + return; + } + } + + //==Check compids and version + //TODO + + //==Process test request + if(msgType === '1'){ + var testReqID = fix['112']; + ctx.sendPrev({data:{'35':'0', '112':testReqID}, type:'data'}); + } + + //==Process resend-request + //TODO + + //==Process logout + //TODO } diff --git a/resources/fixsessionalgorithm.txt b/resources/fixsessionalgorithm.txt index ccabfc4..e46f983 100644 --- a/resources/fixsessionalgorithm.txt +++ b/resources/fixsessionalgorithm.txt @@ -104,6 +104,7 @@ else if inSeqNum < expectedInSeqNum and posdup is Y else if inSeqNum < expectedInSeqNum and posdup is undefined or N ignore msg error "manual intervention needed!" + send [logout] with error reason disconnect connection else if inSeqNum > expectedInSeqNum ignore msg