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