From c21b22988279e8de6e9a30f8cdc48158914e5750 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Mon, 18 May 2009 12:52:16 +0000 Subject: [PATCH] bug fix --- src/zutil/network/http/HttpPage.java | 10 +++---- src/zutil/network/http/HttpServer.java | 29 ++++++++++--------- src/zutil/network/http/soap/SOAPHttpPage.java | 8 +++-- src/zutil/test/HTTPGuessTheNumber.java | 11 +++---- src/zutil/test/HTTPUploaderTest.java | 9 +++--- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/zutil/network/http/HttpPage.java b/src/zutil/network/http/HttpPage.java index 174f13b..2d76325 100644 --- a/src/zutil/network/http/HttpPage.java +++ b/src/zutil/network/http/HttpPage.java @@ -1,6 +1,6 @@ package zutil.network.http; -import java.util.HashMap; +import java.util.Map; /** * This is a interface for a ordinary page for the HttpServer @@ -21,8 +21,8 @@ public interface HttpPage{ * @param request is POST and GET requests from the client */ public abstract void respond(HttpPrintStream out, - HashMap client_info, - HashMap session, - HashMap cookie, - HashMap request); + Map client_info, + Map session, + Map cookie, + Map request); } \ No newline at end of file diff --git a/src/zutil/network/http/HttpServer.java b/src/zutil/network/http/HttpServer.java index f86d79c..51e0774 100644 --- a/src/zutil/network/http/HttpServer.java +++ b/src/zutil/network/http/HttpServer.java @@ -10,7 +10,9 @@ import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.cert.CertificateException; +import java.util.Collections; import java.util.HashMap; +import java.util.Map; import java.util.Timer; import java.util.TimerTask; import java.util.regex.Pattern; @@ -19,6 +21,7 @@ import javax.net.ssl.SSLServerSocketFactory; import zutil.MultiPrintStream; + /** * A simple web server that handles both cookies and * sessions for all the clients @@ -38,7 +41,7 @@ public class HttpServer extends Thread{ private HashMap pages; private HttpPage defaultPage; - private HashMap> sessions; + private Map> sessions; private int nextSessionId; /** @@ -67,7 +70,7 @@ public class HttpServer extends Thread{ this.keyStore = keyStore; pages = new HashMap(); - sessions = new HashMap>(); + sessions = Collections.synchronizedMap(new HashMap>()); nextSessionId = 0; Timer timer = new Timer(); @@ -82,17 +85,17 @@ public class HttpServer extends Thread{ */ private class GarbageCollector extends TimerTask { public void run(){ - synchronized(sessions) { - for(String key : sessions.keySet()){ - HashMap client_session = sessions.get(key); + Object[] keys = sessions.keySet().toArray(); + for(Object key : keys){ + Map client_session = sessions.get(key); - // Check if session is still valid - if((Long)client_session.get("ttl") < System.currentTimeMillis()){ - sessions.remove(key); - if(DEBUG) MultiPrintStream.out.println("Removing Session: "+key); - } + // Check if session is still valid + if((Long)client_session.get("ttl") < System.currentTimeMillis()){ + sessions.remove(key); + if(DEBUG) MultiPrintStream.out.println("Removing Session: "+key); } } + } } @@ -259,14 +262,14 @@ public class HttpServer extends Thread{ //**************************** HANDLE REQUEST ********************************* // Get the client session or create one - HashMap client_session; + Map client_session; long ttl_time = System.currentTimeMillis()+SESSION_TTL; if(cookie.containsKey("session_id") && sessions.containsKey(cookie.get("session_id"))){ client_session = sessions.get(cookie.get("session_id")); // Check if session is still valid if((Long)client_session.get("ttl") < System.currentTimeMillis()){ int session_id = (Integer)client_session.get("session_id"); - client_session = new HashMap(); + client_session = Collections.synchronizedMap(new HashMap()); client_session.put("session_id", session_id); sessions.put(""+session_id, client_session); } @@ -274,7 +277,7 @@ public class HttpServer extends Thread{ client_session.put("ttl", ttl_time); } else{ - client_session = new HashMap(); + client_session = Collections.synchronizedMap(new HashMap()); client_session.put("session_id", nextSessionId); client_session.put("ttl", ttl_time); sessions.put(""+nextSessionId, client_session); diff --git a/src/zutil/network/http/soap/SOAPHttpPage.java b/src/zutil/network/http/soap/SOAPHttpPage.java index 1fe526a..6ebc3b4 100644 --- a/src/zutil/network/http/soap/SOAPHttpPage.java +++ b/src/zutil/network/http/soap/SOAPHttpPage.java @@ -10,6 +10,7 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import javax.wsdl.Binding; import javax.wsdl.BindingInput; @@ -190,9 +191,10 @@ public class SOAPHttpPage implements HttpPage{ public void respond(HttpPrintStream out, - HashMap client_info, - HashMap session, HashMap cookie, - HashMap request) { + Map client_info, + Map session, + Map cookie, + Map request) { try { out.setHeader("Content-Type", "text/xml"); diff --git a/src/zutil/test/HTTPGuessTheNumber.java b/src/zutil/test/HTTPGuessTheNumber.java index 7671cab..c5df2b5 100644 --- a/src/zutil/test/HTTPGuessTheNumber.java +++ b/src/zutil/test/HTTPGuessTheNumber.java @@ -1,7 +1,7 @@ package zutil.test; import java.io.IOException; -import java.util.HashMap; +import java.util.Map; import zutil.network.http.HttpPage; import zutil.network.http.HttpPrintStream; @@ -18,15 +18,16 @@ public class HTTPGuessTheNumber implements HttpPage{ } public void respond(HttpPrintStream out, - HashMap client_info, - HashMap session, HashMap cookie, - HashMap request) { + Map client_info, + Map session, + Map cookie, + Map request) { out.enableBuffering(true); out.println(""); out.println("

Welcome To The Number Guess Game!

"); - if(session.containsKey("random_nummber") && request.containsKey("guess")){ + if(session.containsKey("random_nummber") && request.containsKey("guess") && !request.get("guess").isEmpty()){ int guess = Integer.parseInt(request.get("guess")); int nummber = (Integer)session.get("random_nummber"); try { diff --git a/src/zutil/test/HTTPUploaderTest.java b/src/zutil/test/HTTPUploaderTest.java index 04ebc68..dbe6cb6 100644 --- a/src/zutil/test/HTTPUploaderTest.java +++ b/src/zutil/test/HTTPUploaderTest.java @@ -1,7 +1,7 @@ package zutil.test; import java.io.IOException; -import java.util.HashMap; +import java.util.Map; import zutil.network.http.HttpPage; import zutil.network.http.HttpPrintStream; @@ -18,9 +18,10 @@ public class HTTPUploaderTest implements HttpPage{ } public void respond(HttpPrintStream out, - HashMap client_info, - HashMap session, HashMap cookie, - HashMap request) { + Map client_info, + Map session, + Map cookie, + Map request) { if(!session.containsKey("file1")){ out.println("" +