private int getWaittimeBeforeFirstIPCheck() {
   int ret = 0;
   if (!storage.isIPCheckGloballyDisabled()) {
     // use own ipcheck if possible
     if (this.getActivePlugin().getIPCheckProvider() != null) {
       ret = this.getActivePlugin().getWaittimeBeforeFirstIPCheck();
     } else {
       ret = storage.getSecondsBeforeFirstIPCheck();
     }
   }
   // ip check disabled
   return Math.max(ret, 0);
 }
 /**
  * Performs a reconnect with plugin plg.
  *
  * @param retry
  * @param plg
  * @return
  * @throws InterruptedException
  * @throws ReconnectException
  */
 protected final boolean doReconnect(final RouterPlugin plg, LogSource logger)
     throws InterruptedException, ReconnectException {
   final int waittime = Math.max(this.getWaittimeBeforeFirstIPCheck(), 0);
   // make sure that we have the current ip
   logger.info("IP Before=" + IPController.getInstance().getIP());
   try {
     final ReconnectInvoker invoker = plg.getReconnectInvoker();
     if (invoker == null) {
       throw new ReconnectException(
           "Reconnect Plugin  \"" + plg.getName() + "\" is not set up correctly. Invoker==null");
     }
     invoker.setLogger(logger);
     invoker.run();
     logger.finer("Initial Waittime: " + waittime + " seconds");
     Thread.sleep(waittime * 1000);
     return IPController.getInstance()
         .validateAndWait(
             this.getWaitForIPTime(),
             Math.max(0, storage.getSecondsToWaitForOffline()),
             this.getIpCheckInterval());
   } catch (RuntimeException e) {
     logger.log(e);
     throw new ReconnectException(e);
   } finally {
     logger.info("IP AFTER=" + IPController.getInstance().getIP());
   }
 }
 /**
  * returns how long the controller has to wait between two ip checks
  *
  * @return
  */
 private int getIpCheckInterval() {
   int ret = 0;
   if (!storage.isIPCheckGloballyDisabled()) {
     // use own ipcheck if possible
     if (this.getActivePlugin().getIPCheckProvider() != null) {
       ret = this.getActivePlugin().getIPCheckProvider().getIpCheckInterval();
     } else {
       ret = 5;
     }
   }
   // ip check disabled
   return Math.max(ret, 0);
 }
 /**
  * returns the currently active routerplugin. Only one plugin may be active
  *
  * @return
  */
 public RouterPlugin getActivePlugin() {
   // convert only once
   String id = storage.getActivePluginID();
   if (id == null) {
     id = this.convertFromOldSystem();
     this.storage.setActivePluginID(id);
   }
   RouterPlugin active = ReconnectPluginController.getInstance().getPluginByID(id);
   if (active == null) {
     active = DummyRouterPlugin.getInstance();
     this.storage.setActivePluginID(active.getID());
   }
   return active;
 }
 private int getWaitForIPTime() {
   return Math.max(storage.getSecondsToWaitForIPChange(), 0);
 }