public void run() {

    if (SMPPSim.isCallback()) {
      synchronized (mutex) {
        boolean connected = false;
        Socket callback;
        while (!connected) {
          try {
            callback = new Socket(SMPPSim.getCallback_target_host(), SMPPSim.getCallback_port());
            connected = true;
            smsc.setCallback(callback);
            smsc.setCallback_stream(callback.getOutputStream());
            smsc.setCallback_server_online(true);
            logger.info("Connected to callback server");
          } catch (Exception ce) {
            try {
              logger.info("Callback server not accepting connections - retrying");
              Thread.sleep(1000);
            } catch (InterruptedException ie) {
            }
          }
        }
        mutex.notifyAll();
      }
    }
  }