Ищите способ вернуть DeliverSmResp с кодами ошибок с сервера cloudhopper smpp - PullRequest
0 голосов
/ 22 апреля 2019

Я ищу способ отправки кодов ошибок SMPP с сервера на подключенный клиент. мой поток это: 1. клиент отправляет на мой сервер текстовое сообщение 2. я отправляю его в другую систему 3. когда я получил статус сообщения (может занять до 72 часов) Я хочу отправить результаты обратно клиенту, который подключен как получатель. также я заметил, когда я отправляю это клиенту, я вижу:

Обработка по умолчанию - отбрасывать PDU с неожиданным ответом: (submit_sm_resp:

public void sendResponsePdu(String dlrId, String status) throws RecoverablePduException, SmppChannelException, UnrecoverablePduException, InterruptedException {
        PduResponse pdu = dlrs.remove(dlrId);
        if (pdu != null) {
            pdu.setResultMessage("0xa");
            sendResponsePdu(pdu);
        }
    }

я ищу способ вернуть по методу sendResponsePdu код ошибки SMPP в случае ошибки

я ожидаю увидеть в клиенте код ошибки 0xa что означает «Неверный адрес источника» но получай как обычно ESME_ROK я взял изображение из проекта C #, где я могу видеть, как должен выглядеть ответ при отправке из SMSC enter image description here

UPDATE я использовал следующий код для возврата DLR, но я не могу найти способ установить "err", "stat" и messageid введите описание ссылки здесь

1 Ответ

0 голосов
/ 24 апреля 2019

это решение для установки всех полей DLR и отправки его обратно клиенту

 byte[] textBytes = "-".getBytes();

        DeliverSm deliver = new DeliverSm();

        deliver.setSourceAddress(new Address((byte) 0x03, (byte) 0x00, pduResponseWrapper.getFromNumber()));
        deliver.setDestAddress(new Address((byte) 0x01, (byte) 0x01, pduResponseWrapper.getToNumber()));
        deliver.setShortMessage(textBytes);
        deliver.setDataCoding(pduResponseWrapper.getDataCoding());
        deliver.setSequenceNumber(pduResponseWrapper.getDeliverSm().getSequenceNumber());
        deliver.setEsmClass((byte) 0x04);
        deliver.setProtocolId((byte) 0x00);
        deliver.setPriority((byte) 0x00);
        deliver.setScheduleDeliveryTime(null);
        deliver.setValidityPeriod(null);
        deliver.setRegisteredDelivery((byte) 0x00);
        deliver.setReplaceIfPresent((byte) 0x00);
        deliver.setDefaultMsgId((byte) 0x00);

        DateTime submitDate = new DateTime();
        DateTime doneDate = new DateTime();
        byte state=SmppConstants.STATE_DELIVERED;
        String errorCode="000";
        DeliveryReceipt deliveryReceipt = new DeliveryReceipt(dlrId, 1,
                1, submitDate, doneDate,
                state, errorCode, "");



        String shortMessage = deliveryReceipt.toShortMessage();
        deliver.setShortMessage(CharsetUtil.encode(shortMessage, CharsetUtil.CHARSET_GSM));  deliver.calculateAndSetCommandLength();



        DataSmResp dd=new DataSmResp();
        DeliveryReceipt deliveryReceipt=new DeliveryReceipt();
        DeliverSmResp deliverSmResp = new DeliverSmResp();*/


        WindowFuture<Integer, PduRequest, PduResponse> future = session.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();
            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) {
    }
...