mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-23 11:35:56 +00:00
trunk contents moved to root
This commit is contained in:
281
libsrc/jpproxy/src/com/jpexs/proxy/Request.java
Normal file
281
libsrc/jpproxy/src/com/jpexs/proxy/Request.java
Normal file
@@ -0,0 +1,281 @@
|
||||
package com.jpexs.proxy;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
|
||||
public class Request extends Message
|
||||
{
|
||||
|
||||
private String command = null;
|
||||
private String url = null;
|
||||
private String protocol = null;
|
||||
private byte[] data = null;
|
||||
private Client client = null;
|
||||
private Hashtable log;
|
||||
private Vector logHeaders;
|
||||
public boolean hadKeepalive=false;
|
||||
|
||||
|
||||
Request(Client c)
|
||||
{
|
||||
client = c;
|
||||
}
|
||||
|
||||
void read(InputStream in) throws IOException
|
||||
{
|
||||
statusLine = readLine(in);
|
||||
if (statusLine == null || statusLine.length() == 0)
|
||||
{
|
||||
throw new IOException("Empty request");
|
||||
}
|
||||
|
||||
StringTokenizer st = new StringTokenizer(statusLine);
|
||||
command = (String) st.nextToken();
|
||||
url = (String) st.nextToken();
|
||||
protocol = (String) st.nextToken();
|
||||
|
||||
if (!url.startsWith("http"))
|
||||
{
|
||||
//TODO do something here
|
||||
}
|
||||
|
||||
readHeaders(in);
|
||||
|
||||
if ("POST".equals(command) || "PUT".equals(command))
|
||||
{
|
||||
try
|
||||
{
|
||||
int n = Integer.parseInt(getHeaderField("Content-length"));
|
||||
data = new byte[n];
|
||||
int offset = 0;
|
||||
while (offset < data.length)
|
||||
{
|
||||
n = in.read(data, offset, data.length - offset);
|
||||
if (n < 0)
|
||||
{
|
||||
throw new IOException("Not enough " + command + " data");
|
||||
}
|
||||
offset += n;
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void write(OutputStream out)
|
||||
throws IOException
|
||||
{
|
||||
super.write(out);
|
||||
if (data != null)
|
||||
{
|
||||
out.write(data);
|
||||
out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
public String getRequest()
|
||||
{
|
||||
return statusLine;
|
||||
}
|
||||
|
||||
public String getCommand()
|
||||
{
|
||||
return command;
|
||||
}
|
||||
|
||||
public void setCommand(String command)
|
||||
{
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public String getURL()
|
||||
{
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setURL(String url)
|
||||
{
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getProtocol()
|
||||
{
|
||||
return protocol;
|
||||
}
|
||||
|
||||
public void setProtocol(String protocol)
|
||||
{
|
||||
this.protocol = protocol;
|
||||
}
|
||||
|
||||
public void addSecureHostToURL(String host){
|
||||
url="https://"+host+url;
|
||||
}
|
||||
|
||||
public String getHost()
|
||||
{
|
||||
String url = getURL();
|
||||
String s;
|
||||
|
||||
if (url.startsWith("http://"))
|
||||
{
|
||||
s = url.substring(7, url.indexOf('/', 7));
|
||||
}
|
||||
else if (url.startsWith("https://"))
|
||||
{
|
||||
s = url.substring(8, url.indexOf('/', 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
s = url;
|
||||
}
|
||||
|
||||
int at = s.indexOf('@');
|
||||
if (at != -1 )
|
||||
{
|
||||
s = s.substring(at+1);
|
||||
}
|
||||
|
||||
if (s.indexOf(':') != -1)
|
||||
{
|
||||
return s.substring(0, s.indexOf(':'));
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
public int getPort()
|
||||
{
|
||||
int port = 80;
|
||||
String url = getURL();
|
||||
String s;
|
||||
|
||||
if (url.startsWith("http://"))
|
||||
{
|
||||
s = url.substring(7, url.indexOf('/', 7));
|
||||
}
|
||||
else if (url.startsWith("https://"))
|
||||
{
|
||||
s = url.substring(8, url.indexOf('/', 8));
|
||||
port=443;
|
||||
}
|
||||
else
|
||||
{
|
||||
s = url;
|
||||
}
|
||||
|
||||
int at = s.indexOf('@');
|
||||
if (at != -1 )
|
||||
{
|
||||
s = s.substring(at+1);
|
||||
}
|
||||
|
||||
if (s.indexOf(':') != -1)
|
||||
{
|
||||
try
|
||||
{
|
||||
port = Integer.parseInt(s.substring(s.indexOf(':') + 1));
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
return port;
|
||||
}
|
||||
|
||||
public String getData()
|
||||
{
|
||||
if (data == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new String(data);
|
||||
}
|
||||
|
||||
public String getPath()
|
||||
{
|
||||
String str = getURL();
|
||||
int pos = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
pos = str.indexOf('/', pos);
|
||||
pos++;
|
||||
}
|
||||
pos--;
|
||||
return str.substring(pos);
|
||||
}
|
||||
|
||||
public String getDocument()
|
||||
{
|
||||
String path = getPath();
|
||||
int n = path.lastIndexOf('/');
|
||||
if (n == path.length() - 1)
|
||||
{
|
||||
n = path.lastIndexOf('/', n - 1);
|
||||
}
|
||||
if (n < 0)
|
||||
{
|
||||
return "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
return path.substring(n + 1);
|
||||
}
|
||||
}
|
||||
|
||||
public Client getClient()
|
||||
{
|
||||
return client;
|
||||
}
|
||||
|
||||
public String getQueryString()
|
||||
{
|
||||
String path = getPath();
|
||||
int n = path.indexOf('?');
|
||||
if (n < 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return path.substring(n + 1);
|
||||
}
|
||||
|
||||
public synchronized void addLogEntry(String header,
|
||||
String message)
|
||||
{
|
||||
if (log == null)
|
||||
{
|
||||
log = new Hashtable();
|
||||
logHeaders = new Vector();
|
||||
}
|
||||
|
||||
Vector v = (Vector)log.get(header);
|
||||
if (log.get(header) == null)
|
||||
{
|
||||
v = new Vector();
|
||||
log.put(header, v);
|
||||
logHeaders.addElement(header);
|
||||
}
|
||||
v.addElement(message);
|
||||
}
|
||||
|
||||
public Enumeration getLogHeaders()
|
||||
{
|
||||
return logHeaders != null ? logHeaders.elements() : null;
|
||||
}
|
||||
|
||||
public Enumeration getLogEntries(String header)
|
||||
{
|
||||
return log != null ? ((Vector)log.get(header)).elements() : null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user