package com.limegroup.gnutella.security; import java.io.IOException; import java.net.URI; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; import org.limewire.http.httpclient.LimeHttpClient; import org.limewire.io.IpPort; import com.google.inject.Inject; import com.google.inject.Provider; public class HttpCertificateReaderImpl implements HttpCertificateReader { private final Provider<LimeHttpClient> httpClient; private final CertificateParser certificateParser; @Inject public HttpCertificateReaderImpl(Provider<LimeHttpClient> httpClient, CertificateParser certificateParser) { this.httpClient = httpClient; this.certificateParser = certificateParser; } /* (non-Javadoc) * @see com.limegroup.gnutella.security.HttpCertificateReader#read(java.net.URI, org.limewire.io.IpPort) */ public Certificate read(URI uri, IpPort messageSource) throws IOException { HttpGet get = new HttpGet(uri.toASCIIString()); if (messageSource != null) { get.addHeader("X-Message-Source", messageSource.getAddress() + ":" + messageSource.getPort()); } LimeHttpClient limeHttpClient = httpClient.get(); HttpResponse response = null; try { response = limeHttpClient.execute(get); if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { throw new IOException("could not get content from: " + uri); } HttpEntity entity = response.getEntity(); if (entity == null) { throw new IOException("no entity from: " + uri); } String contents = EntityUtils.toString(entity); return certificateParser.parseCertificate(contents); } finally { limeHttpClient.releaseConnection(response); } } }