@Override
  public void produceData(final IOSession iosession, final ClientState sessionState)
      throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    String myHelo = heloName;
    if (myHelo == null) {
      myHelo = AddressUtils.resolveLocalDomain(iosession.getLocalAddress());
    }
    switch (this.codecState) {
      case EHLO_READY:
        SMTPCommand ehlo = new SMTPCommand("EHLO", myHelo);
        this.writer.write(ehlo, buf);
        this.codecState = CodecState.EHLO_RESPONSE_EXPECTED;
        break;
      case HELO_READY:
        SMTPCommand helo = new SMTPCommand("HELO", myHelo);
        this.writer.write(helo, buf);
        this.codecState = CodecState.HELO_RESPONSE_EXPECTED;
        break;
    }

    if (buf.hasData()) {
      buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
      iosession.clearEvent(SelectionKey.OP_WRITE);
    }
  }
 public DefaultNHttpServerConnection createConnection(final IOSession iosession) {
   org.siddhiesb.transport.http.conn.SSLContextDetails customSSL = null;
   if (sslByIPMap != null) {
     customSSL = sslByIPMap.get(iosession.getLocalAddress());
   }
   if (customSSL == null) {
     customSSL = ssl;
   }
   IOSession customSession;
   if (customSSL != null) {
     customSession =
         new SSLIOSession(
             iosession, SSLMode.SERVER, customSSL.getContext(), customSSL.getHandler());
     iosession.setAttribute(SSLIOSession.SESSION_KEY, customSession);
   } else {
     customSession = iosession;
   }
   DefaultNHttpServerConnection conn =
       LoggingUtils.createServerConnection(customSession, requestFactory, allocator, params);
   int timeout = HttpConnectionParams.getSoTimeout(params);
   conn.setSocketTimeout(timeout);
   return conn;
 }