package org.limewire.http.protocol;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpProcessor;
/**
* A synchronized thread-safe of {@link HttpProcessor}. It is safe to add and
* remove interceptors on a different threads than the thread that invokes
* <code>process()</code>.
*/
public class SynchronizedHttpProcessor implements HttpProcessor {
private final CopyOnWriteArrayList<HttpRequestInterceptor> requestInterceptors = new CopyOnWriteArrayList<HttpRequestInterceptor>();
private final CopyOnWriteArrayList<HttpResponseInterceptor> responseInterceptors = new CopyOnWriteArrayList<HttpResponseInterceptor>();
public SynchronizedHttpProcessor() {
}
public void addInterceptor(final HttpRequestInterceptor interceptor) {
this.requestInterceptors.add(interceptor);
}
public void addInterceptor(final HttpResponseInterceptor interceptor) {
this.responseInterceptors.add(interceptor);
}
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
for (HttpRequestInterceptor interceptor : requestInterceptors) {
interceptor.process(request, context);
}
}
public void process(HttpResponse response, HttpContext context)
throws HttpException, IOException {
for (HttpResponseInterceptor interceptor : responseInterceptors) {
interceptor.process(response, context);
}
}
public void removeInterceptor(final HttpRequestInterceptor interceptor) {
this.requestInterceptors.remove(interceptor);
}
public void removeInterceptor(final HttpResponseInterceptor interceptor) {
this.responseInterceptors.remove(interceptor);
}
}