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);
}
}