code: public synchronized void startup() throws IllegalStateException, RuntimeException
      {
          if (agiServer == null)
          {
              throw new IllegalStateException("Mandatory property agiServer is not set.");
          }
  
          if (thread != null)
          {
              throw new IllegalStateException("AgiServer is already started");
          }
  
          thread = createThread();
          thread.start();
      }
docs: Starts the AgiServer in its own thread.
  <p>
  Note: The AgiServerThread is designed to handle one AgiServer instance at
  a time so calling this method twice without stopping the AgiServer in
  between will result in a RuntimeException.
  
  @throws IllegalStateException if the mandatory property agiServer has not
  been set or the AgiServer had already been started.
  @throws RuntimeException if the AgiServer can't be started due to IO
  problems, for example because the socket has already been
  bound by another process.