Search in sources :

Example 1 with SMDeliveryOutcome

use of org.restcomm.protocols.ss7.map.api.service.sms.SMDeliveryOutcome in project smscgateway by RestComm.

the class RsdsSbb method setupReportSMDeliveryStatusRequest.

// *********
// Main service methods
public void setupReportSMDeliveryStatusRequest(ISDNAddressString msisdn, AddressString serviceCentreAddress, SMDeliveryOutcome smDeliveryOutcome, SccpAddress destAddress, MAPApplicationContext mapApplicationContext, String targetId, int networkId, String mtLocalSccpGt) {
    if (this.logger.isInfoEnabled()) {
        this.logger.info("Received setupReportSMDeliveryStatus request msisdn= " + msisdn + ", serviceCentreAddress=" + serviceCentreAddress + ", sMDeliveryOutcome=" + smDeliveryOutcome + ", mapApplicationContext=" + mapApplicationContext);
    }
    this.setTargetId(targetId);
    this.setSmDeliveryOutcome(smDeliveryOutcome);
    MAPDialogSms mapDialogSms;
    try {
        SccpAddress originSccpAddress;
        if (mtLocalSccpGt != null) {
            originSccpAddress = this.getServiceCenterSccpAddress(mtLocalSccpGt, networkId);
        } else {
            originSccpAddress = this.getServiceCenterSccpAddress(networkId);
        }
        mapDialogSms = this.mapProvider.getMAPServiceSms().createNewDialog(mapApplicationContext, originSccpAddress, null, destAddress, null);
        mapDialogSms.setNetworkId(networkId);
        ActivityContextInterface mtFOSmsDialogACI = this.mapAcif.getActivityContextInterface(mapDialogSms);
        mtFOSmsDialogACI.attach(this.sbbContext.getSbbLocalObject());
        mapDialogSms.addReportSMDeliveryStatusRequest(msisdn, serviceCentreAddress, smDeliveryOutcome, null, null, false, false, null, null);
        if (this.logger.isInfoEnabled())
            this.logger.info("Sending: ReportSMDeliveryStatusRequest: msisdn=" + msisdn + ", serviceCenterAddress=" + serviceCentreAddress + ", smDeliveryOutcome=" + smDeliveryOutcome);
        mapDialogSms.send();
    } catch (MAPException e) {
        this.logger.severe("MAPException when sending reportSMDeliveryStatusRequest: " + e.getMessage(), e);
    }
}
Also used : SccpAddress(org.restcomm.protocols.ss7.sccp.parameter.SccpAddress) MAPDialogSms(org.restcomm.protocols.ss7.map.api.service.sms.MAPDialogSms) ActivityContextInterface(javax.slee.ActivityContextInterface) MAPException(org.restcomm.protocols.ss7.map.api.MAPException)

Example 2 with SMDeliveryOutcome

use of org.restcomm.protocols.ss7.map.api.service.sms.SMDeliveryOutcome in project smscgateway by RestComm.

the class MtCommonSbb method setupReportSMDeliveryStatusRequest.

protected void setupReportSMDeliveryStatusRequest(String destinationAddress, int ton, int npi, SMDeliveryOutcome sMDeliveryOutcome, String targetId, int networkId, String mtLocalSccpGt, Integer mtRemoteSccpTt) {
    RsdsSbbLocalObject rsdsSbbLocalObject = this.getRsdsSbbObject();
    if (rsdsSbbLocalObject != null) {
        ActivityContextInterface schedulerActivityContextInterface = this.getSchedulerActivityContextInterface();
        schedulerActivityContextInterface.attach(rsdsSbbLocalObject);
        SendRsdsEvent event = new SendRsdsEvent();
        event.setMsisdn(this.getCalledPartyISDNAddressString(destinationAddress, ton, npi));
        event.setServiceCentreAddress(getServiceCenterAddressString(networkId));
        event.setSMDeliveryOutcome(sMDeliveryOutcome);
        SccpAddress destinationAddr = this.convertAddressFieldToSCCPAddress(destinationAddress, ton, npi, mtRemoteSccpTt);
        event.setDestAddress(destinationAddr);
        event.setMapApplicationContext(this.getSRIMAPApplicationContext(MAPApplicationContextVersion.getInstance(this.getSriMapVersion())));
        event.setTargetId(targetId);
        event.setNetworkId(networkId);
        event.setMtLocalSccpGt(mtLocalSccpGt);
        this.fireSendRsdsEvent(event, schedulerActivityContextInterface, null);
    }
}
Also used : SccpAddress(org.restcomm.protocols.ss7.sccp.parameter.SccpAddress) ActivityContextInterface(javax.slee.ActivityContextInterface) SendRsdsEvent(org.mobicents.smsc.slee.services.smpp.server.events.SendRsdsEvent)

Example 3 with SMDeliveryOutcome

use of org.restcomm.protocols.ss7.map.api.service.sms.SMDeliveryOutcome in project smscgateway by RestComm.

the class MtCommonSbb method onDeliveryError.

/**
 * Processing a case when an error in message sending process. This stops of message sending, reschedule or drop messages
 * and clear resources.
 *
 * @param smsSet
 * @param errorAction
 * @param smStatus
 * @param reason
 * @param removeSmsSet
 * @param errMessage
 * @param isImsiVlrReject
 * @param processingType
 */
protected void onDeliveryError(SmsSet smsSet, ErrorAction errorAction, ErrorCode smStatus, String reason, boolean removeSmsSet, MAPErrorMessage errMessage, boolean isImsiVlrReject, ProcessingType processingType) {
    try {
        smscStatAggregator.updateMsgOutFailedAll();
        // generating of a temporary failure CDR
        if (smscPropertiesManagement.getGenerateTempFailureCdr())
            this.generateTemporaryFailureCDR(CdrGenerator.CDR_TEMP_FAILED, reason);
        StringBuilder sb = new StringBuilder();
        sb.append("onDeliveryError: errorAction=");
        sb.append(errorAction);
        sb.append(", smStatus=");
        sb.append(smStatus);
        sb.append(", targetId=");
        sb.append(smsSet.getTargetId());
        sb.append(", smsSet=");
        sb.append(smsSet);
        sb.append(", reason=");
        sb.append(reason);
        if (this.logger.isInfoEnabled())
            this.logger.info(sb.toString());
        ArrayList<Sms> lstPermFailured = new ArrayList<Sms>();
        ArrayList<Sms> lstTempFailured = new ArrayList<Sms>();
        ArrayList<Sms> lstPermFailured2 = new ArrayList<Sms>();
        ArrayList<Sms> lstTempFailured2 = new ArrayList<Sms>();
        ArrayList<Sms> lstRerouted = new ArrayList<Sms>();
        ArrayList<Integer> lstNewNetworkId = new ArrayList<Integer>();
        // generate text for Delivery receipts
        // false
        String dlrText = null;
        if (errMessage != null) {
            MAPErrorMessageSMDeliveryFailure smDeliveryFailure = errMessage.getEmSMDeliveryFailure();
            if (smDeliveryFailure != null) {
                SmsDeliverReportTpdu tpdu = null;
                try {
                    tpdu = errMessage.getEmSMDeliveryFailure().getSmsDeliverReportTpdu();
                } catch (MAPException e) {
                // we ignore Exception here
                }
                if (tpdu != null) {
                    UserData userData = tpdu.getUserData();
                    if (userData != null) {
                        byte[] data = userData.getEncodedData();
                        if (data != null) {
                            String text = DatatypeConverter.printHexBinary(data);
                            String smDlrWithTpdu = SmscPropertiesManagement.getInstance().getSmDeliveryFailureDlrWithTpdu();
                            if (smDlrWithTpdu.equals("short")) {
                                if (text.length() > 20)
                                    dlrText = text.substring(0, 20);
                                else
                                    dlrText = text;
                            } else if (smDlrWithTpdu.equals("full")) {
                                dlrText = text;
                            }
                        }
                    }
                }
            }
        }
        TargetAddress lock = persistence.obtainSynchroObject(new TargetAddress(smsSet));
        synchronized (lock) {
            try {
                Date curDate = new Date();
                smsSet.setStatus(smStatus);
                // calculating of newDueDelay and NewDueTime
                int newDueDelay = calculateNewDueDelay(smsSet, (errorAction == ErrorAction.subscriberBusy));
                Date newDueTime = calculateNewDueTime(smsSet, newDueDelay);
                // creating of failure lists
                this.createFailureLists(lstPermFailured, lstTempFailured, errorAction, newDueTime);
                // mproc rules applying for delivery phase
                this.applyMprocRulesOnFailure(lstPermFailured, lstTempFailured, lstPermFailured2, lstTempFailured2, lstRerouted, lstNewNetworkId, processingType);
                // sending of a failure response for transactional mode
                this.sendTransactionalResponseFailure(lstPermFailured2, lstTempFailured2, errorAction, errMessage);
                // Processing messages that were temp or permanent failed or rerouted
                this.postProcessPermFailures(lstPermFailured2, null, null);
                this.postProcessTempFailures(smsSet, lstTempFailured2, newDueDelay, newDueTime, true);
                this.postProcessRerouted(lstRerouted, lstNewNetworkId);
                // generating CDRs for permanent failure messages
                this.generateCDRs(lstPermFailured2, (isImsiVlrReject ? CdrGenerator.CDR_FAILED_IMSI : CdrGenerator.CDR_FAILED), reason);
                // sending of intermediate delivery receipts
                this.generateIntermediateReceipts(smsSet, lstTempFailured2);
                // sending of failure delivery receipts
                this.generateFailureReceipts(smsSet, lstPermFailured2, dlrText);
                // sending of ReportSMDeliveryStatusRequest if needed
                SMDeliveryOutcome smDeliveryOutcome = null;
                switch(errorAction) {
                    case memoryCapacityExceededFlag:
                        smDeliveryOutcome = SMDeliveryOutcome.memoryCapacityExceeded;
                        break;
                    case mobileNotReachableFlag:
                        smDeliveryOutcome = SMDeliveryOutcome.absentSubscriber;
                        break;
                    case notReachableForGprs:
                        smDeliveryOutcome = SMDeliveryOutcome.absentSubscriber;
                        break;
                }
                if (smDeliveryOutcome != null && lstTempFailured2.size() > 0) {
                    Sms sms0 = smsSet.getSms(0);
                    String mtLocalSccpGt = null;
                    Integer mtRemoteSccpTt = null;
                    if (sms0 != null) {
                        mtLocalSccpGt = sms0.getMtLocalSccpGt();
                        mtRemoteSccpTt = sms0.getMtRemoteSccpTt();
                    }
                    this.setupReportSMDeliveryStatusRequest(smsSet.getDestAddr(), smsSet.getDestAddrTon(), smsSet.getDestAddrNpi(), smDeliveryOutcome, smsSet.getTargetId(), smsSet.getNetworkId(), mtLocalSccpGt, mtRemoteSccpTt);
                }
                this.markDeliveringIsEnded(removeSmsSet);
            } finally {
                persistence.releaseSynchroObject(lock);
            }
        }
    } catch (Throwable e) {
        logger.severe("Exception in MtCommonSbb.onDeliveryError(): " + e.getMessage(), e);
        markDeliveringIsEnded(true);
    }
}
Also used : UserData(org.restcomm.protocols.ss7.map.api.smstpdu.UserData) MAPException(org.restcomm.protocols.ss7.map.api.MAPException) ArrayList(java.util.ArrayList) MAPErrorMessageSMDeliveryFailure(org.restcomm.protocols.ss7.map.api.errors.MAPErrorMessageSMDeliveryFailure) TargetAddress(org.mobicents.smsc.library.TargetAddress) ISDNAddressString(org.restcomm.protocols.ss7.map.api.primitives.ISDNAddressString) AddressString(org.restcomm.protocols.ss7.map.api.primitives.AddressString) SMDeliveryOutcome(org.restcomm.protocols.ss7.map.api.service.sms.SMDeliveryOutcome) SmsDeliverReportTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsDeliverReportTpdu) Date(java.util.Date) Sms(org.mobicents.smsc.library.Sms)

Example 4 with SMDeliveryOutcome

use of org.restcomm.protocols.ss7.map.api.service.sms.SMDeliveryOutcome in project smscgateway by RestComm.

the class MAPDialogSmsProxy method addReportSMDeliveryStatusRequest.

@Override
public Long addReportSMDeliveryStatusRequest(ISDNAddressString msisdn, AddressString serviceCentreAddress, SMDeliveryOutcome sMDeliveryOutcome, Integer absentSubscriberDiagnosticSM, MAPExtensionContainer extensionContainer, boolean gprsSupportIndicator, boolean deliveryOutcomeIndicator, SMDeliveryOutcome additionalSMDeliveryOutcome, Integer additionalAbsentSubscriberDiagnosticSM) throws MAPException {
    ReportSMDeliveryStatusRequestImpl msg = new ReportSMDeliveryStatusRequestImpl(this.getApplicationContext().getApplicationContextVersion().getVersion(), msisdn, serviceCentreAddress, sMDeliveryOutcome, absentSubscriberDiagnosticSM, extensionContainer, gprsSupportIndicator, deliveryOutcomeIndicator, additionalSMDeliveryOutcome, additionalAbsentSubscriberDiagnosticSM);
    this.eventList.add(new MAPTestEvent(MAPTestEventType.componentAdded, msg));
    return 0L;
}
Also used : ReportSMDeliveryStatusRequestImpl(org.restcomm.protocols.ss7.map.service.sms.ReportSMDeliveryStatusRequestImpl)

Aggregations

ActivityContextInterface (javax.slee.ActivityContextInterface)2 MAPException (org.restcomm.protocols.ss7.map.api.MAPException)2 SccpAddress (org.restcomm.protocols.ss7.sccp.parameter.SccpAddress)2 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 Sms (org.mobicents.smsc.library.Sms)1 TargetAddress (org.mobicents.smsc.library.TargetAddress)1 SendRsdsEvent (org.mobicents.smsc.slee.services.smpp.server.events.SendRsdsEvent)1 MAPErrorMessageSMDeliveryFailure (org.restcomm.protocols.ss7.map.api.errors.MAPErrorMessageSMDeliveryFailure)1 AddressString (org.restcomm.protocols.ss7.map.api.primitives.AddressString)1 ISDNAddressString (org.restcomm.protocols.ss7.map.api.primitives.ISDNAddressString)1 MAPDialogSms (org.restcomm.protocols.ss7.map.api.service.sms.MAPDialogSms)1 SMDeliveryOutcome (org.restcomm.protocols.ss7.map.api.service.sms.SMDeliveryOutcome)1 SmsDeliverReportTpdu (org.restcomm.protocols.ss7.map.api.smstpdu.SmsDeliverReportTpdu)1 UserData (org.restcomm.protocols.ss7.map.api.smstpdu.UserData)1 ReportSMDeliveryStatusRequestImpl (org.restcomm.protocols.ss7.map.service.sms.ReportSMDeliveryStatusRequestImpl)1