Search in sources :

Example 11 with MAPException

use of org.restcomm.protocols.ss7.map.api.MAPException in project smscgateway by RestComm.

the class MoSbb method processMtMessage.

// *********
// incoming message processing
private Sms processMtMessage(SM_RP_OA smRPOA, SM_RP_DA smRPDA, SmsSignalInfo smsSignalInfo, int networkId, String originatorSccpAddress, boolean isMoOperation, MAPDialogSms dialog, SmsMessage evt, long invokeId) throws SmscProcessingException {
    Sms sms = null;
    smsSignalInfo.setGsm8Charset(isoCharset);
    IMSI destinationImsi = smRPDA.getIMSI();
    if (destinationImsi == null) {
        throw new SmscProcessingException("Home routing: Mt DA IMSI is absent", SmppConstants.STATUS_SYSERR, MAPErrorCode.unexpectedDataValue, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null);
    }
    // obtaining correlationId
    String correlationID = destinationImsi.getData();
    CorrelationIdValue civ;
    try {
        civ = SmsSetCache.getInstance().getCorrelationIdCacheElement(correlationID);
    } catch (Exception e) {
        throw new SmscProcessingException("Home routing: Error when getting of CorrelationIdCacheElement", SmppConstants.STATUS_SYSERR, MAPErrorCode.systemFailure, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null, e);
    }
    if (civ == null) {
        smscStatAggregator.updateHomeRoutingCorrIdFail();
        throw new SmscProcessingException("Home routing: No data is found for: CorrelationId=" + correlationID, SmppConstants.STATUS_SYSERR, MAPErrorCode.systemFailure, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null);
    }
    SmsTpdu smsTpdu = null;
    try {
        smsTpdu = smsSignalInfo.decodeTpdu(false);
        logger.fine("Home routing: The SmsTpduType is " + smsTpdu.getSmsTpduType());
        switch(smsTpdu.getSmsTpduType()) {
            case SMS_DELIVER:
                SmsDeliverTpdu smsDeliverTpdu = (SmsDeliverTpdu) smsTpdu;
                if (this.logger.isInfoEnabled()) {
                    this.logger.info("Home routing: Received SMS_DELIVER = " + smsDeliverTpdu);
                }
                // AddressField af = smsSubmitTpdu.getDestinationAddress();
                sms = this.handleSmsDeliverTpdu(smsDeliverTpdu, civ, networkId, originatorSccpAddress, isMoOperation, dialog, evt, invokeId);
                break;
            default:
                this.logger.severe("Home routing: Received non SMS_DELIVER = " + smsTpdu);
                break;
        }
    } catch (MAPException e1) {
        logger.severe("Home routing: Error while decoding SmsSignalInfo ", e1);
    }
    return sms;
}
Also used : SmsDeliverTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsDeliverTpdu) MAPException(org.restcomm.protocols.ss7.map.api.MAPException) SmsTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsTpdu) MAPDialogSms(org.restcomm.protocols.ss7.map.api.service.sms.MAPDialogSms) IMSI(org.restcomm.protocols.ss7.map.api.primitives.IMSI) ISDNAddressString(org.restcomm.protocols.ss7.map.api.primitives.ISDNAddressString) AddressString(org.restcomm.protocols.ss7.map.api.primitives.AddressString) MAPException(org.restcomm.protocols.ss7.map.api.MAPException)

Example 12 with MAPException

use of org.restcomm.protocols.ss7.map.api.MAPException 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 13 with MAPException

use of org.restcomm.protocols.ss7.map.api.MAPException in project smscgateway by RestComm.

the class HrSriServerSbb method doSendResponse.

private void doSendResponse(CorrelationIdValue correlationIdValue, MAPDialogSms dlg, String imsiValue, LocationInfoWithLMSI li) throws MAPException {
    long invokeId = this.getInvokeId();
    IMSI imsi = this.mapParameterFactory.createIMSI(imsiValue);
    MWStatus mwStatus = correlationIdValue.getMwStatus();
    Boolean mwdSet = null;
    if (dlg.getApplicationContext().getApplicationContextVersion() == MAPApplicationContextVersion.version1) {
        if (mwStatus != null) {
            if (mwStatus.getMnrfSet())
                mwdSet = true;
            mwStatus = null;
        }
    }
    dlg.addSendRoutingInfoForSMResponse(invokeId, imsi, li, null, mwdSet, null);
    InformServiceCentreRequest isc = correlationIdValue.getInformServiceCentreRequest();
    if (mwStatus != null && isc != null) {
        dlg.addInformServiceCentreRequest(isc.getStoredMSISDN(), isc.getMwStatus(), null, isc.getAbsentSubscriberDiagnosticSM(), isc.getAdditionalAbsentSubscriberDiagnosticSM());
    }
    dlg.close(false);
}
Also used : MWStatus(org.restcomm.protocols.ss7.map.api.service.sms.MWStatus) InformServiceCentreRequest(org.restcomm.protocols.ss7.map.api.service.sms.InformServiceCentreRequest) IMSI(org.restcomm.protocols.ss7.map.api.primitives.IMSI)

Example 14 with MAPException

use of org.restcomm.protocols.ss7.map.api.MAPException in project smscgateway by RestComm.

the class MoSbb method processMoMessage.

private Sms processMoMessage(SM_RP_OA smRPOA, SM_RP_DA smRPDA, SmsSignalInfo smsSignalInfo, int networkId, String originatorSccpAddress, boolean isMoOperation, MAPDialogSms dialog, SmsMessage evt, long invokeId) throws SmscProcessingException {
    // TODO: check if smRPDA contains local SMSC address and reject messages
    // if not equal ???
    Sms sms = null;
    smsSignalInfo.setGsm8Charset(isoCharset);
    ISDNAddressString callingPartyAddress = smRPOA.getMsisdn();
    if (callingPartyAddress == null) {
        throw new SmscProcessingException("MO callingPartyAddress is absent", SmppConstants.STATUS_SYSERR, MAPErrorCode.unexpectedDataValue, SmscProcessingException.HTTP_ERROR_CODE_NOT_SET, null);
    }
    SmsTpdu smsTpdu = null;
    String origMoServiceCentreAddressDA = null;
    if (smRPDA.getServiceCentreAddressDA() != null) {
        origMoServiceCentreAddressDA = smRPDA.getServiceCentreAddressDA().getAddress();
    }
    try {
        smsTpdu = smsSignalInfo.decodeTpdu(true);
        switch(smsTpdu.getSmsTpduType()) {
            case SMS_SUBMIT:
                SmsSubmitTpdu smsSubmitTpdu = (SmsSubmitTpdu) smsTpdu;
                if (this.logger.isInfoEnabled()) {
                    this.logger.info("Received SMS_SUBMIT = " + smsSubmitTpdu);
                }
                sms = this.handleSmsSubmitTpdu(smsSubmitTpdu, callingPartyAddress, networkId, originatorSccpAddress, isMoOperation, dialog, evt, invokeId, origMoServiceCentreAddressDA);
                break;
            case SMS_DELIVER_REPORT:
                SmsDeliverReportTpdu smsDeliverReportTpdu = (SmsDeliverReportTpdu) smsTpdu;
                if (this.logger.isInfoEnabled()) {
                    this.logger.info("Received SMS_DELIVER_REPORT = " + smsDeliverReportTpdu);
                    smscStatAggregator.updateMsgInFailedAll();
                }
                // callingPartyAddress);
                break;
            case SMS_COMMAND:
                SmsCommandTpdu smsCommandTpdu = (SmsCommandTpdu) smsTpdu;
                if (this.logger.isInfoEnabled()) {
                    this.logger.info("Received SMS_COMMAND = " + smsCommandTpdu);
                    smscStatAggregator.updateMsgInFailedAll();
                }
                // callingPartyAddress);
                break;
            // break;
            default:
                this.logger.severe("Received non SMS_SUBMIT or SMS_DELIVER_REPORT or SMS_COMMAND or SMS_DELIVER = " + smsTpdu);
                smscStatAggregator.updateMsgInFailedAll();
                break;
        }
    } catch (MAPException e1) {
        logger.severe("Error while decoding SmsSignalInfo ", e1);
    }
    return sms;
}
Also used : MAPException(org.restcomm.protocols.ss7.map.api.MAPException) SmsTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsTpdu) MAPDialogSms(org.restcomm.protocols.ss7.map.api.service.sms.MAPDialogSms) ISDNAddressString(org.restcomm.protocols.ss7.map.api.primitives.ISDNAddressString) ISDNAddressString(org.restcomm.protocols.ss7.map.api.primitives.ISDNAddressString) AddressString(org.restcomm.protocols.ss7.map.api.primitives.AddressString) SmsSubmitTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsSubmitTpdu) SmsDeliverReportTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsDeliverReportTpdu) SmsCommandTpdu(org.restcomm.protocols.ss7.map.api.smstpdu.SmsCommandTpdu)

Example 15 with MAPException

use of org.restcomm.protocols.ss7.map.api.MAPException 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)

Aggregations

MAPException (org.restcomm.protocols.ss7.map.api.MAPException)22 MAPDialogSms (org.restcomm.protocols.ss7.map.api.service.sms.MAPDialogSms)21 ISDNAddressString (org.restcomm.protocols.ss7.map.api.primitives.ISDNAddressString)16 AddressString (org.restcomm.protocols.ss7.map.api.primitives.AddressString)14 SmsSignalInfo (org.restcomm.protocols.ss7.map.api.service.sms.SmsSignalInfo)6 Date (java.util.Date)4 ActivityContextInterface (javax.slee.ActivityContextInterface)4 Sms (org.mobicents.smsc.library.Sms)4 SmsSet (org.mobicents.smsc.library.SmsSet)4 SccpAddress (org.restcomm.protocols.ss7.sccp.parameter.SccpAddress)4 MAPErrorMessage (org.restcomm.protocols.ss7.map.api.errors.MAPErrorMessage)3 MAPErrorMessageSubscriberBusyForMtSms (org.restcomm.protocols.ss7.map.api.errors.MAPErrorMessageSubscriberBusyForMtSms)3 IMSI (org.restcomm.protocols.ss7.map.api.primitives.IMSI)3 SM_RP_DA (org.restcomm.protocols.ss7.map.api.service.sms.SM_RP_DA)3 SmsTpdu (org.restcomm.protocols.ss7.map.api.smstpdu.SmsTpdu)3 UserData (org.restcomm.protocols.ss7.map.api.smstpdu.UserData)3 Timestamp (java.sql.Timestamp)2 ArrayList (java.util.ArrayList)2 SmscProcessingException (org.mobicents.smsc.library.SmscProcessingException)2 TargetAddress (org.mobicents.smsc.library.TargetAddress)2