📄 worker.java
字号:
// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: OpenCHAT.java
import java.io.*;
import java.net.*;
import java.util.*;
class Worker extends OpenCHAT
implements Runnable
{
Worker()
{
error = null;
s = null;
}
synchronized void setSocket(Socket s)
{
this.s = s;
notify();
}
public synchronized void run()
{
Vector pool = new Vector();
{
if(s == null)
try
{
wait();
}
catch(InterruptedException e)
{
return; /* Loop/switch isn't completed */
}
try
{
handleClient();
}
catch(Exception e)
{
e.printStackTrace();
}
s = null;
pool = OpenCHAT.threads;
synchronized(pool)
{
if(pool.size() < Integer.parseInt(OpenCHAT.getProperty("CHAT_SERVER_WORKERS")))
return;;
}
return;
}
// vector;
// if(true) goto _L2; else goto _L1;
//_L1:
// Exception exception ;
// throw exception;
}
void handleClient()
throws IOException
{
String request;
String topHeader;
String URI;
String scriptName;
Hashtable URIParam;
Hashtable requestENV;
Hashtable cookie;
BufferedReader is;
PrintStream ps;
request = null;
int Damm;
topHeader = "";
URI = null;
String queryString = null;
scriptName = null;
String httpMethod = null;
URIParam = new Hashtable();
requestENV = new Hashtable();
cookie = new Hashtable();
p("Client connection from " + s.getInetAddress().getHostAddress() + ":" + s.getPort());
is = new BufferedReader(new InputStreamReader(s.getInputStream(), OpenCHAT.getProperty("CHAT_DEFAULT_CHARSET")));
ps = new PrintStream(s.getOutputStream(), false, OpenCHAT.getProperty("CHAT_DEFAULT_CHARSET"));
s.setSoTimeout(Integer.parseInt(OpenCHAT.getProperty("CHAT_CLIENT_TIMEOUT")));
s.setTcpNoDelay(true);
String inputLine;
while((inputLine = is.readLine()) != null && !inputLine.equals(""))
{
request = request + inputLine;
if(topHeader.equals(""))
{
topHeader = inputLine;
} else
{
int sep = inputLine.indexOf(": ") < 0 ? inputLine.length() : inputLine.indexOf(": ");
String key = inputLine.substring(0, sep);
String val = sep == inputLine.length() ? "" : inputLine.substring(sep + 2, inputLine.length());
if(!key.equals("Cookie"))
{
requestENV.put(key.toLowerCase(), val);
} else
{
sep = val.indexOf("=") < 0 ? val.length() : val.indexOf("=");
String name = val.substring(0, sep);
String vals[] = new String[5];
int n = 0;
int i = name.length() + 1;
for(int f = val.indexOf("&") < 0 ? val.length() : val.indexOf("&"); i >= 0; f = val.indexOf("&", f + 1) < 0 ? val.length() : val.indexOf("&", f + 1))
{
try
{
vals[n] = URLDecoder.decode(val.substring(i, f), OpenCHAT.getProperty("CHAT_DEFAULT_CHARSET"));
}
catch(Exception e)
{
vals[n] = val.substring(i, f);
}
n++;
i = val.indexOf("&", i + 1) < 0 ? -1 : val.indexOf("&", i + 1) + 1;
}
cookie.put(name, vals);
}
}
}
String topHeaderSplited[] = topHeader.split(" ");
httpMethod = topHeaderSplited[0];
URI = topHeaderSplited[1];
if(URI.startsWith("/"))
URI = URI.substring(1);
if(httpMethod.indexOf("GET") >= 0);
p("Client sent a header diferent than GET");
p(" -> " + topHeader);
ps.print("HTTP/1.0 305 unsupported method type.");
ps.write(EOL);
ps.flush();
s.close();
s.close();
Domain Domain;
User thisUser;
String URISplited[] = URI.split("[?]", 2);
scriptName = URISplited.length <= 0 ? "" : URISplited[0];
queryString = URISplited.length <= 1 ? "" : URISplited[1];
String queryStringSplited[] = queryString.split("&");
for(int i = 0; i < queryStringSplited.length; i++)
{
String keyval[] = queryStringSplited[i].split("=", 2);
try
{
keyval[0] = URLDecoder.decode(keyval[0], OpenCHAT.getProperty("CHAT_DEFAULT_CHARSET"));
}
catch(Exception e) { }
if(keyval[0].length() > 0)
URIParam.put(keyval[0], keyval.length != 2 || keyval[1].length() <= 0 ? "" : ((Object) (URLDecoder.decode(keyval[1], OpenCHAT.getProperty("CHAT_DEFAULT_CHARSET")))));
}
if(requestENV.containsKey("host") && ((String)requestENV.get("host")).indexOf(":") > -1)
requestENV.put("host", ((String)requestENV.get("host")).replaceAll(":.*", ""));
// Root;
Domain = Root.getDomain((String)requestENV.get("host"));
if(!scriptName.equals(OpenCHAT.getProperty("CHAT_VIRTUAL_ROOT") + "Top"))
return;
thisUser = User.getUser((String)URIParam.get("serial"), (String)URIParam.get("pass"));
if(thisUser != null)
return;
boolean OK = printHeaders(ps);
ps.print(Domain.apllyLang(Domain.defaultLang, "<h1><OpenCHAT:lang:User_not_found></h1>"));
ps.print(Domain.apllyLang(thisUser.defaultLang, Domain.getTemplate("preOpened", thisUser.Room.Name, "Top")));
ps.println("<!-- OpenCHAT (www.sistemica.info) -->");
if(scriptName.equals(OpenCHAT.getProperty("CHAT_VIRTUAL_ROOT") + "Reader"))
{
Damm = 1;
User User = new User((String)requestENV.get("host"), (String)URIParam.get("type"), (String)URIParam.get("room"), (String)URIParam.get("u"), (String)URIParam.get("serial"), (String)URIParam.get("pass"), ps, Domain.defaultLang);
if(User.error != null)
{
OK = printHeaders(ps);
ps.print(User.error);
s.close();
} else
{
OpenCHAT.p(" Domain:" + User.Domain.Name + "/" + User.type + " : " + User.Name + " logged in the room: " + User.Room.Name);
OK = printHeaders(ps);
ps.print(Domain.apllyLang(User.defaultLang, Domain.getTemplate("preOpened", User.Room.Name, "Reader")));
ps.println("<!-- OpenCHAT (www.sistemica.info) -->");
ps.println(Domain.apllyLang(User.defaultLang, OpenCHAT.getProperty("CHAT_READER_WELCOME_MESSAGE")));
User.Room.sendAction(User.Name, "<OpenCHAT:lang:logged_in_the_room>");
s.setSoTimeout(0);
String newLine;
try
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -