import java.io.*;
import java.net.*;

class CharsetHTTPEmu extends Thread
{
 BufferedInputStream clientIS;
 BufferedOutputStream clientOS;
 Socket socketToClient;
 String iso88591Header;
 String inHTML88591HTTPEquiv;
 String javaEncoding;
 
 CharsetHTTPEmu(Socket soc) throws Exception
 {
	clientIS = new BufferedInputStream (soc.getInputStream());
	clientOS = new BufferedOutputStream (soc.getOutputStream());
	socketToClient = soc;
 }
 
 public void run()
 {

   String currentDate = ""+new java.util.Date();
   try{
   	System.out.println(currentDate);
 	DataInputStream clientDIS = new DataInputStream (clientIS);
 	String line=clientDIS.readLine(); // GET /22N HTTP/1.1
 	System.out.println("Params: "+line);
 	java.util.StringTokenizer stok = new java.util.StringTokenizer (line);
 	stok.nextToken();
	line = stok.nextToken();
	//System.out.println("Params: "+line);
 	iso88591Header = ""+line.charAt(1); 
  	inHTML88591HTTPEquiv = ""+line.charAt(2); 
  	javaEncoding = ""+line.charAt(3); 
  	if (!javaEncoding.equals("1") && !javaEncoding.equals("2")) javaEncoding = "1";
  	//System.out.println("javaEncoding: "+javaEncoding);
  	
	String toReturn = "<head><title>Encoding test</title>";
	if (!inHTML88591HTTPEquiv.equals("N")) toReturn += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-"+
		inHTML88591HTTPEquiv+"\" />";
	toReturn += "</head>\r\n\r\n<body>"+currentDate
		+"<p>text: <p>8-bit 8859-1-only punctuation marks: "+(char)(145)+(char)(146)+(char)(147)+(char)(148)+(char)(149)
		+"<p>Central-European chars (will ONLY work with the third parameter being 2): "+(char)(337)+(char)(369)
		+"<p>Unicode char entities: &#337;&#369; &#8220;&#8221; &#8216;&#8217;  &#8211; &#8230;<p></body>\r\n\r\n";

 	while (!(line = clientDIS.readLine()).equals(""));  // we need to read in all the client headers even if we just ignore them
		
 	PrintStream pst = new PrintStream (clientOS);
 	PrintWriter ps = new PrintWriter (new OutputStreamWriter(pst, "ISO-8859-"+javaEncoding));
 	ps.println("HTTP/1.0 200 OK");
 	ps.print("Content-Type: text/html");
 	if (!iso88591Header.equals("N")) ps.println("; charset=ISO-8859-"+iso88591Header); else ps.println();
 	ps.println();
	ps.print(toReturn);
	ps.flush();
 	ps.close();
 	socketToClient.close();
 	}
 	catch (Exception e) {System.out.println("error: "+e);}
 }
 
public static void main(java.lang.String[] args) throws Exception
  {
  	ServerSocket ss = new ServerSocket (82);
  	while(true)
		new CharsetHTTPEmu(ss.accept()).start();
 	}
}

