use of org.restcomm.smpp.parameter.TlvSet in project smscgateway by RestComm.
the class PostArrivalProcessorImpl method removeTlvParameter.
@Override
public void removeTlvParameter(MProcMessage message, short tag) {
MProcMessageImpl msg = (MProcMessageImpl) message;
Sms sms = msg.getSmsContent();
TlvSet ts = sms.getTlvSet();
ts.removeOptionalParameter(tag);
}
use of org.restcomm.smpp.parameter.TlvSet in project smscgateway by RestComm.
the class MProcRuleDefaultTest method testTlvOptions.
@Test(groups = { "MProcRule" })
public void testTlvOptions() throws Exception {
Sms sms = new Sms();
MProcRuleDefaultImpl pmr = null;
MProcMessage message = null;
TlvSet tlvSet = null;
// FIXME:add more failing tests
// test tlvbyte_*
tlvSet = new TlvSet();
tlvSet.addOptionalParameter(new Tlv(SmppConstants.TAG_DEST_NETWORK_ID, new byte[] { 7 }));
sms.setTlvSet(tlvSet);
message = new MProcMessageImpl(sms, ProcessingType.SMPP, null);
pmr = new MProcRuleDefaultImpl();
pmr.setInitialRuleParameters("tlv_byte_1550 7");
assertEquals(pmr.getRuleParameters(), "tlvByte_1550=7", "error");
assertTrue(pmr.matchesPostArrival(message));
tlvSet = new TlvSet();
tlvSet.addOptionalParameter(new Tlv(SmppConstants.TAG_DEST_NETWORK_ID, new byte[] { 13 }));
sms.setTlvSet(tlvSet);
message = new MProcMessageImpl(sms, ProcessingType.SMPP, null);
assertFalse(pmr.matchesPostArrival(message));
pmr.setInitialRuleParameters("tlv_byte_1550 13");
assertEquals(pmr.getRuleParameters(), "tlvByte_1550=13", "error");
assertTrue(pmr.matchesPostArrival(message));
// test tlvint_*
tlvSet = new TlvSet();
tlvSet.addOptionalParameter(new Tlv(SmppConstants.TAG_DEST_NETWORK_ID, new byte[] { 0, 0, 0, 7 }));
sms.setTlvSet(tlvSet);
message = new MProcMessageImpl(sms, ProcessingType.SMPP, null);
pmr = new MProcRuleDefaultImpl();
pmr.setInitialRuleParameters("tlv_int_1550 7");
assertEquals(pmr.getRuleParameters(), "tlvInt_1550=7", "error");
assertTrue(pmr.matchesPostArrival(message));
tlvSet = new TlvSet();
tlvSet.addOptionalParameter(new Tlv(SmppConstants.TAG_DEST_NETWORK_ID, new byte[] { 0, 0, 0, 13 }));
sms.setTlvSet(tlvSet);
message = new MProcMessageImpl(sms, ProcessingType.SMPP, null);
assertFalse(pmr.matchesPostArrival(message));
pmr.setInitialRuleParameters("tlv_int_1550 13");
assertEquals(pmr.getRuleParameters(), "tlvInt_1550=13", "error");
assertTrue(pmr.matchesPostArrival(message));
// test tlvstring_*
tlvSet = new TlvSet();
tlvSet.addOptionalParameter(new Tlv(SmppConstants.TAG_DEST_NETWORK_ID, "7".getBytes()));
sms.setTlvSet(tlvSet);
message = new MProcMessageImpl(sms, ProcessingType.SMPP, null);
pmr = new MProcRuleDefaultImpl();
pmr.setInitialRuleParameters("tlv_string_1550 7");
assertEquals(pmr.getRuleParameters(), "tlvString_1550=7", "error");
assertTrue(pmr.matchesPostArrival(message));
tlvSet = new TlvSet();
tlvSet.addOptionalParameter(new Tlv(SmppConstants.TAG_DEST_NETWORK_ID, "13".getBytes()));
sms.setTlvSet(tlvSet);
message = new MProcMessageImpl(sms, ProcessingType.SMPP, null);
assertFalse(pmr.matchesPostArrival(message));
pmr.setInitialRuleParameters("tlv_string_1550 13");
assertEquals(pmr.getRuleParameters(), "tlvString_1550=13", "error");
assertTrue(pmr.matchesPostArrival(message));
}
use of org.restcomm.smpp.parameter.TlvSet in project smscgateway by RestComm.
the class ParseDeliveryReceiptTest method testParseDeliveryReceipt.
@Test(groups = { "ParseDeliveryReceipt" })
public void testParseDeliveryReceipt() {
String msg = "id:0512249005 sub:001 dlvrd:000 submit date:1609051327 done date:1609051337 stat:ENROUTE err:054 text:xxssxx";
String msg2 = "id:0512249005 sub:001 dlvrd:000 submit date:1609051327 done date:1609051337 stat:ENROUTE err:054 text:";
String msg3 = "id:1010d937-8f43-4754-9dd8-6e987cda32fa sub:001 dlvrd:000 submit date:161008120127 done date:1610081500 stat:UNDELIV err:004 text:exampleMessage02";
String msg4 = "id:1479978899.393701000100 sub:001 dlvrd:001 submit date:161124101732 done date:161124101735 stat:DELIVRD err:000";
String msg_issue34604 = "id:07EE36CBE3 sub:001 dlvrd:001 submit date:1708071603 done date:1708071603 stat:UNDELIV err:106 Text:-";
Date d1 = new Date(116, 9 - 1, 5, 13, 27, 0);
Date d2 = new Date(116, 9 - 1, 5, 13, 37, 0);
Date d3 = new Date(116, 10 - 1, 8, 12, 1, 27);
Date d4 = new Date(116, 10 - 1, 8, 15, 0, 0);
Date d5 = new Date(116, 11 - 1, 24, 10, 17, 32);
Date d6 = new Date(116, 11 - 1, 24, 10, 17, 35);
TlvSet tlvSet = new TlvSet();
DeliveryReceiptData deliveryReceiptData = MessageUtil.parseDeliveryReceipt(msg, tlvSet);
assertEquals(deliveryReceiptData.getMessageId(), "0512249005");
assertEquals(deliveryReceiptData.getMsgSubmitted(), 1);
assertEquals(deliveryReceiptData.getMsgDelivered(), 0);
assertTrue(deliveryReceiptData.getSubmitDate().equals(d1));
assertTrue(deliveryReceiptData.getDoneDate().equals(d2));
assertEquals(deliveryReceiptData.getStatus(), "ENROUTE");
assertEquals(deliveryReceiptData.getError(), 54);
assertEquals(deliveryReceiptData.getText(), "xxssxx");
assertNull(deliveryReceiptData.getTlvReceiptedMessageId());
assertNull(deliveryReceiptData.getTlvMessageState());
deliveryReceiptData = MessageUtil.parseDeliveryReceipt(msg2, tlvSet);
assertEquals(deliveryReceiptData.getText(), "");
String rcptId = "00ffab10";
byte[] data = rcptId.getBytes();
Tlv tlv = new Tlv(SmppConstants.TAG_RECEIPTED_MSG_ID, data, "rec_msg_id");
tlvSet.addOptionalParameter(tlv);
byte[] data2 = new byte[] { 2 };
Tlv tlv2 = new Tlv(SmppConstants.TAG_MSG_STATE, data2, "msg_state");
tlvSet.addOptionalParameter(tlv2);
assertNull(deliveryReceiptData.getTlvReceiptedMessageId());
assertNull(deliveryReceiptData.getTlvMessageState());
deliveryReceiptData = MessageUtil.parseDeliveryReceipt(msg3, tlvSet);
assertEquals(deliveryReceiptData.getMessageId(), "1010d937-8f43-4754-9dd8-6e987cda32fa");
assertEquals(deliveryReceiptData.getMsgSubmitted(), 1);
assertEquals(deliveryReceiptData.getMsgDelivered(), 0);
assertTrue(deliveryReceiptData.getSubmitDate().equals(d3));
assertTrue(deliveryReceiptData.getDoneDate().equals(d4));
assertEquals(deliveryReceiptData.getStatus(), "UNDELIV");
assertEquals(deliveryReceiptData.getError(), 4);
assertEquals(deliveryReceiptData.getText(), "exampleMessage02");
assertEquals(deliveryReceiptData.getTlvReceiptedMessageId(), rcptId);
assertEquals((int) deliveryReceiptData.getTlvMessageState(), 2);
String rcptId2 = "1479978899.393701000100@1154905154";
tlvSet.clearAllOptionalParameter();
data = rcptId2.getBytes();
tlv = new Tlv(SmppConstants.TAG_RECEIPTED_MSG_ID, data, "rec_msg_id");
tlvSet.addOptionalParameter(tlv);
data2 = new byte[] { 2 };
tlv2 = new Tlv(SmppConstants.TAG_MSG_STATE, data2, "msg_state");
tlvSet.addOptionalParameter(tlv2);
deliveryReceiptData = MessageUtil.parseDeliveryReceipt(msg4, tlvSet);
assertEquals(deliveryReceiptData.getMessageId(), "1479978899.393701000100");
assertEquals(deliveryReceiptData.getMsgSubmitted(), 1);
assertEquals(deliveryReceiptData.getMsgDelivered(), 1);
assertTrue(deliveryReceiptData.getSubmitDate().equals(d5));
assertTrue(deliveryReceiptData.getDoneDate().equals(d6));
assertEquals(deliveryReceiptData.getStatus(), "DELIVRD");
assertEquals(deliveryReceiptData.getError(), 0);
assertNull(deliveryReceiptData.getText());
assertEquals(deliveryReceiptData.getTlvReceiptedMessageId(), rcptId2);
assertEquals((int) deliveryReceiptData.getTlvMessageState(), 2);
tlvSet.clearAllOptionalParameter();
rcptId = "07EE36CBE3";
data = rcptId.getBytes();
tlv = new Tlv(SmppConstants.TAG_RECEIPTED_MSG_ID, data, "rec_msg_id");
tlvSet.addOptionalParameter(tlv);
data2 = new byte[] { 5 };
tlv2 = new Tlv(SmppConstants.TAG_MSG_STATE, data2, "msg_state");
tlvSet.addOptionalParameter(tlv2);
byte[] data3 = new byte[] { 0 };
Tlv tlv3 = new Tlv(SmppConstants.TAG_NETWORK_ERROR_CODE, data3, "netw_err_code");
tlvSet.addOptionalParameter(tlv3);
deliveryReceiptData = MessageUtil.parseDeliveryReceipt(msg_issue34604, tlvSet);
assertEquals(deliveryReceiptData.getMessageId(), "07EE36CBE3");
assertEquals(deliveryReceiptData.getStatus(), "UNDELIV");
assertEquals(deliveryReceiptData.getError(), 106);
assertEquals(deliveryReceiptData.getText(), "-");
assertEquals(deliveryReceiptData.getTlvReceiptedMessageId(), rcptId);
assertEquals((int) deliveryReceiptData.getTlvMessageState(), 5);
}
use of org.restcomm.smpp.parameter.TlvSet in project smscgateway by RestComm.
the class TxSmppServerSbb method generateRejectDetailedCdr.
protected void generateRejectDetailedCdr(int smscProcessingExceptionInternalType, BaseSm<?> event, Esme esme, EventType eventType, ErrorCode errorCode, String messageType, int statusCode, String shortMessageText, Long timestampB) {
TlvSet tlvSet = new TlvSet();
ArrayList<Tlv> optionalParameters = event.getOptionalParameters();
if (optionalParameters != null && optionalParameters.size() > 0) {
for (Tlv tlv : optionalParameters) {
if (tlv.getTag() != SmppConstants.TAG_MESSAGE_PAYLOAD) {
tlvSet.addOptionalParameter(tlv);
}
}
}
boolean mcDeliveryReceipt = (event.getEsmClass() & Sms.ESME_DELIVERY_ACK) != 0;
if (smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_DST_ADDR_INVALID || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_SRC_ADDR_INVALID || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_DATA_CODING_INVALID || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_MSG_TOO_SHORT || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_MSG_TOO_LONG || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_VALIDITY_PERIOD_PARSING || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_VALIDITY_PERIOD_PARSING || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_MISC_SCHEDULER_DELIVERY_TIME_PARSING || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_STATE_STOPPED || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_STATE_PAUSED || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_STATE_DATABASE_NOT_AVAILABLE || smscProcessingExceptionInternalType == SmscProcessingException.INTERNAL_ERROR_STATE_OVERLOADED)
CdrDetailedGenerator.generateDetailedCdr(mcDeliveryReceipt, shortMessageText, tlvSet, null, timestampB, null, null, esme.getName(), eventType, errorCode, messageType, statusCode, -1, esme.getRemoteAddressAndPort(), null, event.getSequenceNumber(), smscPropertiesManagement.getGenerateReceiptCdr(), smscPropertiesManagement.getGenerateDetailedCdr());
}
use of org.restcomm.smpp.parameter.TlvSet in project smscgateway by RestComm.
the class NN_DBOper method createSms.
protected Sms createSms(final Row row, SmsSet smsSet) throws PersistenceException {
if (row == null)
return null;
Sms sms = new Sms();
sms.setDbId(row.getUUID(Schema.COLUMN_ID));
String srcAddr = null;
int srcAddrTon = -1;
int srcAddrNpi = -1;
srcAddr = row.getString(Schema.COLUMN_ADDR_SRC_DIGITS);
srcAddrTon = row.getInt(Schema.COLUMN_ADDR_SRC_TON);
srcAddrNpi = row.getInt(Schema.COLUMN_ADDR_SRC_NPI);
sms.setMessageId(row.getLong(Schema.COLUMN_MESSAGE_ID));
sms.setMoMessageRef(row.getInt(Schema.COLUMN_MO_MESSAGE_REF));
sms.setOrigEsmeName(row.getString(Schema.COLUMN_ORIG_ESME_NAME));
sms.setOrigSystemId(row.getString(Schema.COLUMN_ORIG_SYSTEM_ID));
sms.setSubmitDate(DBOperations.getRowDate(row, Schema.COLUMN_SUBMIT_DATE));
sms.setSourceAddr(row.getString(Schema.COLUMN_ADDR_SRC_DIGITS));
sms.setSourceAddrTon(row.getInt(Schema.COLUMN_ADDR_SRC_TON));
sms.setSourceAddrNpi(row.getInt(Schema.COLUMN_ADDR_SRC_NPI));
sms.setServiceType(row.getString(Schema.COLUMN_SERVICE_TYPE));
sms.setEsmClass(row.getInt(Schema.COLUMN_ESM_CLASS));
sms.setProtocolId(row.getInt(Schema.COLUMN_PROTOCOL_ID));
sms.setPriority(row.getInt(Schema.COLUMN_PRIORITY));
sms.setRegisteredDelivery(row.getInt(Schema.COLUMN_REGISTERED_DELIVERY));
sms.setReplaceIfPresent(row.getInt(Schema.COLUMN_REPLACE));
sms.setDataCoding(row.getInt(Schema.COLUMN_DATA_CODING));
sms.setDefaultMsgId(row.getInt(Schema.COLUMN_DEFAULT_MSG_ID));
ByteBuffer bb = row.getBytes(Schema.COLUMN_MESSAGE);
byte[] buf = new byte[bb.limit() - bb.position()];
bb.get(buf);
sms.setShortMessage(buf);
sms.setScheduleDeliveryTime(DBOperations.getRowDate(row, Schema.COLUMN_SCHEDULE_DELIVERY_TIME));
sms.setValidityPeriod(DBOperations.getRowDate(row, Schema.COLUMN_VALIDITY_PERIOD));
sms.setDeliveryCount(row.getInt(Schema.COLUMN_DELIVERY_COUNT));
String s = row.getString(Schema.COLUMN_OPTIONAL_PARAMETERS);
if (s != null) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes());
XMLObjectReader reader = XMLObjectReader.newInstance(bais);
TlvSet copy = reader.read(TLV_SET, TlvSet.class);
sms.getTlvSet().clearAllOptionalParameter();
sms.getTlvSet().addAllOptionalParameter(copy.getOptionalParameters());
} catch (XMLStreamException e) {
String msg = "XMLStreamException when deserializing optional parameters for '" + sms.getDbId() + "'!";
throw new PersistenceException(msg, e);
}
}
if (smsSet == null) {
smsSet = new SmsSet();
String destAddr = null;
int destAddrTon = -1;
int destAddrNpi = -1;
destAddr = row.getString(Schema.COLUMN_ADDR_DST_DIGITS);
destAddrTon = row.getInt(Schema.COLUMN_ADDR_DST_TON);
destAddrNpi = row.getInt(Schema.COLUMN_ADDR_DST_NPI);
if (destAddr == null || destAddrTon == -1 || destAddrNpi == -1) {
throw new PersistenceException("destAddr or destAddrTon or destAddrNpi is absent for ID='" + sms.getDbId() + "'");
}
smsSet.setDestAddr(destAddr);
smsSet.setDestAddrTon(destAddrTon);
smsSet.setDestAddrNpi(destAddrNpi);
smsSet.updateDueDelay(row.getInt(Schema.COLUMN_DUE_DELAY));
}
smsSet.addSms(sms);
return sms;
}
Aggregations