use of org.apache.http.impl.DefaultHttpRequestFactory in project indy by Commonjava.
the class ProxyRequestReader method handleEvent.
// TODO: May need to tune this to preserve request body.
// TODO: NONE of the request headers (except authorization) are passed through!
@Override
public void handleEvent(final ConduitStreamSourceChannel sourceChannel) {
boolean sendResponse = false;
try {
final int read = doRead(sourceChannel);
if (read <= 0) {
logger.debug("Reads: {} ", read);
return;
}
byte[] bytes = bReq.toByteArray();
if (sslTunnel != null) {
logger.debug("Send to ssl tunnel, {}, bytes:\n\n {}\n", new String(bytes), Hex.encodeHexString(bytes));
directTo(sslTunnel);
return;
}
logger.debug("Request in progress is:\n\n{}", new String(bytes));
if (headDone) {
logger.debug("Request done. parsing.");
MessageConstraints mc = MessageConstraints.DEFAULT;
SessionInputBufferImpl inbuf = new SessionInputBufferImpl(new HttpTransportMetricsImpl(), 1024);
HttpRequestFactory requestFactory = new DefaultHttpRequestFactory();
LineParser lp = new BasicLineParser();
DefaultHttpRequestParser requestParser = new DefaultHttpRequestParser(inbuf, lp, requestFactory, mc);
inbuf.bind(new ByteArrayInputStream(bytes));
try {
logger.debug("Passing parsed http request off to response writer.");
HttpRequest request = requestParser.parse();
Optional<SpanAdapter> span;
if (traceManager.isPresent())
span = traceManager.get().startServiceRootSpan("httprox-get", contextExtractor(request));
else
span = Optional.empty();
logger.debug("Request contains {} header: '{}'", ApplicationHeader.authorization.key(), request.getHeaders(ApplicationHeader.authorization.key()));
writer.setHttpRequest(request);
writer.setSpan(span);
sendResponse = true;
} catch (ConnectionClosedException e) {
logger.warn("Client closed connection. Aborting proxy request.");
sendResponse = false;
sourceChannel.shutdownReads();
} catch (HttpException e) {
logger.error("Failed to parse http request: " + e.getMessage(), e);
writer.setError(e);
}
} else {
logger.debug("Request not finished. Pausing until more reads are available.");
sourceChannel.resumeReads();
}
} catch (final IOException e) {
writer.setError(e);
sendResponse = true;
}
if (sendResponse) {
sinkChannel.resumeWrites();
}
}
Aggregations