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