} else {
throw new ServiceUnavailableException("reverseUrl is infinite loop.");
}
Socket outsocket = null;
try {
ReverseUrl reverseUrl = serviceUrl.getReverseUrl();
if (reverseUrl == null) {
throw new ServiceUnavailableException("reverseUrl is null.");
}
context.setAttribute("reverseUrl", reverseUrl);
ReverseUtils.setXForwardedFor(request, context);
outsocket = socketFactory.createSocket();
InetAddress remoteAddress = InetAddress.getByName(reverseUrl.getTargetAddress().getHostName());
InetSocketAddress remote = new InetSocketAddress(remoteAddress, reverseUrl.getTargetAddress().getPort());
//for 4.1
socketFactory.connectSocket(outsocket, remote, null, builder.buildParams());
//for 4.0 @deprecated
//socketFactory.connectSocket(outsocket,
// reverseUrl.getTargetAddress().getHostName(),
// reverseUrl.getTargetAddress().getPort(),
// null, -1, builder.buildParams());
DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
conn.bind(outsocket, builder.buildParams());
if (LOG.isTraceEnabled()) {
LOG.trace("Outgoing connection to " + outsocket.getInetAddress());
LOG.trace("request: " + request);
}
ReverseHttpRequest targetRequest = null;
if (request instanceof HttpEntityEnclosingRequest) {
targetRequest = new ReverseHttpEntityEnclosingRequest(request, context, reverseUrl);
} else {
URL url = reverseUrl.getReverseUrl(request.getRequestLine().getUri());
if (url == null) {
throw new NotFoundException("url is null.");
}
BasicRequestLine line = new BasicRequestLine(
request.getRequestLine().getMethod(),