Mercurial Hosting > luan
comparison src/org/eclipse/jetty/server/BlockingHttpConnection.java @ 874:ad495e897c32
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 04 Oct 2016 13:34:23 -0600 |
parents | 8e9db0bbf4f9 |
children | fe461f7cfc8e |
comparison
equal
deleted
inserted
replaced
873:220ad4853cda | 874:ad495e897c32 |
---|---|
33 /* ------------------------------------------------------------ */ | 33 /* ------------------------------------------------------------ */ |
34 /** Blocking Server HTTP Connection | 34 /** Blocking Server HTTP Connection |
35 */ | 35 */ |
36 public class BlockingHttpConnection extends AbstractHttpConnection | 36 public class BlockingHttpConnection extends AbstractHttpConnection |
37 { | 37 { |
38 private static final Logger LOG = LoggerFactory.getLogger(BlockingHttpConnection.class); | 38 private static final Logger LOG = LoggerFactory.getLogger(BlockingHttpConnection.class); |
39 | 39 |
40 public BlockingHttpConnection(Connector connector, EndPoint endpoint, Server server) | 40 public BlockingHttpConnection(Connector connector, EndPoint endpoint, Server server) |
41 { | 41 { |
42 super(connector,endpoint,server); | 42 super(connector,endpoint,server); |
43 } | 43 } |
44 | 44 |
45 public BlockingHttpConnection(Connector connector, EndPoint endpoint, Server server, Parser parser, Generator generator, Request request) | 45 public BlockingHttpConnection(Connector connector, EndPoint endpoint, Server server, Parser parser, Generator generator, Request request) |
46 { | 46 { |
47 super(connector,endpoint,server,parser,generator,request); | 47 super(connector,endpoint,server,parser,generator,request); |
48 } | 48 } |
49 | 49 |
50 @Override | 50 @Override |
51 protected void handleRequest() throws IOException | 51 protected void handleRequest() throws IOException |
52 { | 52 { |
53 super.handleRequest(); | 53 super.handleRequest(); |
54 } | 54 } |
55 | 55 |
56 public Connection handle() throws IOException | 56 public Connection handle() throws IOException |
57 { | 57 { |
58 Connection connection = this; | 58 Connection connection = this; |
59 | 59 |
60 try | 60 try |
61 { | 61 { |
62 setCurrentConnection(this); | 62 setCurrentConnection(this); |
63 | 63 |
64 // do while the endpoint is open | 64 // do while the endpoint is open |
65 // AND the connection has not changed | 65 // AND the connection has not changed |
66 while (_endp.isOpen() && connection==this) | 66 while (_endp.isOpen() && connection==this) |
67 { | 67 { |
68 try | 68 try |
69 { | 69 { |
70 // If we are not ended then parse available | 70 // If we are not ended then parse available |
71 if (!_parser.isComplete() && !_endp.isInputShutdown()) | 71 if (!_parser.isComplete() && !_endp.isInputShutdown()) |
72 _parser.parseAvailable(); | 72 _parser.parseAvailable(); |
73 | 73 |
74 // Do we have more generating to do? | 74 // Do we have more generating to do? |
75 // Loop here because some writes may take multiple steps and | 75 // Loop here because some writes may take multiple steps and |
76 // we need to flush them all before potentially blocking in the | 76 // we need to flush them all before potentially blocking in the |
77 // next loop. | 77 // next loop. |
78 if (_generator.isCommitted() && !_generator.isComplete() && !_endp.isOutputShutdown()) | 78 if (_generator.isCommitted() && !_generator.isComplete() && !_endp.isOutputShutdown()) |
79 _generator.flushBuffer(); | 79 _generator.flushBuffer(); |
80 | 80 |
81 // Flush buffers | 81 // Flush buffers |
82 _endp.flush(); | 82 _endp.flush(); |
83 } | 83 } |
84 catch (HttpException e) | 84 catch (HttpException e) |
85 { | 85 { |
86 if (LOG.isDebugEnabled()) | 86 if (LOG.isDebugEnabled()) |
87 { | 87 { |
88 LOG.debug("uri="+_uri); | 88 LOG.debug("uri="+_uri); |
89 LOG.debug("fields="+_requestFields); | 89 LOG.debug("fields="+_requestFields); |
90 LOG.debug("",e); | 90 LOG.debug("",e); |
91 } | 91 } |
92 _generator.sendError(e.getStatus(), e.getReason(), null, true); | 92 _generator.sendError(e.getStatus(), e.getReason(), null, true); |
93 _parser.reset(); | 93 _parser.reset(); |
94 _endp.shutdownOutput(); | 94 _endp.shutdownOutput(); |
95 } | 95 } |
96 finally | 96 finally |
97 { | 97 { |
98 // Is this request/response round complete and are fully flushed? | 98 // Is this request/response round complete and are fully flushed? |
99 if (_parser.isComplete() && _generator.isComplete()) | 99 if (_parser.isComplete() && _generator.isComplete()) |
100 { | 100 { |
101 // Reset the parser/generator | 101 // Reset the parser/generator |
102 reset(); | 102 reset(); |
103 | 103 |
104 // look for a switched connection instance? | 104 // look for a switched connection instance? |
105 if (_response.getStatus()==HttpStatus.SWITCHING_PROTOCOLS_101) | 105 if (_response.getStatus()==HttpStatus.SWITCHING_PROTOCOLS_101) |
106 { | 106 { |
107 Connection switched=(Connection)_request.getAttribute("org.eclipse.jetty.io.Connection"); | 107 Connection switched=(Connection)_request.getAttribute("org.eclipse.jetty.io.Connection"); |
108 if (switched!=null) | 108 if (switched!=null) |
109 connection=switched; | 109 connection=switched; |
110 } | 110 } |
111 | 111 |
112 // TODO Is this required? | 112 // TODO Is this required? |
113 if (!_generator.isPersistent() && !_endp.isOutputShutdown()) | 113 if (!_generator.isPersistent() && !_endp.isOutputShutdown()) |
114 { | 114 { |
115 LOG.warn("Safety net oshut!!! Please open a bugzilla"); | 115 LOG.warn("Safety net oshut!!! Please open a bugzilla"); |
116 _endp.shutdownOutput(); | 116 _endp.shutdownOutput(); |
117 } | 117 } |
118 } | 118 } |
119 | 119 |
120 // If we don't have a committed response and we are not suspended | 120 // If we don't have a committed response and we are not suspended |
121 if (_endp.isInputShutdown() && _generator.isIdle() && !_request.getAsyncContinuation().isSuspended()) | 121 if (_endp.isInputShutdown() && _generator.isIdle() && !_request.getAsyncContinuation().isSuspended()) |
122 { | 122 { |
123 // then no more can happen, so close. | 123 // then no more can happen, so close. |
124 _endp.close(); | 124 _endp.close(); |
125 } | 125 } |
126 } | 126 } |
127 } | 127 } |
128 | 128 |
129 return connection; | 129 return connection; |
130 } | 130 } |
131 finally | 131 finally |
132 { | 132 { |
133 setCurrentConnection(null); | 133 setCurrentConnection(null); |
134 _parser.returnBuffers(); | 134 _parser.returnBuffers(); |
135 _generator.returnBuffers(); | 135 _generator.returnBuffers(); |
136 } | 136 } |
137 } | 137 } |
138 } | 138 } |