this.state = new AtomicInteger(STATE_OPEN);
this.configuration = configuration;
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