// -------------------------------------------------------------------------
  public void verifyRemoteHost(
      String hostname, String dialbackValue, String id, IMServerSession session) throws Exception {
    S2SConnector s2s = getS2SConnector(hostname);

    s2s.sendVerify(dialbackValue, id);

    if (!s2s.getSession().getDialbackValid()) {
      s2s.sendResult();
    }

    session.setTwinSession(s2s.getSession());
    s2s.getSession().setTwinSession(session);
  }
  // ----------------------------------------------------------------------
  public IMServerSession getRemoteSessionWaitForValidation(String hostname, long timeout)
      throws Exception {
    IMServerSession session = null;
    S2SConnector s2s = null;

    synchronized (hostnameAndS2SMap) {
      s2s = (S2SConnector) hostnameAndS2SMap.get(hostname);

      if (s2s != null && !s2s.getSession().isClosed()) {
        session = s2s.getSession();
      } else {
        s2s = getS2SConnector(hostname);
        session = s2s.getSession();
      }
    }

    synchronized (session) {
      // wait for validation
      if (!session.getDialbackValid()) {
        s2s.sendResult();
        defaultNeximLogger.info("Wait validation for " + hostname + " for session " + session);
        session.wait(timeout);
      }
    }

    if (!session.getDialbackValid()) {
      throw new Exception(
          "Unable to get dialback validation for "
              + hostname
              + " after timeout "
              + timeout
              + " ms");
    }

    defaultNeximLogger.info("Validation granted from " + hostname + " for session " + session);

    return session;
  } // getremote session