@Override public PduResponse firePduRequestReceived(PduRequest request) { PduResponse response; try { if (request instanceof DeliverSm) { String sourceAddress = ((DeliverSm) request).getSourceAddress().getAddress(); String message = CharsetUtil.decode(((DeliverSm) request).getShortMessage(), smppClient.mapDataCodingToCharset(((DeliverSm) request).getDataCoding())); LOGGER.info("SMS Message Received: " + message.trim() + ", Source Address: " + sourceAddress); boolean isDeliveryReceipt; if (smppClient.getDetectDlrByOpts()) { isDeliveryReceipt = request.getOptionalParameters() != null; } else { isDeliveryReceipt = SmppUtil.isMessageTypeAnyDeliveryReceipt(((DeliverSm) request).getEsmClass()); } if (!isDeliveryReceipt) { TextMessageEventHandler.handleTextMessage(sourceAddress, message); } } response = request.createResponse(); } catch (Exception error) { LOGGER.warn("SMS receiving error", error); response = request.createResponse(); response.setResultMessage(error.getMessage()); response.setCommandStatus(SmppConstants.STATUS_UNKNOWNERR); } return response; }
@Override public void run() { SmppSession smppSession = smppClient.getSession(); if (smppSession != null && smppSession.isBound()) { try { smppSession.enquireLink(new EnquireLink(), enquireLinkTimeout); } catch (SmppTimeoutException | SmppChannelException | RecoverablePduException | UnrecoverablePduException error) { LOGGER.warn("Enquire link failed, executing reconnect: ", error); smppClient.scheduleReconnect(); } catch (InterruptedException error) { LOGGER.info("Enquire link interrupted, probably killed by reconnecting"); } } else { LOGGER.warn("Enquire link running while session is not connected"); } }
if (getSession() != null && getSession().isBound()) { try { SubmitSm submit = new SubmitSm(); byte[] textBytes; textBytes = CharsetUtil.encode(message, command ? commandsCharsetName : notificationsCharsetName); submit.setDataCoding(command ? commandsDataCoding : notificationsDataCoding); if (requestDlr) { submit.setRegisteredDelivery(SmppConstants.REGISTERED_DELIVERY_SMSC_RECEIPT_REQUESTED); submit.addOptionalParameter(new Tlv(SmppConstants.TAG_MESSAGE_PAYLOAD, textBytes, "message_payload")); } else { submit.setShortMessage(textBytes); submit.setSourceAddress(command ? new Address(commandSourceTon, commandSourceNpi, commandSourceAddress) : new Address(sourceTon, sourceNpi, sourceAddress)); submit.setDestAddress(new Address(destTon, destNpi, destAddress)); SubmitSmResp submitResponce = getSession().submit(submit, submitTimeout); if (submitResponce.getCommandStatus() == SmppConstants.STATUS_OK) { LOGGER.info("SMS submitted, message id: " + submitResponce.getMessageId()); } else { throw new IllegalStateException(submitResponce.getResultMessage());
public GenericNack createGenericNack(int commandStatus) { GenericNack nack = new GenericNack(); nack.setCommandStatus(commandStatus); nack.setSequenceNumber(this.getSequenceNumber()); return nack; }
@Override public DeliverSmResp createResponse() { DeliverSmResp resp = new DeliverSmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public BindTransmitterResp createResponse() { BindTransmitterResp resp = new BindTransmitterResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public GenericNack createResponse() { GenericNack resp = new GenericNack(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public BindTransceiverResp createResponse() { BindTransceiverResp resp = new BindTransceiverResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public SubmitSmResp createResponse() { SubmitSmResp resp = new SubmitSmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public DataSmResp createResponse() { DataSmResp resp = new DataSmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public EnquireLinkResp createResponse() { EnquireLinkResp resp = new EnquireLinkResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public UnbindResp createResponse() { UnbindResp resp = new UnbindResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public QuerySmResp createResponse() { QuerySmResp resp = new QuerySmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public CancelSmResp createResponse() { CancelSmResp resp = new CancelSmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public ReplaceSmResp createResponse() { ReplaceSmResp resp = new ReplaceSmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public BindReceiverResp createResponse() { BindReceiverResp resp = new BindReceiverResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public DeliverSmResp createResponse() { DeliverSmResp resp = new DeliverSmResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public BindTransmitterResp createResponse() { BindTransmitterResp resp = new BindTransmitterResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public GenericNack createResponse() { GenericNack resp = new GenericNack(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }
@Override public BindTransceiverResp createResponse() { BindTransceiverResp resp = new BindTransceiverResp(); resp.setSequenceNumber(this.getSequenceNumber()); return resp; }