From 24aec3073c1e985d27ae9aee66307f2e0940ff02 Mon Sep 17 00:00:00 2001 From: lilleman Date: Fri, 1 May 2015 12:19:47 +0200 Subject: [PATCH] Fixed issue with enq link trying on a closed socket --- lib/client.js | 50 +++++++++++++++++++++++++------------------------- lib/session.js | 7 ++++++- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/lib/client.js b/lib/client.js index 4b570da..e466a38 100644 --- a/lib/client.js +++ b/lib/client.js @@ -13,68 +13,68 @@ var log = require('winston'), * @return obj (returnObj) */ function clientSession(sock, options) { - var parent = session(sock); + var returnObj = session(sock); - parent.login = function() { + returnObj.login = function() { var loginPdu = { 'cmdName': 'bind_transceiver', - 'seqNr': parent.ourSeqNr, + 'seqNr': returnObj.ourSeqNr, 'params': { 'system_id': options.username, 'password': options.password } }; - parent.send(loginPdu, function(err, retPduObj) { + returnObj.send(loginPdu, function(err, retPduObj) { if (err) { - parent.emit('loginFailed'); + returnObj.emit('loginFailed'); return; } if (retPduObj.cmdStatus === 'ESME_ROK') { - log.info('larvitsmpp: lib/client.js: clientSession() - parent.login() - Successful login!'); - parent.loggedIn = true; - parent.emit('loggedIn'); + log.info('larvitsmpp: lib/client.js: clientSession() - returnObj.login() - Successful login!'); + returnObj.loggedIn = true; + returnObj.emit('loggedIn'); } else { - log.info('larvitsmpp: lib/client.js: clientSession() - parent.login() - Login failed. Status msg: ' + retPduObj.cmdStatus); - parent.emit('loginFailed'); + log.info('larvitsmpp: lib/client.js: clientSession() - returnObj.login() - Login failed. Status msg: ' + retPduObj.cmdStatus); + returnObj.emit('loginFailed'); } }); }; - parent.resetEnqLinkTimer = function() { + returnObj.resetEnqLinkTimer = function() { log.silly('larvitsmpp: lib/client.js: clientSession() - resetEnqLinkTimer() - Resetting the kill timer'); - if (parent.enqLinkTimer) { - clearTimeout(parent.enqLinkTimer); + if (returnObj.enqLinkTimer) { + clearTimeout(returnObj.enqLinkTimer); } - parent.enqLinkTimer = setTimeout(function() { - parent.send({ + returnObj.enqLinkTimer = setTimeout(function() { + returnObj.send({ cmdName: 'enquire_link', - seqNr: parent.ourSeqNr + seqNr: returnObj.ourSeqNr }); }, options.enqLinkTiming); }; - parent.login(); - parent.resetEnqLinkTimer(); + returnObj.login(); + returnObj.resetEnqLinkTimer(); - parent.on('incomingPdu', function(pduObj) { + returnObj.on('incomingPdu', function(pduObj) { if (pduObj.cmdName === 'deliver_sm') { - parent.deliverSm(pduObj); + returnObj.deliverSm(pduObj); } else if (pduObj.cmdName === 'enquire_link') { - parent.enquireLink(); + returnObj.enquireLink(); } else if (pduObj.cmdName === 'submit_sm') { - parent.submitSm(pduObj); + returnObj.submitSm(pduObj); } else if (pduObj.cmdName === 'unbind') { - parent.sendReturn(pduObj, 'ESME_ROK', true); + returnObj.sendReturn(pduObj, 'ESME_ROK', true); } else { // All other commands we do not support - parent.sendReturn(pduObj, 'ESME_RINVCMDID'); + returnObj.sendReturn(pduObj, 'ESME_RINVCMDID'); } }); - return parent; + return returnObj; } /** diff --git a/lib/session.js b/lib/session.js index e36b11f..ee9f9bd 100644 --- a/lib/session.js +++ b/lib/session.js @@ -43,6 +43,7 @@ function session(sock) { returnObj.closeSocket = function() { log.verbose('larvitsmpp: lib/session.js: session() - closeSocket() - Closing socket for ' + sock.remoteAddress + ':' + sock.remotePort); if (returnObj.enqLinkTimer) { + log.debug('larvitsmpp: lib/session.js: session() - closeSocket() - enqLinkTimer found, clearing.'); clearTimeout(returnObj.enqLinkTimer); } sock.destroy(); @@ -341,7 +342,11 @@ function session(sock) { // Add a 'close' event handler to this instance of socket sock.on('close', function() { returnObj.emit('close'); - log.debug('larvitsmpp: lib/session.js: session() - socket closed'); + if (returnObj.enqLinkTimer) { + log.debug('larvitsmpp: lib/session.js: session() - sock.on(close) - enqLinkTimer found, clearing.'); + clearTimeout(returnObj.enqLinkTimer); + } + log.debug('larvitsmpp: lib/session.js: session() - sock.on(close) - socket closed'); }); return returnObj;