this.channel = channel;
this.boundTime = new AtomicLong(0);
this.sessionHandler = (sessionHandler == null ? new DefaultSmppSessionHandler(logger) : sessionHandler);
this.sequenceNumber = new SequenceNumber();
// always "wrap" the custom pdu transcoder context with a default one
this.transcoder = new DefaultPduTranscoder(new DefaultPduTranscoderContext(this.sessionHandler));
this.monitorExecutor = monitorExecutor;
// different ways to construct the window if monitoring is enabled
if (monitorExecutor != null && configuration.getWindowMonitorInterval() > 0) {
// enable send window monitoring, verify if the monitoringInterval has been set