From fa71dad2cd8479d970deba6ee37e3a2c093a61a4 Mon Sep 17 00:00:00 2001 From: Anatoly Satanovskiy Date: Thu, 6 Jul 2017 15:46:19 +0300 Subject: [PATCH] continued to work on issue #216 --- .../http/server/tx/TxHttpServerSbb.java | 12 +--- .../smpp/server/tx/TxSmppServerSbb.java | 9 +++ .../services/submitsbb/SubmitCommonSbb.java | 27 ++----- .../smsc/library/CdrDetailedGenerator.java | 70 ++++++++++++------- .../mobicents/smsc/library/CdrGenerator.java | 2 +- 5 files changed, 60 insertions(+), 60 deletions(-) diff --git a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/http/server/tx/TxHttpServerSbb.java b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/http/server/tx/TxHttpServerSbb.java index 74a8c38ca..e7dfd4756 100644 --- a/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/http/server/tx/TxHttpServerSbb.java +++ b/core/slee/services/sbbs/src/main/java/org/mobicents/smsc/slee/services/http/server/tx/TxHttpServerSbb.java @@ -27,16 +27,6 @@ import org.mobicents.protocols.ss7.map.api.errors.MAPErrorCode; import org.mobicents.smsc.cassandra.PersistenceException; import org.mobicents.smsc.domain.*; -import org.mobicents.smsc.library.CdrDetailedGenerator; -import org.mobicents.smsc.library.MessageState; -import org.mobicents.smsc.library.MessageUtil; -import org.mobicents.smsc.library.OriginationType; -import org.mobicents.smsc.library.QuerySmResponse; -import org.mobicents.smsc.library.SbbStates; -import org.mobicents.smsc.library.Sms; -import org.mobicents.smsc.library.SmsSet; -import org.mobicents.smsc.library.SmscProcessingException; -import org.mobicents.smsc.library.TargetAddress; import org.mobicents.smsc.library.*; import org.mobicents.smsc.slee.resources.persistence.PersistenceRAInterface; import org.mobicents.smsc.slee.services.http.server.tx.data.*; @@ -465,6 +455,8 @@ public void sendMessage(HttpServletRequestEvent event, HttpSendMessageIncomingDa HttpUtils.sendOkResponseWithContent(logger, event.getResponse(), ResponseFormatter.format(outgoingData, incomingData.getFormat()), incomingData.getFormat()); for (Sms sms : parseResult.getParsedMessages()) { sms.setTimestampB(System.currentTimeMillis()); + generateDetailedCDR(sms, EventType.IN_HTTP_RECEIVED, CdrDetailedGenerator.CDR_MSG_TYPE_HTTP, + 0, event.getRequest().getRemoteAddr(), -1); } } catch (Throwable e) { logger.severe("Error while trying to send SubmitMultiResponse=" + outgoingData, e); 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 7d668aceb..221454f8a 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 @@ -71,6 +71,7 @@ import org.restcomm.slee.resource.smpp.SmppTransactionACIFactory; import org.restcomm.smpp.CheckMessageLimitResult; import org.restcomm.smpp.Esme; +import org.restcomm.smpp.EsmeManagement; import org.restcomm.smpp.SmppEncoding; import com.cloudhopper.smpp.SmppConstants; @@ -413,6 +414,8 @@ private void onSubmitSmLocal(final TxSmppServerSbbUsage anSbbUsage, final com.cl if (sms.getMessageDeliveryResultResponse() == null) { this.smppServerSessions.sendResponsePdu(esme, event, response); sms.setTimestampB(System.currentTimeMillis()); + generateDetailedCDR(sms, EventType.IN_SMPP_RECEIVED, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITSM, + SmppConstants.STATUS_OK, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } } catch (Throwable e) { anSbbUsage.incrementCounterErrorSubmitSmResponding(ONE); @@ -590,6 +593,8 @@ private void onDataSmLocal(final TxSmppServerSbbUsage anSbbUsage, final com.clou if (sms.getMessageDeliveryResultResponse() == null) { this.smppServerSessions.sendResponsePdu(esme, event, response); sms.setTimestampB(System.currentTimeMillis()); + generateDetailedCDR(sms, EventType.IN_SMPP_RECEIVED, CdrDetailedGenerator.CDR_MSG_TYPE_DATASM, + SmppConstants.STATUS_OK, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } } catch (Exception e) { anSbbUsage.incrementCounterErrorDataSmResponding(ONE); @@ -791,6 +796,8 @@ private void onSubmitMultiLocal(final TxSmppServerSbbUsage anSbbUsage, final com if (sms == null || sms.getMessageDeliveryResultResponse() == null) { this.smppServerSessions.sendResponsePdu(esme, event, response); sms.setTimestampB(System.currentTimeMillis()); + generateDetailedCDR(sms, EventType.IN_SMPP_RECEIVED, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, + SmppConstants.STATUS_OK, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } } catch (Throwable e) { anSbbUsage.incrementCounterErrorSubmitMultiSmResponding(ONE); @@ -942,6 +949,8 @@ private void onDeliverSmLocal(final TxSmppServerSbbUsage anSbbUsage, final com.c try { this.smppServerSessions.sendResponsePdu(esme, event, response); sms.setTimestampB(System.currentTimeMillis()); + generateDetailedCDR(sms, EventType.IN_SMPP_RECEIVED, CdrDetailedGenerator.CDR_MSG_TYPE_DELIVERSM, + SmppConstants.STATUS_OK, esme.getRemoteAddressAndPort(), event.getSequenceNumber()); } catch (Throwable e) { anSbbUsage.incrementCounterErrorDeliverSmResponding(ONE); this.logger.severe("Error while trying to send SubmitSmResponse=" + response, e); 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 38c27ede8..b14cfe43d 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 @@ -260,12 +260,11 @@ protected void forwardMessage(Sms sms0, boolean withCharging, SmscStatAggregator int seqNumber) 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: @@ -277,7 +276,6 @@ 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; } @@ -298,24 +296,9 @@ protected void forwardMessage(Sms sms0, boolean withCharging, SmscStatAggregator try { sms.setTimestampC(System.currentTimeMillis()); - if (eventTypeSuccess != null) { - EsmeManagement esmeManagement = EsmeManagement.getInstance(); - String sourceAddr = null; - if (esmeManagement != null) { - // for testing there is no EsmeManagement - Esme esme = esmeManagement.getEsmeByClusterName(sms0.getOrigEsmeName()); - // null check is for testing - if (esme != null) { - sourceAddr = esme.getRemoteAddressAndPort(); - } - } - generateDetailedCDR(sms, eventTypeSuccess, messageType, SmppConstants.STATUS_SYSERR, sourceAddr, - seqNumber); - } - - sms.setTimestampA(0); - sms.setTimestampB(0); - sms.setTimestampC(0); +// sms.setTimestampA(0); +// sms.setTimestampB(0); +// sms.setTimestampC(0); synchronized (lock) { boolean storeAndForwMode = MessageUtil.isStoreAndForward(sms); @@ -449,7 +432,7 @@ private static int getErrorCode(final int anErrorCode, final int aDefaultErrorCo protected void generateDetailedCDR(Sms sms, EventType eventType, String messageType, int statusCode, String sourceAddrAndPort, int seqNumber) { - CdrDetailedGenerator.generateDetailedCdr(sms, eventType, sms.getSmsSet().getStatus(), messageType, statusCode, -1, + CdrDetailedGenerator.generateDetailedCdr(sms, eventType, ErrorCode.SUCCESS, messageType, statusCode, -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 d5617b69e..18c89f82d 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 @@ -61,40 +61,56 @@ public static void generateDetailedCdr(Sms smsEvent, EventType eventType, ErrorC String dlrStatus = null; if (deliveryReceiptData != null) { dlrStatus = deliveryReceiptData.getStatus(); - int tlvMessageState = deliveryReceiptData.getTlvMessageState(); - if (tlvMessageState != 0 && dlrStatus != null) - if (!dlrStatus.substring(0, 4).equals(MessageState.fromInt(tlvMessageState).toString().substring(0, 5))) { + int tlvMessageState = deliveryReceiptData.getTlvMessageState() == null ? -1 + : deliveryReceiptData.getTlvMessageState(); + if (tlvMessageState != -1 && dlrStatus != null) + if (!dlrStatus.substring(0, 4).equals(MessageState.fromInt(tlvMessageState).toString().substring(0, 4))) { dlrStatus = "err"; } } - String[] parts = destAddrAndPort.split(":"); - String destIP = parts[0]; - int destPort = Integer.parseInt(parts[1]); - parts = sourceAddrAndPort.split(":"); - String sourceIP = parts[0]; - int sourcePort = Integer.parseInt(parts[1]); + String destIP = null; + int destPort = -1; - String timestampA = DATE_FORMAT.format(smsEvent.getTimestampA()); - String timestampB = DATE_FORMAT.format(smsEvent.getTimestampB()); - String timestampC = DATE_FORMAT.format(smsEvent.getTimestampC()); + String sourceIP = null; + int sourcePort = -1; + + if (destAddrAndPort != null) { + String[] parts = destAddrAndPort.split(":"); + destIP = parts[0]; + destPort = Integer.parseInt(parts[1]); + } + + if (sourceAddrAndPort != null) { + String[] parts = sourceAddrAndPort.split(":"); + sourceIP = parts[0]; + sourcePort = Integer.parseInt(parts[1]); + } + + String timestampA = smsEvent.getTimestampA() != 0 ? DATE_FORMAT.format(smsEvent.getTimestampA()) : null; + String timestampB = smsEvent.getTimestampB() != 0 ? DATE_FORMAT.format(smsEvent.getTimestampB()) : null; + String timestampC = smsEvent.getTimestampC() != 0 ? DATE_FORMAT.format(smsEvent.getTimestampC()) : null; StringBuffer sb = new StringBuffer(); - sb.append(timestamp).append(CdrGenerator.CDR_SEPARATOR) - .append(eventType != null ? eventType : CdrDetailedGenerator.CDR_EMPTY).append(CdrGenerator.CDR_SEPARATOR) - .append(errorCode != null ? errorCode : CdrDetailedGenerator.CDR_EMPTY).append(CdrGenerator.CDR_SEPARATOR) - .append(messageType).append(CdrGenerator.CDR_SEPARATOR).append(statusCode).append(CdrGenerator.CDR_SEPARATOR) - .append(smsEvent.getMessageId()).append(CdrGenerator.CDR_SEPARATOR) - .append(receiptLocalMessageId == null ? receiptLocalMessageId : CdrDetailedGenerator.CDR_EMPTY) - .append(CdrGenerator.CDR_SEPARATOR).append(dlrStatus == null ? dlrStatus : CdrDetailedGenerator.CDR_EMPTY) - .append(CdrGenerator.CDR_SEPARATOR).append(mprocRuleId != -1 ? mprocRuleId : CDR_EMPTY) - // check this, maybe it should be smsEvent.getSmsSet().getCorrelationId() - .append(smsEvent.getMessageId()).append(CdrGenerator.CDR_SEPARATOR).append(smsEvent.getOrigEsmeName()) - .append(CdrGenerator.CDR_SEPARATOR).append(timestampA).append(CdrGenerator.CDR_SEPARATOR).append(timestampB) - .append(CdrGenerator.CDR_SEPARATOR).append(timestampC).append(CdrGenerator.CDR_SEPARATOR).append(sourceIP) - .append(CdrGenerator.CDR_SEPARATOR).append(sourcePort).append(CdrGenerator.CDR_SEPARATOR).append(destIP) - .append(CdrGenerator.CDR_SEPARATOR).append(destPort).append(CdrGenerator.CDR_SEPARATOR) - .append(seqNumber != -1 ? seqNumber : CDR_EMPTY).append(CdrGenerator.CDR_SEPARATOR); + sb.append(timestamp).append(CDR_SEPARATOR) + .append(eventType != null ? eventType : CDR_EMPTY).append(CDR_SEPARATOR) + .append(errorCode != null ? errorCode : CDR_EMPTY).append(CDR_SEPARATOR) + .append(messageType).append(CDR_SEPARATOR) + .append(statusCode).append(CDR_SEPARATOR) + // check this, maybe it should be smsEvent.getSmsSet().getCorrelationId() + .append(smsEvent.getMessageId()).append(CDR_SEPARATOR) + .append(receiptLocalMessageId == null ? receiptLocalMessageId : CDR_EMPTY).append(CDR_SEPARATOR) + .append(dlrStatus != null ? dlrStatus : CDR_EMPTY).append(CDR_SEPARATOR) + .append(mprocRuleId != -1 ? mprocRuleId : CDR_EMPTY).append(CDR_SEPARATOR) + .append(smsEvent.getOrigEsmeName()).append(CDR_SEPARATOR) + .append(timestampA != null ? timestampA : CDR_EMPTY).append(CDR_SEPARATOR) + .append(timestampB != null ? timestampB : CDR_EMPTY).append(CDR_SEPARATOR) + .append(timestampC != null ? timestampC : CDR_EMPTY).append(CDR_SEPARATOR) + .append(sourceIP != null ? sourceIP : CDR_EMPTY).append(CDR_SEPARATOR) + .append(sourcePort != -1 ? sourcePort : CDR_EMPTY).append(CDR_SEPARATOR) + .append(destIP != null ? destIP : CDR_EMPTY).append(CDR_SEPARATOR) + .append(destPort != -1 ? destPort : CDR_EMPTY).append(CDR_SEPARATOR) + .append(seqNumber != -1 ? seqNumber : CDR_EMPTY); CdrDetailedGenerator.generateDetailedCdr(sb.toString()); } diff --git a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrGenerator.java b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrGenerator.java index 15a57df93..cdceaf074 100644 --- a/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrGenerator.java +++ b/core/smsc-common-library/src/main/java/org/mobicents/smsc/library/CdrGenerator.java @@ -113,7 +113,7 @@ public static void generateCdr(Sms smsEvent, String status, String reason, boole if (deliveryReceiptData != null) { st = deliveryReceiptData.getStatus(); - tlvMessageState = deliveryReceiptData.getTlvMessageState(); + tlvMessageState = deliveryReceiptData.getTlvMessageState() == null ? -1 : deliveryReceiptData.getTlvMessageState();; err = deliveryReceiptData.getError(); }