From 119f48cd8a90d2bddcc0dc99e6ea709abecbf747 Mon Sep 17 00:00:00 2001 From: Anatoly Satanovskiy Date: Tue, 4 Jul 2017 12:18:30 +0300 Subject: [PATCH] continued to work on issue #216 --- .../smpp/server/rx/RxSmppServerSbb.java | 2 - .../smpp/server/tx/TxSmppServerSbb.java | 9 ++--- .../services/submitsbb/SubmitCommonSbb.java | 40 ++++++++++++++----- .../smsc/library/CdrDetailedGenerator.java | 2 +- .../org/mobicents/smsc/library/EventType.java | 2 + 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/rx/RxSmppServerSbb.java b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/rx/RxSmppServerSbb.java index e380d38d1..ee908a251 100644 --- a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/rx/RxSmppServerSbb.java +++ b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/rx/RxSmppServerSbb.java @@ -109,8 +109,6 @@ public abstract class RxSmppServerSbb extends DeliveryCommonSbb implements Sbb { private static final String className = RxSmppServerSbb.class.getSimpleName(); private static final long ONE = 1L; - - private Date timeStampA; // TODO: default value==100 / 2 protected static int MAX_MESSAGES_PER_STEP = 100; diff --git a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java index 87907cbbb..c5fcd8994 100644 --- a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java +++ b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/smpp/server/tx/TxSmppServerSbb.java @@ -371,7 +371,7 @@ private void onSubmitSmLocal(final TxSmppServerSbbUsage anSbbUsage, final com.cl this.smppServerSessions.sendResponsePdu(esme, event, response); if (sms != null) { sms.setTimestampB(System.currentTimeMillis()); - generateFailureDetailedCdr(sms, EventType.IN_SMPP_REJECT_FORBIDDEN, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITSM, + generateFailureDetailedCdr(sms, EventType.IN_SMPP_ERROR, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITSM, SmppConstants.STATUS_SYSERR, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } } catch (Exception e) { @@ -529,7 +529,7 @@ private void onDataSmLocal(final TxSmppServerSbbUsage anSbbUsage, final com.clou this.smppServerSessions.sendResponsePdu(esme, event, response); if (sms != null) { sms.setTimestampB(System.currentTimeMillis()); - generateFailureDetailedCdr(sms, EventType.IN_SMPP_REJECT_FORBIDDEN, CdrDetailedGenerator.CDR_MSG_TYPE_DATASM, + generateFailureDetailedCdr(sms, EventType.IN_SMPP_ERROR, CdrDetailedGenerator.CDR_MSG_TYPE_DATASM, SmppConstants.STATUS_SYSERR, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } } catch (Exception e) { @@ -686,7 +686,7 @@ private void onSubmitMultiLocal(final TxSmppServerSbbUsage anSbbUsage, this.smppServerSessions.sendResponsePdu(esme, event, response); if (currSms != null) { currSms.setTimestampB(System.currentTimeMillis()); - generateFailureDetailedCdr(currSms, EventType.IN_SMPP_REJECT_FORBIDDEN, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, + generateFailureDetailedCdr(currSms, EventType.IN_SMPP_ERROR, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, SmppConstants.STATUS_SYSERR, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } anSbbUsage.incrementCounterErrorSubmitMultiSmResponding(ONE); @@ -847,7 +847,7 @@ private void onDeliverSmLocal(final TxSmppServerSbbUsage anSbbUsage, final com.c this.smppServerSessions.sendResponsePdu(esme, event, response); if (sms != null) { sms.setTimestampB(System.currentTimeMillis()); - generateFailureDetailedCdr(sms, EventType.IN_SMPP_REJECT_FORBIDDEN, CdrDetailedGenerator.CDR_MSG_TYPE_DELIVERSM, + generateFailureDetailedCdr(sms, EventType.IN_SMPP_ERROR, CdrDetailedGenerator.CDR_MSG_TYPE_DELIVERSM, SmppConstants.STATUS_SYSERR, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } } catch (Exception e) { @@ -1557,7 +1557,6 @@ private void processSms(Sms sms0, PersistenceRAInterface store, Esme esme, Submi } this.forwardMessage(sms0, withCharging, smscStatAggregator, messageType, seqNumber); - sms0.setTimestampC(System.currentTimeMillis()); // if (withCharging) { // ChargingSbbLocalObject chargingSbb = getChargingSbbObject(); diff --git a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/submitsbb/SubmitCommonSbb.java b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/submitsbb/SubmitCommonSbb.java index ea94fd300..0f799856c 100644 --- a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/submitsbb/SubmitCommonSbb.java +++ b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/submitsbb/SubmitCommonSbb.java @@ -261,9 +261,13 @@ protected void forwardMessage(Sms sms0, boolean withCharging, SmscStatAggregator throws SmscProcessingException { ChargingMedium chargingMedium = null; + EventType eventTypeSuccess = null; + EventType eventTypeFailure = null; switch (sms0.getOriginationType()) { case SMPP: chargingMedium = ChargingMedium.TxSmppOrig; + eventTypeSuccess = EventType.IN_SMPP_RECEIVED; + eventTypeFailure = EventType.IN_SMPP_REJECT_MPROC; break; case SS7_MO: case SS7_HR: @@ -274,6 +278,8 @@ protected void forwardMessage(Sms sms0, boolean withCharging, SmscStatAggregator break; case HTTP: chargingMedium = ChargingMedium.HttpOrig; + eventTypeSuccess = EventType.IN_HTTP_RECEIVED; + eventTypeFailure = EventType.IN_HTTP_REJECT_MPROC; break; } @@ -291,8 +297,21 @@ protected void forwardMessage(Sms sms0, boolean withCharging, SmscStatAggregator TargetAddress lock = persistence.obtainSynchroObject(ta); try { + sms.setTimestampC(System.currentTimeMillis()); + + if (eventTypeSuccess != null) { + EsmeManagement esmeManagement = EsmeManagement.getInstance(); + Esme esme = esmeManagement.getEsmeByClusterName(sms0.getSmsSet().getDestClusterName()); + + generateDetailedCDR(sms, eventTypeSuccess, messageType, SmppConstants.STATUS_SYSERR, esme.getRemoteAddressAndPort(), seqNumber); + } + + sms.setTimestampA(0); + sms.setTimestampB(0); + sms.setTimestampC(0); + synchronized (lock) { - boolean storeAndForwMode = MessageUtil.isStoreAndForward(sms); + boolean storeAndForwMode = MessageUtil.isStoreAndForward(sms); if (!storeAndForwMode) { try { this.scheduler.injectSmsOnFly(sms.getSmsSet(), true); @@ -346,11 +365,15 @@ protected void forwardMessage(Sms sms0, boolean withCharging, SmscStatAggregator getErrorCode(mProcResult.getHttpErrorCode(), SmscProcessingException.HTTP_ERROR_CODE_NOT_SET), null, SmscProcessingException.INTERNAL_ERROR_MPROC_REJECT); e.setSkipErrorLogging(true); - EsmeManagement esmeManagement = EsmeManagement.getInstance(); - Esme esme = esmeManagement.getEsmeByClusterName(sms0.getSmsSet().getDestClusterName()); - generateMprocFailureDetailedCdr(sms0, EventType.IN_SMPP_REJECT_MPROC, messageType, - mProcResult.getSmppErrorCode(), mProcResult.getMprocRejectingRuleId(), esme.getRemoteAddressAndPort(), seqNumber); + if (eventTypeFailure != null) { + EsmeManagement esmeManagement = EsmeManagement.getInstance(); + Esme esme = esmeManagement.getEsmeByClusterName(sms0.getSmsSet().getDestClusterName()); + + generateMprocFailureDetailedCdr(sms0, eventTypeFailure, messageType, + mProcResult.getSmppErrorCode(), mProcResult.getMprocRejectingRuleId(), esme.getRemoteAddressAndPort(), seqNumber); + } + if (logger.isInfoEnabled()) { logger.info("Incoming message is rejected by mProc rules, message=[" + sms0 + "]"); } @@ -396,16 +419,15 @@ private static int getErrorCode(final int anErrorCode, final int aDefaultErrorCo return anErrorCode; } - protected void generateDetailedCDR(Sms sms, EventType eventType, String messageType, int statusCode, int mprocRuleId, - String sourceAddrAndPort, int seqNumber) { + protected void generateDetailedCDR(Sms sms, EventType eventType, String messageType, int statusCode, String sourceAddrAndPort, int seqNumber) { CdrDetailedGenerator.generateDetailedCdr(sms, eventType, sms.getSmsSet().getStatus(), messageType, statusCode, - mprocRuleId, sourceAddrAndPort, null, seqNumber, smscPropertiesManagement.getGenerateReceiptCdr(), + -1, sourceAddrAndPort, null, seqNumber, smscPropertiesManagement.getGenerateReceiptCdr(), smscPropertiesManagement.getGenerateDetailedCdr()); } protected void generateFailureDetailedCdr(Sms sms, EventType eventType, String messageType, int statusCode, String sourceAddrAndPort, int seqNumber) { CdrDetailedGenerator.generateDetailedCdr(sms, eventType, sms.getSmsSet().getStatus(), messageType, statusCode, - 0, sourceAddrAndPort, null, seqNumber, smscPropertiesManagement.getGenerateReceiptCdr(), + -1, sourceAddrAndPort, null, seqNumber, smscPropertiesManagement.getGenerateReceiptCdr(), smscPropertiesManagement.getGenerateDetailedCdr()); } diff --git a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrDetailedGenerator.java b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrDetailedGenerator.java index 59b2be055..735f96ed1 100644 --- a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrDetailedGenerator.java +++ b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrDetailedGenerator.java @@ -101,7 +101,7 @@ public static void generateDetailedCdr(Sms smsEvent, EventType eventType, ErrorC .append(CdrGenerator.CDR_SEPARATOR) .append(dlrStatus == null ? dlrStatus : CdrDetailedGenerator.CDR_EMPTY) .append(CdrGenerator.CDR_SEPARATOR) - .append(mprocRuleId == 0 ? mprocRuleId : CDR_EMPTY) + .append(mprocRuleId == -1 ? mprocRuleId : CDR_EMPTY) //check this, maybe it should be smsEvent.getSmsSet().getCorrelationId() .append(smsEvent.getMessageId()) .append(CdrGenerator.CDR_SEPARATOR) diff --git a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/EventType.java b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/EventType.java index 1cec9e35b..c28792847 100644 --- a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/EventType.java +++ b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/EventType.java @@ -36,11 +36,13 @@ public enum EventType { IN_SMPP_REJECT_DIAMETER, IN_SMPP_REJECT_MPROC, IN_SMPP_DROP_MPROC, + IN_SMPP_ERROR, IN_HTTP_REJECT_FORBIDDEN, IN_HTTP_REJECT_CONG, IN_HTTP_REJECT_DIAMETER, IN_HTTP_REJECT_MPROC, IN_HTTP_DROP_MPROC, + IN_HTTP_ERROR, OUT_SMPP_SENT, OUT_SMPP_REJECTED, OUT_SMPP_ERROR,