Many bugfixes and improvements

This commit is contained in:
Ziver Koc 2011-06-24 23:20:59 +00:00
parent c3e3bbf787
commit 363e0c6cfc
52 changed files with 2021 additions and 982 deletions

View file

@ -13,13 +13,13 @@ import java.util.HashMap;
*/
public class HttpPrintStream extends PrintStream{
// Defines the type of message
public enum HTTPMessageType{
public enum HttpMessageType{
REQUEST,
RESPONSE
}
// This defines the type of message that will be generated
private HTTPMessageType message_type;
private HttpMessageType message_type;
// The status code of the message, ONLY for response
private Integer res_status_code;
// The request type of the message ONLY for request
@ -27,9 +27,9 @@ public class HttpPrintStream extends PrintStream{
// The requesting url ONLY for request
private String req_url;
// An Map of all the header values
private HashMap<String, String> header;
private HashMap<String, String> headers;
// An Map of all the cookies
private HashMap<String, String> cookie;
private HashMap<String, String> cookies;
// The buffered header
private StringBuffer buffer;
// If the header buffering is enabled
@ -42,7 +42,7 @@ public class HttpPrintStream extends PrintStream{
* @param out is the OutputStream to send the message
*/
public HttpPrintStream(OutputStream out) {
this( out, HTTPMessageType.RESPONSE );
this( out, HttpMessageType.RESPONSE );
}
/**
* Creates an new instance of HttpPrintStream with
@ -51,13 +51,13 @@ public class HttpPrintStream extends PrintStream{
* @param out is the OutputStream to send the message
* @param type is the type of message
*/
public HttpPrintStream(OutputStream out, HTTPMessageType type) {
public HttpPrintStream(OutputStream out, HttpMessageType type) {
super(out);
this.message_type = type;
res_status_code = 0;
header = new HashMap<String, String>();
cookie = new HashMap<String, String>();
headers = new HashMap<String, String>();
cookies = new HashMap<String, String>();
buffer = new StringBuffer();
buffer_enabled = false;
}
@ -84,9 +84,9 @@ public class HttpPrintStream extends PrintStream{
* @throws Exception Throws exception if the header has already been sent
*/
public void setCookie(String key, String value) throws RuntimeException{
if(cookie == null)
if(cookies == null)
throw new RuntimeException("Header already sent!!!");
cookie.put(key, value);
cookies.put(key, value);
}
/**
@ -97,9 +97,9 @@ public class HttpPrintStream extends PrintStream{
* @throws Exception Throws exception if the header has already been sent
*/
public void setHeader(String key, String value) throws RuntimeException{
if(header == null)
if(headers == null)
throw new RuntimeException("Header already sent!!!");
header.put(key, value);
headers.put(key, value);
}
/**
@ -111,7 +111,7 @@ public class HttpPrintStream extends PrintStream{
public void setStatusCode(int code) throws RuntimeException{
if( res_status_code == null )
throw new RuntimeException("Header already sent!!!");
if( message_type != HTTPMessageType.RESPONSE )
if( message_type != HttpMessageType.RESPONSE )
throw new RuntimeException("Status Code is only available in HTTP RESPONSE!!!");
res_status_code = code;
}
@ -125,7 +125,7 @@ public class HttpPrintStream extends PrintStream{
public void setRequestType(String req_type) throws RuntimeException{
if( req_type == null )
throw new RuntimeException("Header already sent!!!");
if( message_type != HTTPMessageType.REQUEST )
if( message_type != HttpMessageType.REQUEST )
throw new RuntimeException("Request Message Type is only available in HTTP REQUEST!!!");
this.req_type = req_type;
}
@ -138,11 +138,18 @@ public class HttpPrintStream extends PrintStream{
public void setRequestURL(String req_url) throws RuntimeException{
if( req_url == null )
throw new RuntimeException("Header already sent!!!");
if( message_type != HTTPMessageType.REQUEST )
if( message_type != HttpMessageType.REQUEST )
throw new RuntimeException("Request URL is only available in HTTP REQUEST!!!");
this.req_url = req_url;
}
protected void setHeaders( HashMap<String,String> map ){
headers = map;
}
protected void setCookies( HashMap<String,String> map ){
cookies = map;
}
/**
* Prints with a new line
*/
@ -166,40 +173,40 @@ public class HttpPrintStream extends PrintStream{
}
else{
if(res_status_code != null){
if( message_type==HTTPMessageType.REQUEST )
super.print(req_type+" "+req_url+" HTTP/1.1");
if( message_type==HttpMessageType.REQUEST )
super.print(req_type+" "+req_url+" HTTP/1.0");
else
super.print("HTTP/1.1 "+res_status_code+" "+getStatusString(res_status_code));
super.print("HTTP/1.0 "+res_status_code+" "+getStatusString(res_status_code));
super.println();
res_status_code = null;
req_type = null;
req_url = null;
}
if(header != null){
for(String key : header.keySet()){
super.print(key+": "+header.get(key));
if(headers != null){
for(String key : headers.keySet()){
super.print(key+": "+headers.get(key));
super.println();
}
header = null;
headers = null;
}
if(cookie != null){
if( !cookie.isEmpty() ){
if( message_type==HTTPMessageType.REQUEST ){
if(cookies != null){
if( !cookies.isEmpty() ){
if( message_type==HttpMessageType.REQUEST ){
super.print("Cookie: ");
for(String key : cookie.keySet()){
super.print(key+"="+cookie.get(key)+"; ");
for(String key : cookies.keySet()){
super.print(key+"="+cookies.get(key)+"; ");
}
super.println();
}
else{
for(String key : cookie.keySet()){
super.print("Set-Cookie: "+key+"="+cookie.get(key)+";");
for(String key : cookies.keySet()){
super.print("Set-Cookie: "+key+"="+cookies.get(key)+";");
super.println();
}
}
}
super.println();
cookie = null;
cookies = null;
}
super.print(s);
}
@ -215,7 +222,7 @@ public class HttpPrintStream extends PrintStream{
buffer.delete(0, buffer.length());
buffer_enabled = true;
}
else if(res_status_code != null || header != null || cookie != null){
else if(res_status_code != null || headers != null || cookies != null){
printOrBuffer("");
}
super.flush();