|
@@ -1,18 +1,9 @@
|
|
|
package com.x.server.console.server.web;
|
|
package com.x.server.console.server.web;
|
|
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
|
|
-
|
|
|
|
|
-import javax.servlet.ServletInputStream;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.eclipse.jetty.client.api.ContentProvider;
|
|
|
|
|
-import org.eclipse.jetty.client.api.Request;
|
|
|
|
|
-import org.eclipse.jetty.client.api.Response;
|
|
|
|
|
-import org.eclipse.jetty.client.util.DeferredContentProvider;
|
|
|
|
|
import org.eclipse.jetty.proxy.ProxyServlet;
|
|
import org.eclipse.jetty.proxy.ProxyServlet;
|
|
|
-import org.eclipse.jetty.util.Callback;
|
|
|
|
|
|
|
|
|
|
public class Proxy extends ProxyServlet {
|
|
public class Proxy extends ProxyServlet {
|
|
|
|
|
|
|
@@ -49,40 +40,4 @@ public class Proxy extends ProxyServlet {
|
|
|
return ":" + port;
|
|
return ":" + port;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
- protected ContentProvider proxyRequestContent(HttpServletRequest request, HttpServletResponse response,
|
|
|
|
|
- Request proxyRequest) throws IOException {
|
|
|
|
|
- ServletInputStream input = request.getInputStream();
|
|
|
|
|
- DeferredContentProvider provider = new DeferredContentProvider();
|
|
|
|
|
- input.setReadListener(newReadListener(request, response, proxyRequest, provider));
|
|
|
|
|
- return provider;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void onResponseContent(HttpServletRequest request, HttpServletResponse response, Response proxyResponse,
|
|
|
|
|
- byte[] buffer, int offset, int length, Callback callback) {
|
|
|
|
|
- try {
|
|
|
|
|
- if (_log.isDebugEnabled())
|
|
|
|
|
- _log.debug("{} proxying content to downstream: {} bytes", getRequestId(request), length);
|
|
|
|
|
- StreamWriter writeListener = (StreamWriter) request.getAttribute(WRITE_LISTENER_ATTRIBUTE);
|
|
|
|
|
- if (writeListener == null) {
|
|
|
|
|
- writeListener = newWriteListener(request, proxyResponse);
|
|
|
|
|
- request.setAttribute(WRITE_LISTENER_ATTRIBUTE, writeListener);
|
|
|
|
|
-
|
|
|
|
|
- // Set the data to write before calling setWriteListener(), because
|
|
|
|
|
- // setWriteListener() may trigger the call to onWritePossible() on
|
|
|
|
|
- // a different thread and we would have a race.
|
|
|
|
|
- writeListener.data(buffer, offset, length, callback);
|
|
|
|
|
-
|
|
|
|
|
- // Setting the WriteListener triggers an invocation to onWritePossible().
|
|
|
|
|
- response.getOutputStream().setWriteListener(writeListener);
|
|
|
|
|
- } else {
|
|
|
|
|
- writeListener.data(buffer, offset, length, callback);
|
|
|
|
|
- writeListener.onWritePossible();
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Throwable x) {
|
|
|
|
|
- callback.failed(x);
|
|
|
|
|
- proxyResponse.abort(x);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|