diff --git a/source/de/anomic/http/httpdProxyHandler.java b/source/de/anomic/http/httpdProxyHandler.java index e70abc361..00bc1457b 100644 --- a/source/de/anomic/http/httpdProxyHandler.java +++ b/source/de/anomic/http/httpdProxyHandler.java @@ -116,7 +116,7 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt private static htmlFilterTransformer transformer = null; - public static final String userAgent = "yacy (" + httpc.systemOST +") yacy.net"; + public static final String userAgent = "yacy (" + httpc.systemOST +") yacy.net"; private File htRootPath = null; private static boolean doAccessLogging = false; @@ -179,6 +179,11 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt */ private final StringBuffer logMessage = new StringBuffer(); + /** + * Reusable {@link StringBuffer} to generate the useragent string + */ + private final StringBuffer userAgentStr = new StringBuffer(); + // class methods public httpdProxyHandler(serverSwitch sb) { @@ -351,7 +356,7 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt // set another userAgent, if not yellowlisted if ((yellowList != null) && (!(yellowList.contains(domain(hostlow))))) { // change the User-Agent - requestHeader.put(httpHeader.USER_AGENT, userAgent); + requestHeader.put(httpHeader.USER_AGENT, generateUserAgent(requestHeader)); } // decide wether to use a cache entry or connect to the network @@ -852,7 +857,7 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt // set another userAgent, if not yellowlisted if (!(yellowList.contains(domain(hostlow)))) { // change the User-Agent - requestHeader.put(httpHeader.USER_AGENT, userAgent); + requestHeader.put(httpHeader.USER_AGENT, generateUserAgent(requestHeader)); } // resolve yacy and yacyh domains @@ -930,7 +935,7 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt // set another userAgent, if not yellowlisted if (!(yellowList.contains(domain(host).toLowerCase()))) { // change the User-Agent - requestHeader.put(httpHeader.USER_AGENT, userAgent); + requestHeader.put(httpHeader.USER_AGENT, generateUserAgent(requestHeader)); } // resolve yacy and yacyh domains @@ -1169,6 +1174,25 @@ public final class httpdProxyHandler extends httpdAbstractHandler implements htt out.flush(); } + private String generateUserAgent(httpHeader requestHeaders) { + this.userAgentStr.setLength(0); + + String browserUserAgent = (String) requestHeaders.get(httpHeader.USER_AGENT, userAgent); + int pos = browserUserAgent.lastIndexOf(')'); + if (pos >= 0) { + this.userAgentStr + .append(browserUserAgent.substring(0,pos)) + .append("; YaCy ") + .append(switchboard.getConfig("vString","0.1")) + .append("; yacy.net") + .append(browserUserAgent.substring(pos)); + } else { + this.userAgentStr.append(browserUserAgent); + } + + return this.userAgentStr.toString(); + } + /** * This function is used to generate a logging message according to the * squid logging format.

diff --git a/source/yacy.java b/source/yacy.java index 6476564d9..c6dff22ac 100644 --- a/source/yacy.java +++ b/source/yacy.java @@ -236,6 +236,7 @@ public final class yacy { } sb.setConfig("version", Float.toString(version)); + sb.setConfig("vString", combinedVersionString2PrettyString(Float.toString(version))); sb.setConfig("vdate", vDATE); sb.setConfig("applicationRoot", homePath); sb.setConfig("startupTime", Long.toString(startup));