diff --git a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/deliverysbb/DeliveryCommonSbb.java b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/deliverysbb/DeliveryCommonSbb.java index 55728843b..b4b0e1055 100644 --- a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/deliverysbb/DeliveryCommonSbb.java +++ b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/deliverysbb/DeliveryCommonSbb.java @@ -1604,8 +1604,8 @@ protected void generateSuccessReceipt(SmsSet smsSet, Sms sms) { if (MessageUtil.isReceiptOnSuccess(registeredDelivery)) { TargetAddress ta = new TargetAddress(sms.getSourceAddrTon(), sms.getSourceAddrNpi(), sms.getSourceAddr(), smsSet.getNetworkId()); - Sms receipt = MessageUtil.createReceiptSms(sms, true, ta, - smscPropertiesManagement.getOrigNetworkIdForReceipts()); + Sms receipt = MessageUtil.createReceiptSms(sms, DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED, ta, + smscPropertiesManagement.getOrigNetworkIdForReceipts(), null); this.sendNewGeneratedMessage(receipt, ta); } @@ -1613,7 +1613,7 @@ protected void generateSuccessReceipt(SmsSet smsSet, Sms sms) { if (sms.isStatusReportRequest()) { TargetAddress ta = new TargetAddress(sms.getSourceAddrTon(), sms.getSourceAddrNpi(), sms.getSourceAddr(), smsSet.getNetworkId()); - Sms smsStatusReport = MessageUtil.createSmsStatusReport(sms, true, ta, + Sms smsStatusReport = MessageUtil.createSmsStatusReport(sms, DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED, ta, smscPropertiesManagement.getOrigNetworkIdForReceipts()); this.sendNewGeneratedMessage(smsStatusReport, ta); } @@ -1635,8 +1635,8 @@ protected void generateIntermediateReceipts(SmsSet smsSet, ArrayList lstTem TargetAddress ta = new TargetAddress(sms.getSourceAddrTon(), sms.getSourceAddrNpi(), sms.getSourceAddr(), smsSet.getNetworkId()); - Sms receipt = MessageUtil.createReceiptSms(sms, false, ta, - smscPropertiesManagement.getOrigNetworkIdForReceipts(), null, true); + Sms receipt = MessageUtil.createReceiptSms(sms, DeliveryStatusType.DELIVERY_ACK_STATE_ENROUTE, ta, + smscPropertiesManagement.getOrigNetworkIdForReceipts(), null); this.sendNewGeneratedMessage(receipt, ta); this.logger.info("Adding an intermediate failure receipt: source=" + receipt.getSourceAddr() + ", dest=" @@ -1660,7 +1660,7 @@ protected void generateFailureReceipts(SmsSet smsSet, ArrayList lstPermFail if (MessageUtil.isReceiptOnFailure(registeredDelivery)) { TargetAddress ta = new TargetAddress(sms.getSourceAddrTon(), sms.getSourceAddrNpi(), sms.getSourceAddr(), smsSet.getNetworkId()); - Sms receipt = MessageUtil.createReceiptSms(sms, false, ta, + Sms receipt = MessageUtil.createReceiptSms(sms, DeliveryStatusType.DELIVERY_ACK_STATE_UNDELIVERABLE, ta, smscPropertiesManagement.getOrigNetworkIdForReceipts(), extraString); this.sendNewGeneratedMessage(receipt, ta); @@ -1672,7 +1672,7 @@ protected void generateFailureReceipts(SmsSet smsSet, ArrayList lstPermFail if (sms.isStatusReportRequest()) { TargetAddress ta = new TargetAddress(sms.getSourceAddrTon(), sms.getSourceAddrNpi(), sms.getSourceAddr(), smsSet.getNetworkId()); - Sms smsStatusReport = MessageUtil.createSmsStatusReport(sms, false, ta, + Sms smsStatusReport = MessageUtil.createSmsStatusReport(sms, DeliveryStatusType.DELIVERY_ACK_STATE_UNDELIVERABLE, ta, smscPropertiesManagement.getOrigNetworkIdForReceipts()); this.sendNewGeneratedMessage(smsStatusReport, ta); diff --git a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java index d3fe512d1..44b815a1a 100644 --- a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java +++ b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java @@ -1606,11 +1606,11 @@ private void processSms(Sms sms0, PersistenceRAInterface store, Esme esme, Submi sms0.setReceiptLocalMessageId(messageId); String messageIdStr = MessageUtil.createMessageIdString(messageId); + DeliveryStatusType deliveryStatus = DeliveryStatusType.valueOf(deliveryReceiptData.getStatus()); String updatedReceiptText = MessageUtil.createDeliveryReceiptMessage(messageIdStr, deliveryReceiptData.getSubmitDate(), deliveryReceiptData.getDoneDate(), deliveryReceiptData.getError(), deliveryReceiptData.getText(), - deliveryReceiptData.getStatus().equals(MessageUtil.DELIVERY_ACK_STATE_DELIVERED), null, - deliveryReceiptData.getStatus().equals(MessageUtil.DELIVERY_ACK_STATE_ENROUTE)); + deliveryStatus, null); sms0.setShortMessageText(updatedReceiptText); } else { // we have not found a local message - marking as unrecognized receipt diff --git a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/DeliveryStatusType.java b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/DeliveryStatusType.java new file mode 100644 index 000000000..831989054 --- /dev/null +++ b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/DeliveryStatusType.java @@ -0,0 +1,23 @@ +package org.mobicents.smsc.library; + +public enum DeliveryStatusType { + + DELIVERY_ACK_STATE_DELIVERED("DELIVRD"), + DELIVERY_ACK_STATE_UNDELIVERABLE("UNDELIV"), + DELIVERY_ACK_STATE_ENROUTE("ENROUTE"); + + private String value; + DeliveryStatusType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return this.getValue(); + } + +} diff --git a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/MessageUtil.java b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/MessageUtil.java index 712960de4..ed688395c 100644 --- a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/MessageUtil.java +++ b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/MessageUtil.java @@ -405,7 +405,8 @@ public static UserDataHeader getNationalLanguageIdentifierUdh(int nationalLangua /** * Returns now many bytes occupies this charCount * @param dataCodingScheme - * @param charCount + * @param msg + * @param udh * @return */ public static int getMessageLengthInBytes(DataCodingScheme dataCodingScheme, String msg, UserDataHeader udh) { @@ -583,9 +584,6 @@ public static String checkDataCodingSchemeSupport(int dcs) { public static final String DELIVERY_ACK_STAT = " stat:"; public static final String DELIVERY_ACK_ERR = " err:"; public static final String DELIVERY_ACK_TEXT = " text:"; - public static final String DELIVERY_ACK_STATE_DELIVERED = "DELIVRD"; - public static final String DELIVERY_ACK_STATE_UNDELIVERABLE = "UNDELIV"; - public static final String DELIVERY_ACK_STATE_ENROUTE = "ENROUTE"; public static final byte ESME_DELIVERY_ACK = 0x04; public static final SimpleDateFormat DELIVERY_ACK_DATE_FORMAT = new SimpleDateFormat("yyMMddHHmm"); @@ -613,18 +611,9 @@ public static boolean isReceiptIntermediate(int registeredDelivery) { return false; } - public static Sms createReceiptSms(Sms sms, boolean delivered, TargetAddress ta, boolean origNetworkIdForReceipts, + public static Sms createReceiptSms(Sms sms, DeliveryStatusType deliveryStatus, TargetAddress ta, boolean origNetworkIdForReceipts, String extraString) { - return createReceiptSms(sms, delivered, ta, origNetworkIdForReceipts, extraString, false); - } - - public static Sms createReceiptSms(Sms sms, boolean delivered, TargetAddress ta, boolean origNetworkIdForReceipts) { - return createReceiptSms(sms, delivered, ta, origNetworkIdForReceipts, null, false); - } - - public static Sms createReceiptSms(Sms sms, boolean delivered, TargetAddress ta, boolean origNetworkIdForReceipts, - String extraString, boolean tempFailure) { - Sms receipt = createReceiptSms(sms, delivered, extraString, tempFailure); + Sms receipt = createReceiptSms(sms, deliveryStatus, extraString); SmsSet backSmsSet = new SmsSet(); backSmsSet.setDestAddr(ta.getAddr()); backSmsSet.setDestAddrNpi(ta.getAddrNpi()); @@ -638,15 +627,7 @@ public static Sms createReceiptSms(Sms sms, boolean delivered, TargetAddress ta, return receipt; } - public static Sms createReceiptSms(Sms sms, boolean delivered) { - return createReceiptSms(sms, delivered, null); - } - - public static Sms createReceiptSms(Sms sms, boolean delivered, String extraString) { - return createReceiptSms(sms, delivered, extraString, false); - } - - public static Sms createReceiptSms(Sms sms, boolean delivered, String extraString, boolean tempFailure) { + public static Sms createReceiptSms(Sms sms, DeliveryStatusType deliveryStatus, String extraString) { Sms receipt = new Sms(); receipt.setDbId(UUID.randomUUID()); receipt.setSourceAddr(sms.getSmsSet().getDestAddr()); @@ -661,7 +642,7 @@ public static Sms createReceiptSms(Sms sms, boolean delivered, String extraStrin String rcpt = createDeliveryReceiptMessage(sms.getMessageIdText(), sms.getSubmitDate(), new Timestamp(System.currentTimeMillis()), sms.getSmsSet().getStatus().getCode(), sms.getShortMessageText(), - delivered, extraString, tempFailure); + deliveryStatus, extraString); // TODO: now we are sending all in GSM7 encoding receipt.setDataCoding(0); @@ -676,7 +657,7 @@ public static Sms createReceiptSms(Sms sms, boolean delivered, String extraStrin } public static String createDeliveryReceiptMessage(String messageId, Date submitDate, Date deliveryDate, - int errorCode, String origMsgText, boolean delivered, String extraString, boolean tempFailure) { + int errorCode, String origMsgText, DeliveryStatusType deliveryStatus, String extraString) { StringBuffer sb = new StringBuffer(); sb.append(DELIVERY_ACK_ID); @@ -684,7 +665,7 @@ public static String createDeliveryReceiptMessage(String messageId, Date submitD sb.append(DELIVERY_ACK_SUB); sb.append("001"); sb.append(DELIVERY_ACK_DLVRD); - if (delivered) { + if (deliveryStatus.equals(DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED)){ sb.append("001"); } else { sb.append("000"); @@ -694,16 +675,12 @@ public static String createDeliveryReceiptMessage(String messageId, Date submitD sb.append(DELIVERY_ACK_DONE_DATE); sb.append(DELIVERY_ACK_DATE_FORMAT.format(deliveryDate)); // new Timestamp(System.currentTimeMillis()) sb.append(DELIVERY_ACK_STAT); - if (delivered) { - sb.append(DELIVERY_ACK_STATE_DELIVERED); + if (deliveryStatus.equals(DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED)) { + sb.append(DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED.toString()); sb.append(DELIVERY_ACK_ERR); sb.append("000"); } else { - if (!tempFailure) { - sb.append(DELIVERY_ACK_STATE_UNDELIVERABLE); - } else { - sb.append(DELIVERY_ACK_STATE_ENROUTE); - } + sb.append(deliveryStatus.toString()); sb.append(DELIVERY_ACK_ERR); // sb.append(errorCode != null ? errorCode.getCodeText() : "null"); sb.append(String.format("%03d", errorCode)); @@ -861,7 +838,7 @@ public static DeliveryReceiptData parseDeliveryReceipt(String msg, TlvSet tlvSet return deliveryReceiptData; } - public static Sms createSmsStatusReport(Sms sms, boolean delivered, TargetAddress ta, boolean origNetworkIdForReceipts) { + public static Sms createSmsStatusReport(Sms sms, DeliveryStatusType deliveryStatus, TargetAddress ta, boolean origNetworkIdForReceipts) { Sms smsStatusReport = new Sms(); smsStatusReport.setDbId(UUID.randomUUID()); smsStatusReport.setSourceAddr(sms.getSmsSet().getDestAddr()); @@ -878,7 +855,7 @@ public static Sms createSmsStatusReport(Sms sms, boolean delivered, TargetAddres smsDeliveryReportData.setDeliveryDate(new Date()); smsDeliveryReportData.setStatusReportQualifier(StatusReportQualifier.SmsSubmitResult); int statusVal; - if (delivered) + if (deliveryStatus.equals(DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED)) statusVal = Status.SMS_RECEIVED; else { // TODO: fill statusVal with proper values (after experience) diff --git a/core/smsc-common-library/src/test/java/org/mobicents/smsc/library/ParseDeliveryReceiptTest.java b/core/smsc-common-library/src/test/java/org/mobicents/smsc/library/ParseDeliveryReceiptTest.java index cd4dc10ae..8a62f8e19 100644 --- a/core/smsc-common-library/src/test/java/org/mobicents/smsc/library/ParseDeliveryReceiptTest.java +++ b/core/smsc-common-library/src/test/java/org/mobicents/smsc/library/ParseDeliveryReceiptTest.java @@ -143,7 +143,7 @@ public void testParseDeliveryReceipt() { public void testEncodeDeliveryReceipt() { String mId = MessageUtil.createMessageIdString(201); String s1 = MessageUtil.createDeliveryReceiptMessage(mId, new Date(), new Date(), ErrorCode.REJECT_INCOMING_MPROC.getCode(), - "www www eee", true, null, false); + "www www eee", DeliveryStatusType.DELIVERY_ACK_STATE_ENROUTE, null); } } diff --git a/tools/smpp-simulator/simulator/src/main/java/org/mobicents/smsc/tools/smppsimulator/ClientSmppSessionHandler.java b/tools/smpp-simulator/simulator/src/main/java/org/mobicents/smsc/tools/smppsimulator/ClientSmppSessionHandler.java index 5729ccc5e..be0f05537 100644 --- a/tools/smpp-simulator/simulator/src/main/java/org/mobicents/smsc/tools/smppsimulator/ClientSmppSessionHandler.java +++ b/tools/smpp-simulator/simulator/src/main/java/org/mobicents/smsc/tools/smppsimulator/ClientSmppSessionHandler.java @@ -30,6 +30,7 @@ import java.util.Date; import java.util.concurrent.TimeUnit; +import org.mobicents.smsc.library.DeliveryStatusType; import org.restcomm.protocols.ss7.map.api.smstpdu.DataCodingScheme; import org.restcomm.protocols.ss7.map.datacoding.GSMCharset; import org.restcomm.protocols.ss7.map.datacoding.GSMCharsetDecoder; @@ -373,16 +374,15 @@ public void run() { pdu.setDataCoding((byte) 0); pdu.setRegisteredDelivery((byte) 0); - boolean tempFailure = false; - boolean delivered = true; + DeliveryStatusType delivered = DeliveryStatusType.DELIVERY_ACK_STATE_DELIVERED; ErrorCode errorCode = ErrorCode.SUCCESS; if (deliveryResponseGenerating == DeliveryResponseGenerating.Error8) { - delivered = false; + delivered = DeliveryStatusType.DELIVERY_ACK_STATE_UNDELIVERABLE; errorCode = ErrorCode.ABSENT_SUBSCRIBER; } String rcpt = MessageUtil.createDeliveryReceiptMessage(messageId, submitDate, new Date(), errorCode.getCode(), "origMsgText", - delivered, null, tempFailure); + delivered, null); byte[] buf = rcpt.getBytes(utf8Charset); if (messageIdTlv != null) {