code: public void run(){
        switch(mode){
          case START_MODE:
           try{
             startSession();
           }catch(IOException ioe){
             handleException(ioe);
             //ioe.printStackTrace();
           }finally{
             abort();
             if(auth!=null) auth.endSession();
             log("Main thread(client->remote)stopped.");
           }
          break;
          case ACCEPT_MODE:
            try{
              doAccept();
              mode = PIPE_MODE;
              pipe_thread1.interrupt(); //Tell other thread that connection have
                                        //been accepted.
              pipe(remote_in,out);
            }catch(IOException ioe){
              //log("Accept exception:"+ioe);
              handleException(ioe);
            }finally{
              abort();
              log("Accept thread(remote->client) stopped");
            }
          break;
          case PIPE_MODE:
           try{
              pipe(remote_in,out);
           }catch(IOException ioe){
           }finally{
              abort();
              log("Support thread(remote->client) stopped");
           }
          break;
          case ABORT_MODE:
          break;
          default:
           log("Unexpected MODE "+mode);
        }
     }
docs: //////////////////