1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.nested;
20
21 import java.io.IOException;
22 import java.util.Enumeration;
23
24 import javax.servlet.ServletException;
25 import javax.servlet.ServletInputStream;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import org.eclipse.jetty.http.HttpFields;
30 import org.eclipse.jetty.http.HttpURI;
31 import org.eclipse.jetty.io.Connection;
32 import org.eclipse.jetty.server.AbstractHttpConnection;
33 import org.eclipse.jetty.server.DispatcherType;
34
35
36 public class NestedConnection extends AbstractHttpConnection
37 {
38 protected NestedConnection(final NestedConnector connector, final NestedEndPoint endp, final HttpServletRequest outerRequest, HttpServletResponse outerResponse,String nestedIn)
39 throws IOException
40 {
41 super(connector,
42 endp,
43 connector.getServer(),
44 new NestedParser(),
45 new NestedGenerator(connector.getResponseBuffers(),endp,outerResponse,nestedIn),
46 new NestedRequest(outerRequest));
47
48 ((NestedRequest)_request).setConnection(this);
49
50
51 _request.setDispatcherType(DispatcherType.REQUEST);
52 _request.setScheme(outerRequest.getScheme());
53 _request.setMethod(outerRequest.getMethod());
54 String uri=outerRequest.getQueryString()==null?outerRequest.getRequestURI():(outerRequest.getRequestURI()+"?"+outerRequest.getQueryString());
55 _request.setUri(new HttpURI(uri));
56 _request.setPathInfo(outerRequest.getRequestURI());
57 _request.setQueryString(outerRequest.getQueryString());
58 _request.setProtocol(outerRequest.getProtocol());
59
60
61 HttpFields fields = getRequestFields();
62 for (Enumeration<String> e=outerRequest.getHeaderNames();e.hasMoreElements();)
63 {
64 String header=e.nextElement();
65 String value=outerRequest.getHeader(header);
66 fields.add(header,value);
67 }
68
69
70 _request.setCookies(outerRequest.getCookies());
71
72
73 for (Enumeration<String> e=outerRequest.getAttributeNames();e.hasMoreElements();)
74 {
75 String attr=e.nextElement();
76 _request.setAttribute(attr,outerRequest.getAttribute(attr));
77 }
78
79
80 connector.customize(endp,_request);
81
82
83
84 }
85
86 void service() throws IOException, ServletException
87 {
88 setCurrentConnection(this);
89 try
90 {
91 getServer().handle(this);
92 completeResponse();
93 while (!_generator.isComplete() && _endp.isOpen())
94 _generator.flushBuffer();
95 _endp.flush();
96 }
97 finally
98 {
99 setCurrentConnection(null);
100 }
101 }
102
103
104
105
106 @Override
107 public ServletInputStream getInputStream() throws IOException
108 {
109 return ((NestedEndPoint)_endp).getServletInputStream();
110 }
111
112
113
114
115 @Override
116 public Connection handle() throws IOException
117 {
118 throw new IllegalStateException();
119 }
120
121 }