Skip to content

Commit

Permalink
Add ability to set custom default size limits for requests and respon…
Browse files Browse the repository at this point in the history
…ses (#467)
  • Loading branch information
valfirst authored Feb 2, 2025
1 parent eb5707d commit dec9591
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,16 @@ public class BrowserUpProxyServer implements BrowserUpProxy {
*/
private final List<HttpFiltersSource> filterFactories = new CopyOnWriteArrayList<>();

/**
* The default maximum buffer size when aggregating requests for filtering.
*/
private final int maximumRequestBufferSizeInBytes;

/**
* The default maximum buffer size when aggregating responses for filtering.
*/
private final int maximumResponseBufferSizeInBytes;

/**
* List of rejected URL patterns
*/
Expand Down Expand Up @@ -311,6 +321,19 @@ public class BrowserUpProxyServer implements BrowserUpProxy {
private volatile String chainedProxyCredentials;

public BrowserUpProxyServer() {
this(RequestFilterAdapter.FilterSource.DEFAULT_MAXIMUM_REQUEST_BUFFER_SIZE,
ResponseFilterAdapter.FilterSource.DEFAULT_MAXIMUM_RESPONSE_BUFFER_SIZE);
}

/**
* Creates {@link BrowserUpProxyServer} with custom default size limits for requests and responses.
*
* @param maximumRequestBufferSizeInBytes the default maximum buffer size when aggregating requests for filtering.
* @param maximumResponseBufferSizeInBytes the default maximum buffer size when aggregating responses for filtering.
*/
public BrowserUpProxyServer(int maximumRequestBufferSizeInBytes, int maximumResponseBufferSizeInBytes) {
this.maximumRequestBufferSizeInBytes = maximumRequestBufferSizeInBytes;
this.maximumResponseBufferSizeInBytes = maximumResponseBufferSizeInBytes;
}

@Override
Expand Down Expand Up @@ -1076,23 +1099,27 @@ public void addLastHttpFilterFactory(HttpFiltersSource filterFactory) {
}

/**
* <b>Note:</b> The current implementation of this method forces a maximum response size of 2 MiB. To adjust the maximum response size, or
* to disable aggregation (which disallows access to the {@link com.browserup.bup.util.HttpMessageContents}), you may add the filter source
* directly: <code>addFirstHttpFilterFactory(new ResponseFilterAdapter.FilterSource(filter, bufferSizeInBytes));</code>
* <b>Note:</b> The current implementation of this method forces a maximum response size of 10 MiB. To adjust the maximum response size, or
* to disable aggregation (which disallows access to the {@link com.browserup.bup.util.HttpMessageContents}),
* the filter source can be added directly:
* <code>addFirstHttpFilterFactory(new ResponseFilterAdapter.FilterSource(filter, bufferSizeInBytes));</code>
* or default maximum response size can be set via constructor {@link #BrowserUpProxyServer(int, int)}.
*/
@Override
public void addResponseFilter(ResponseFilter filter) {
addLastHttpFilterFactory(new ResponseFilterAdapter.FilterSource(filter));
addLastHttpFilterFactory(new ResponseFilterAdapter.FilterSource(filter, maximumResponseBufferSizeInBytes));
}

/**
* <b>Note:</b> The current implementation of this method forces a maximum request size of 2 MiB. To adjust the maximum request size, or
* to disable aggregation (which disallows access to the {@link com.browserup.bup.util.HttpMessageContents}), you may add the filter source
* directly: <code>addFirstHttpFilterFactory(new RequestFilterAdapter.FilterSource(filter, bufferSizeInBytes));</code>
* to disable aggregation (which disallows access to the {@link com.browserup.bup.util.HttpMessageContents}),
* the filter source can be added directly:
* <code>addFirstHttpFilterFactory(new RequestFilterAdapter.FilterSource(filter, bufferSizeInBytes));</code>
* or default maximum request size can be set via constructor {@link #BrowserUpProxyServer(int, int)}.
*/
@Override
public void addRequestFilter(RequestFilter filter) {
addFirstHttpFilterFactory(new RequestFilterAdapter.FilterSource(filter));
addFirstHttpFilterFactory(new RequestFilterAdapter.FilterSource(filter, maximumRequestBufferSizeInBytes));
}

@Override
Expand Down Expand Up @@ -1549,6 +1576,16 @@ public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerCont
return null;
}
}

@Override
public int getMaximumRequestBufferSizeInBytes() {
return maximumRequestBufferSizeInBytes;
}

@Override
public int getMaximumResponseBufferSizeInBytes() {
return maximumResponseBufferSizeInBytes;
}
});

// HTTP CONNECTs are a special case, since they require special timing and error handling
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public HttpResponse clientToProxyRequest(HttpObject httpObject) {
* and sets a maximum request buffer size of 2 MiB.
*/
public static class FilterSource extends HttpFiltersSourceAdapter {
private static final int DEFAULT_MAXIMUM_REQUEST_BUFFER_SIZE = 2097152;
public static final int DEFAULT_MAXIMUM_REQUEST_BUFFER_SIZE = 2097152;

private final RequestFilter filter;
private final int maximumRequestBufferSizeInBytes;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ public void setModifiedHttpRequest(HttpRequest modifiedHttpRequest) {

/**
* A {@link HttpFiltersSourceAdapter} for {@link ResponseFilterAdapter}s. By default, this FilterSource enables HTTP message aggregation
* and sets a maximum response buffer size of 2 MiB.
* and sets a maximum response buffer size of 10 MiB.
*/
public static class FilterSource extends HttpFiltersSourceAdapter {
private static final int DEFAULT_MAXIMUM_RESPONSE_BUFFER_SIZE = 10485760;
public static final int DEFAULT_MAXIMUM_RESPONSE_BUFFER_SIZE = 10485760;

private final ResponseFilter filter;
private final int maximumResponseBufferSizeInBytes;
Expand Down

0 comments on commit dec9591

Please sign in to comment.