public void sendSmppMessageToRestcomm(
      String smppMessage, String smppTo, String smppFrom, Charset charset)
      throws IOException, SmppInvalidArgumentException {
    // http://stackoverflow.com/a/25885741
    try {
      byte[] textBytes;
      if (CharsetUtil.CHARSET_UCS_2 == charset) {
        textBytes = smppMessage.getBytes();
      } else {
        textBytes = CharsetUtil.encode(smppMessage, charset);
      }

      DeliverSm deliver = new DeliverSm();

      deliver.setSourceAddress(new Address((byte) 0x03, (byte) 0x00, smppFrom));
      deliver.setDestAddress(new Address((byte) 0x01, (byte) 0x01, smppTo));
      deliver.setShortMessage(textBytes);
      if (CharsetUtil.CHARSET_UCS_2 == charset) {
        deliver.setDataCoding(DataCoding.DATA_CODING_UCS2);
      } else {
        deliver.setDataCoding(DataCoding.DATA_CODING_GSM7);
      }
      logger.info("deliver.getDataCoding: " + deliver.getDataCoding());

      WindowFuture<Integer, PduRequest, PduResponse> future =
          smppServerSession.sendRequestPdu(deliver, 10000, false);
      if (!future.await()) {
        logger.error("Failed to receive deliver_sm_resp within specified time");
      } else if (future.isSuccess()) {
        DeliverSmResp deliverSmResp = (DeliverSmResp) future.getResponse();
        messageSent = true;
        logger.info(
            "deliver_sm_resp: commandStatus ["
                + deliverSmResp.getCommandStatus()
                + "="
                + deliverSmResp.getResultMessage()
                + "]");
      } else {
        logger.error("Failed to properly receive deliver_sm_resp: " + future.getCause());
      }
    } catch (Exception e) {
      logger.fatal("Exception during sending SMPP message to Restcomm: " + e);
    }
  }
    @Override
    public PduResponse firePduRequestReceived(PduRequest pduRequest) {
      SmppSession session = sessionRef.get();

      SubmitSm req = (SubmitSm) pduRequest;

      String str = CharsetUtil.decode(req.getShortMessage(), CharsetUtil.CHARSET_MODIFIED_UTF8);

      // SmsDTO smsDTO = new SmsDTO();
      smsDTO.setBody(str);
      smsDTO.setSender(req.getSourceAddress().getAddress());
      smsDTO.setDeliveryDate(new Date());
      smsDTO.setSendDate(new Date());

      // SmsDAOImpl smsDAO = new SmsDAOImpl();
      smsDAO.save(smsDTO);

      return pduRequest.createResponse();
    }