Search in sources :

Example 1 with TlvSet

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);
}
Also used : Sms(org.mobicents.smsc.library.Sms) TlvSet(org.restcomm.smpp.parameter.TlvSet)

Example 2 with TlvSet

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));
}
Also used : Sms(org.mobicents.smsc.library.Sms) MProcMessage(org.mobicents.smsc.mproc.MProcMessage) TlvSet(org.restcomm.smpp.parameter.TlvSet) Tlv(com.cloudhopper.smpp.tlv.Tlv) Test(org.testng.annotations.Test)

Example 3 with TlvSet

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);
}
Also used : DeliveryReceiptData(org.mobicents.smsc.mproc.DeliveryReceiptData) TlvSet(org.restcomm.smpp.parameter.TlvSet) Date(java.util.Date) Tlv(com.cloudhopper.smpp.tlv.Tlv) Test(org.testng.annotations.Test)

Example 4 with TlvSet

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());
}
Also used : TlvSet(org.restcomm.smpp.parameter.TlvSet) Tlv(com.cloudhopper.smpp.tlv.Tlv)

Example 5 with TlvSet

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;
}
Also used : XMLStreamException(javolution.xml.stream.XMLStreamException) ByteArrayInputStream(java.io.ByteArrayInputStream) Sms(org.mobicents.smsc.library.Sms) PersistenceException(org.mobicents.smsc.cassandra.PersistenceException) XMLObjectReader(javolution.xml.XMLObjectReader) TlvSet(org.restcomm.smpp.parameter.TlvSet) ByteBuffer(java.nio.ByteBuffer) SmsSet(org.mobicents.smsc.library.SmsSet)

Aggregations

TlvSet (org.restcomm.smpp.parameter.TlvSet)10 Tlv (com.cloudhopper.smpp.tlv.Tlv)7 Sms (org.mobicents.smsc.library.Sms)4 XMLStreamException (javolution.xml.stream.XMLStreamException)3 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ByteBuffer (java.nio.ByteBuffer)2 XMLObjectReader (javolution.xml.XMLObjectReader)2 SmsSet (org.mobicents.smsc.library.SmsSet)2 DeliveryReceiptData (org.mobicents.smsc.mproc.DeliveryReceiptData)2 MProcMessage (org.mobicents.smsc.mproc.MProcMessage)2 Test (org.testng.annotations.Test)2 InvalidQueryException (com.datastax.driver.core.exceptions.InvalidQueryException)1 CharBuffer (java.nio.CharBuffer)1 Charset (java.nio.charset.Charset)1 Date (java.util.Date)1 UUID (java.util.UUID)1 Matcher (java.util.regex.Matcher)1 DataCodingScheme (org.mobicents.protocols.ss7.map.api.smstpdu.DataCodingScheme)1 DataCodingSchemeImpl (org.mobicents.protocols.ss7.map.smstpdu.DataCodingSchemeImpl)1 PersistenceException (org.mobicents.smsc.cassandra.PersistenceException)1