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 import org.eclipse.jetty.util.annotation.ManagedAttribute;
34 import org.eclipse.jetty.util.annotation.ManagedObject;
35
36 @ManagedObject("The FastCGI/1.0 client transport")
37 public class HttpClientTransportOverFCGI extends AbstractHttpClientTransport
38 {
39 private final boolean multiplexed;
40 private final String scriptRoot;
41
42 public HttpClientTransportOverFCGI(String scriptRoot)
43 {
44 this(Math.max(1, Runtime.getRuntime().availableProcessors() / 2), false, scriptRoot);
45 }
46
47 public HttpClientTransportOverFCGI(int selectors, boolean multiplexed, String scriptRoot)
48 {
49 super(selectors);
50 this.multiplexed = multiplexed;
51 this.scriptRoot = scriptRoot;
52 }
53
54 public boolean isMultiplexed()
55 {
56 return multiplexed;
57 }
58
59 @ManagedAttribute(value = "The scripts root directory", readonly = true)
60 public String getScriptRoot()
61 {
62 return scriptRoot;
63 }
64
65 @Override
66 public HttpDestination newHttpDestination(Origin origin)
67 {
68 return isMultiplexed() ? new MultiplexHttpDestinationOverFCGI(getHttpClient(), origin)
69 : new HttpDestinationOverFCGI(getHttpClient(), origin);
70 }
71
72 @Override
73 public org.eclipse.jetty.io.Connection newConnection(EndPoint endPoint, Map<String, Object> context) throws IOException
74 {
75 HttpDestination destination = (HttpDestination)context.get(HTTP_DESTINATION_CONTEXT_KEY);
76 @SuppressWarnings("unchecked")
77 Promise<Connection> promise = (Promise<Connection>)context.get(HTTP_CONNECTION_PROMISE_CONTEXT_KEY);
78 HttpConnectionOverFCGI connection = newHttpConnection(endPoint, destination, promise);
79 if (LOG.isDebugEnabled())
80 LOG.debug("Created {}", connection);
81 return connection;
82 }
83
84 protected HttpConnectionOverFCGI newHttpConnection(EndPoint endPoint, HttpDestination destination, Promise<Connection> promise)
85 {
86 return new HttpConnectionOverFCGI(endPoint, destination, promise, isMultiplexed());
87 }
88
89 protected void customize(Request request, HttpFields fastCGIHeaders)
90 {
91 fastCGIHeaders.put(FCGI.Headers.DOCUMENT_ROOT, getScriptRoot());
92 }
93 }