|
17 | 17 |
|
18 | 18 | package org.openqa.selenium.netty.server; |
19 | 19 |
|
| 20 | +import static io.netty.handler.codec.http.HttpMethod.HEAD; |
| 21 | +import static org.openqa.selenium.remote.http.Contents.memoize; |
| 22 | + |
20 | 23 | import com.google.common.io.ByteStreams; |
| 24 | + |
| 25 | +import org.openqa.selenium.internal.Debug; |
| 26 | +import org.openqa.selenium.remote.http.HttpMethod; |
| 27 | +import org.openqa.selenium.remote.http.HttpRequest; |
| 28 | +import org.openqa.selenium.remote.http.HttpResponse; |
| 29 | +import org.openqa.selenium.remote.tracing.AttributeKey; |
| 30 | + |
21 | 31 | import io.netty.buffer.ByteBuf; |
22 | 32 | import io.netty.buffer.ByteBufInputStream; |
23 | 33 | import io.netty.channel.ChannelHandlerContext; |
|
31 | 41 | import io.netty.handler.codec.http.LastHttpContent; |
32 | 42 | import io.netty.handler.codec.http.QueryStringDecoder; |
33 | 43 | import io.netty.util.ReferenceCountUtil; |
34 | | -import org.openqa.selenium.remote.http.HttpMethod; |
35 | | -import org.openqa.selenium.remote.http.HttpRequest; |
36 | | -import org.openqa.selenium.remote.http.HttpResponse; |
37 | | -import org.openqa.selenium.remote.tracing.AttributeKey; |
38 | 44 |
|
39 | 45 | import java.io.IOException; |
40 | 46 | import java.io.InputStream; |
|
45 | 51 | import java.util.concurrent.Executors; |
46 | 52 | import java.util.logging.Logger; |
47 | 53 |
|
48 | | -import static io.netty.handler.codec.http.HttpMethod.HEAD; |
49 | | -import static org.openqa.selenium.remote.http.Contents.memoize; |
50 | | - |
51 | 54 | class RequestConverter extends SimpleChannelInboundHandler<HttpObject> { |
52 | 55 |
|
53 | 56 | private static final Logger LOG = Logger.getLogger(RequestConverter.class.getName()); |
@@ -133,23 +136,32 @@ private HttpRequest createRequest( |
133 | 136 | try { |
134 | 137 | method = HttpMethod.valueOf(nettyRequest.method().name()); |
135 | 138 | } catch (IllegalArgumentException e) { |
136 | | - ctx.writeAndFlush(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.METHOD_NOT_ALLOWED)); |
| 139 | + ctx.writeAndFlush( |
| 140 | + new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.METHOD_NOT_ALLOWED)); |
137 | 141 | return null; |
138 | 142 | } |
139 | 143 | } |
140 | 144 |
|
141 | | - QueryStringDecoder decoder = new QueryStringDecoder(nettyRequest.uri()); |
142 | | - |
143 | | - HttpRequest req = new HttpRequest( |
144 | | - method, |
145 | | - decoder.path()); |
146 | | - |
147 | | - decoder.parameters().forEach((key, values) -> values.forEach(value -> req.addQueryParameter(key, value))); |
148 | | - |
149 | | - nettyRequest.headers().entries().stream() |
150 | | - .filter(entry -> entry.getKey() != null) |
151 | | - .forEach(entry -> req.addHeader(entry.getKey(), entry.getValue())); |
152 | | - |
153 | | - return req; |
| 145 | + // Attempt to decode parameters |
| 146 | + try { |
| 147 | + QueryStringDecoder decoder = new QueryStringDecoder(nettyRequest.uri()); |
| 148 | + |
| 149 | + HttpRequest req = new HttpRequest( |
| 150 | + method, |
| 151 | + decoder.path()); |
| 152 | + |
| 153 | + decoder.parameters() |
| 154 | + .forEach((key, values) -> values.forEach(value -> req.addQueryParameter(key, value))); |
| 155 | + |
| 156 | + nettyRequest.headers().entries().stream() |
| 157 | + .filter(entry -> entry.getKey() != null) |
| 158 | + .forEach(entry -> req.addHeader(entry.getKey(), entry.getValue())); |
| 159 | + return req; |
| 160 | + } catch (Exception e) { |
| 161 | + ctx.writeAndFlush( |
| 162 | + new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST)); |
| 163 | + LOG.log(Debug.getDebugLogLevel(), "Not possible to decode parameters.", e); |
| 164 | + return null; |
| 165 | + } |
154 | 166 | } |
155 | 167 | } |
0 commit comments