Пример #1
0
  public void die(Exception ex) {
    close.lock();
    try {
      if (!close.isSet()) {

        log.error("Dying because - {}", ex);

        final SSHException causeOfDeath = SSHException.chainer.chain(ex);

        disconnectListener.notifyDisconnect(
            causeOfDeath.getDisconnectReason(), causeOfDeath.getMessage());

        ErrorDeliveryUtil.alertEvents(causeOfDeath, close, serviceAccept);
        kexer.notifyError(causeOfDeath);
        getService().notifyError(causeOfDeath);
        setService(nullService);

        { // Perhaps can send disconnect packet to server
          final boolean didNotReceiveDisconnect = msg != Message.DISCONNECT;
          final boolean gotRequiredInfo =
              causeOfDeath.getDisconnectReason() != DisconnectReason.UNKNOWN;
          if (didNotReceiveDisconnect && gotRequiredInfo)
            sendDisconnect(causeOfDeath.getDisconnectReason(), causeOfDeath.getMessage());
        }

        finishOff();

        close.set();
      }
    } finally {
      close.unlock();
    }
  }
Пример #2
0
 private void gotServiceAccept() throws TransportException {
   serviceAccept.lock();
   try {
     if (!serviceAccept.hasWaiters())
       throw new TransportException(
           DisconnectReason.PROTOCOL_ERROR,
           "Got a service accept notification when none was awaited");
     serviceAccept.set();
   } finally {
     serviceAccept.unlock();
   }
 }
Пример #3
0
 @Override
 public void reqService(Service service) throws TransportException {
   serviceAccept.lock();
   try {
     serviceAccept.clear();
     sendServiceRequest(service.getName());
     serviceAccept.await(timeoutMs, TimeUnit.MILLISECONDS);
     setService(service);
   } finally {
     serviceAccept.unlock();
   }
 }
Пример #4
0
 @Override
 public void disconnect(DisconnectReason reason, String message) {
   close.lock();
   try {
     if (isRunning()) {
       disconnectListener.notifyDisconnect(reason, message);
       getService().notifyError(new TransportException(reason, "Disconnected"));
       sendDisconnect(reason, message);
       finishOff();
       close.set();
     }
   } finally {
     close.unlock();
   }
 }