// ------------------------------------------------------------------------- private S2SConnector getS2SConnector(String hostname) throws Exception { S2SConnector s2s = null; synchronized (hostnameAndS2SMap) { s2s = hostnameAndS2SMap.get(hostname); if (s2s != null && !s2s.isAlive()) { defaultNeximLogger.info("Removing s2s for hostname (thread not alive) " + hostname); hostnameAndS2SMap.remove(hostname); s2s = null; } if (s2s == null || s2s.getSession().isClosed()) { s2s = s2sConnectorFactory.createS2SConnector(); s2s.setIMConnectionHandler(connectionHandler); s2s.setRouter(router); s2s.setSessionsManager(sessionsManager); s2s.setToHostname(hostname); new Thread(s2s).start(); hostnameAndS2SMap.put(hostname, s2s); } } return s2s; }
// ---------------------------------------------------------------------- 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