I've debugged the problem to an infinite loop when trying to set the Via
header on the request that the proxy sends to the back-end server. This
infinite loop is not triggered when Redirector removes the headers
becuase HttpInboundRequest.getRecipientsInfo() has a getHeaders() !=
null check.
I've captured the stack trace below when when the loop has gone through
three cycles between setRecipientsInfo and getRecipientsInfo using
restlet 2.1.4. Is this a bug in HttpInboundRequest or are we doing
something wrong?
Daemon Thread [Restlet-21015178] (Suspended)
* loop break point *
HttpInboundRequest.getRecipientsInfo() line: 579
HttpInboundRequest(Message).setRecipientsInfo(ListRecipientInfo) line:
426
HttpInboundRequest.setRecipientsInfo(ListRecipientInfo) line: 804
HttpInboundRequest.getRecipientsInfo() line: 579
HttpInboundRequest(Message).setRecipientsInfo(ListRecipientInfo) line:
426
HttpInboundRequest.setRecipientsInfo(ListRecipientInfo) line: 804
HttpInboundRequest.getRecipientsInfo() line: 579
HttpInboundRequest(Message).setRecipientsInfo(ListRecipientInfo) line:
426
HttpInboundRequest.setRecipientsInfo(ListRecipientInfo) line: 804
HttpInboundRequest.getRecipientsInfo() line: 579
* loop start **
HeaderUtils.addGeneralHeaders(Message, SeriesHeader) line: 264
ClientAdapter.toSpecific(HttpClientHelper, Request) line: 163
HttpClientHelper(HttpClientHelper).handle(Request, Response) line: 111
Client.handle(Request, Response) line: 180
ClientRoute(Filter).doHandle(Request, Response) line: 159
ClientRoute(Filter).handle(Request, Response) line: 206
ClientRouter(Router).doHandle(Restlet, Request, Response) line: 431
ClientRouter(Router).handle(Request, Response) line: 648
ComponentClientDispatcher.doHandle(Request, Response) line: 140
ComponentClientDispatcher(Filter).handle(Request, Response) line: 206
ChildClientDispatcher.parentHandle(Request, Response) line: 148
ChildClientDispatcher.doHandle(Request, Response) line: 121
ChildClientDispatcher(Filter).handle(Request, Response) line: 206
ChildClientDispatcher.parentHandle(Request, Response) line: 148
ChildClientDispatcher.doHandle(Request, Response) line: 121
ChildClientDispatcher(Filter).handle(Request, Response) line: 206
Decoder(Filter).doHandle(Request, Response) line: 159
Decoder(Filter).handle(Request, Response) line: 206
CustomRedirector.serverRedirect(Restlet, Reference, Request,
Response) line: 53
CustomRedirector(Redirector).outboundServerRedirect(Reference,
Request, Response) line: 352
CustomRedirector(Redirector).handle(Request, Response) line: 295
TemplateRoute(Filter).doHandle(Request, Response) line: 159
TemplateRoute(Filter).handle(Request, Response) line: 206
Router.doHandle(Restlet, Request, Response) line: 431
Router.handle(Request, Response) line: 648
RangeFilter(Filter).doHandle(Request, Response) line: 159
RangeFilter(Filter).handle(Request, Response) line: 206
Decoder(Filter).doHandle(Request, Response) line: 159
Decoder(Filter).handle(Request, Response) line: 206
StatusFilter(Filter).doHandle(Request, Response) line: 159
StatusFilter.doHandle(Request, Response) line: 155
StatusFilter(Filter).handle(Request, Response) line: 206
TunnelFilter(Filter).doHandle(Request, Response) line: 159
TunnelFilter(Filter).handle(Request, Response) line: 206
ApplicationHelper(CompositeHelperT).handle(Request, Response)
line: 211
ApplicationHelper.handle(Request, Response) line: 84
TransparentReverseProxyApp(Application).handle(Request, Response)
line: 381
VirtualHost$1(Filter).doHandle(Request, Response) line: 159
VirtualHost$1(Filter).handle(Request, Response) line: 206
VirtualHost(Router).doHandle(Restlet, Request, Response) line: 431
VirtualHost(Router).handle(Request, Response) line: 648
HostRoute(Filter).doHandle(Request, Response) line: 159
HostRoute(Filter).handle(Request, Response) line: 206
ServerRouter(Router).doHandle(Restlet, Request, Response) line: 431
ServerRouter(Router).handle(Request, Response) line: 648
StatusFilter(Filter).doHandle(Request, Response) line: 159
StatusFilter.doHandle(Request, Response) line: 155
StatusFilter(Filter).handle(Request, Response) line: 206
LogFilter(Filter).doHandle(Request, Response) line: 159
LogFilter(Filter).handle(Request, Response) line: 206
ComponentHelper(CompositeHelperT).handle(Request, Response) line:
211
Component.handle(Request, Response) line: 392
Server.handle(Request, Response) line: 516
HttpServerHelper(ServerConnectionHelper).handle(Request, Response)
line: 257
HttpServerHelper(ServerConnectionHelper).doHandleInbound(Response) line:
186
BaseHelper$2.run() line: 593
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145