Search in sources :

Example 1 with RequestConnControl

use of org.apache.http.protocol.RequestConnControl in project robovm by robovm.

the class DefaultHttpClient method createHttpProcessor.

@Override
protected BasicHttpProcessor createHttpProcessor() {
    BasicHttpProcessor httpproc = new BasicHttpProcessor();
    httpproc.addInterceptor(new RequestDefaultHeaders());
    // Required protocol interceptors
    httpproc.addInterceptor(new RequestContent());
    httpproc.addInterceptor(new RequestTargetHost());
    // Recommended protocol interceptors
    httpproc.addInterceptor(new RequestConnControl());
    httpproc.addInterceptor(new RequestUserAgent());
    httpproc.addInterceptor(new RequestExpectContinue());
    // HTTP state management interceptors
    httpproc.addInterceptor(new RequestAddCookies());
    httpproc.addInterceptor(new ResponseProcessCookies());
    // HTTP authentication interceptors
    httpproc.addInterceptor(new RequestTargetAuthentication());
    httpproc.addInterceptor(new RequestProxyAuthentication());
    return httpproc;
}
Also used : RequestAddCookies(org.apache.http.client.protocol.RequestAddCookies) RequestContent(org.apache.http.protocol.RequestContent) RequestTargetHost(org.apache.http.protocol.RequestTargetHost) RequestConnControl(org.apache.http.protocol.RequestConnControl) RequestProxyAuthentication(org.apache.http.client.protocol.RequestProxyAuthentication) RequestExpectContinue(org.apache.http.protocol.RequestExpectContinue) RequestUserAgent(org.apache.http.protocol.RequestUserAgent) RequestDefaultHeaders(org.apache.http.client.protocol.RequestDefaultHeaders) RequestTargetAuthentication(org.apache.http.client.protocol.RequestTargetAuthentication) ResponseProcessCookies(org.apache.http.client.protocol.ResponseProcessCookies) BasicHttpProcessor(org.apache.http.protocol.BasicHttpProcessor)

Example 2 with RequestConnControl

use of org.apache.http.protocol.RequestConnControl in project acceptance-test-harness by jenkinsci.

the class MockUpdateCenter method ensureRunning.

public void ensureRunning() {
    if (original != null) {
        return;
    }
    // TODO this will likely not work on arbitrary controllers, so perhaps limit to the default WinstoneController
    Jenkins jenkins = injector.getInstance(Jenkins.class);
    List<String> sites = new UpdateCenter(jenkins).getJson("tree=sites[url]").findValuesAsText("url");
    if (sites.size() != 1) {
        // TODO ideally it would rather delegate to all of them, but that implies deprecating CachedUpdateCenterMetadataLoader.url and using whatever site(s) Jenkins itself specifies
        LOGGER.log(Level.WARNING, "found an unexpected number of update sites: {0}", sites);
        return;
    }
    UpdateCenterMetadata ucm;
    try {
        ucm = ucmd.get(jenkins);
    } catch (IOException x) {
        LOGGER.log(Level.WARNING, "cannot load data for mock update center", x);
        return;
    }
    JSONObject all;
    try {
        all = new JSONObject(ucm.originalJSON);
        all.remove("signature");
        JSONObject plugins = all.getJSONObject("plugins");
        LOGGER.info(() -> "editing JSON with " + plugins.length() + " plugins to reflect " + ucm.plugins.size() + " possible overrides");
        for (PluginMetadata meta : ucm.plugins.values()) {
            String name = meta.getName();
            String version = meta.getVersion();
            JSONObject plugin = plugins.optJSONObject(name);
            if (plugin == null) {
                LOGGER.log(Level.INFO, "adding plugin {0}", name);
                plugin = new JSONObject().accumulate("name", name);
                plugins.put(name, plugin);
            }
            plugin.put("url", name + ".hpi");
            updating(plugin, "version", version);
            updating(plugin, "gav", meta.gav);
            updating(plugin, "requiredCore", meta.requiredCore().toString());
            updating(plugin, "dependencies", new JSONArray(meta.getDependencies().stream().map(d -> {
                try {
                    return new JSONObject().accumulate("name", d.name).accumulate("version", d.version).accumulate("optional", d.optional);
                } catch (JSONException x) {
                    throw new AssertionError(x);
                }
            }).collect(Collectors.toList())));
            plugin.remove("sha1");
        }
    } catch (JSONException x) {
        LOGGER.log(Level.WARNING, "cannot prepare mock update center", x);
        return;
    }
    HttpProcessor proc = HttpProcessorBuilder.create().add(new ResponseServer("MockUpdateCenter")).add(new ResponseContent()).add(new RequestConnControl()).build();
    UriHttpRequestHandlerMapper handlerMapper = new UriHttpRequestHandlerMapper();
    String json = "updateCenter.post(\n" + all + "\n);";
    handlerMapper.register("/update-center.json", (HttpRequest request, HttpResponse response, HttpContext context) -> {
        response.setStatusCode(HttpStatus.SC_OK);
        response.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));
    });
    handlerMapper.register("*.hpi", (HttpRequest request, HttpResponse response, HttpContext context) -> {
        String plugin = request.getRequestLine().getUri().replaceFirst("^/(.+)[.]hpi$", "$1");
        PluginMetadata meta = ucm.plugins.get(plugin);
        if (meta == null) {
            LOGGER.log(Level.WARNING, "no such plugin {0}", plugin);
            response.setStatusCode(HttpStatus.SC_NOT_FOUND);
            return;
        }
        File local = meta.resolve(injector, meta.getVersion());
        LOGGER.log(Level.INFO, "serving {0}", local);
        response.setStatusCode(HttpStatus.SC_OK);
        response.setEntity(new FileEntity(local));
    });
    handlerMapper.register("*", (HttpRequest request, HttpResponse response, HttpContext context) -> {
        String location = original.replace("/update-center.json", request.getRequestLine().getUri());
        LOGGER.log(Level.INFO, "redirect to {0}", location);
        /* TODO for some reason DownloadService.loadJSONHTML does not seem to process the redirect, despite calling setInstanceFollowRedirects(true):
            response.setStatusCode(HttpStatus.SC_MOVED_TEMPORARILY);
            response.setHeader("Location", location);
             */
        HttpURLConnection uc = (HttpURLConnection) new URL(location).openConnection();
        uc.setInstanceFollowRedirects(true);
        // TODO consider caching these downloads locally like CachedUpdateCenterMetadataLoader does for the main update-center.json
        byte[] data = IOUtils.toByteArray(uc);
        String contentType = uc.getContentType();
        response.setStatusCode(HttpStatus.SC_OK);
        response.setEntity(new ByteArrayEntity(data, ContentType.create(contentType)));
    });
    server = ServerBootstrap.bootstrap().setHttpProcessor(proc).setHandlerMapper(handlerMapper).setExceptionLogger(serverExceptionHandler()).create();
    try {
        server.start();
    } catch (IOException x) {
        LOGGER.log(Level.WARNING, "cannot start mock update center", x);
        return;
    }
    original = sites.get(0);
    // TODO figure out how to deal with Docker-based controllers which would need to have an IP address for the host
    String override = "http://" + server.getInetAddress().getHostAddress() + ":" + server.getLocalPort() + "/update-center.json";
    LOGGER.log(Level.INFO, "replacing update site {0} with {1}", new Object[] { original, override });
    jenkins.runScript("DownloadService.signatureCheck = false; Jenkins.instance.updateCenter.sites.replaceBy([new UpdateSite(UpdateCenter.ID_DEFAULT, '%s')])", override);
}
Also used : HttpURLConnection(java.net.HttpURLConnection) UriHttpRequestHandlerMapper(org.apache.http.protocol.UriHttpRequestHandlerMapper) AutoCleaned(org.jenkinsci.test.acceptance.guice.AutoCleaned) URL(java.net.URL) Inject(com.google.inject.Inject) HttpStatus(org.apache.http.HttpStatus) ExceptionLogger(org.apache.http.ExceptionLogger) RequestConnControl(org.apache.http.protocol.RequestConnControl) ByteArrayEntity(org.apache.http.entity.ByteArrayEntity) Level(java.util.logging.Level) JSONException(org.json.JSONException) JSONObject(org.json.JSONObject) HttpProcessorBuilder(org.apache.http.protocol.HttpProcessorBuilder) TestScope(org.jenkinsci.test.acceptance.guice.TestScope) ResponseContent(org.apache.http.protocol.ResponseContent) Jenkins(org.jenkinsci.test.acceptance.po.Jenkins) ContentType(org.apache.http.entity.ContentType) FileEntity(org.apache.http.entity.FileEntity) StringEntity(org.apache.http.entity.StringEntity) ServerBootstrap(org.apache.http.impl.bootstrap.ServerBootstrap) IOException(java.io.IOException) HttpProcessor(org.apache.http.protocol.HttpProcessor) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) HttpRequest(org.apache.http.HttpRequest) HttpServer(org.apache.http.impl.bootstrap.HttpServer) File(java.io.File) ResponseServer(org.apache.http.protocol.ResponseServer) Injector(com.google.inject.Injector) TimeUnit(java.util.concurrent.TimeUnit) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) HttpContext(org.apache.http.protocol.HttpContext) HttpResponse(org.apache.http.HttpResponse) ConnectionClosedException(org.apache.http.ConnectionClosedException) UpdateCenter(org.jenkinsci.test.acceptance.po.UpdateCenter) JSONArray(org.json.JSONArray) ResponseContent(org.apache.http.protocol.ResponseContent) UpdateCenter(org.jenkinsci.test.acceptance.po.UpdateCenter) HttpProcessor(org.apache.http.protocol.HttpProcessor) URL(java.net.URL) StringEntity(org.apache.http.entity.StringEntity) HttpURLConnection(java.net.HttpURLConnection) ByteArrayEntity(org.apache.http.entity.ByteArrayEntity) UriHttpRequestHandlerMapper(org.apache.http.protocol.UriHttpRequestHandlerMapper) HttpRequest(org.apache.http.HttpRequest) FileEntity(org.apache.http.entity.FileEntity) JSONArray(org.json.JSONArray) HttpContext(org.apache.http.protocol.HttpContext) JSONException(org.json.JSONException) HttpResponse(org.apache.http.HttpResponse) IOException(java.io.IOException) Jenkins(org.jenkinsci.test.acceptance.po.Jenkins) RequestConnControl(org.apache.http.protocol.RequestConnControl) JSONObject(org.json.JSONObject) File(java.io.File) ResponseServer(org.apache.http.protocol.ResponseServer)

Example 3 with RequestConnControl

use of org.apache.http.protocol.RequestConnControl in project acceptance-test-harness by jenkinsci.

the class MockUpdateCenter method ensureRunning.

public void ensureRunning(Jenkins jenkins) {
    if (original != null) {
        return;
    }
    JsonNode ucNode = new UpdateCenter(jenkins).getJson("tree=sites[url,id]");
    List<String> sites = ucNode.findValuesAsText("url");
    List<String> ids = ucNode.findValuesAsText("id");
    if (sites.size() != 1) {
        // TODO ideally it would rather delegate to all of them, but that implies deprecating CachedUpdateCenterMetadataLoader.url and using whatever site(s) Jenkins itself specifies
        LOGGER.log(Level.WARNING, "found an unexpected number of update sites: {0}", sites);
        return;
    } else if (!"default".equals(ids.get(0))) {
        LOGGER.log(Level.WARNING, "the default update site has been replaced by a site with id: {0}. Will not setup the mock update center", ids.get(0));
        return;
    }
    UpdateCenterMetadata ucm;
    try {
        ucm = ucmd.get(jenkins);
    } catch (IOException x) {
        throw new Error("cannot load data for mock update center", x);
    }
    JSONObject all;
    try {
        all = new JSONObject(ucm.originalJSON);
        all.remove("signature");
        JSONObject plugins = all.getJSONObject("plugins");
        LOGGER.info(() -> "editing JSON with " + plugins.length() + " plugins to reflect " + ucm.plugins.size() + " possible overrides");
        for (PluginMetadata meta : ucm.plugins.values()) {
            String name = meta.getName();
            String version = meta.getVersion();
            JSONObject plugin = plugins.optJSONObject(name);
            if (plugin == null) {
                LOGGER.log(Level.INFO, "adding plugin {0}", name);
                plugin = new JSONObject().accumulate("name", name);
                plugins.put(name, plugin);
            }
            plugin.put("url", name + ".hpi");
            updating(plugin, "version", version);
            updating(plugin, "gav", meta.gav);
            updating(plugin, "requiredCore", meta.requiredCore().toString());
            updating(plugin, "dependencies", new JSONArray(meta.getDependencies().stream().map(d -> {
                try {
                    return new JSONObject().accumulate("name", d.name).accumulate("version", d.version).accumulate("optional", d.optional);
                } catch (JSONException x) {
                    throw new AssertionError(x);
                }
            }).collect(Collectors.toList())));
            // The fingerprints are not going to match after injecting different binary so we need to fix/recalculate
            // - For JUT before 2.168, only sha1 is checked if present, so let's simply remove it
            plugin.remove("sha1");
            // - For JUT after 2.168, it is enough to recalculate the strongest cypher
            if (meta instanceof PluginMetadata.ModifyingMetadata) {
                String sha512 = ((PluginMetadata.ModifyingMetadata) meta).getSha512Checksum(injector);
                plugin.put("sha512", sha512);
            }
        }
    } catch (JSONException | NoSuchAlgorithmException | IOException x) {
        LOGGER.log(Level.WARNING, "cannot prepare mock update center", x);
        return;
    }
    HttpProcessor proc = HttpProcessorBuilder.create().add(new ResponseServer("MockUpdateCenter")).add(new ResponseContent()).add(new RequestConnControl()).build();
    UriHttpRequestHandlerMapper handlerMapper = new UriHttpRequestHandlerMapper();
    String json = "updateCenter.post(\n" + all + "\n);";
    handlerMapper.register("/update-center.json", (HttpRequest request, HttpResponse response, HttpContext context) -> {
        response.setStatusCode(HttpStatus.SC_OK);
        response.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));
    });
    handlerMapper.register("*.hpi", (HttpRequest request, HttpResponse response, HttpContext context) -> {
        String plugin = request.getRequestLine().getUri().replaceFirst("^/(.+)[.]hpi$", "$1");
        PluginMetadata meta = ucm.plugins.get(plugin);
        if (meta == null) {
            LOGGER.log(Level.WARNING, "no such plugin {0}", plugin);
            response.setStatusCode(HttpStatus.SC_NOT_FOUND);
            return;
        }
        File local = meta.resolve(injector, meta.getVersion());
        LOGGER.log(Level.INFO, "serving {0}", local);
        response.setStatusCode(HttpStatus.SC_OK);
        response.setEntity(new FileEntity(local));
    });
    handlerMapper.register("*", (HttpRequest request, HttpResponse response, HttpContext context) -> {
        String location = original.replace("/update-center.json", request.getRequestLine().getUri());
        LOGGER.log(Level.INFO, "redirect to {0}", location);
        /* TODO for some reason DownloadService.loadJSONHTML does not seem to process the redirect, despite calling setInstanceFollowRedirects(true):
            response.setStatusCode(HttpStatus.SC_MOVED_TEMPORARILY);
            response.setHeader("Location", location);
             */
        HttpURLConnection uc = (HttpURLConnection) new URL(location).openConnection();
        uc.setInstanceFollowRedirects(true);
        // TODO consider caching these downloads locally like CachedUpdateCenterMetadataLoader does for the main update-center.json
        byte[] data = IOUtils.toByteArray(uc);
        String contentType = uc.getContentType();
        response.setStatusCode(HttpStatus.SC_OK);
        response.setEntity(new ByteArrayEntity(data, ContentType.create(contentType)));
    });
    server = ServerBootstrap.bootstrap().setHttpProcessor(proc).setHandlerMapper(handlerMapper).setExceptionLogger(serverExceptionHandler()).create();
    try {
        server.start();
    } catch (IOException x) {
        LOGGER.log(Level.WARNING, "cannot start mock update center", x);
        return;
    }
    original = sites.get(0);
    // TODO figure out how to deal with Docker-based controllers which would need to have an IP address for the host
    String override = "http://" + server.getInetAddress().getHostAddress() + ":" + server.getLocalPort() + "/update-center.json";
    LOGGER.log(Level.INFO, "replacing update site {0} with {1}", new Object[] { original, override });
    jenkins.runScript("DownloadService.signatureCheck = false; Jenkins.instance.updateCenter.sites.replaceBy([new UpdateSite(UpdateCenter.ID_DEFAULT, '%s')])", override);
}
Also used : HttpURLConnection(java.net.HttpURLConnection) UriHttpRequestHandlerMapper(org.apache.http.protocol.UriHttpRequestHandlerMapper) AutoCleaned(org.jenkinsci.test.acceptance.guice.AutoCleaned) URL(java.net.URL) Inject(com.google.inject.Inject) HttpStatus(org.apache.http.HttpStatus) ExceptionLogger(org.apache.http.ExceptionLogger) RequestConnControl(org.apache.http.protocol.RequestConnControl) ByteArrayEntity(org.apache.http.entity.ByteArrayEntity) Level(java.util.logging.Level) JSONException(org.json.JSONException) JSONObject(org.json.JSONObject) HttpProcessorBuilder(org.apache.http.protocol.HttpProcessorBuilder) TestScope(org.jenkinsci.test.acceptance.guice.TestScope) JsonNode(com.fasterxml.jackson.databind.JsonNode) ResponseContent(org.apache.http.protocol.ResponseContent) Jenkins(org.jenkinsci.test.acceptance.po.Jenkins) ContentType(org.apache.http.entity.ContentType) FileEntity(org.apache.http.entity.FileEntity) StringEntity(org.apache.http.entity.StringEntity) ServerBootstrap(org.apache.http.impl.bootstrap.ServerBootstrap) IOException(java.io.IOException) HttpProcessor(org.apache.http.protocol.HttpProcessor) Logger(java.util.logging.Logger) HttpRequest(org.apache.http.HttpRequest) HttpServer(org.apache.http.impl.bootstrap.HttpServer) Collectors(java.util.stream.Collectors) File(java.io.File) ResponseServer(org.apache.http.protocol.ResponseServer) Injector(com.google.inject.Injector) TimeUnit(java.util.concurrent.TimeUnit) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) HttpContext(org.apache.http.protocol.HttpContext) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) HttpResponse(org.apache.http.HttpResponse) ConnectionClosedException(org.apache.http.ConnectionClosedException) UpdateCenter(org.jenkinsci.test.acceptance.po.UpdateCenter) JSONArray(org.json.JSONArray) ResponseContent(org.apache.http.protocol.ResponseContent) UpdateCenter(org.jenkinsci.test.acceptance.po.UpdateCenter) HttpProcessor(org.apache.http.protocol.HttpProcessor) JsonNode(com.fasterxml.jackson.databind.JsonNode) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) URL(java.net.URL) StringEntity(org.apache.http.entity.StringEntity) HttpURLConnection(java.net.HttpURLConnection) ByteArrayEntity(org.apache.http.entity.ByteArrayEntity) UriHttpRequestHandlerMapper(org.apache.http.protocol.UriHttpRequestHandlerMapper) HttpRequest(org.apache.http.HttpRequest) FileEntity(org.apache.http.entity.FileEntity) JSONArray(org.json.JSONArray) HttpContext(org.apache.http.protocol.HttpContext) JSONException(org.json.JSONException) HttpResponse(org.apache.http.HttpResponse) IOException(java.io.IOException) RequestConnControl(org.apache.http.protocol.RequestConnControl) JSONObject(org.json.JSONObject) File(java.io.File) ResponseServer(org.apache.http.protocol.ResponseServer)

Example 4 with RequestConnControl

use of org.apache.http.protocol.RequestConnControl in project XobotOS by xamarin.

the class DefaultHttpClient method createHttpProcessor.

@Override
protected BasicHttpProcessor createHttpProcessor() {
    BasicHttpProcessor httpproc = new BasicHttpProcessor();
    httpproc.addInterceptor(new RequestDefaultHeaders());
    // Required protocol interceptors
    httpproc.addInterceptor(new RequestContent());
    httpproc.addInterceptor(new RequestTargetHost());
    // Recommended protocol interceptors
    httpproc.addInterceptor(new RequestConnControl());
    httpproc.addInterceptor(new RequestUserAgent());
    httpproc.addInterceptor(new RequestExpectContinue());
    // HTTP state management interceptors
    httpproc.addInterceptor(new RequestAddCookies());
    httpproc.addInterceptor(new ResponseProcessCookies());
    // HTTP authentication interceptors
    httpproc.addInterceptor(new RequestTargetAuthentication());
    httpproc.addInterceptor(new RequestProxyAuthentication());
    return httpproc;
}
Also used : RequestAddCookies(org.apache.http.client.protocol.RequestAddCookies) RequestContent(org.apache.http.protocol.RequestContent) RequestTargetHost(org.apache.http.protocol.RequestTargetHost) RequestConnControl(org.apache.http.protocol.RequestConnControl) RequestProxyAuthentication(org.apache.http.client.protocol.RequestProxyAuthentication) RequestExpectContinue(org.apache.http.protocol.RequestExpectContinue) RequestUserAgent(org.apache.http.protocol.RequestUserAgent) RequestDefaultHeaders(org.apache.http.client.protocol.RequestDefaultHeaders) RequestTargetAuthentication(org.apache.http.client.protocol.RequestTargetAuthentication) ResponseProcessCookies(org.apache.http.client.protocol.ResponseProcessCookies) BasicHttpProcessor(org.apache.http.protocol.BasicHttpProcessor)

Example 5 with RequestConnControl

use of org.apache.http.protocol.RequestConnControl in project wso2-synapse by wso2.

the class ClientHandler method getHttpProcessor.

/**
 * Return the HttpProcessor for requests
 *
 * @return the HttpProcessor that processes requests
 */
private HttpProcessor getHttpProcessor() {
    BasicHttpProcessor httpProcessor = new BasicHttpProcessor();
    httpProcessor.addInterceptor(new RequestContent());
    httpProcessor.addInterceptor(new RequestTargetHost());
    httpProcessor.addInterceptor(new RequestConnControl());
    httpProcessor.addInterceptor(new RequestUserAgent());
    httpProcessor.addInterceptor(new RequestExpectContinue());
    return httpProcessor;
}
Also used : RequestContent(org.apache.http.protocol.RequestContent) RequestTargetHost(org.apache.http.protocol.RequestTargetHost) RequestConnControl(org.apache.http.protocol.RequestConnControl) RequestExpectContinue(org.apache.http.protocol.RequestExpectContinue) RequestUserAgent(org.apache.http.protocol.RequestUserAgent) BasicHttpProcessor(org.apache.http.protocol.BasicHttpProcessor)

Aggregations

RequestConnControl (org.apache.http.protocol.RequestConnControl)6 RequestAddCookies (org.apache.http.client.protocol.RequestAddCookies)3 BasicHttpProcessor (org.apache.http.protocol.BasicHttpProcessor)3 RequestContent (org.apache.http.protocol.RequestContent)3 RequestExpectContinue (org.apache.http.protocol.RequestExpectContinue)3 RequestTargetHost (org.apache.http.protocol.RequestTargetHost)3 RequestUserAgent (org.apache.http.protocol.RequestUserAgent)3 Inject (com.google.inject.Inject)2 Injector (com.google.inject.Injector)2 File (java.io.File)2 IOException (java.io.IOException)2 HttpURLConnection (java.net.HttpURLConnection)2 URL (java.net.URL)2 List (java.util.List)2 TimeUnit (java.util.concurrent.TimeUnit)2 Level (java.util.logging.Level)2 Logger (java.util.logging.Logger)2 Collectors (java.util.stream.Collectors)2 IOUtils (org.apache.commons.io.IOUtils)2 ConnectionClosedException (org.apache.http.ConnectionClosedException)2