Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1604,16 +1604,16 @@ 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);
}

// SMS-STATUS-REPORT
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);
}
Expand All @@ -1635,8 +1635,8 @@ protected void generateIntermediateReceipts(SmsSet smsSet, ArrayList<Sms> 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="
Expand All @@ -1660,7 +1660,7 @@ protected void generateFailureReceipts(SmsSet smsSet, ArrayList<Sms> 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);

Expand All @@ -1672,7 +1672,7 @@ protected void generateFailureReceipts(SmsSet smsSet, ArrayList<Sms> 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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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");

Expand Down Expand Up @@ -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());
Expand All @@ -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());
Expand All @@ -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);
Expand All @@ -676,15 +657,15 @@ 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);
sb.append(messageId);
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");
Expand All @@ -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));
Expand Down Expand Up @@ -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());
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down