import java.net.*; import java.io.*; /* Thibaut Colar last m: 2/9/98 Cette classe est appelé par le browser (cv'est un cgi) il est lancé via cgi.bat qui ce contente de le lancer (java cgi) */ class cgi { static int port; // port local auquel sera connecter la socket static final String logFile="C:/applications/httpd/logs/trace.log"; // chemin du fichier de log du serveur prevu pour httpd public static void main(String argv[]) { port=readport(); cgi_app mycgi = new cgi_app(port); } static int readport() { return 9090; // Port auquel sera connecter la socket fixer à 9090 sans raison particuliére } } /* classe principale */ class cgi_app { masocket soc=new masocket(); cgi_app(int port) { if (soc.connecter(liretracelog(),port)!=true) erreur(1); //creation de la socket if (soc.connecterFlux()!=true) erreur(2); //connection des flux d'entrée sortie sur la socket System.out.println("Connected whith client"); int answer =new Integer(soc.lire()).intValue(); //lecture de la réponse du prg c if (answer!=0) erreur(answer); else questionnaire(); } /* cette fonction vas lire dans le fichier trace.log (pour le serveur web httpd) l'adresse du client ayant lancer la requette cgi. à améliorer */ String liretracelog() { String txt=""; File fichier1= new File(logFile); //fichier de log du serveur http if (!fichier1.exists()) erreur(3); else { try { FileInputStream inps = new FileInputStream(fichier1); int nb; nb=inps.available(); byte [] c=new byte[nb-1]; inps.read(c,0,nb-1); // dernier saut de ligne txt=new String(c); // on récupére la derniére ligne du fichier (le dernier client sétant loggé) inps.close(); } catch (Exception excp1) {erreur(4);} } int debutip=txt.lastIndexOf('\n')+1; String derniereligne = txt.substring(debutip,txt.length()); int lgip=derniereligne.indexOf(' '); return txt.substring(debutip,debutip+lgip); // récupération de l'ip du client p&armis les données } /* déstiné a contenir plus tard le questionnaire */ void questionnaire() { System.out.println(" ERROR

"); System.out.println("
Profil lu, acces OK
"); System.out.println("

"); System.exit(0); } /* affichage des messages d'erreur */ void erreur(int num) { System.out.println(" ERROR

"); switch (num) { case 1: System.out.println("SERVER ERROR "+num+" : Unable to create socket, is client running ??"); break; case 2: System.out.println("SERVER ERROR "+num+" : Unable to create streams"); break; case 3: System.out.println("SERVER ERROR "+num+" : Trace.log File not found!"); break; case 4: System.out.println("SERVER ERROR "+num+" : Can't read Trace.log"); break; case 10: System.out.println("CLIENT ERROR "+num+" : Can't start mini.exe"); break; case 11: System.out.println("CLIENT ERROR "+num+" : Can't open channel (Port Error)"); break; case 12: System.out.println("CLIENT ERROR "+num+" : Can't open session (Card Present?)"); break; case 13: System.out.println("CLIENT ERROR "+num+" : Library Initialisation Failed(Wrong Card?)"); break; case 14: System.out.println("CLIENT ERROR "+num+" : Authentification Error(Wrong Card?)"); break; case 15: System.out.println("CLIENT ERROR "+num+" : Secret Code Error"); break; case 16: System.out.println("CLIENT ERROR "+num+" : Wrong Secret Code One verication left !"); break; case 17: System.out.println("CLIENT ERROR "+num+" : Secret Code Locked !"); break; } System.out.println("

"); System.exit(0); } }