public final class HTTPDProxyHandler
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private static ConcurrentLog |
log |
private static java.lang.StringBuilder |
logMessage
Reusable
StringBuilder for logging |
static ConcurrentLog |
proxyLog
Special logger instance for proxy access logging much similar
to the squid access.log file
|
private static boolean |
redirectorEnabled |
private static java.lang.Process |
redirectorProcess |
private static java.io.BufferedReader |
redirectorReader |
private static java.io.PrintWriter |
redirectorWriter |
private static Switchboard |
sb |
private static int |
timeout |
private static java.lang.StringBuilder |
userAgentStr
Reusable
StringBuilder to generate the useragent string |
private static java.lang.String |
yacyProxyUserAgent |
private static java.util.HashSet<java.lang.String> |
yellowList |
Constructor and Description |
---|
HTTPDProxyHandler() |
Modifier and Type | Method and Description |
---|---|
private static void |
addXForwardedForHeader(java.util.HashMap<java.lang.String,java.lang.Object> conProp,
RequestHeader requestHeader)
adds the client-IP of conProp to the requestHeader
|
private static void |
correctContentEncoding(ResponseHeader responseHeader) |
static void |
doGet(java.util.HashMap<java.lang.String,java.lang.Object> conProp,
RequestHeader requestHeader,
java.io.OutputStream respond,
ClientIdentification.Agent agent) |
private static java.lang.String |
domain(java.lang.String host) |
private static void |
forceConnectionClose(java.util.HashMap<java.lang.String,java.lang.Object> conProp) |
private static void |
fulfillRequestFromCache(java.util.HashMap<java.lang.String,java.lang.Object> conProp,
DigestURL url,
RequestHeader requestHeader,
ResponseHeader cachedResponseHeader,
byte[] cacheEntry,
java.io.OutputStream respond) |
private static void |
fulfillRequestFromWeb(java.util.HashMap<java.lang.String,java.lang.Object> conProp,
DigestURL url,
RequestHeader requestHeader,
ResponseHeader cachedResponseHeader,
java.io.OutputStream respond,
ClientIdentification.Agent agent) |
private static java.lang.String |
generateUserAgent(HeaderFramework requestHeaders) |
private static void |
handleIncomingCookies(ResponseHeader respondHeader,
java.lang.String serverhost,
java.lang.String targetclient) |
private static void |
handleOutgoingCookies(RequestHeader requestHeader,
java.lang.String targethost,
java.lang.String clienthost) |
private static void |
handleProxyException(java.lang.Exception e,
java.util.HashMap<java.lang.String,java.lang.Object> conProp,
java.io.OutputStream respond,
DigestURL url) |
private static boolean |
hasBody(int statusCode)
determines if the response should have a body
|
private static java.lang.String |
hostPart(java.lang.String host,
int port,
java.lang.String yAddress) |
private static void |
logProxyAccess(java.util.HashMap<java.lang.String,java.lang.Object> conProp)
This function is used to generate a logging message according to the
squid logging format.
|
static void |
modifyProxyHeaders(HeaderFramework requestHeader,
java.lang.String httpVer)
removing hop by hop headers and adding additional headers
|
private static void |
prepareRequestHeader(java.util.HashMap<java.lang.String,java.lang.Object> conProp,
RequestHeader requestHeader,
java.lang.String hostlow) |
private static void |
prepareResponseHeader(ResponseHeader responseHeader,
java.lang.String httpVer) |
private static void |
removeHopByHopHeaders(HeaderFramework headers) |
private static java.lang.String |
resolveYacyDomains(java.lang.String host)
resolve yacy and yacyh domains
|
private static ChunkedOutputStream |
setTransferEncoding(java.util.HashMap<java.lang.String,java.lang.Object> conProp,
ResponseHeader responseHeader,
int statusCode,
java.io.OutputStream respond)
determines in which form the response should be send and sets header accordingly
if the content length is not set we need to use chunked content encoding
Implemented:
if !content-length
switch httpVer
case 0.9:
case 1.0:
close connection after transfer
break;
default:
new ChunkedStream around respond
end if
|
private static HTTPClient |
setupHttpClient(RequestHeader requestHeader,
ClientIdentification.Agent agent,
java.lang.String connectHost)
creates a new HttpClient and sets parameters according to proxy needs
|
private static void |
setViaHeader(HeaderFramework header,
java.lang.String httpVer) |
private static serverObjects |
unknownHostHandling(java.util.HashMap<java.lang.String,java.lang.Object> conProp) |
private static final java.lang.String yacyProxyUserAgent
private static Switchboard sb
private static final java.util.HashSet<java.lang.String> yellowList
private static int timeout
private static java.lang.Process redirectorProcess
private static boolean redirectorEnabled
private static java.io.PrintWriter redirectorWriter
private static java.io.BufferedReader redirectorReader
private static final ConcurrentLog log
public static final ConcurrentLog proxyLog
private static final java.lang.StringBuilder logMessage
StringBuilder
for loggingprivate static final java.lang.StringBuilder userAgentStr
StringBuilder
to generate the useragent stringprivate static void handleOutgoingCookies(RequestHeader requestHeader, java.lang.String targethost, java.lang.String clienthost)
private static void handleIncomingCookies(ResponseHeader respondHeader, java.lang.String serverhost, java.lang.String targetclient)
public static void doGet(java.util.HashMap<java.lang.String,java.lang.Object> conProp, RequestHeader requestHeader, java.io.OutputStream respond, ClientIdentification.Agent agent)
conProp
- a collection of properties about the connection, like URLrequestHeader
- The header lines of the connection from the requestrespond
- the OutputStream to the clientde.anomic.http.httpdHandler#doGet(java.util.Properties, net.yacy.cora.protocol.HeaderFramework, java.io.OutputStream)
private static void fulfillRequestFromWeb(java.util.HashMap<java.lang.String,java.lang.Object> conProp, DigestURL url, RequestHeader requestHeader, ResponseHeader cachedResponseHeader, java.io.OutputStream respond, ClientIdentification.Agent agent)
private static boolean hasBody(int statusCode)
statusCode
- responseHeader
- private static void fulfillRequestFromCache(java.util.HashMap<java.lang.String,java.lang.Object> conProp, DigestURL url, RequestHeader requestHeader, ResponseHeader cachedResponseHeader, byte[] cacheEntry, java.io.OutputStream respond) throws java.io.IOException
java.io.IOException
private static java.lang.String resolveYacyDomains(java.lang.String host)
host
- private static java.lang.String hostPart(java.lang.String host, int port, java.lang.String yAddress)
host
- port
- yAddress
- private static void prepareRequestHeader(java.util.HashMap<java.lang.String,java.lang.Object> conProp, RequestHeader requestHeader, java.lang.String hostlow)
conProp
- requestHeader
- hostlow
- private static java.lang.String domain(java.lang.String host)
private static HTTPClient setupHttpClient(RequestHeader requestHeader, ClientIdentification.Agent agent, java.lang.String connectHost)
requestHeader
- connectHost
- may be 'host:port' or 'host:port/path'private static ChunkedOutputStream setTransferEncoding(java.util.HashMap<java.lang.String,java.lang.Object> conProp, ResponseHeader responseHeader, int statusCode, java.io.OutputStream respond)
conProp
- responseHeader
- statusCode
- respond
- private static void prepareResponseHeader(ResponseHeader responseHeader, java.lang.String httpVer)
res
- responseHeader
- private static void correctContentEncoding(ResponseHeader responseHeader)
responseHeader
- private static void addXForwardedForHeader(java.util.HashMap<java.lang.String,java.lang.Object> conProp, RequestHeader requestHeader)
conProp
- requestHeader
- public static void modifyProxyHeaders(HeaderFramework requestHeader, java.lang.String httpVer)
requestHeader
- httpVer
- private static void removeHopByHopHeaders(HeaderFramework headers)
private static void setViaHeader(HeaderFramework header, java.lang.String httpVer)
private static void handleProxyException(java.lang.Exception e, java.util.HashMap<java.lang.String,java.lang.Object> conProp, java.io.OutputStream respond, DigestURL url)
private static void forceConnectionClose(java.util.HashMap<java.lang.String,java.lang.Object> conProp)
private static serverObjects unknownHostHandling(java.util.HashMap<java.lang.String,java.lang.Object> conProp) throws java.lang.Exception
java.lang.Exception
private static java.lang.String generateUserAgent(HeaderFramework requestHeaders)
private static final void logProxyAccess(java.util.HashMap<java.lang.String,java.lang.Object> conProp)
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