1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.fcgi.client.http;
20
21 import java.io.IOException;
22 import java.util.Map;
23
24 import org.eclipse.jetty.client.AbstractHttpClientTransport;
25 import org.eclipse.jetty.client.HttpDestination;
26 import org.eclipse.jetty.client.Origin;
27 import org.eclipse.jetty.client.api.Connection;
28 import org.eclipse.jetty.client.api.Request;
29 import org.eclipse.jetty.fcgi.FCGI;
30 import org.eclipse.jetty.http.HttpFields;
31 import org.eclipse.jetty.io.EndPoint;
32 import org.eclipse.jetty.util.Promise;
33
34 public class HttpClientTransportOverFCGI extends AbstractHttpClientTransport
35 {
36 private final boolean multiplexed;
37 private final String scriptRoot;
38
39 public HttpClientTransportOverFCGI(String scriptRoot)
40 {
41 this(Math.max(1, Runtime.getRuntime().availableProcessors() / 2), false, scriptRoot);
42 }
43
44 public HttpClientTransportOverFCGI(int selectors, boolean multiplexed, String scriptRoot)
45 {
46 super(selectors);
47 this.multiplexed = multiplexed;
48 this.scriptRoot = scriptRoot;
49 }
50
51 public boolean isMultiplexed()
52 {
53 return multiplexed;
54 }
55
56 public String getScriptRoot()
57 {
58 return scriptRoot;
59 }
60
61 @Override
62 public HttpDestination newHttpDestination(Origin origin)
63 {
64 return isMultiplexed() ? new MultiplexHttpDestinationOverFCGI(getHttpClient(), origin)
65 : new HttpDestinationOverFCGI(getHttpClient(), origin);
66 }
67
68 @Override
69 public org.eclipse.jetty.io.Connection newConnection(EndPoint endPoint, Map<String, Object> context) throws IOException
70 {
71 HttpDestination destination = (HttpDestination)context.get(HTTP_DESTINATION_CONTEXT_KEY);
72 HttpConnectionOverFCGI connection = new HttpConnectionOverFCGI(endPoint, destination, isMultiplexed());
73 if (LOG.isDebugEnabled())
74 LOG.debug("Created {}", connection);
75 @SuppressWarnings("unchecked")
76 Promise<Connection> promise = (Promise<Connection>)context.get(HTTP_CONNECTION_PROMISE_CONTEXT_KEY);
77 promise.succeeded(connection);
78 return connection;
79 }
80
81 protected void customize(Request request, HttpFields fastCGIHeaders)
82 {
83 fastCGIHeaders.put(FCGI.Headers.DOCUMENT_ROOT, getScriptRoot());
84 }
85 }