use of com.cloudhopper.smpp.type.SmppInvalidArgumentException in project smscgateway by RestComm.
the class TxSmppServerSbb method onSubmitMultiLocal.
private void onSubmitMultiLocal(final TxSmppServerSbbUsage anSbbUsage, final com.cloudhopper.smpp.pdu.SubmitMulti event, final ActivityContextInterface aci) {
SmppTransaction smppServerTransaction = (SmppTransaction) aci.getActivity();
Esme esme = smppServerTransaction.getEsme();
String esmeName = esme.getName();
if (this.logger.isFineEnabled()) {
this.logger.fine("\nReceived SUBMIT_MULTI = " + event + " from Esme name=" + esmeName);
}
List<Address> addrList = event.getDestAddresses();
int msgCnt = 0;
if (addrList != null)
msgCnt = addrList.size();
CheckMessageLimitResult cres = esme.onMessageReceived(msgCnt);
if (cres.getResult() != CheckMessageLimitResult.Result.ok) {
if (cres.getResult() == CheckMessageLimitResult.Result.firstFault) {
this.updateOverrateCounters(cres);
this.logger.info(cres.getMessage());
}
if (smscPropertiesManagement.isGenerateRejectionCdr()) {
generateCDR(parseShortMessageText(event), esme.getNetworkId(), esme.getSystemId(), event.getSourceAddress().getAddress(), event.getSourceAddress().getTon(), event.getSourceAddress().getNpi(), event.getDestAddress().getAddress(), event.getDestAddress().getTon(), event.getDestAddress().getNpi(), CdrGenerator.CDR_SUBMIT_FAILED_ESME, cres.getMessage(), true);
}
SubmitMultiResp response = event.createResponse();
response.setCommandStatus(SmppConstants.STATUS_THROTTLED);
String s = cres.getMessage();
if (s.length() > 255)
s = s.substring(0, 255);
Tlv tlv;
try {
tlv = TlvUtil.createNullTerminatedStringTlv(SmppConstants.TAG_ADD_STATUS_INFO, s);
response.addOptionalParameter(tlv);
} catch (TlvConvertException e) {
anSbbUsage.incrementCounterErrorSubmitMultiSm(ONE);
this.logger.severe("TlvConvertException while storing TAG_ADD_STATUS_INFO Tlv parameter", e);
}
// Lets send the Response with error here
long timestampB = 0L;
try {
this.smppServerSessions.sendResponsePdu(esme, event, response);
timestampB = System.currentTimeMillis();
} catch (Exception e) {
anSbbUsage.incrementCounterErrorSubmitMultiSmResponding(ONE);
this.logger.severe("Error while trying to send SubmitMultiResponse=" + response, e);
}
try {
TargetAddress ta = createDestTargetAddress(event.getDestAddress(), esme.getNetworkId());
Sms sms = this.createSmsEvent(event, esme, ta, persistence);
sms.setTimestampB(timestampB);
generateFailureDetailedCdr(sms, EventType.IN_SMPP_REJECT_CONG, ErrorCode.REJECT_INCOMING, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, SmppConstants.STATUS_THROTTLED, esme.getRemoteAddressAndPort(), event.getSequenceNumber());
} catch (SmscProcessingException e1) {
}
return;
}
SubmitMultiParseResult parseResult;
Sms singleSms = null;
try {
parseResult = this.createSmsEventMulti(event, esme, persistence, esme.getNetworkId());
for (Sms sms : parseResult.getParsedMessages()) {
singleSms = sms;
this.processSms(sms, persistence, esme, null, null, event, IncomingMessageType.submit_multi, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, event.getSequenceNumber());
}
} catch (SmscProcessingException e1) {
anSbbUsage.incrementCounterErrorSubmitMultiSm(ONE);
SbbStatsUtils.handleProcessingException(e1, anSbbUsage);
if (!e1.isSkipErrorLogging()) {
if (e1.isIsWarning()) {
this.logger.warning(e1.getMessage());
} else {
this.logger.severe(e1.getMessage(), e1);
}
smscStatAggregator.updateMsgInFailedAll();
}
if (smscPropertiesManagement.isGenerateRejectionCdr() && !e1.isMessageRejectCdrCreated()) {
if (singleSms != null) {
generateCDR(singleSms, CdrGenerator.CDR_SUBMIT_FAILED_ESME, e1.getMessage(), false, true);
} else {
generateCDR(parseShortMessageText(event), esme.getNetworkId(), esme.getSystemId(), event.getSourceAddress().getAddress(), event.getSourceAddress().getTon(), event.getSourceAddress().getNpi(), event.getDestAddress().getAddress(), event.getDestAddress().getTon(), event.getDestAddress().getNpi(), CdrGenerator.CDR_SUBMIT_FAILED_ESME, e1.getMessage(), true);
}
}
SubmitMultiResp response = event.createResponse();
response.setCommandStatus(e1.getSmppErrorCode());
String s = e1.getMessage();
if (s != null) {
if (s.length() > 255)
s = s.substring(0, 255);
Tlv tlv;
try {
tlv = TlvUtil.createNullTerminatedStringTlv(SmppConstants.TAG_ADD_STATUS_INFO, s);
response.addOptionalParameter(tlv);
} catch (TlvConvertException e) {
this.logger.severe("TlvConvertException while storing TAG_ADD_STATUS_INFO Tlv parameter", e);
}
}
// Lets send the Response with error here
long timestampB = 0L;
try {
this.smppServerSessions.sendResponsePdu(esme, event, response);
timestampB = System.currentTimeMillis();
} catch (Exception e) {
anSbbUsage.incrementCounterErrorSubmitMultiSmResponding(ONE);
this.logger.severe("Error while trying to send SubmitMultiResponse=" + response, e);
}
EventType eventType = null;
if (e1.getInternalErrorCode() == SmscProcessingException.INTERNAL_ERROR_STATE_OVERLOADED) {
eventType = EventType.IN_SMPP_REJECT_CONG;
} else {
eventType = EventType.IN_SMPP_REJECT_FORBIDDEN;
}
if (singleSms != null) {
singleSms.setTimestampB(timestampB);
generateRejectDetailedCdr(e1.getInternalErrorCode(), singleSms, eventType, ErrorCode.REJECT_INCOMING, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, e1.getSmppErrorCode(), esme.getRemoteAddressAndPort(), event.getSequenceNumber());
} else {
generateRejectDetailedCdr(e1.getInternalErrorCode(), event, esme, eventType, ErrorCode.REJECT_INCOMING, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, e1.getSmppErrorCode(), parseShortMessageText(event), timestampB);
}
return;
} catch (Throwable e1) {
anSbbUsage.incrementCounterErrorSubmitMultiSm(ONE);
String s = "Exception when processing SubmitMulti message: " + e1.getMessage();
this.logger.severe(s, e1);
smscStatAggregator.updateMsgInFailedAll();
if (smscPropertiesManagement.isGenerateRejectionCdr()) {
generateCDR(parseShortMessageText(event), esme.getNetworkId(), esme.getSystemId(), event.getSourceAddress().getAddress(), event.getSourceAddress().getTon(), event.getSourceAddress().getNpi(), event.getDestAddress().getAddress(), event.getDestAddress().getTon(), event.getDestAddress().getNpi(), CdrGenerator.CDR_SUBMIT_FAILED_ESME, e1.getMessage(), true);
}
SubmitMultiResp response = event.createResponse();
response.setCommandStatus(SmppConstants.STATUS_SYSERR);
if (s.length() > 255)
s = s.substring(0, 255);
Tlv tlv;
try {
tlv = TlvUtil.createNullTerminatedStringTlv(SmppConstants.TAG_ADD_STATUS_INFO, s);
response.addOptionalParameter(tlv);
} catch (TlvConvertException e) {
this.logger.severe("TlvConvertException while storing TAG_ADD_STATUS_INFO Tlv parameter", e);
}
// Lets send the Response with error here
try {
this.smppServerSessions.sendResponsePdu(esme, event, response);
if (singleSms != null) {
singleSms.setTimestampB(System.currentTimeMillis());
generateFailureDetailedCdr(singleSms, EventType.IN_SMPP_ERROR, ErrorCode.REJECT_INCOMING, CdrDetailedGenerator.CDR_MSG_TYPE_SUBMITMULTI, SmppConstants.STATUS_SYSERR, esme.getRemoteAddressAndPort(), event.getSequenceNumber());
}
anSbbUsage.incrementCounterErrorSubmitMultiSmResponding(ONE);
} catch (Exception e) {
this.logger.severe("Error while trying to send SubmitMultiResponse=" + response, e);
}
return;
}
SubmitMultiResp response = event.createResponse();
Sms sms = null;
if (parseResult.getParsedMessages().size() > 0)
sms = parseResult.getParsedMessages().get(0);
if (sms != null)
response.setMessageId(sms.getMessageIdText());
for (UnsucessfulSME usme : parseResult.getBadAddresses()) {
try {
response.addUnsucessfulSME(usme);
} catch (SmppInvalidArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Lets send the Response with success here
try {
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);
this.logger.severe("Error while trying to send SubmitMultiResponse=" + response, e);
}
}
Aggregations