From 363e3f7fc26bb3a7ecc4f39187c90dcb08b49e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Thu, 6 Apr 2023 18:17:43 +0200 Subject: [PATCH] Split ANY PDU evnt into RX and TX for receive and transmit --- src/Center/Center.ts | 2 +- src/Client/Client.ts | 4 +++- .../Center/BindTranscieverReplyProcessor.ts | 6 +++--- .../Center/DeliveryReceiptProcessor.ts | 2 +- .../Postprocessor/Center/EchoPduProcessor.ts | 2 +- .../Center/EnquireLinkReplyProcessor.ts | 2 +- .../Center/SubmitSmReplyProcessor.ts | 2 +- .../Client/DeliverSmReplyProcessor.ts | 2 +- src/SmppSession.ts | 20 ++++++++++++++----- 9 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/Center/Center.ts b/src/Center/Center.ts index 745845b..1a7d4c2 100644 --- a/src/Center/Center.ts +++ b/src/Center/Center.ts @@ -84,7 +84,7 @@ export default class Center extends SmppSession { let pduCopy = new smpp.PDU(pdu.command, {...pdu}); let session = this.getNextSession(); this.processors.Preprocessor.forEach((processor: PduProcessor) => processor.processPdu(session, pduCopy)); - session.send(pduCopy, (replyPdu: any) => { + this.doSendPdu(pduCopy, session).then((replyPdu: any) => { resolve(replyPdu); }); }); diff --git a/src/Client/Client.ts b/src/Client/Client.ts index 4ac9c3d..fb146e6 100644 --- a/src/Client/Client.ts +++ b/src/Client/Client.ts @@ -145,7 +145,9 @@ export default class Client extends SmppSession { let pduCopy = new smpp.PDU(pdu.command, {...pdu}); this.processors.Preprocessor.forEach((processor: PduProcessor) => processor.processPdu(this.session, pduCopy)); this.logger.log5(`Client-${this.id} sending PDU: ${JSON.stringify(pduCopy)}`); - this.session.send(pduCopy, (replyPdu: object) => resolve(replyPdu)); + this.doSendPdu(pduCopy, this.session).then((replyPdu: any) => { + resolve(replyPdu); + }); }); } diff --git a/src/PDUProcessor/Postprocessor/Center/BindTranscieverReplyProcessor.ts b/src/PDUProcessor/Postprocessor/Center/BindTranscieverReplyProcessor.ts index 6833748..6a5209b 100644 --- a/src/PDUProcessor/Postprocessor/Center/BindTranscieverReplyProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/BindTranscieverReplyProcessor.ts @@ -20,7 +20,7 @@ export default class BindTranscieverReplyProcessor extends Postprocessor { if (pdu.system_id === entity?.username && pdu.password === entity?.password) { this.logger.log1(`Center-${entity?.id} client connection successful`); if (pdu.response) { - session.send(pdu.response()); + entity?.doSendPdu(pdu.response(), session); } session.resume(); // @ts-ignore @@ -30,9 +30,9 @@ export default class BindTranscieverReplyProcessor extends Postprocessor { } else { this.logger.log1(`Center-${entity?.id} client connection failed, invalid credentials (expected: ${entity?.username}, ${entity?.password})`); if (pdu.response) { - session.send(pdu.response({ + entity?.doSendPdu(pdu.response({ command_status: smpp.ESME_RBINDFAIL - })); + }), session); } // @ts-ignore entity?.pendingSessions = entity?.pendingSessions.filter((s) => s !== session); diff --git a/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts b/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts index 2529aae..fd16af8 100644 --- a/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts @@ -32,7 +32,7 @@ export default class DeliveryReceiptProcessor extends Postprocessor { short_message: drMessage, esm_class: 4, }); - session.send(DRPdu); + entity?.doSendPdu(DRPdu, session); resolve(pdu); } diff --git a/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts b/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts index ae0fc84..2821a65 100644 --- a/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts @@ -16,7 +16,7 @@ export default class EchoPduProcessor extends Postprocessor { destination_addr: pdu.source_addr, short_message: pdu.short_message }); - session.send(sentPdu); + entity?.doSendPdu(sentPdu, session); resolve(sentPdu); } }); diff --git a/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts b/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts index 0f5e7b9..10bf1b6 100644 --- a/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts @@ -9,7 +9,7 @@ export default class EnquireLinkReplyProcessor extends Postprocessor { processPdu(session: any, pdu: any, entity?: SmppSession | undefined): Promise { return new Promise((resolve, reject) => { if (!!pdu.command && pdu.command === 'enquire_link') { - session.send(pdu.response()); + entity?.doSendPdu(pdu.response(), session); resolve(pdu); } }); diff --git a/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts b/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts index a30039d..d4b1359 100644 --- a/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts @@ -16,7 +16,7 @@ export default class SubmitSmReplyProcessor extends Postprocessor { let response = pdu.response(); response.message_id = this.messageIdIterator++; MessageIdManager.addMessageId(pdu, response.message_id); - session.send(response); + entity?.doSendPdu(response, session); resolve(pdu); } }); diff --git a/src/PDUProcessor/Postprocessor/Client/DeliverSmReplyProcessor.ts b/src/PDUProcessor/Postprocessor/Client/DeliverSmReplyProcessor.ts index fab981f..2e7dbde 100644 --- a/src/PDUProcessor/Postprocessor/Client/DeliverSmReplyProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Client/DeliverSmReplyProcessor.ts @@ -9,7 +9,7 @@ export default class DeliverSmReplyProcessor extends Postprocessor { processPdu(session: any, pdu: any, entity?: SmppSession | undefined): Promise { return new Promise((resolve, reject) => { if (!!pdu.command && pdu.command === 'deliver_sm') { - session.send(pdu.response()); + entity?.doSendPdu(pdu.response(), session); resolve(pdu); } }); diff --git a/src/SmppSession.ts b/src/SmppSession.ts index 9102def..296faa7 100644 --- a/src/SmppSession.ts +++ b/src/SmppSession.ts @@ -13,7 +13,8 @@ export default abstract class SmppSession { readonly EVENT: any = { STATUS_CHANGED: "STATUS_CHANGED", STATE_CHANGED: "STATE_CHANGED", - ANY_PDU: "ANY_PDU", + ANY_PDU_TX: "ANY_PDU_TX", + ANY_PDU_RX: "ANY_PDU_RX", MESSAGE_SEND_COUNTER_UPDATE_EVENT: "MESSAGE_SEND_COUNTER_UPDATE_EVENT", }; abstract STATUSES: string[]; @@ -21,7 +22,7 @@ export default abstract class SmppSession { processors: { [key: string]: PduProcessor[] } = {}; readonly UPDATE_WS: string = "UPDATE_WS"; readonly eventEmitter: EventEmitter = new EventEmitter(); - readonly logger: Logger = new Logger(`SmppSession`); + readonly logger: Logger = new Logger(this.constructor.name); readonly sendTimer: any = new NanoTimer(); readonly counterUpdateTimer: any = new NanoTimer(); readonly MESSAGE_SEND_UPDATE_DELAY: number = Number(process.env.MESSAGE_SEND_UPDATE_DELAY) || 500; @@ -29,7 +30,8 @@ export default abstract class SmppSession { protected constructor() { this.eventEmitter.on(this.EVENT.STATE_CHANGED, () => this.updateWs(this.EVENT.STATE_CHANGED)); this.eventEmitter.on(this.EVENT.STATUS_CHANGED, () => this.updateWs(this.EVENT.STATUS_CHANGED)); - this.eventEmitter.on(this.EVENT.ANY_PDU, (pdu: any) => this.updateWs(this.EVENT.ANY_PDU, [pdu])); + this.eventEmitter.on(this.EVENT.ANY_PDU_TX, (pdu: any) => this.updateWs(this.EVENT.ANY_PDU_TX, [pdu])); + this.eventEmitter.on(this.EVENT.ANY_PDU_RX, (pdu: any) => this.updateWs(this.EVENT.ANY_PDU_RX, [pdu])); this.eventEmitter.on(this.EVENT.MESSAGE_SEND_COUNTER_UPDATE_EVENT, (count: number) => this.updateWs(this.EVENT.MESSAGE_SEND_COUNTER_UPDATE_EVENT, [count])); this.processors[Preprocessor.name] = []; @@ -110,6 +112,13 @@ export default abstract class SmppSession { abstract sendPdu(pdu: object, force?: boolean): Promise; + doSendPdu(pdu: PDU, session: any): Promise { + return new Promise((resolve, reject) => { + this.eventEmitter.emit(this.EVENT.ANY_PDU_TX, pdu); + session.send(pdu, (reply: any) => resolve(reply)); + }) + } + sendSingle(job: Job): Promise { return this.sendPdu(job.pdu); } @@ -153,7 +162,8 @@ export default abstract class SmppSession { case this.EVENT.STATUS_CHANGED: message.data = this.status; break; - case this.EVENT.ANY_PDU: + case this.EVENT.ANY_PDU_RX: + case this.EVENT.ANY_PDU_TX: message.data = args![0]; break; case this.EVENT.MESSAGE_SEND_COUNTER_UPDATE_EVENT: @@ -185,7 +195,7 @@ export default abstract class SmppSession { eventAnyPdu(session: any, pdu: PDU): Promise { if (!!pdu) { - this.eventEmitter.emit(this.EVENT.ANY_PDU, pdu); + this.eventEmitter.emit(this.EVENT.ANY_PDU_RX, pdu); // console.log("IS PDU TIME"); this.logger.log6(pdu); this.processors.Postprocessor.forEach((processor: PduProcessor) => processor.processPdu(session, pdu, this));