From 746e3c3b06f4f862f62370731ba0a9791f9c55ef Mon Sep 17 00:00:00 2001 From: orbiter Date: Thu, 26 May 2011 16:34:35 +0000 Subject: [PATCH] Replaced a widely-used Property Object in the httpd with HashMap which is not synchronized like Properties A synchronization is not needed here and applies an overhead to the httpd process which is now removed. git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7745 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- .../anomic/crawler/retrieval/FTPLoader.java | 2 +- .../anomic/crawler/retrieval/SMBLoader.java | 8 +- source/de/anomic/data/MimeTable.java | 3 +- .../anomic/http/server/HTTPDFileHandler.java | 63 +++---- .../anomic/http/server/HTTPDProxyHandler.java | 137 ++++++++------- source/de/anomic/http/server/HTTPDemon.java | 163 +++++++++--------- .../http/server/ServerSideIncludes.java | 14 +- source/de/anomic/search/ResultFetcher.java | 2 +- .../yacy/cora/protocol/HeaderFramework.java | 9 +- source/net/yacy/kelondro/util/FileUtils.java | 7 +- 10 files changed, 207 insertions(+), 201 deletions(-) diff --git a/source/de/anomic/crawler/retrieval/FTPLoader.java b/source/de/anomic/crawler/retrieval/FTPLoader.java index 88275f5bb..bfa8926da 100644 --- a/source/de/anomic/crawler/retrieval/FTPLoader.java +++ b/source/de/anomic/crawler/retrieval/FTPLoader.java @@ -142,7 +142,7 @@ public class FTPLoader { response = getFile(ftpClient, request, acceptOnlyParseable); } catch (final Exception e) { // add message to errorLog - e.printStackTrace(); + Log.logException(e); (new PrintStream(berr)).print(e.getMessage()); } } diff --git a/source/de/anomic/crawler/retrieval/SMBLoader.java b/source/de/anomic/crawler/retrieval/SMBLoader.java index f707dad9a..feb2a6e45 100644 --- a/source/de/anomic/crawler/retrieval/SMBLoader.java +++ b/source/de/anomic/crawler/retrieval/SMBLoader.java @@ -195,13 +195,13 @@ public class SMBLoader { } } } catch (SmbException e) { - e.printStackTrace(); + Log.logException(e); } catch (MalformedURLException e) { - e.printStackTrace(); + Log.logException(e); } catch (UnknownHostException e) { - e.printStackTrace(); + Log.logException(e); } catch (IOException e) { - e.printStackTrace(); + Log.logException(e); } } } diff --git a/source/de/anomic/data/MimeTable.java b/source/de/anomic/data/MimeTable.java index 3986e6e78..b248f23bc 100644 --- a/source/de/anomic/data/MimeTable.java +++ b/source/de/anomic/data/MimeTable.java @@ -6,6 +6,7 @@ import java.io.FileInputStream; import java.util.Properties; import net.yacy.cora.document.MultiProtocolURI; +import net.yacy.kelondro.logging.Log; public class MimeTable { @@ -19,7 +20,7 @@ public class MimeTable { mimeTableInputStream = new BufferedInputStream(new FileInputStream(mimeFile)); mimeTable.load(mimeTableInputStream); } catch (final Exception e) { - e.printStackTrace(); + Log.logException(e); } finally { if (mimeTableInputStream != null) try { mimeTableInputStream.close(); } catch (final Exception e1) {} } diff --git a/source/de/anomic/http/server/HTTPDFileHandler.java b/source/de/anomic/http/server/HTTPDFileHandler.java index 0db0bf4d9..c1d72390a 100644 --- a/source/de/anomic/http/server/HTTPDFileHandler.java +++ b/source/de/anomic/http/server/HTTPDFileHandler.java @@ -76,10 +76,10 @@ import java.lang.reflect.Method; import java.net.URL; import java.net.URLDecoder; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import java.util.zip.GZIPOutputStream; @@ -234,28 +234,28 @@ public final class HTTPDFileHandler { return headers; } - public static void doGet(final Properties conProp, final RequestHeader requestHeader, final OutputStream response) { + public static void doGet(final HashMap conProp, final RequestHeader requestHeader, final OutputStream response) { doResponse(conProp, requestHeader, response, null); } - public static void doHead(final Properties conProp, final RequestHeader requestHeader, final OutputStream response) { + public static void doHead(final HashMap conProp, final RequestHeader requestHeader, final OutputStream response) { doResponse(conProp, requestHeader, response, null); } - public static void doPost(final Properties conProp, final RequestHeader requestHeader, final OutputStream response, final InputStream body) { + public static void doPost(final HashMap conProp, final RequestHeader requestHeader, final OutputStream response, final InputStream body) { doResponse(conProp, requestHeader, response, body); } - public static void doResponse(final Properties conProp, final RequestHeader requestHeader, final OutputStream out, final InputStream body) { + public static void doResponse(final HashMap conProp, final RequestHeader requestHeader, final OutputStream out, final InputStream body) { String path = null; try { // getting some connection properties - final String method = conProp.getProperty(HeaderFramework.CONNECTION_PROP_METHOD); - path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH); - String argsString = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); // is null if no args were given - final String httpVersion = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); - final String clientIP = conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP, "unknown-host"); + final String method = (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD); + path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); + String argsString = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); // is null if no args were given + final String httpVersion = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); + String clientIP = (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); if (clientIP == null) clientIP = "unknown-host"; // check hack attacks in path if (path.indexOf("..") >= 0) { @@ -348,7 +348,7 @@ public final class HTTPDFileHandler { } // Authentication successful. remove brute-force flag - serverCore.bfHost.remove(conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP)); + serverCore.bfHost.remove(conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP)); // parse arguments serverObjects args = new serverObjects(); @@ -438,7 +438,7 @@ public final class HTTPDFileHandler { } File targetFile = getLocalizedFile(path, localeSelection); - final String targetExt = conProp.getProperty("EXT",""); + String targetExt = (String) conProp.get("EXT"); if (targetExt == null) targetExt = ""; targetClass = rewriteClassFile(new File(htDefaultPath, path)); if (path.endsWith("/") || path.endsWith("\\")) { String testpath; @@ -558,7 +558,7 @@ public final class HTTPDFileHandler { // call an image-servlet to produce an on-the-fly - generated image Object img = null; try { - requestHeader.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP)); + requestHeader.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP)); requestHeader.put(HeaderFramework.CONNECTION_PROP_PATH, path); requestHeader.put(HeaderFramework.CONNECTION_PROP_EXT, "png"); // in case that there are no args given, args = null or empty hashmap @@ -747,7 +747,7 @@ public final class HTTPDFileHandler { indexOfDelimiter = cgiHeader[i].indexOf(':'); key = cgiHeader[i].substring(0, indexOfDelimiter).trim(); value = cgiHeader[i].substring(indexOfDelimiter + 1).trim(); - conProp.setProperty(key, value); + conProp.put(key, value); if (key.equals("Cache-Control") && value.equals("no-cache")) { nocache = true; } else if (key.equals("Content-type")) { @@ -786,7 +786,7 @@ public final class HTTPDFileHandler { } else if ((targetClass != null) && (path.endsWith(".stream"))) { // call rewrite-class - requestHeader.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP)); + requestHeader.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP)); requestHeader.put(HeaderFramework.CONNECTION_PROP_PATH, path); requestHeader.put(HeaderFramework.CONNECTION_PROP_EXT, "stream"); //requestHeader.put(httpHeader.CONNECTION_PROP_INPUTSTREAM, body); @@ -803,7 +803,8 @@ public final class HTTPDFileHandler { // if this file uses templates, then we use the template // re-write - method to create an result String mimeType = MimeTable.ext2mime(targetExt, "text/html"); - final boolean zipContent = requestHeader.acceptGzip() && HTTPDemon.shallTransportZipped("." + conProp.getProperty("EXT","")); + String ext = (String) conProp.get("EXT"); if (ext == null) ext = ""; + final boolean zipContent = requestHeader.acceptGzip() && HTTPDemon.shallTransportZipped("." + ext); if (path.endsWith("html") || path.endsWith("htm") || path.endsWith("xml") || @@ -833,7 +834,7 @@ public final class HTTPDFileHandler { if (targetClass != null) { // CGI-class: call the class to create a property for rewriting try { - requestHeader.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP)); + requestHeader.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP)); requestHeader.put(HeaderFramework.CONNECTION_PROP_PATH, path); int ep = path.lastIndexOf("."); requestHeader.put(HeaderFramework.CONNECTION_PROP_EXT, path.substring(ep + 1)); @@ -1106,7 +1107,7 @@ public final class HTTPDFileHandler { HTTPDemon.sendRespondError(conProp,out,3,404,"File not Found",null,null); return; } - } catch (final Exception e) { + } catch (final Exception e) { try { // error handling int httpStatusCode = 400; @@ -1141,7 +1142,7 @@ public final class HTTPDFileHandler { errorMessage.append("\nSession: ").append(Thread.currentThread().getName()) .append("\nQuery: ").append(path) - .append("\nClient: ").append(conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP,"unknown")) + .append("\nClient: ").append(conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP)) .append("\nReason: ").append(e.getMessage()); if (!conProp.containsKey(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_HEADER)) { @@ -1192,9 +1193,9 @@ public final class HTTPDFileHandler { return targetFile; } - private static final void forceConnectionClose(final Properties conprop) { + private static final void forceConnectionClose(final HashMap conprop) { if (conprop != null) { - conprop.setProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); + conprop.put(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); } } @@ -1292,8 +1293,8 @@ public final class HTTPDFileHandler { * not in separete servlet, because we need access to binary outstream * @throws IOException */ - private static void doURLProxy(final serverObjects args, final Properties conProp, final RequestHeader requestHeader, OutputStream out) throws IOException { - final String httpVersion = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); + private static void doURLProxy(final serverObjects args, final HashMap conProp, final RequestHeader requestHeader, OutputStream out) throws IOException { + final String httpVersion = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); URL proxyurl = null; if (args != null && args.containsKey("url")) { @@ -1301,12 +1302,12 @@ public final class HTTPDFileHandler { proxyurl = new URL(strUrl); } // set properties for proxy connection - final Properties prop = new Properties(); - prop.setProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_1_1); - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, proxyurl.getHost()); - prop.setProperty(HeaderFramework.CONNECTION_PROP_PATH, proxyurl.getPath().replaceAll(" ", "%20")); - prop.setProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE, "PROXY"); - prop.setProperty("CLIENTIP", "0:0:0:0:0:0:0:1"); + final HashMap prop = new HashMap(); + prop.put(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_1_1); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, proxyurl.getHost()); + prop.put(HeaderFramework.CONNECTION_PROP_PATH, proxyurl.getPath().replaceAll(" ", "%20")); + prop.put(HeaderFramework.CONNECTION_PROP_REQUESTLINE, "PROXY"); + prop.put("CLIENTIP", "0:0:0:0:0:0:0:1"); // remove some stuff from request header, so it isn't send to the server requestHeader.remove("CLIENTIP"); @@ -1336,7 +1337,7 @@ public final class HTTPDFileHandler { return; } - final int httpStatus = Integer.parseInt(prop.getProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_STATUS)); + final int httpStatus = Integer.parseInt((String) prop.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_STATUS)); if (outgoingHeader.getContentType().startsWith("text/html")) { StringWriter buffer = new StringWriter(); @@ -1378,7 +1379,7 @@ public final class HTTPDFileHandler { out.write(sbb); } else { if (!outgoingHeader.containsKey(HeaderFramework.CONTENT_LENGTH)) - outgoingHeader.put(HeaderFramework.CONTENT_LENGTH, prop.getProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE)); + outgoingHeader.put(HeaderFramework.CONTENT_LENGTH, (String) prop.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE)); HTTPDemon.sendRespondHeader(conProp, out, httpVersion, httpStatus, outgoingHeader); FileUtils.copy(in, out); } diff --git a/source/de/anomic/http/server/HTTPDProxyHandler.java b/source/de/anomic/http/server/HTTPDProxyHandler.java index c09e52b4f..0fdfa44c5 100644 --- a/source/de/anomic/http/server/HTTPDProxyHandler.java +++ b/source/de/anomic/http/server/HTTPDProxyHandler.java @@ -62,9 +62,9 @@ import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.Properties; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.LogManager; @@ -289,7 +289,7 @@ public final class HTTPDProxyHandler { * @param respond the OutputStream to the client * @see de.anomic.http.httpdHandler#doGet(java.util.Properties, net.yacy.cora.protocol.HeaderFramework, java.io.OutputStream) */ - public static void doGet(final Properties conProp, final RequestHeader requestHeader, final OutputStream respond) { + public static void doGet(final HashMap conProp, final RequestHeader requestHeader, final OutputStream respond) { ByteCountOutputStream countedRespond = null; try { final int reqID = requestHeader.hashCode(); @@ -300,12 +300,12 @@ public final class HTTPDProxyHandler { sb.proxyLastAccess = System.currentTimeMillis(); // using an ByteCount OutputStream to count the send bytes (needed for the logfile) - countedRespond = new ByteCountOutputStream(respond,conProp.getProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE).length() + 2,"PROXY"); + countedRespond = new ByteCountOutputStream(respond,((String) conProp.get(HeaderFramework.CONNECTION_PROP_REQUESTLINE)).length() + 2,"PROXY"); - String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); - String path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH); // always starts with leading '/' - final String args = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given - final String ip = conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP); // the ip from the connecting peer + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); // always starts with leading '/' + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given + final String ip = (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); // the ip from the connecting peer int pos=0; int port=0; @@ -328,8 +328,8 @@ public final class HTTPDProxyHandler { } catch(final MalformedURLException e){}//just keep the old one } if (log.isFinest()) log.logFinest(reqID +" using redirector to "+ url); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_HOST, url.getHost()+":"+url.getPort()); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PATH, url.getPath()); + conProp.put(HeaderFramework.CONNECTION_PROP_HOST, url.getHost()+":"+url.getPort()); + conProp.put(HeaderFramework.CONNECTION_PROP_PATH, url.getPath()); requestHeader.put(HeaderFramework.HOST, url.getHost()+":"+url.getPort()); requestHeader.put(HeaderFramework.CONNECTION_PROP_PATH, url.getPath()); } @@ -440,20 +440,20 @@ public final class HTTPDProxyHandler { if (countedRespond != null) countedRespond.finish(); conProp.put(HeaderFramework.CONNECTION_PROP_REQUEST_END, Long.valueOf(System.currentTimeMillis())); - conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE,(countedRespond != null) ? Long.valueOf(countedRespond.getCount()) : -1L); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE,(countedRespond != null) ? Long.toString(countedRespond.getCount()) : -1L); logProxyAccess(conProp); } } - private static void fulfillRequestFromWeb(final Properties conProp, final DigestURI url, final RequestHeader requestHeader, final ResponseHeader cachedResponseHeader, final OutputStream respond) { + private static void fulfillRequestFromWeb(final HashMap conProp, final DigestURI url, final RequestHeader requestHeader, final ResponseHeader cachedResponseHeader, final OutputStream respond) { try { final int reqID = requestHeader.hashCode(); - String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); - final String path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH); // always starts with leading '/' - final String args = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given - final String ip = conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP); // the ip from the connecting peer - final String httpVer = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); // the ip from the connecting peer + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + final String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); // always starts with leading '/' + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given + final String ip = (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); // the ip from the connecting peer + final String httpVer = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); // the ip from the connecting peer int port, pos; if ((pos = host.indexOf(':')) < 0) { @@ -506,7 +506,7 @@ public final class HTTPDProxyHandler { if (b != null) sizeBeforeDelete = b.length; } Cache.delete(url); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_REFRESH_MISS"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_REFRESH_MISS"); } // reserver cache entry @@ -594,12 +594,12 @@ public final class HTTPDProxyHandler { } catch (IOException e) { log.logWarning("cannot write " + response.url() + " to Cache (1): " + e.getMessage(), e); } - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_MISS"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_MISS"); } else if (cacheArray != null && sizeBeforeDelete == cacheArray.length) { // before we came here we deleted a cache entry cacheArray = null; //cacheManager.push(cacheEntry); // unnecessary update - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_REF_FAIL_HIT"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_REF_FAIL_HIT"); } else { // before we came here we deleted a cache entry response.setContent(cacheArray); @@ -609,7 +609,7 @@ public final class HTTPDProxyHandler { } catch (IOException e) { log.logWarning("cannot write " + response.url() + " to Cache (2): " + e.getMessage(), e); } - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_REFRESH_MISS"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE, "TCP_REFRESH_MISS"); } } else { // no caching @@ -621,7 +621,7 @@ public final class HTTPDProxyHandler { // FileUtils.copy(res.getDataAsStream(), outStream); client.writeTo(outStream); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"TCP_MISS"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"TCP_MISS"); } if (chunkedOut != null) { @@ -668,7 +668,7 @@ public final class HTTPDProxyHandler { } private static void fulfillRequestFromCache( - final Properties conProp, + final HashMap conProp, final DigestURI url, final RequestHeader requestHeader, final ResponseHeader cachedResponseHeader, @@ -676,7 +676,7 @@ public final class HTTPDProxyHandler { final OutputStream respond ) throws IOException { - final String httpVer = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); + final String httpVer = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); // we respond on the request by using the cache, the cache is fresh try { @@ -690,7 +690,7 @@ public final class HTTPDProxyHandler { // conditional request: freshness of cache for that condition was already // checked within shallUseCache(). Now send only a 304 response log.logInfo("CACHE HIT/304 " + url.toString()); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"TCP_REFRESH_HIT"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"TCP_REFRESH_HIT"); // setting the content length header to 0 cachedResponseHeader.put(HeaderFramework.CONTENT_LENGTH, Integer.toString(0)); @@ -701,7 +701,7 @@ public final class HTTPDProxyHandler { } else { // unconditional request: send content of cache log.logInfo("CACHE HIT/203 " + url.toString()); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"TCP_HIT"); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"TCP_HIT"); // setting the content header to the proper length cachedResponseHeader.put(HeaderFramework.CONTENT_LENGTH, Long.toString(cacheEntry.length)); @@ -720,7 +720,7 @@ public final class HTTPDProxyHandler { // we do nothing here if (conProp.containsKey(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_HEADER)) { log.logWarning("Error while trying to send cached message body."); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); + conProp.put(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); } else { HTTPDemon.sendRespondError(conProp,respond,4,503,"socket error: " + e.getMessage(),"socket error: " + e.getMessage(), e); } @@ -730,7 +730,7 @@ public final class HTTPDProxyHandler { return; } - public static void doHead(final Properties conProp, final RequestHeader requestHeader, OutputStream respond) { + public static void doHead(final HashMap conProp, final RequestHeader requestHeader, OutputStream respond) { // ResponseContainer res = null; DigestURI url = null; @@ -743,12 +743,12 @@ public final class HTTPDProxyHandler { sb.proxyLastAccess = System.currentTimeMillis(); // using an ByteCount OutputStream to count the send bytes - respond = new ByteCountOutputStream(respond,conProp.getProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE).length() + 2,"PROXY"); + respond = new ByteCountOutputStream(respond,((String) conProp.get(HeaderFramework.CONNECTION_PROP_REQUESTLINE)).length() + 2,"PROXY"); - String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); - final String path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH); - final String args = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); - final String httpVer = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + final String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); + final String httpVer = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); int port, pos; if ((pos = host.indexOf(':')) < 0) { @@ -845,7 +845,7 @@ public final class HTTPDProxyHandler { } } - public static void doPost(final Properties conProp, final RequestHeader requestHeader, final OutputStream respond, InputStream body) throws IOException { + public static void doPost(final HashMap conProp, final RequestHeader requestHeader, final OutputStream respond, InputStream body) throws IOException { assert conProp != null : "precondition violated: conProp != null"; assert requestHeader != null : "precondition violated: requestHeader != null"; assert body != null : "precondition violated: body != null"; @@ -860,12 +860,12 @@ public final class HTTPDProxyHandler { sb.proxyLastAccess = System.currentTimeMillis(); // using an ByteCount OutputStream to count the send bytes - countedRespond = new ByteCountOutputStream(respond,conProp.getProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE).length() + 2,"PROXY"); + countedRespond = new ByteCountOutputStream(respond,((String) conProp.get(HeaderFramework.CONNECTION_PROP_REQUESTLINE)).length() + 2,"PROXY"); - String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); - final String path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH); - final String args = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given - final String httpVer = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + final String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given + final String httpVer = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); int port, pos; if ((pos = host.indexOf(':')) < 0) { @@ -970,7 +970,7 @@ public final class HTTPDProxyHandler { } conProp.put(HeaderFramework.CONNECTION_PROP_REQUEST_END, Long.valueOf(System.currentTimeMillis())); - conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE,(countedRespond != null) ? Long.valueOf(countedRespond.getCount()) : -1L); + conProp.put(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE,(countedRespond != null) ? Long.toString(countedRespond.getCount()) : "-1"); logProxyAccess(conProp); } } @@ -1001,7 +1001,7 @@ public final class HTTPDProxyHandler { * @param requestHeader * @param hostlow */ - private static void prepareRequestHeader(final Properties conProp, final RequestHeader requestHeader, final String hostlow) { + private static void prepareRequestHeader(final HashMap conProp, final RequestHeader requestHeader, final String hostlow) { // set another userAgent, if not yellow-listed if ((yellowList != null) && (!(yellowList.contains(domain(hostlow))))) { // change the User-Agent @@ -1070,9 +1070,9 @@ public final class HTTPDProxyHandler { * @return */ private static ChunkedOutputStream setTransferEncoding( - final Properties conProp, final ResponseHeader responseHeader, + final HashMap conProp, final ResponseHeader responseHeader, final int statusCode, final OutputStream respond) { - final String httpVer = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); + final String httpVer = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); ChunkedOutputStream chunkedOut = null; // gzipped response is ungzipped an therefor the length is unknown if (responseHeader.gzip() || responseHeader.getContentLength() < 0) { @@ -1119,10 +1119,10 @@ public final class HTTPDProxyHandler { * @param conProp * @param requestHeader */ - private static void addXForwardedForHeader(final Properties conProp, final RequestHeader requestHeader) { + private static void addXForwardedForHeader(final HashMap conProp, final RequestHeader requestHeader) { // setting the X-Forwarded-For Header if (sb.getConfigBool("proxy.sendXForwardedForHeader", true)) { - requestHeader.put(HeaderFramework.X_FORWARDED_FOR, conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP)); + requestHeader.put(HeaderFramework.X_FORWARDED_FOR, (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP)); } } @@ -1183,14 +1183,14 @@ public final class HTTPDProxyHandler { } } - public static void doConnect(final Properties conProp, final RequestHeader requestHeader, final InputStream clientIn, final OutputStream clientOut) throws IOException { + public static void doConnect(final HashMap conProp, final RequestHeader requestHeader, final InputStream clientIn, final OutputStream clientOut) throws IOException { sb.proxyLastAccess = System.currentTimeMillis(); - String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); - final String httpVersion = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER); - String path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH); - final String args = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + final String httpVersion = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); + String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); if (args != null) { path = path + "?" + args; } int port, pos; @@ -1325,7 +1325,7 @@ public final class HTTPDProxyHandler { } } - private static void handleProxyException(final Exception e, final Properties conProp, final OutputStream respond, final DigestURI url) { + private static void handleProxyException(final Exception e, final HashMap conProp, final OutputStream respond, final DigestURI url) { // this may happen if // - the targeted host does not exist // - anything with the remote server was wrong. @@ -1407,12 +1407,12 @@ public final class HTTPDProxyHandler { } else { if (unknownError) { log.logSevere("Unknown Error while processing request '" + - conProp.getProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE,"unknown") + "':" + + conProp.get(HeaderFramework.CONNECTION_PROP_REQUESTLINE) + "':" + "\n" + Thread.currentThread().getName() + "\n" + errorMessage,e); } else { log.logWarning("Error while processing request '" + - conProp.getProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE,"unknown") + "':" + + conProp.get(HeaderFramework.CONNECTION_PROP_REQUESTLINE) + "':" + "\n" + Thread.currentThread().getName() + "\n" + errorMessage); } @@ -1424,13 +1424,13 @@ public final class HTTPDProxyHandler { } - private static void forceConnectionClose(final Properties conProp) { + private static void forceConnectionClose(final HashMap conProp) { if (conProp != null) { - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); + conProp.put(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); } } - private static serverObjects unknownHostHandling(final Properties conProp) throws Exception { + private static serverObjects unknownHostHandling(final HashMap conProp) throws Exception { final serverObjects detailedErrorMsgMap = new serverObjects(); // generic toplevel domains @@ -1464,14 +1464,16 @@ public final class HTTPDProxyHandler { // getting some connection properties String orgHostPort = "80"; - String orgHostName = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST,"unknown").toLowerCase(); + String orgHostName = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + if (orgHostName == null) orgHostName = "unknown"; + orgHostName = orgHostName.toLowerCase(); int pos = orgHostName.indexOf(':'); if (pos != -1) { orgHostPort = orgHostName.substring(pos+1); orgHostName = orgHostName.substring(0,pos); } - final String orgHostPath = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH,""); - String orgHostArgs = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS,""); + String orgHostPath = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); if (orgHostPath == null) orgHostPath = ""; + String orgHostArgs = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); if (orgHostArgs == null) orgHostArgs = ""; if (orgHostArgs.length() > 0) orgHostArgs = "?" + orgHostArgs; detailedErrorMsgMap.put("hostName", orgHostName); @@ -1551,7 +1553,7 @@ public final class HTTPDProxyHandler { * e.g.
* 1117528623.857 178 192.168.1.201 TCP_MISS/200 1069 GET http://www.yacy.de/ - DIRECT/81.169.145.74 text/html */ - private final static synchronized void logProxyAccess(final Properties conProp) { + private final static synchronized void logProxyAccess(final HashMap conProp) { if (!doAccessLogging) return; @@ -1576,31 +1578,32 @@ public final class HTTPDProxyHandler { logMessage.append(' '); // Remote Host - final String clientIP = conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP); + final String clientIP = (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); logMessage.append(clientIP); logMessage.append(' '); // Code/Status - final String respondStatus = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_STATUS); - final String respondCode = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE,"UNKNOWN"); + final String respondStatus = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_STATUS); + String respondCode = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_CODE); + if (respondCode == null) respondCode = "UNKNOWN"; logMessage.append(respondCode); logMessage.append("/"); logMessage.append(respondStatus); logMessage.append(' '); // Bytes - final Long bytes = (Long) conProp.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE); + final String bytes = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_SIZE); logMessage.append(bytes.toString()); logMessage.append(' '); // Method - final String requestMethod = conProp.getProperty(HeaderFramework.CONNECTION_PROP_METHOD); + final String requestMethod = (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD); logMessage.append(requestMethod); logMessage.append(' '); // URL - final String requestURL = conProp.getProperty(HeaderFramework.CONNECTION_PROP_URL); - final String requestArgs = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); + final String requestURL = (String) conProp.get(HeaderFramework.CONNECTION_PROP_URL); + final String requestArgs = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); logMessage.append(requestURL); if (requestArgs != null) { logMessage.append("?") @@ -1613,7 +1616,7 @@ public final class HTTPDProxyHandler { logMessage.append(' '); // Peerstatus/Peerhost - final String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); + final String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); logMessage.append("DIRECT/"); logMessage.append(host); logMessage.append(' '); diff --git a/source/de/anomic/http/server/HTTPDemon.java b/source/de/anomic/http/server/HTTPDemon.java index b96f2f759..611145728 100644 --- a/source/de/anomic/http/server/HTTPDemon.java +++ b/source/de/anomic/http/server/HTTPDemon.java @@ -44,7 +44,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.StringTokenizer; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -217,7 +216,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { * @param prop * @return true if a persistent connection was requested or false otherwise */ - private boolean handlePersistentConnection(final RequestHeader header, final Properties prop) { + private boolean handlePersistentConnection(final RequestHeader header, final HashMap prop) { if (!keepAliveSupport) { prop.put(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close"); @@ -225,7 +224,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } // getting the http version that is used by the client - final String httpVersion = prop.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, "HTTP/0.9"); + String httpVersion = (String) prop.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = "HTTP/0.9"; // managing keep-alive: in HTTP/0.9 and HTTP/1.0 every connection is closed // afterwards. In HTTP/1.1 (and above, in the future?) connections are @@ -238,7 +237,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } final String transferEncoding = header.get(HeaderFramework.TRANSFER_ENCODING, "identity"); - final boolean isPostRequest = prop.getProperty(HeaderFramework.CONNECTION_PROP_METHOD).equals(HeaderFramework.METHOD_POST); + final boolean isPostRequest = prop.get(HeaderFramework.CONNECTION_PROP_METHOD).equals(HeaderFramework.METHOD_POST); final boolean hasContentLength = header.containsKey(HeaderFramework.CONTENT_LENGTH); final boolean hasTransferEncoding = header.containsKey(HeaderFramework.TRANSFER_ENCODING) && !transferEncoding.equalsIgnoreCase("identity"); @@ -251,14 +250,14 @@ public final class HTTPDemon implements serverHandler, Cloneable { return persistent; } - private boolean handleYaCyHopAuthentication(final RequestHeader header, Properties prop, Session session) { + private boolean handleYaCyHopAuthentication(final RequestHeader header, HashMap prop, Session session) { // check if the user has allowed that his/her peer is used for hops if (!allowYaCyHop(session)) return false; // proxy hops must identify with 4 criteria: // the accessed port must not be port 80 - final String host = prop.getProperty(HeaderFramework.CONNECTION_PROP_HOST); + final String host = (String) prop.get(HeaderFramework.CONNECTION_PROP_HOST); if (host == null) return false; int pos; if ((pos = host.indexOf(':')) < 0) { @@ -268,7 +267,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { if (Integer.parseInt(host.substring(pos + 1)) == 80) return false; // the access path must be into the yacy protocol path; it must start with 'yacy' - if (!(prop.getProperty(HeaderFramework.CONNECTION_PROP_PATH, "").startsWith("/yacy/"))) return false; + if (!(prop.containsKey(HeaderFramework.CONNECTION_PROP_PATH) && ((String) prop.get(HeaderFramework.CONNECTION_PROP_PATH)).startsWith("/yacy/"))) return false; // the accessing client must identify with user:password, where // user = addressed peer name @@ -285,7 +284,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { // furthermore, YaCy hops must not exceed a specific access frequency // check access requester frequency: protection against DoS against this peer - final String requester = prop.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP); + final String requester = (String) prop.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); if (requester == null) return false; if (lastAccessDelta(YaCyHopAccessRequester, requester) < 10000) return false; YaCyHopAccessRequester.put(requester, Long.valueOf(System.currentTimeMillis())); @@ -303,9 +302,9 @@ public final class HTTPDemon implements serverHandler, Cloneable { return (lastAccess == null) ? Long.MAX_VALUE : System.currentTimeMillis() - lastAccess.longValue(); } - private boolean handleProxyAuthentication(final RequestHeader header, final Properties prop, final Session session) throws IOException { + private boolean handleProxyAuthentication(final RequestHeader header, final HashMap prop, final Session session) throws IOException { // getting the http version that is used by the client - final String httpVersion = prop.getProperty("HTTP", "HTTP/0.9"); + String httpVersion = (String) prop.get("HTTP"); if (httpVersion == null) httpVersion = "HTTP/0.9"; // reading the authentication settings from switchboard if (!this.proxyAccounts_init) { @@ -355,7 +354,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { public Boolean UNKNOWN(final String arg, final Session session) throws IOException { //System.out.println("UNKNOWN " + arg); - Properties prop = parseRequestLine(HeaderFramework.METHOD_GET, arg, session); + HashMap prop = parseRequestLine(HeaderFramework.METHOD_GET, arg, session); int pos; String unknownCommand = null, args = null; if ((pos = arg.indexOf(' ')) > 0) { @@ -376,10 +375,10 @@ public final class HTTPDemon implements serverHandler, Cloneable { //System.out.println("GET " + arg); try { // parsing the http request line - final Properties prop = parseRequestLine(HeaderFramework.METHOD_GET, arg, session); + final HashMap prop = parseRequestLine(HeaderFramework.METHOD_GET, arg, session); // we now know the HTTP version. depending on that, we read the header - final String httpVersion = prop.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); + String httpVersion = (String) prop.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = HeaderFramework.HTTP_VERSION_0_9; final RequestHeader header = (httpVersion.equals(HeaderFramework.HTTP_VERSION_0_9)) ? new RequestHeader(reverseMappingCache) : readHeader(prop, session); @@ -390,7 +389,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { // determines if the connection should be kept alive handlePersistentConnection(header, prop); - if (prop.getProperty(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) { + if (prop.get(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) { // pass to server if (allowServer(session)) { HTTPDFileHandler.doGet(prop, header, session.out); @@ -411,7 +410,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } } - return prop.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; + return prop.get(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; } catch (final Exception e) { logUnexpectedError(e, session.userAddress.getHostAddress()); return serverCore.TERMINATE_CONNECTION; @@ -443,10 +442,10 @@ public final class HTTPDemon implements serverHandler, Cloneable { public Boolean HEAD(final String arg, final Session session) { //System.out.println("HEAD " + arg); try { - final Properties prop = parseRequestLine(HeaderFramework.METHOD_HEAD, arg, session); + final HashMap prop = parseRequestLine(HeaderFramework.METHOD_HEAD, arg, session); // we now know the HTTP version. depending on that, we read the header - final String httpVersion = prop.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); + String httpVersion = (String) prop.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = HeaderFramework.HTTP_VERSION_0_9; final RequestHeader header = (httpVersion.equals(HeaderFramework.HTTP_VERSION_0_9)) ? new RequestHeader(reverseMappingCache) : readHeader(prop,session); @@ -458,7 +457,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { handlePersistentConnection(header, prop); // return multi-line message - if (prop.getProperty(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) { + if (prop.get(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) { // pass to server if (allowServer(session)) { HTTPDFileHandler.doHead(prop, header, session.out); @@ -478,7 +477,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { return serverCore.TERMINATE_CONNECTION; } } - return prop.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; + return prop.get(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; } catch (final Exception e) { logUnexpectedError(e, session.userAddress.getHostAddress()); return serverCore.TERMINATE_CONNECTION; @@ -488,10 +487,10 @@ public final class HTTPDemon implements serverHandler, Cloneable { public Boolean POST(final String arg, final Session session) { //System.out.println("POST " + arg); try { - final Properties prop = parseRequestLine(HeaderFramework.METHOD_POST, arg, session); + final HashMap prop = parseRequestLine(HeaderFramework.METHOD_POST, arg, session); // we now know the HTTP version. depending on that, we read the header - final String httpVersion = prop.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); + String httpVersion = (String) prop.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = HeaderFramework.HTTP_VERSION_0_9; final RequestHeader header = (httpVersion.equals(HeaderFramework.HTTP_VERSION_0_9)) ? new RequestHeader(reverseMappingCache) : readHeader(prop, session); @@ -523,7 +522,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { handlePersistentConnection(header, prop); // return multi-line message - if (prop.getProperty(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) { + if (prop.get(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) { // pass to server if (allowServer(session)) { HTTPDFileHandler.doPost(prop, header, session.out, sessionIn); @@ -545,27 +544,27 @@ public final class HTTPDemon implements serverHandler, Cloneable { } if (sessionIn instanceof ChunkedInputStream) sessionIn.close(); // read to end, but do not close the stream (maybe HTTP/1.1 persistent) //return serverCore.RESUME_CONNECTION; - return prop.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; + return prop.get(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") ? serverCore.RESUME_CONNECTION : serverCore.TERMINATE_CONNECTION; } catch (final Exception e) { logUnexpectedError(e, session.userAddress.getHostAddress()); return serverCore.TERMINATE_CONNECTION; } } - public static void handleTransparentProxySupport(final RequestHeader header, final Properties prop, final String virtualHost, final boolean isTransparentProxy) { + public static void handleTransparentProxySupport(final RequestHeader header, final HashMap prop, final String virtualHost, final boolean isTransparentProxy) { // transparent proxy support is only available for http 1.0 and above connections - if (prop.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, "HTTP/0.9").equals("HTTP/0.9")) return; + if (prop.containsKey(HeaderFramework.CONNECTION_PROP_HTTP_VER) && prop.get(HeaderFramework.CONNECTION_PROP_HTTP_VER).equals("HTTP/0.9")) return; // if the transparent proxy support was disabled, we have nothing todo here ... if (!(isTransparentProxy && header.containsKey(HeaderFramework.HOST))) return; // we only need to do the transparent proxy support if the request URL didn't contain the hostname // and therefor was set to virtualHost by function parseQuery() - if (!prop.getProperty(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) return; + if (!prop.get(HeaderFramework.CONNECTION_PROP_HOST).equals(virtualHost)) return; // TODO: we could have problems with connections from extern here ... final String dstHostSocket = header.get(HeaderFramework.HOST); - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST,(HTTPDemon.isThisHostName(dstHostSocket)?virtualHost:dstHostSocket)); + prop.put(HeaderFramework.CONNECTION_PROP_HOST,(HTTPDemon.isThisHostName(dstHostSocket)?virtualHost:dstHostSocket)); } public Boolean CONNECT(String arg, final Session session) throws IOException { @@ -582,11 +581,11 @@ public final class HTTPDemon implements serverHandler, Cloneable { } else { httpVersion = "HTTP/1.0"; } - Properties prop = new Properties(); - prop.setProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, httpVersion); + HashMap prop = new HashMap(); + prop.put(HeaderFramework.CONNECTION_PROP_HTTP_VER, httpVersion); // parse hostname and port - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, arg); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, arg); pos = arg.indexOf(':'); int port = 443; if (pos >= 0) { @@ -595,11 +594,11 @@ public final class HTTPDemon implements serverHandler, Cloneable { } // setting other connection properties - prop.setProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP, session.userAddress.isAnyLocalAddress() ? "localhost" : session.userAddress.getHostAddress()); - prop.setProperty(HeaderFramework.CONNECTION_PROP_METHOD, HeaderFramework.METHOD_CONNECT); - prop.setProperty(HeaderFramework.CONNECTION_PROP_PATH, "/"); - prop.setProperty(HeaderFramework.CONNECTION_PROP_EXT, ""); - prop.setProperty(HeaderFramework.CONNECTION_PROP_URL, ""); + prop.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, session.userAddress.isAnyLocalAddress() ? "localhost" : session.userAddress.getHostAddress()); + prop.put(HeaderFramework.CONNECTION_PROP_METHOD, HeaderFramework.METHOD_CONNECT); + prop.put(HeaderFramework.CONNECTION_PROP_PATH, "/"); + prop.put(HeaderFramework.CONNECTION_PROP_EXT, ""); + prop.put(HeaderFramework.CONNECTION_PROP_URL, ""); // parse remaining lines final RequestHeader header = readHeader(prop,session); @@ -630,24 +629,24 @@ public final class HTTPDemon implements serverHandler, Cloneable { return serverCore.TERMINATE_CONNECTION; } - private final Properties parseRequestLine(final String cmd, final String s, final Session session) { + private final HashMap parseRequestLine(final String cmd, final String s, final Session session) { // parsing the header - final Properties p = parseRequestLine(cmd, s, virtualHost); + final HashMap p = parseRequestLine(cmd, s, virtualHost); // track the request - final String path = p.getProperty(HeaderFramework.CONNECTION_PROP_URL); - final String args = p.getProperty(HeaderFramework.CONNECTION_PROP_ARGS, ""); + final String path = (String) p.get(HeaderFramework.CONNECTION_PROP_URL); + String args = (String) p.get(HeaderFramework.CONNECTION_PROP_ARGS); if (args == null) args = ""; switchboard.track(session.userAddress.getHostAddress(), (args.length() > 0) ? path + "?" + args : path); // reseting the empty request counter this.emptyRequestCount = 0; // counting the amount of received requests within this permanent connection - p.setProperty(HeaderFramework.CONNECTION_PROP_KEEP_ALIVE_COUNT, Integer.toString(++this.keepAliveRequestCount)); + p.put(HeaderFramework.CONNECTION_PROP_KEEP_ALIVE_COUNT, Integer.toString(++this.keepAliveRequestCount)); // setting the client-IP - p.setProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP, session.userAddress.getHostAddress()); + p.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, session.userAddress.getHostAddress()); return p; } @@ -953,7 +952,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } public static final void sendRespondError( - final Properties conProp, + final HashMap conProp, final OutputStream respond, final int errorcase, final int httpStatusCode, @@ -976,7 +975,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } public static final void sendRespondError( - final Properties conProp, + final HashMap conProp, final OutputStream respond, final int httpStatusCode, final String httpStatusText, @@ -999,7 +998,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } public static final void sendRespondError( - final Properties conProp, + final HashMap conProp, final OutputStream respond, final int errorcase, final int httpStatusCode, @@ -1015,7 +1014,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { ByteArrayOutputStream o = null; try { // setting the proper http status message - final String httpVersion = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER,"HTTP/1.1"); + String httpVersion = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = "HTTP/1.1"; if ((httpStatusText == null)||(httpStatusText.length()==0)) { if (httpVersion.equals("HTTP/1.0") && HeaderFramework.http1_0.containsKey(Integer.toString(httpStatusCode))) httpStatusText = HeaderFramework.http1_0.get(Integer.toString(httpStatusCode)); @@ -1025,10 +1024,10 @@ public final class HTTPDemon implements serverHandler, Cloneable { } // generating the desired request url - String host = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HOST); - final String path = conProp.getProperty(HeaderFramework.CONNECTION_PROP_PATH,"/"); - final String args = conProp.getProperty(HeaderFramework.CONNECTION_PROP_ARGS); - final String method = conProp.getProperty(HeaderFramework.CONNECTION_PROP_METHOD); + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); if (path == null) path = "/"; + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); + final String method = (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD); final int port; final int pos = host.indexOf(':'); @@ -1049,7 +1048,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { // set rewrite values final serverObjects tp = new serverObjects(); - final String clientIP = conProp.getProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP, "127.0.0.1"); + String clientIP = (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); if (clientIP == null) clientIP = "127.0.0.1"; // check if ip is local ip address final InetAddress hostAddress = Domains.dnsResolve(clientIP); @@ -1067,7 +1066,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { tp.put("peerName", (getAlternativeResolver() == null) ? "" : getAlternativeResolver().myName()); tp.put("errorMessageType", errorcase); tp.put("httpStatus", Integer.toString(httpStatusCode) + " " + httpStatusText); - tp.put("requestMethod", conProp.getProperty(HeaderFramework.CONNECTION_PROP_METHOD)); + tp.put("requestMethod", (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD)); tp.put("requestURL", urlString); switch (errorcase) { @@ -1136,7 +1135,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } public static final void sendRespondHeader( - final Properties conProp, + final HashMap conProp, final OutputStream respond, final String httpVersion, final int httpStatusCode, @@ -1151,14 +1150,14 @@ public final class HTTPDemon implements serverHandler, Cloneable { final boolean nocache ) throws IOException { - final String reqMethod = conProp.getProperty(HeaderFramework.CONNECTION_PROP_METHOD); + final String reqMethod = (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD); if ((transferEnc != null) && !httpVersion.equals(HeaderFramework.HTTP_VERSION_1_1)) { throw new IllegalArgumentException("Transfer encoding is only supported for http/1.1 connections. The current connection version is " + httpVersion); } if (!reqMethod.equals(HeaderFramework.METHOD_HEAD)){ - if (!conProp.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT,"close").equals("close") && + if (!"close".equals(conProp.get(HeaderFramework.CONNECTION_PROP_PERSISTENT)) && transferEnc == null && contentLength < 0) { throw new IllegalArgumentException("Message MUST contain a Content-Length or a non-identity transfer-coding header field."); } @@ -1197,7 +1196,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } public static final void sendRespondHeader( - final Properties conProp, + final HashMap conProp, final OutputStream respond, final String httpVersion, final int httpStatusCode, @@ -1207,7 +1206,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } public static final void sendRespondHeader( - final Properties conProp, + final HashMap conProp, final OutputStream respond, String httpVersion, final int httpStatusCode, @@ -1217,7 +1216,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { if (respond == null) throw new NullPointerException("The outputstream must not be null."); if (conProp == null) throw new NullPointerException("The connection property structure must not be null."); - if (httpVersion == null) httpVersion = conProp.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER,HeaderFramework.HTTP_VERSION_1_1); + if (httpVersion == null) httpVersion = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = HeaderFramework.HTTP_VERSION_1_1; if (responseHeader == null) responseHeader = new ResponseHeader(); try { @@ -1244,19 +1243,19 @@ public final class HTTPDemon implements serverHandler, Cloneable { if (!responseHeader.containsKey(HeaderFramework.CONTENT_TYPE)) responseHeader.put(HeaderFramework.CONTENT_TYPE, "text/html; charset=UTF-8"); // fix this if (!responseHeader.containsKey(RequestHeader.CONNECTION) && conProp.containsKey(HeaderFramework.CONNECTION_PROP_PERSISTENT)) - responseHeader.put(RequestHeader.CONNECTION, conProp.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT)); + responseHeader.put(RequestHeader.CONNECTION, (String) conProp.get(HeaderFramework.CONNECTION_PROP_PERSISTENT)); if (!responseHeader.containsKey(RequestHeader.PROXY_CONNECTION) && conProp.containsKey(HeaderFramework.CONNECTION_PROP_PERSISTENT)) - responseHeader.put(RequestHeader.PROXY_CONNECTION, conProp.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT)); + responseHeader.put(RequestHeader.PROXY_CONNECTION, (String) conProp.get(HeaderFramework.CONNECTION_PROP_PERSISTENT)); if (conProp.containsKey(HeaderFramework.CONNECTION_PROP_PERSISTENT) && - conProp.getProperty(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") && + conProp.get(HeaderFramework.CONNECTION_PROP_PERSISTENT).equals("keep-alive") && !responseHeader.containsKey(HeaderFramework.TRANSFER_ENCODING) && !responseHeader.containsKey(HeaderFramework.CONTENT_LENGTH)) responseHeader.put(HeaderFramework.CONTENT_LENGTH, "0"); // adding some yacy specific headers - responseHeader.put(HeaderFramework.X_YACY_KEEP_ALIVE_REQUEST_COUNT,conProp.getProperty(HeaderFramework.CONNECTION_PROP_KEEP_ALIVE_COUNT)); - responseHeader.put(HeaderFramework.X_YACY_ORIGINAL_REQUEST_LINE,conProp.getProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE)); + responseHeader.put(HeaderFramework.X_YACY_KEEP_ALIVE_REQUEST_COUNT,(String) conProp.get(HeaderFramework.CONNECTION_PROP_KEEP_ALIVE_COUNT)); + responseHeader.put(HeaderFramework.X_YACY_ORIGINAL_REQUEST_LINE,(String) conProp.get(HeaderFramework.CONNECTION_PROP_REQUESTLINE)); //responseHeader.put(HeaderFramework.X_YACY_PREVIOUS_REQUEST_LINE,conProp.getProperty(HeaderFramework.CONNECTION_PROP_PREV_REQUESTLINE)); //read custom headers @@ -1375,7 +1374,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } - public static RequestHeader readHeader(final Properties prop, final serverCore.Session theSession) throws IOException { + public static RequestHeader readHeader(final HashMap prop, final serverCore.Session theSession) throws IOException { // reading all headers final RequestHeader header = new RequestHeader(HTTPDemon.reverseMappingCache); @@ -1393,7 +1392,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { /* * doing some header validation here ... */ - final String httpVersion = prop.getProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, "HTTP/0.9"); + String httpVersion = (String) prop.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = "HTTP/0.9"; if (httpVersion.equals("HTTP/1.1") && !header.containsKey(HeaderFramework.HOST)) { // the HTTP/1.1 specification requires that an HTTP/1.1 server must reject any // HTTP/1.1 message that does not contain a Host header. @@ -1415,20 +1414,20 @@ public final class HTTPDemon implements serverHandler, Cloneable { private static final Pattern P_60 = Pattern.compile("`", Pattern.LITERAL); - public static Properties parseRequestLine(final String cmd, String args, final String virtualHost) { + public static HashMap parseRequestLine(final String cmd, String args, final String virtualHost) { - final Properties prop = new Properties(); + final HashMap prop = new HashMap(); // we can use a non-synchronized data structure here // storing informations about the request - prop.setProperty(HeaderFramework.CONNECTION_PROP_METHOD, cmd); - prop.setProperty(HeaderFramework.CONNECTION_PROP_REQUESTLINE, cmd + " " + args); + prop.put(HeaderFramework.CONNECTION_PROP_METHOD, cmd); + prop.put(HeaderFramework.CONNECTION_PROP_REQUESTLINE, cmd + " " + args); // this parses a whole URL if (args.isEmpty()) { - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, virtualHost); - prop.setProperty(HeaderFramework.CONNECTION_PROP_PATH, "/"); - prop.setProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); - prop.setProperty(HeaderFramework.CONNECTION_PROP_EXT, ""); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, virtualHost); + prop.put(HeaderFramework.CONNECTION_PROP_PATH, "/"); + prop.put(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); + prop.put(HeaderFramework.CONNECTION_PROP_EXT, ""); return prop; } @@ -1436,11 +1435,11 @@ public final class HTTPDemon implements serverHandler, Cloneable { int sep = args.lastIndexOf(' '); if ((sep >= 0) && (args.substring(sep + 1).toLowerCase().startsWith("http/"))) { // HTTP version is given - prop.setProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, args.substring(sep + 1).trim()); + prop.put(HeaderFramework.CONNECTION_PROP_HTTP_VER, args.substring(sep + 1).trim()); args = args.substring(0, sep).trim(); // cut off HTTP version mark } else { // HTTP version is not given, it will be treated as ver 0.9 - prop.setProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); + prop.put(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); } // replacing spaces in the url string correctly @@ -1467,9 +1466,9 @@ public final class HTTPDemon implements serverHandler, Cloneable { } else { argsString = ""; } - prop.setProperty(HeaderFramework.CONNECTION_PROP_URL, args); // store URL + prop.put(HeaderFramework.CONNECTION_PROP_URL, args); // store URL if (!argsString.isEmpty()) { - prop.setProperty(HeaderFramework.CONNECTION_PROP_ARGS, argsString); + prop.put(HeaderFramework.CONNECTION_PROP_ARGS, argsString); } // store arguments in original form // finally find host string @@ -1484,13 +1483,13 @@ public final class HTTPDemon implements serverHandler, Cloneable { // we are lazy and guess that it means // /index.html // which is a localhost access to the file servlet - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, args); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, args); path = "/"; } else { // THIS IS THE "GOOD" CASE // a perfect formulated url final String dstHostSocket = args.substring(0, sep); - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, (HTTPDemon.isThisHostName(dstHostSocket) ? virtualHost : dstHostSocket)); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, (HTTPDemon.isThisHostName(dstHostSocket) ? virtualHost : dstHostSocket)); path = args.substring(sep); // yes, including beginning "/" } } else { @@ -1500,16 +1499,16 @@ public final class HTTPDemon implements serverHandler, Cloneable { // in this case, we simulate a // http://localhost/s // access by setting a virtual host - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, virtualHost); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, virtualHost); path = args; } else { // the client 'forgot' to set a leading '/' // this is the same case as above, with some lazyness - prop.setProperty(HeaderFramework.CONNECTION_PROP_HOST, virtualHost); + prop.put(HeaderFramework.CONNECTION_PROP_HOST, virtualHost); path = "/" + args; } } - prop.setProperty(HeaderFramework.CONNECTION_PROP_PATH, path); + prop.put(HeaderFramework.CONNECTION_PROP_PATH, path); // find out file extension (we already stripped ?-parameters from args) final String ext; @@ -1526,7 +1525,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { } else { ext = ""; // default when no file extension } - prop.setProperty(HeaderFramework.CONNECTION_PROP_EXT, ext); + prop.put(HeaderFramework.CONNECTION_PROP_EXT, ext); return prop; } diff --git a/source/de/anomic/http/server/ServerSideIncludes.java b/source/de/anomic/http/server/ServerSideIncludes.java index 2d84e231e..ee924faa1 100644 --- a/source/de/anomic/http/server/ServerSideIncludes.java +++ b/source/de/anomic/http/server/ServerSideIncludes.java @@ -29,7 +29,7 @@ package de.anomic.http.server; import java.io.IOException; import java.io.OutputStream; -import java.util.Properties; +import java.util.HashMap; import net.yacy.cora.document.UTF8; import net.yacy.cora.protocol.HeaderFramework; @@ -84,13 +84,13 @@ public class ServerSideIncludes { } // set up virtual connection properties to call httpdFileHander.doGet() - final Properties conProp = new Properties(); + final HashMap conProp = new HashMap(); final RequestHeader header = new RequestHeader(HTTPDemon.reverseMappingCache); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_METHOD, HeaderFramework.METHOD_GET); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_PATH, path); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_ARGS, args); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); - conProp.setProperty(HeaderFramework.CONNECTION_PROP_CLIENTIP, requesthost); + conProp.put(HeaderFramework.CONNECTION_PROP_METHOD, HeaderFramework.METHOD_GET); + conProp.put(HeaderFramework.CONNECTION_PROP_PATH, path); + conProp.put(HeaderFramework.CONNECTION_PROP_ARGS, args); + conProp.put(HeaderFramework.CONNECTION_PROP_HTTP_VER, HeaderFramework.HTTP_VERSION_0_9); + conProp.put(HeaderFramework.CONNECTION_PROP_CLIENTIP, requesthost); header.put(RequestHeader.AUTHORIZATION, authorization); HTTPDFileHandler.doGet(conProp, header, out); } diff --git a/source/de/anomic/search/ResultFetcher.java b/source/de/anomic/search/ResultFetcher.java index 1f845970e..aa84d632b 100644 --- a/source/de/anomic/search/ResultFetcher.java +++ b/source/de/anomic/search/ResultFetcher.java @@ -336,7 +336,7 @@ public class ResultFetcher { // check if we can succeed if we try to take another url if (rankingProcess.feedingIsFinished() && rankingProcess.sizeQueue() == 0) { - Log.logWarning("ResultFetcher", "rankingProcess.feedingIsFinished() && rankingProcess.sizeQueue() == 0"); + //Log.logWarning("ResultFetcher", "rankingProcess.feedingIsFinished() && rankingProcess.sizeQueue() == 0"); break; } diff --git a/source/net/yacy/cora/protocol/HeaderFramework.java b/source/net/yacy/cora/protocol/HeaderFramework.java index af5be308e..07fc48547 100644 --- a/source/net/yacy/cora/protocol/HeaderFramework.java +++ b/source/net/yacy/cora/protocol/HeaderFramework.java @@ -29,6 +29,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map; @@ -539,10 +540,10 @@ public class HeaderFramework extends TreeMap implements Map conProp) throws MalformedURLException { + String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); + final String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); // always starts with leading '/' + final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); // may be null if no args were given //String ip = conProp.getProperty(httpHeader.CONNECTION_PROP_CLIENTIP); // the ip from the connecting peer int port, pos; diff --git a/source/net/yacy/kelondro/util/FileUtils.java b/source/net/yacy/kelondro/util/FileUtils.java index 1a4a2b323..34372a8d8 100644 --- a/source/net/yacy/kelondro/util/FileUtils.java +++ b/source/net/yacy/kelondro/util/FileUtils.java @@ -141,7 +141,8 @@ public final class FileUtils { return source.length(); } - public static int copy(final Reader source, final Writer dest) throws IOException { + public static int copy(final Reader source, final Writer dest) throws IOException { + if (source == null) throw new IOException("source is null"); final char[] buffer = new char[DEFAULT_BUFFER_SIZE]; int count = 0; int n = 0; @@ -153,8 +154,8 @@ public final class FileUtils { dest.flush(); } catch (final Exception e) { // an "sun.io.MalformedInputException: Missing byte-order mark" - exception may occur here - Log.logException(e); - throw new IOException(e.getMessage(), e); + //Log.logException(e); + throw new IOException(e.getMessage() == null ? e.toString() : e.getMessage(), e); } return count; }