@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 PduRequest getRequest(int sequenceNumber) throws Exception { request.setSequenceNumber(sequenceNumber); return request; }
public WindowFuture<Integer,PduRequest,PduResponse> sendRequestPdu(PduRequest pdu, long timeoutMillis, boolean synchronous) throws RecoverablePduException, UnrecoverablePduException, SmppTimeoutException, SmppChannelException, InterruptedException { if (!pdu.hasSequenceNumberAssigned()) { pdu.setSequenceNumber(this.sequenceNumber.next()); future = sendWindow.offer(pdu.getSequenceNumber(), pdu, timeoutMillis, configuration.getRequestExpiryTimeout(), synchronous); } catch (DuplicateKeyException e) { throw new UnrecoverablePduException(e.getMessage(), e);
private void countSendRequestPdu(PduRequest pdu) { if (this.counters == null) { return; // noop } if (pdu.isRequest()) { switch (pdu.getCommandId()) { case SmppConstants.CMD_ID_SUBMIT_SM: this.counters.getTxSubmitSM().incrementRequestAndGet(); break; case SmppConstants.CMD_ID_DELIVER_SM: this.counters.getTxDeliverSM().incrementRequestAndGet(); break; case SmppConstants.CMD_ID_DATA_SM: this.counters.getTxDataSM().incrementRequestAndGet(); break; case SmppConstants.CMD_ID_ENQUIRE_LINK: this.counters.getTxEnquireLink().incrementRequestAndGet(); break; } } }
@Override public String[] dumpWindow() { Map<Integer,WindowFuture<Integer,PduRequest,PduResponse>> sortedSnapshot = this.sendWindow.createSortedSnapshot(); String[] dump = new String[sortedSnapshot.size()]; int i = 0; for (WindowFuture<Integer,PduRequest,PduResponse> future : sortedSnapshot.values()) { dump[i] = future.getRequest().toString(); i++; } return dump; }
@Override public PduResponse firePduRequestReceived(PduRequest pduRequest) { PduResponse response = pduRequest.createResponse(); try { SmppTransactionImpl smppServerTransaction = null; SmppTransactionHandle smppServerTransactionHandle = null; Address sourceAddress = null; switch (pduRequest.getCommandId()) { case SmppConstants.CMD_ID_ENQUIRE_LINK: break; pduRequest.getSequenceNumber(), SmppTransactionType.INCOMING); smppServerTransaction = new SmppTransactionImpl(pduRequest, this.esme, smppServerTransactionHandle, smppServerResourceAdaptor); pduRequest.getSequenceNumber(), SmppTransactionType.INCOMING); smppServerTransaction = new SmppTransactionImpl(pduRequest, this.esme, smppServerTransactionHandle, smppServerResourceAdaptor); pduRequest.getSequenceNumber(), SmppTransactionType.INCOMING); smppServerTransaction = new SmppTransactionImpl(pduRequest, this.esme, smppServerTransactionHandle, smppServerResourceAdaptor); pduRequest.getSequenceNumber(), SmppTransactionType.INCOMING); smppServerTransaction = new SmppTransactionImpl(pduRequest, this.esme, smppServerTransactionHandle, smppServerResourceAdaptor);
testingForm.addMessage("PduRequestReceived: " + pduRequest.getName(), pduRequest.toString()); this.testingForm.messagesRcvd.incrementAndGet(); PduResponse resp = pduRequest.createResponse(); if (pduRequest.getCommandId() == SmppConstants.CMD_ID_DELIVER_SM || pduRequest.getCommandId() == SmppConstants.CMD_ID_DATA_SM || pduRequest.getCommandId() == SmppConstants.CMD_ID_SUBMIT_SM) {
@Override public PduResponse firePduRequestReceived(PduRequest pduRequest) { PduResponse response = pduRequest.createResponse(); if (pduRequest.getCommandId() == SmppConstants.CMD_ID_DELIVER_SM) { processMO(pduRequest); } return response; } private void processsMO(PduRequest request){ DeliverSm mo = (DeliverSm) request; int length = mo.getShortMessageLength(); Address sourceAddr = mo.getSourceAddress(); Address destAddr = mo.getDestAddress(); byte[] shortMessage = mo.getShortMessage(); String sms= new String(shortMessage); //Do Something.... }
@Override public PduResponse firePduRequestReceived(PduRequest pduRequest) { if ( pduRequest.isRequest() && pduRequest.getClass() == DeliverSm.class ) { log.debug("Got DELIVER_SM"); DeliverSm dlr = (DeliverSm)pduRequest; log.debug("Msg id={}", dlr.getOptionalParameter(SmppConstants.TAG_RECEIPTED_MSG_ID)); log.debug("Status={}", dlr.getOptionalParameter(SmppConstants.TAG_MSG_STATE)); return pduRequest.createResponse(); } return super.firePduRequestReceived(pduRequest); }
public GenericNack createGenericNack(int commandStatus) { GenericNack nack = new GenericNack(); nack.setCommandStatus(commandStatus); nack.setSequenceNumber(this.getSequenceNumber()); return nack; }
@Override public PduResponse firePduRequestReceived(PduRequest pduRequest) { PduResponse response = pduRequest.createResponse(); // do any logic here return response; } }
@Override public void firePduRequestExpired(PduRequest pduRequest) { testingForm.addMessage("PduRequestExpired: " + pduRequest.getName(), pduRequest.toString()); }
/** * Asserts that a PDU response matches a PDU request. A good example is that * a PDU response may be a "Generic_Nack" to our request. * @param request The PDU request * @param response The PDU response * @throws GenericNackException Thrown if the response was a "Generic_Nack" * @throws UnexpectedPduResponseException Thrown if the response type did * not match the request type. For example, if the request was a * "submit_sm", but the response was "data_sm_resp". */ static public void assertExpectedResponse(PduRequest request, PduResponse response) throws GenericNackException, UnexpectedPduResponseException { if (request.getResponseClass().isInstance(response)) { return; } else if (response instanceof GenericNack) { throw new GenericNackException((GenericNack)response); } else { throw new UnexpectedPduResponseException(response); } } }
@Override public boolean process(SmppSimulatorSessionHandler session, Channel channel, Pdu pdu) throws Exception { // anything other than a bind is super bad! if (!(pdu instanceof BaseBind)) { if (pdu instanceof PduRequest) { session.addPduToWriteOnNextPduReceived(((PduRequest)pdu).createGenericNack(SmppConstants.STATUS_INVBNDSTS)); return true; } else { //logger.error("PDU response received, but not bound"); channel.close(); return true; } } BaseBind bind = (BaseBind)pdu; BaseBindResp bindResp = (BaseBindResp)bind.createResponse(); if (!bind.getSystemId().equals(systemId)) { bindResp.setCommandStatus(SmppConstants.STATUS_INVSYSID); } else if (!bind.getPassword().equals(password)) { bindResp.setCommandStatus(SmppConstants.STATUS_INVPASWD); } session.addPduToWriteOnNextPduReceived(bindResp); return true; }
UnrecoverablePduException, SmppChannelException, InterruptedException { SmppTransactionImpl smppServerTransactionImpl = (SmppTransactionImpl) request.getReferenceObject(); if (request.getSequenceNumber() != response.getSequenceNumber()) { throw new UnrecoverablePduException("Sequence number of response is not same as request"); SmppTransactionImpl smppTransactionImpl = (SmppTransactionImpl)request.getReferenceObject(); long responseTime = System.currentTimeMillis() - smppTransactionImpl.getStartTime(); this.countSendResponsePdu(smppSessionCounters, response, responseTime, responseTime);
if (!request.hasSequenceNumberAssigned()) { request.setSequenceNumber(defaultSmppSession.getSequenceNumber().next()); request.getSequenceNumber(), SmppTransactionType.OUTGOING);
private void countSendRequestPduExpired(PduRequest pdu) { if (this.counters == null) { return; // noop } if (pdu.isRequest()) { switch (pdu.getCommandId()) { case SmppConstants.CMD_ID_SUBMIT_SM: this.counters.getTxSubmitSM().incrementRequestExpiredAndGet(); break; case SmppConstants.CMD_ID_DELIVER_SM: this.counters.getTxDeliverSM().incrementRequestExpiredAndGet(); break; case SmppConstants.CMD_ID_DATA_SM: this.counters.getTxDataSM().incrementRequestExpiredAndGet(); break; case SmppConstants.CMD_ID_ENQUIRE_LINK: this.counters.getTxEnquireLink().incrementRequestExpiredAndGet(); break; } } }
@Override public String[] dumpWindow() { Map<Integer,WindowFuture<Integer,PduRequest,PduResponse>> sortedSnapshot = this.sendWindow.createSortedSnapshot(); String[] dump = new String[sortedSnapshot.size()]; int i = 0; for (WindowFuture<Integer,PduRequest,PduResponse> future : sortedSnapshot.values()) { dump[i] = future.getRequest().toString(); i++; } return dump; }
public GenericNack createGenericNack(int commandStatus) { GenericNack nack = new GenericNack(); nack.setCommandStatus(commandStatus); nack.setSequenceNumber(this.getSequenceNumber()); return nack; }
return pduRequest.createResponse(); return pduRequest.createResponse();