code: private void sendInitialMessage(final ChannelHandlerContext ctx) throws Exception {
          final long connectTimeoutMillis = this.connectTimeoutMillis;
          if (connectTimeoutMillis > 0) {
              connectTimeoutFuture = ctx.executor().schedule(new Runnable() {
                  @Override
                  public void run() {
                      if (!connectPromise.isDone()) {
                          setConnectFailure(new ProxyConnectException(exceptionMessage("timeout")));
                      }
                  }
              }, connectTimeoutMillis, TimeUnit.MILLISECONDS);
          }
  
          final Object initialMessage = newInitialMessage(ctx);
          if (initialMessage != null) {
              sendToProxyServer(initialMessage);
          }
  
          readIfNeeded(ctx);
      }
docs: Sends the initial message to be sent to the proxy server. This method also starts a timeout task which marks
  the {@link #connectPromise} as failure if the connection attempt does not success within the timeout.