Package javapayload.handler.stager

Source Code of javapayload.handler.stager.ListeningStagerHandler

/*
* Java Payloads.
*
* Copyright (c) 2010, Michael 'mihi' Schierl
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright notice,
*   this list of conditions and the following disclaimer.
*  
* - Redistributions in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in the
*   documentation and/or other materials provided with the distribution.
*  
* - Neither name of the copyright holders nor the names of its
*   contributors may be used to endorse or promote products derived from
*   this software without specific prior written permission.
*  
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND THE CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package javapayload.handler.stager;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import javapayload.handler.stage.StageHandler;

public abstract class ListeningStagerHandler extends StagerHandler {

  protected final void handle(StageHandler stageHandler, String[] parameters, PrintStream errorStream, Object extraArg) throws Exception {
    startListen(parameters);
    final Object socket = acceptSocket();
    stopListen();
    handleSocket(socket, stageHandler, parameters, errorStream);
  }

  protected final boolean needHandleBeforeStart() {
    return true;
  }
 
  private boolean multiRunning = true;
  private boolean multiListening = false;
 
  public void handleMulti(StageHandler stageHandler, final String[] parameters, final PrintStream errorStream) throws Exception {
    final PrintStream consoleOut = stageHandler.consoleOut;
    synchronized(this) {
      if (multiRunning) {
        startListen(parameters);
        multiListening = true;
        consoleOut.println("Listening started");
      }
    }
    while (multiRunning) {
      final Object socket = acceptSocket();
      final ByteArrayOutputStream baos = new ByteArrayOutputStream();
      final StageHandler realStageHandler = stageHandler.createClone(new PrintStream(baos, true));
      new Thread(new Runnable() {
        public void run() {
          try {
            handleSocket(socket, realStageHandler, parameters, errorStream);
            synchronized(ListeningStagerHandler.this) {
              consoleOut.println("=== BEGIN INSTANCE ===");
              consoleOut.write(baos.toByteArray());
              consoleOut.println();
              consoleOut.println("=== END INSTANCE ===");
            }
          } catch (Exception ex) {
            synchronized(ListeningStagerHandler.this) {
              ex.printStackTrace(consoleOut);
            }
          }
        }
      }).start();
    }
    synchronized(this) {
      if (multiListening) {
        stopListen();
        multiListening = false;
      }
      consoleOut.println("Listening stopped");
    }
  }

  public synchronized void stopMulti() throws Exception {
    multiRunning = false;
    if (multiListening) {
      stopListen();
      multiListening = false;
    }
  }
 
  protected abstract void startListen(String[] parameters) throws Exception;
  protected abstract void stopListen() throws Exception;
  protected abstract Object acceptSocket() throws Exception;
  protected abstract void handleSocket(Object socket, StageHandler stageHandler, String[] parameters, PrintStream errorStream) throws Exception;
}
TOP

Related Classes of javapayload.handler.stager.ListeningStagerHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.