Search in sources :

Example 1 with SmsDeliveryReportData

use of org.mobicents.smsc.library.SmsDeliveryReportData in project smscgateway by RestComm.

the class MtTest3 method ReportTest.

@Test(groups = { "Mt" })
public void ReportTest() throws Exception {
    MtSbbProxy3 proxy = new MtSbbProxy3();
    Date submitDate = new Date(2015, 1, 2, 12, 30);
    Date deliveryDate = new Date(2015, 1, 2, 12, 40);
    Sms sms = new Sms();
    sms.setSourceAddr("111199990000");
    sms.setSourceAddrNpi(1);
    sms.setSourceAddrTon(1);
    sms.setShortMessageText("Hello 111");
    sms.setSubmitDate(submitDate);
    sms.setMoMessageRef(34);
    SmsSet smsSet = new SmsSet();
    smsSet.setDestAddr("888899990000");
    smsSet.setDestAddrNpi(1);
    smsSet.setDestAddrTon(1);
    smsSet.setNetworkId(0);
    smsSet.addSms(sms);
    SmsDeliveryReportData smsDeliveryReportData = new SmsDeliveryReportData();
    smsDeliveryReportData.setDeliveryDate(deliveryDate);
    smsDeliveryReportData.setStatusReportQualifier(StatusReportQualifier.SmsSubmitResult);
    smsDeliveryReportData.setStatusVal(64);
    SmsSignalInfo smsSignalInfo = proxy.createSignalInfoStatusReport(sms, true, smsDeliveryReportData);
    String s1 = smsSignalInfo.toString();
    assertNotNull(smsSignalInfo);
    SmsStatusReportTpdu si = (SmsStatusReportTpdu) smsSignalInfo.decodeTpdu(false);
    assertEquals(si.getDischargeTime().getMinute(), 40);
    assertEquals(si.getServiceCentreTimeStamp().getMinute(), 30);
    assertFalse(si.getForwardedOrSpawned());
    assertEquals(si.getMessageReference(), 34);
    assertTrue(si.getMoreMessagesToSend());
    // assertNull(si.getParameterIndicator());
    assertEquals(si.getProtocolIdentifier().getCode(), 0);
    assertEquals(si.getRecipientAddress().getAddressValue(), "888899990000");
    assertEquals(si.getRecipientAddress().getNumberingPlanIdentification(), NumberingPlanIdentification.ISDNTelephoneNumberingPlan);
    assertEquals(si.getRecipientAddress().getTypeOfNumber(), TypeOfNumber.InternationalNumber);
    assertEquals(si.getStatus().getCode(), Status.REMOTE_PROCEDURE_ERROR);
    assertEquals(si.getStatusReportQualifier(), StatusReportQualifier.SmsSubmitResult);
}
Also used : SmsSignalInfo(org.mobicents.protocols.ss7.map.api.service.sms.SmsSignalInfo) Sms(org.mobicents.smsc.library.Sms) SmsStatusReportTpdu(org.mobicents.protocols.ss7.map.api.smstpdu.SmsStatusReportTpdu) SmsDeliveryReportData(org.mobicents.smsc.library.SmsDeliveryReportData) ISDNAddressString(org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString) Date(java.util.Date) SmsSet(org.mobicents.smsc.library.SmsSet) Test(org.testng.annotations.Test)

Example 2 with SmsDeliveryReportData

use of org.mobicents.smsc.library.SmsDeliveryReportData in project smscgateway by RestComm.

the class MtSbb method sendMtSms.

private void sendMtSms(MAPApplicationContext mapApplicationContext, MessageProcessingState messageProcessingState, MAPDialogSms mapDialogSms, int networkId) throws SmscProcessingException {
    SmsSet smsSet = getSmsSet();
    if (smsSet == null) {
        throw new SmscProcessingException("CMP smsSet is missed", -1, -1, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null);
    }
    Sms sms = this.getMessageInSendingPool(0);
    if (sms == null) {
        throw new SmscProcessingException("sms is missed in CMP", -1, -1, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null);
    }
    boolean moreMessagesToSend = false;
    try {
        if (this.getTotalUnsentMessageCount() > 1) {
            moreMessagesToSend = true;
        }
    } catch (Throwable e) {
    }
    try {
        boolean newDialog = false;
        if (mapDialogSms == null) {
            newDialog = true;
            String mtLocalSccpGt = sms.getMtLocalSccpGt();
            SccpAddress originSccpAddress;
            if (mtLocalSccpGt != null) {
                originSccpAddress = this.getServiceCenterSccpAddress(mtLocalSccpGt, networkId);
            } else {
                originSccpAddress = this.getServiceCenterSccpAddress(networkId);
            }
            mapDialogSms = this.mapProvider.getMAPServiceSms().createNewDialog(mapApplicationContext, originSccpAddress, null, this.getNetworkNode(), null);
            mapDialogSms.setNetworkId(networkId);
            ActivityContextInterface mtFOSmsDialogACI = this.mapAcif.getActivityContextInterface(mapDialogSms);
            mtFOSmsDialogACI.attach(this.sbbContext.getSbbLocalObject());
        }
        // setting TON / NPI to unknown for unsupported source TON / NPI
        int sourceAddrTon = sms.getSourceAddrTon();
        if (sourceAddrTon < 0 || sourceAddrTon > 6)
            sourceAddrTon = 0;
        int sourceAddrNpi = sms.getSourceAddrNpi();
        if (sourceAddrTon == SmppConstants.TON_ALPHANUMERIC) {
            sourceAddrNpi = SmppConstants.NPI_UNKNOWN;
        } else {
            if (sourceAddrNpi >= 0 && sourceAddrNpi <= 1 || sourceAddrNpi >= 3 && sourceAddrNpi <= 9 || sourceAddrNpi >= 10 && sourceAddrNpi <= 1 || sourceAddrNpi == 18) {
            } else {
                sourceAddrNpi = SmppConstants.NPI_UNKNOWN;
            }
        }
        SM_RP_DA sm_RP_DA = this.getSmRpDa();
        SM_RP_OA sm_RP_OA = this.getSmRpOa();
        SmsSignalInfo smsSignalInfo;
        if (messageProcessingState == MessageProcessingState.firstMessageSending) {
            int dcs = sms.getDataCoding();
            Tlv dest_addr_subunit = sms.getTlvSet().getOptionalParameter(SmppConstants.TAG_DEST_ADDR_SUBUNIT);
            if (dest_addr_subunit != null) {
                try {
                    int mclass = dest_addr_subunit.getValueAsByte();
                    if (mclass >= 1 && mclass <= 4) {
                        dcs |= (0x10 + (mclass - 1));
                    }
                } catch (TlvConvertException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            DataCodingScheme dataCodingScheme = this.mapSmsTpduParameterFactory.createDataCodingScheme(dcs);
            Tlv sarMsgRefNum = sms.getTlvSet().getOptionalParameter(SmppConstants.TAG_SAR_MSG_REF_NUM);
            Tlv sarTotalSegments = sms.getTlvSet().getOptionalParameter(SmppConstants.TAG_SAR_TOTAL_SEGMENTS);
            Tlv sarSegmentSeqnum = sms.getTlvSet().getOptionalParameter(SmppConstants.TAG_SAR_SEGMENT_SEQNUM);
            SmsSignalInfo[] segments;
            SmsDeliveryReportData smsDeliveryReportData = SmsDeliveryReportData.decodeFromString(sms.getShortMessageText());
            if (smsDeliveryReportData != null) {
                // this is SMS-STATUS-REPORT
                segments = new SmsSignalInfo[1];
                segments[0] = this.createSignalInfoStatusReport(sms, moreMessagesToSend, smsDeliveryReportData);
            } else if ((sms.getEsmClass() & SmppConstants.ESM_CLASS_UDHI_MASK) != 0) {
                // message already contains UDH - we can not slice it
                segments = new SmsSignalInfo[1];
                segments[0] = this.createSignalInfo(sms, sms.getShortMessageText(), sms.getShortMessageBin(), moreMessagesToSend, 0, 1, 1, dataCodingScheme, 0, 0, sourceAddrTon, sourceAddrNpi);
            } else if (sarMsgRefNum != null && sarTotalSegments != null && sarSegmentSeqnum != null) {
                // we have tlv's that define message count/number/reference
                int messageSegmentCount = sarTotalSegments.getValueAsUnsignedByte();
                int messageSegmentNumber = sarSegmentSeqnum.getValueAsUnsignedByte();
                int messageReferenceNumber = sarMsgRefNum.getValueAsUnsignedShort();
                segments = new SmsSignalInfo[1];
                segments[0] = this.createSignalInfo(sms, sms.getShortMessageText(), null, moreMessagesToSend, messageReferenceNumber, messageSegmentCount, messageSegmentNumber, dataCodingScheme, sms.getNationalLanguageLockingShift(), sms.getNationalLanguageSingleShift(), sourceAddrTon, sourceAddrNpi);
            } else {
                // possible a big message and segmentation
                String[] segmentsByte;
                segmentsByte = MessageUtil.sliceMessage(sms.getShortMessageText(), dataCodingScheme, sms.getNationalLanguageLockingShift(), sms.getNationalLanguageSingleShift());
                segments = new SmsSignalInfo[segmentsByte.length];
                // TODO messageReferenceNumber should be generated
                // int messageReferenceNumber = (int) (this.getCurrentMsgNumValue() + 1);
                int messageReferenceNumber = (int) (this.getCurrentMsgNumValue());
                for (int i1 = 0; i1 < segmentsByte.length; i1++) {
                    segments[i1] = this.createSignalInfo(sms, segmentsByte[i1], null, (i1 < segmentsByte.length - 1 ? true : moreMessagesToSend), messageReferenceNumber, segmentsByte.length, i1 + 1, dataCodingScheme, sms.getNationalLanguageLockingShift(), sms.getNationalLanguageSingleShift(), sourceAddrTon, sourceAddrNpi);
                }
            }
            this.setSegments(segments);
            smsSignalInfo = segments[0];
            this.setMessageSegmentNumber(0);
            if (segments.length > 1)
                moreMessagesToSend = true;
        } else {
            int messageSegmentNumber = this.getMessageSegmentNumber();
            SmsSignalInfo[] segments = this.getSegments();
            smsSignalInfo = segments[messageSegmentNumber];
            if (messageSegmentNumber < segments.length - 1)
                moreMessagesToSend = true;
        }
        long invokeId = 0;
        switch(mapDialogSms.getApplicationContext().getApplicationContextVersion()) {
            case version3:
                invokeId = mapDialogSms.addMtForwardShortMessageRequest(sm_RP_DA, sm_RP_OA, smsSignalInfo, moreMessagesToSend, null);
                if (this.logger.isInfoEnabled()) {
                    this.logger.info("\nSending: MtForwardShortMessageRequest: sm_RP_DA=" + sm_RP_DA + ", sm_RP_OA=" + sm_RP_OA + ", si=" + smsSignalInfo + ", moreMessagesToSend=" + moreMessagesToSend);
                }
                break;
            case version2:
            case version1:
                invokeId = mapDialogSms.addForwardShortMessageRequest(sm_RP_DA, sm_RP_OA, smsSignalInfo, moreMessagesToSend);
                if (this.logger.isInfoEnabled()) {
                    this.logger.info("\nSending: ForwardShortMessageRequest: sm_RP_DA=" + sm_RP_DA + ", sm_RP_OA=" + sm_RP_OA + ", si=" + smsSignalInfo + ", moreMessagesToSend=" + moreMessagesToSend);
                }
                break;
            default:
                break;
        }
        int messageUserDataLengthOnSend = mapDialogSms.getMessageUserDataLengthOnSend();
        int maxUserDataLength = mapDialogSms.getMaxUserDataLength();
        if (mapDialogSms.getApplicationContext().getApplicationContextVersion() != MAPApplicationContextVersion.version1 && newDialog && messageUserDataLengthOnSend >= maxUserDataLength - SmscPropertiesManagement.getInstance().getMaxMessageLengthReducer()) {
            mapDialogSms.cancelInvocation(invokeId);
            this.setTcEmptySent(1);
        } else {
            this.setTcEmptySent(0);
        }
        mapDialogSms.send();
        sms.putMsgPartDeliveryTime(getMessageSegmentNumber(), System.currentTimeMillis());
    } catch (MAPException e) {
        if (mapDialogSms != null)
            mapDialogSms.release();
        throw new SmscProcessingException("MAPException when sending MtForwardSM. \nSms=" + sms, -1, -1, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null, e);
    } catch (TlvConvertException e) {
        if (mapDialogSms != null)
            mapDialogSms.release();
        throw new SmscProcessingException("TlvConvertException when sending MtForwardSM", -1, -1, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null, e);
    }
}
Also used : SccpAddress(org.mobicents.protocols.ss7.sccp.parameter.SccpAddress) TlvConvertException(com.cloudhopper.smpp.tlv.TlvConvertException) ActivityContextInterface(javax.slee.ActivityContextInterface) MAPException(org.mobicents.protocols.ss7.map.api.MAPException) SmscProcessingException(org.mobicents.smsc.library.SmscProcessingException) SM_RP_OA(org.mobicents.protocols.ss7.map.api.service.sms.SM_RP_OA) ISDNAddressString(org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString) AddressString(org.mobicents.protocols.ss7.map.api.primitives.AddressString) SmsDeliveryReportData(org.mobicents.smsc.library.SmsDeliveryReportData) SmsSignalInfo(org.mobicents.protocols.ss7.map.api.service.sms.SmsSignalInfo) MAPDialogSms(org.mobicents.protocols.ss7.map.api.service.sms.MAPDialogSms) Sms(org.mobicents.smsc.library.Sms) MAPErrorMessageSubscriberBusyForMtSms(org.mobicents.protocols.ss7.map.api.errors.MAPErrorMessageSubscriberBusyForMtSms) SmsSet(org.mobicents.smsc.library.SmsSet) SM_RP_DA(org.mobicents.protocols.ss7.map.api.service.sms.SM_RP_DA) Tlv(com.cloudhopper.smpp.tlv.Tlv)

Aggregations

ISDNAddressString (org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString)2 SmsSignalInfo (org.mobicents.protocols.ss7.map.api.service.sms.SmsSignalInfo)2 Sms (org.mobicents.smsc.library.Sms)2 SmsDeliveryReportData (org.mobicents.smsc.library.SmsDeliveryReportData)2 SmsSet (org.mobicents.smsc.library.SmsSet)2 Tlv (com.cloudhopper.smpp.tlv.Tlv)1 TlvConvertException (com.cloudhopper.smpp.tlv.TlvConvertException)1 Date (java.util.Date)1 ActivityContextInterface (javax.slee.ActivityContextInterface)1 MAPException (org.mobicents.protocols.ss7.map.api.MAPException)1 MAPErrorMessageSubscriberBusyForMtSms (org.mobicents.protocols.ss7.map.api.errors.MAPErrorMessageSubscriberBusyForMtSms)1 AddressString (org.mobicents.protocols.ss7.map.api.primitives.AddressString)1 MAPDialogSms (org.mobicents.protocols.ss7.map.api.service.sms.MAPDialogSms)1 SM_RP_DA (org.mobicents.protocols.ss7.map.api.service.sms.SM_RP_DA)1 SM_RP_OA (org.mobicents.protocols.ss7.map.api.service.sms.SM_RP_OA)1 SmsStatusReportTpdu (org.mobicents.protocols.ss7.map.api.smstpdu.SmsStatusReportTpdu)1 SccpAddress (org.mobicents.protocols.ss7.sccp.parameter.SccpAddress)1 SmscProcessingException (org.mobicents.smsc.library.SmscProcessingException)1 Test (org.testng.annotations.Test)1