KeepAliveWrapper.java

package fr.umlv.ji.tcp;
import java.net.*;
import java.lang.reflect.*;
import java.io.*;
/** Classe permettant d'adapter une exécution standard de sorte
    qu'elle "passe" par le relai SOCKS. */ 
public class KeepAliveWrapper {
  public static void main(String[] args) {
    if (args.length<1) { System.err.println("Usage: "
       + "java fr.umlv.ji.tcp.KeepAliveWrapper class args");
      System.exit(1);
    }
    try {
      SocketImplFactory f = new KeepAliveSocketImplFactory();
      // Mise en place de la fabrique
      Socket.setSocketImplFactory(f);
      ServerSocket.setSocketFactory(f);
      // Récupération de la classe du code à exécuter
      Class c = Class.forName(args[0]);
      // Récupération de la méthode statique main() sur cette classe
      Method m = c.getMethod("main", new Class[]{args.getClass()});
      // Récupération des arguments destinés à cet appel
      String[] newArgs = new String[args.length-1];
      System.arraycopy(args, 1, newArgs, 0, newArgs.length);
      // Invocation de la méthode avec ses arguments
      m.invoke(null,new Object[]{newArgs});
    } catch (Exception e) {
      System.err.println("Echec de l'adaptation des sockets :");
      e.printStackTrace(System.err);
    }
  }
}