diff --git a/src/Center/Center.ts b/src/Center/Center.ts index 73ebe8c..745845b 100644 --- a/src/Center/Center.ts +++ b/src/Center/Center.ts @@ -3,7 +3,7 @@ import Job from "../Job/Job"; import Logger from "../Logger"; import PduProcessor from "../PDUProcessor/PduProcessor"; import BindTranscieverReplyProcessor from "../PDUProcessor/Postprocessor/Center/BindTranscieverReplyProcessor"; -import DebugPduProcessor from "../PDUProcessor/Postprocessor/Center/DebugPduProcessor"; +import EnquireLinkReplyProcessor from "../PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor"; import SubmitSmReplyProcessor from "../PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor"; import ProcessorManager from "../PDUProcessor/ProcessorManager"; import SmppSession from "../SmppSession"; @@ -42,7 +42,7 @@ export default class Center extends SmppSession { ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(SubmitSmReplyProcessor.name)); ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(BindTranscieverReplyProcessor.name)); - ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(DebugPduProcessor.name)); + ProcessorManager.attachProcessor(this, ProcessorManager.getProcessor(EnquireLinkReplyProcessor.name)); this.logger = new Logger(`Center-${id}`); diff --git a/src/MessageIdManager.ts b/src/MessageIdManager.ts new file mode 100644 index 0000000..5796f66 --- /dev/null +++ b/src/MessageIdManager.ts @@ -0,0 +1,17 @@ +import {PDU} from "./CommonObjects"; + +export default class MessageIdManager { + private static messages: {[key: string]: number} = {}; + + static addMessageId(message: PDU, id: number): void { + this.messages[this.getMessageHash(message)] = id; + } + + static getMessageId(message: PDU): number | undefined { + return this.messages[this.getMessageHash(message)]; + } + + private static getMessageHash(message: PDU): string { + return btoa(`${message.source_addr}:${message.destination_addr}:${message.short_message}`); + } +} \ No newline at end of file diff --git a/src/PDUProcessor/Postprocessor/Center/DebugPduProcessor.ts b/src/PDUProcessor/Postprocessor/Center/DebugPduProcessor.ts deleted file mode 100644 index e7651e6..0000000 --- a/src/PDUProcessor/Postprocessor/Center/DebugPduProcessor.ts +++ /dev/null @@ -1,18 +0,0 @@ -import SmppSession from "../../../SmppSession"; -import Postprocessor from "../Postprocessor"; - -export default class DebugPduProcessor extends Postprocessor { - constructor(type: string) { - super(type); - } - - processPdu(session: any, pdu: any, entity?: SmppSession | undefined): Promise { - return new Promise((resolve, reject) => { - if (!!pdu.command && pdu.command === "submit_sm") { - session.send(pdu.response(), (replyPdu: any) => { - resolve(replyPdu); - }); - } - }); - } -} \ No newline at end of file diff --git a/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts b/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts index f1af6a7..2529aae 100644 --- a/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/DeliveryReceiptProcessor.ts @@ -1,3 +1,4 @@ +import MessageIdManager from "../../../MessageIdManager"; import SmppSession from "../../../SmppSession"; import Postprocessor from "../Postprocessor"; @@ -11,48 +12,35 @@ export default class DeliveryReceiptProcessor extends Postprocessor { processPdu(session: any, pdu: any, entity?: SmppSession | undefined): Promise { return new Promise((resolve, reject) => { if (!!pdu.command && pdu.command === "submit_sm" && pdu.registered_delivery) { - session.send(pdu.response()); + let drMessage: string = ""; + let date: string = new Date().toISOString().replace(/T/, '').replace(/\..+/, '').replace(/-/g, '').replace(/:/g, '').substring(2, 12); - let DRPdu = new smpp.PDU('deliver_sm', { - source_addr: pdu.destination_addr, - destination_addr: pdu.source_addr, - short_message: pdu.short_message - }); - console.log(pdu); - session.send(DRPdu); + let relatedMessageId: number | undefined = MessageIdManager.getMessageId(pdu); + if (relatedMessageId) { + drMessage += "id:" + relatedMessageId + " "; + drMessage += "sub:001 "; + drMessage += "dlvrd:001 "; + drMessage += "submit date:" + date + " "; + drMessage += "done date:" + date + " "; + drMessage += "stat:DELIVRD "; + drMessage += "err:000 "; + drMessage += "text:"; - resolve(pdu); + let DRPdu = new smpp.PDU('deliver_sm', { + source_addr: pdu.source_addr, + destination_addr: pdu.destination_addr, + short_message: drMessage, + esm_class: 4, + }); + session.send(DRPdu); + + resolve(pdu); + } } }); } -} - - // private void sendDeliveryReceipt(Address mtDestinationAddress, Address mtSourceAddress, String messageId, String text) { - // SmppSession session = sessionRef.get(); - // - // DeliverSm deliver = new DeliverSm(); - // deliver.setEsmClass(SmppConstants.ESM_CLASS_MT_SMSC_DELIVERY_RECEIPT); - // deliver.setSourceAddress(mtSourceAddress); - // deliver.setDestAddress(mtDestinationAddress); - // deliver.setDataCoding(SmppConstants.DATA_CODING_GSM); - // - // DeliverReportStatus delivered = DeliverReportStatus.DELIVERED; - // - // DeliveryReceipt deliveryReceipt = new DeliveryReceipt(); - // deliveryReceipt.setDeliveredCount(1); - // deliveryReceipt.setDoneDate(DateTime.now()); - // deliveryReceipt.setRawErrorCode(delivered.getErrorCode()); - // deliveryReceipt.setMessageId(messageId); - // deliveryReceipt.setStateText(delivered.getStateText()); - // deliveryReceipt.setSubmitCount(1); - // deliveryReceipt.setSubmitDate(DateTime.now()); - // deliveryReceipt.setText(text); - // try { - // deliver.setShortMessage(deliveryReceipt.toShortMessage().getBytes()); - // } catch (SmppInvalidArgumentException e) { - // //should not be reached - // //ignore - // } - // sendRequestPdu(session, deliver); - // } \ No newline at end of file + private padLeft(str: string, pad: string, length: number): string { + return (new Array(length + 1).join(pad) + str).slice(-length); + } +} \ No newline at end of file diff --git a/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts b/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts index cdb46d3..ae0fc84 100644 --- a/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/EchoPduProcessor.ts @@ -11,20 +11,13 @@ export default class EchoPduProcessor extends Postprocessor { processPdu(session: any, pdu: any, entity?: SmppSession | undefined): Promise { return new Promise((resolve, reject) => { if (!!pdu.command && pdu.command === "submit_sm") { - let promises = []; - let replyPromise = session.send(pdu.response()); - let sendPromise = session.send(new smpp.PDU('deliver_sm', { + let sentPdu = new smpp.PDU('deliver_sm', { source_addr: pdu.destination_addr, destination_addr: pdu.source_addr, short_message: pdu.short_message - })); - promises.push(replyPromise); - promises.push(sendPromise); - Promise.all(promises).then((replyPdus: any) => { - resolve(replyPdus); - }).catch((error: any) => { - reject(error); }); + session.send(sentPdu); + resolve(sentPdu); } }); } diff --git a/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts b/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts new file mode 100644 index 0000000..0f5e7b9 --- /dev/null +++ b/src/PDUProcessor/Postprocessor/Center/EnquireLinkReplyProcessor.ts @@ -0,0 +1,17 @@ +import SmppSession from "../../../SmppSession"; +import Postprocessor from "../Postprocessor"; + +export default class EnquireLinkReplyProcessor extends Postprocessor { + constructor(type: string) { + super(type); + } + + 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()); + resolve(pdu); + } + }); + } +} \ No newline at end of file diff --git a/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts b/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts index db24bcb..a30039d 100644 --- a/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts +++ b/src/PDUProcessor/Postprocessor/Center/SubmitSmReplyProcessor.ts @@ -1,7 +1,10 @@ +import MessageIdManager from "../../../MessageIdManager"; import SmppSession from "../../../SmppSession"; import Postprocessor from "../Postprocessor"; export default class SubmitSmReplyProcessor extends Postprocessor { + private messageIdIterator: number = 0; + constructor(type: string) { super(type); } @@ -9,7 +12,11 @@ export default class SubmitSmReplyProcessor extends Postprocessor { processPdu(session: any, pdu: any, entity?: SmppSession | undefined): Promise { return new Promise((resolve, reject) => { if (!!pdu.command && pdu.command === 'submit_sm') { - session.send(pdu.response()); + // Add an ID here! + let response = pdu.response(); + response.message_id = this.messageIdIterator++; + MessageIdManager.addMessageId(pdu, response.message_id); + session.send(response); resolve(pdu); } }); diff --git a/src/PDUProcessor/ProcessorManager.ts b/src/PDUProcessor/ProcessorManager.ts index 19dd10a..aa39de4 100644 --- a/src/PDUProcessor/ProcessorManager.ts +++ b/src/PDUProcessor/ProcessorManager.ts @@ -4,9 +4,9 @@ import Logger from "../Logger"; import SmppSession from "../SmppSession"; import PduProcessor from "./PduProcessor"; import BindTranscieverReplyProcessor from "./Postprocessor/Center/BindTranscieverReplyProcessor"; -import DebugPduProcessor from "./Postprocessor/Center/DebugPduProcessor"; import DeliveryReceiptProcessor from "./Postprocessor/Center/DeliveryReceiptProcessor"; import EchoPduProcessor from "./Postprocessor/Center/EchoPduProcessor"; +import EnquireLinkReplyProcessor from "./Postprocessor/Center/EnquireLinkReplyProcessor"; import SubmitSmReplyProcessor from "./Postprocessor/Center/SubmitSmReplyProcessor"; import DeliverSmReplyProcessor from "./Postprocessor/Client/DeliverSmReplyProcessor"; import Postprocessor from "./Postprocessor/Postprocessor"; @@ -24,7 +24,7 @@ export default class ProcessorManager { // This is an IDIOTIC solution, but it works // Try running eb22a43 to find out what's wrong with the previous approach ProcessorManager.postprocessors = [ - new DebugPduProcessor(Center.name), + new EnquireLinkReplyProcessor(Center.name), new EchoPduProcessor(Center.name), new DeliverSmReplyProcessor(Client.name), new SubmitSmReplyProcessor(Center.name), diff --git a/src/main.ts b/src/main.ts index 109ed7a..74a644f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -50,7 +50,7 @@ async function main() { main(); -// process.on('exit', cleanup); -// process.on('SIGINT', cleanup); -// process.on('SIGUSR1', cleanup); -// process.on('SIGUSR2', cleanup); \ No newline at end of file +process.on('exit', cleanup); +process.on('SIGINT', cleanup); +process.on('SIGUSR1', cleanup); +process.on('SIGUSR2', cleanup); \ No newline at end of file