Search in sources :

Example 1 with OfferTimeoutException

use of com.cloudhopper.commons.util.windowing.OfferTimeoutException in project smscgateway by RestComm.

the class TestSmppSession method sendRequestPdu.

public WindowFuture<Integer, PduRequest, PduResponse> sendRequestPdu(PduRequest pdu, long timeoutMillis, boolean synchronous) throws RecoverablePduException, UnrecoverablePduException, SmppTimeoutException, SmppChannelException, InterruptedException {
    // assign the next PDU sequence # if its not yet assigned
    if (!pdu.hasSequenceNumberAssigned()) {
        pdu.setSequenceNumber(this.getSequenceNumber().next());
    }
    // encode the pdu into a buffer
    ChannelBuffer buffer;
    if (this.malformedPacket) {
        this.malformedPacket = false;
        buffer = this.testPduTranscoder.encode(pdu);
    } else {
        buffer = this.getTranscoder().encode(pdu);
    }
    WindowFuture<Integer, PduRequest, PduResponse> future = null;
    try {
        future = this.getSendWindow().offer(pdu.getSequenceNumber(), pdu, timeoutMillis, this.getConfiguration().getRequestExpiryTimeout(), synchronous);
    } catch (DuplicateKeyException e) {
        throw new UnrecoverablePduException(e.getMessage(), e);
    } catch (OfferTimeoutException e) {
        throw new SmppTimeoutException(e.getMessage(), e);
    }
    if (this.sessionHandler instanceof SmppSessionListener) {
        if (!((SmppSessionListener) this.sessionHandler).firePduDispatch(pdu)) {
            // logger.info("dispatched request PDU discarded: {}", pdu);
            // @todo probably throwing exception here is better solution?
            future.cancel();
            return future;
        }
    }
    // during the encoding process such as looking up the result message
    if (this.getConfiguration().getLoggingOptions().isLogPduEnabled()) {
        if (synchronous) {
        // logger.info("sync send PDU: {}", pdu);
        } else {
        // logger.info("async send PDU: {}", pdu);
        }
    }
    // write the pdu out & wait timeout amount of time
    ChannelFuture channelFuture = this.getChannel().write(buffer).await();
    // check if the write was a success
    if (!channelFuture.isSuccess()) {
        // the write failed, make sure to throw an exception
        throw new SmppChannelException(channelFuture.getCause().getMessage(), channelFuture.getCause());
    }
    return future;
}
Also used : ChannelFuture(org.jboss.netty.channel.ChannelFuture) PduRequest(com.cloudhopper.smpp.pdu.PduRequest) SmppTimeoutException(com.cloudhopper.smpp.type.SmppTimeoutException) PduResponse(com.cloudhopper.smpp.pdu.PduResponse) UnrecoverablePduException(com.cloudhopper.smpp.type.UnrecoverablePduException) OfferTimeoutException(com.cloudhopper.commons.util.windowing.OfferTimeoutException) SmppChannelException(com.cloudhopper.smpp.type.SmppChannelException) DuplicateKeyException(com.cloudhopper.commons.util.windowing.DuplicateKeyException) SmppSessionListener(com.cloudhopper.smpp.SmppSessionListener) ChannelBuffer(org.jboss.netty.buffer.ChannelBuffer)

Aggregations

DuplicateKeyException (com.cloudhopper.commons.util.windowing.DuplicateKeyException)1 OfferTimeoutException (com.cloudhopper.commons.util.windowing.OfferTimeoutException)1 SmppSessionListener (com.cloudhopper.smpp.SmppSessionListener)1 PduRequest (com.cloudhopper.smpp.pdu.PduRequest)1 PduResponse (com.cloudhopper.smpp.pdu.PduResponse)1 SmppChannelException (com.cloudhopper.smpp.type.SmppChannelException)1 SmppTimeoutException (com.cloudhopper.smpp.type.SmppTimeoutException)1 UnrecoverablePduException (com.cloudhopper.smpp.type.UnrecoverablePduException)1 ChannelBuffer (org.jboss.netty.buffer.ChannelBuffer)1 ChannelFuture (org.jboss.netty.channel.ChannelFuture)1