Author: janb Date: Wed Aug 13 17:01:07 2008 New Revision: 685731 URL: http://svn.apache.org/viewvc?rev=685731&view=rev Log: Add beginnings of security checking; add StreamObserver.setLength()
Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java (with props) Modified: maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/pgp/PgpStreamVerifier.java maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/FileExchange.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java Modified: maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java (original) +++ maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java Wed Aug 13 17:01:07 2008 @@ -25,5 +25,8 @@ void bytesReady(byte[]b, int off, int len) throws StreamObserverException; + + void setLength(long length); + long getLength(); } Modified: maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/pgp/PgpStreamVerifier.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/pgp/PgpStreamVerifier.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/pgp/PgpStreamVerifier.java (original) +++ maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/pgp/PgpStreamVerifier.java Wed Aug 13 17:01:07 2008 @@ -38,6 +38,9 @@ private PGPSignature signature; private String signatureString; + + private long length = -1; + //----------------------------------------------------------------------------------- public PgpStreamVerifier( StreamVerifierAttributes attributes ) @@ -196,5 +199,14 @@ return signatureString; } //----------------------------------------------------------------------------------- + public long getLength() + { + return length; + } //----------------------------------------------------------------------------------- + public void setLength(long length) + { + this.length = length; + + } } Modified: maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java (original) +++ maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java Wed Aug 13 17:01:07 2008 @@ -42,6 +42,7 @@ private MessageDigest digest; private byte[] digestBytes; + private long length = -1; private String sig; @@ -105,5 +106,14 @@ if (digest != null) digest.update(b, off, len); } - + //----------------------------------------------------------------------------------- + public long getLength() + { + return length; + } + //----------------------------------------------------------------------------------- + public void setLength(long length) + { + this.length = length; + } } Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java?rev=685731&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java (added) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java Wed Aug 13 17:01:07 2008 @@ -0,0 +1,119 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.mercury.spi.http.client; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.apache.maven.mercury.transport.api.Server; +import org.mortbay.jetty.client.HttpDestination; +import org.mortbay.jetty.client.security.Realm; +import org.mortbay.jetty.client.security.RealmResolver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * DestinationRealmResolver + * + * Resolve a security realm based on the Server instance + * which matches an async Destination. + */ +public class DestinationRealmResolver implements RealmResolver +{ + private static final Logger log = LoggerFactory.getLogger(DestinationRealmResolver.class); + + protected Set<Server> _servers = new HashSet<Server>(); + + + + public DestinationRealmResolver (Set<Server> servers) + { + _servers.addAll(servers); + } + + public Realm getRealm(String name, HttpDestination dest, String pathSpec) + throws IOException + { + InetSocketAddress address = dest.getAddress(); + boolean secure = dest.isSecure(); + + //get a username and password appropriate for the destination. Usernames and passwords are + //associated with Server Credential objects. + Server server = null; + Iterator<Server> itor = _servers.iterator(); + while (server==null && itor.hasNext()) + { + Server s = itor.next(); + if (s.getURL() != null) + { + String protocol = s.getURL().getProtocol(); + String host = s.getURL().getHost(); + int port = s.getURL().getPort(); + + //destination.host == server.host && + //destination.port == server.port && + //destination.isSecure && server.protocol == https || !destination.isSecure && server.protocol == http + if (((dest.isSecure() && "https".equalsIgnoreCase(protocol)) || (!dest.isSecure() && "http".equalsIgnoreCase(protocol))) + && + (address.getPort() == port) + && + (address.getHostName().equalsIgnoreCase(host))) + { + server = s; + if (log.isDebugEnabled()) + log.debug("Matched server "+address.getHostName()+":"+address.getPort()); + } + } + } + + if (server == null || server.getServerCredentials() == null) + { + if (log.isDebugEnabled()) + log.debug("No server matching "+address.getHostName()+":"+address.getPort()+" or no credentials"); + return null; + } + + if (server.getServerCredentials().isCertificate()) + throw new UnsupportedOperationException("Certificate not supported"); + + final Server realmServer = server; + return new Realm () + { + public String getCredentials() + { + return realmServer.getServerCredentials().getPass(); + } + + public String getId() + { + return realmServer.getId(); + } + + public String getPrincipal() + { + return realmServer.getServerCredentials().getUser(); + } + + }; + } + +} Propchange: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/DestinationRealmResolver.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/FileExchange.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/FileExchange.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/FileExchange.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/FileExchange.java Wed Aug 13 17:01:07 2008 @@ -20,12 +20,18 @@ package org.apache.maven.mercury.spi.http.client; import java.io.File; +import java.net.InetSocketAddress; import java.net.URL; import org.apache.maven.mercury.transport.api.Binding; +import org.apache.maven.mercury.transport.api.Credentials; +import org.apache.maven.mercury.transport.api.Server; import org.mortbay.io.Buffer; import org.mortbay.jetty.client.HttpClient; +import org.mortbay.jetty.client.HttpDestination; import org.mortbay.jetty.client.HttpExchange; +import org.mortbay.jetty.client.security.BasicAuthorization; +import org.mortbay.jetty.client.security.ProxyAuthorization; /** * FileExchange @@ -45,14 +51,16 @@ protected String _url; protected File _localFile; protected Binding _binding; + protected Server _server; public abstract void onFileComplete( String url, File localFile ); public abstract void onFileError( String url, Exception e ); - public FileExchange( Binding binding, File localFile, HttpClient client ) + public FileExchange( Server server, Binding binding, File localFile, HttpClient client ) { + _server = server; _binding = binding; if (_binding != null) { @@ -70,7 +78,40 @@ { try { - _httpClient.send( this ); + if (_server != null && _server.hasProxy() && (_server.getProxy() != null)) + { + URL url = new URL(_url); + boolean ssl = "https".equalsIgnoreCase(url.getProtocol()); + URL proxy = _server.getProxy(); + + String host = proxy.getHost(); + int port = proxy.getPort(); + boolean proxySsl = "https".equalsIgnoreCase(proxy.getProtocol()); + if (port < 0) + { + port = proxySsl?443:80; + } + InetSocketAddress proxyAddress = new InetSocketAddress(host,port); + HttpDestination destination = _httpClient.getDestination(this.getAddress(), ssl); + destination.setProxy(proxyAddress); + + //set up authentication for the proxy + Credentials proxyCredentials = _server.getProxyCredentials(); + + if (proxyCredentials != null) + { + if (proxyCredentials.isCertificate()) + throw new UnsupportedOperationException ("Proxy credential not supported"); + else + destination.setProxyAuthentication(new ProxyAuthorization (proxyCredentials.getUser(), proxyCredentials.getPass())); + } + destination.send(this); + } + else + { + _httpClient.send( this ); + } + } catch ( Exception e ) { Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java Wed Aug 13 17:01:07 2008 @@ -34,6 +34,7 @@ import org.apache.maven.mercury.crypto.api.StreamObserver; import org.apache.maven.mercury.crypto.api.StreamVerifierException; import org.apache.maven.mercury.crypto.api.StreamVerifierFactory; +import org.apache.maven.mercury.spi.http.client.DestinationRealmResolver; import org.apache.maven.mercury.spi.http.client.FileExchange; import org.apache.maven.mercury.spi.http.client.HandshakeExchange; import org.apache.maven.mercury.spi.http.client.HttpClientException; @@ -107,6 +108,7 @@ { _servers.clear(); _servers.addAll(servers); + _httpClient.setRealmResolver(new DestinationRealmResolver(_servers)); } public Set<Server> getServers() @@ -189,7 +191,7 @@ { Server server = resolveServer(binding); Set<StreamObserver> observers = createStreamObservers(server); - target = new DeploymentTarget( _httpClient, batchId, binding, request.getValidators(), observers ) + target = new DeploymentTarget( server, _httpClient, batchId, binding, request.getValidators(), observers ) { public void onComplete() { Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java Wed Aug 13 17:01:07 2008 @@ -34,13 +34,12 @@ import org.apache.maven.mercury.spi.http.client.HttpClientException; import org.apache.maven.mercury.spi.http.validate.Validator; import org.apache.maven.mercury.transport.api.Binding; +import org.apache.maven.mercury.transport.api.Server; import org.mortbay.jetty.client.HttpClient; public abstract class DeploymentTarget { - public static final String __DIGEST_SUFFIX = ".sha1"; - - + protected Server _server; protected HttpClient _httpClient; protected String _batchId; protected Binding _binding; @@ -125,8 +124,9 @@ } } - public DeploymentTarget( HttpClient client, String batchId, Binding binding, Set<Validator> validators, Set<StreamObserver> observers ) + public DeploymentTarget( Server server, HttpClient client, String batchId, Binding binding, Set<Validator> validators, Set<StreamObserver> observers ) { + _server = server; _httpClient = client; _batchId = batchId; _binding = binding; @@ -199,7 +199,7 @@ private void deployLocalFile() { - FilePutExchange fileExchange = new FilePutExchange( _batchId, _binding, _binding.getLocalFile(), _observers, _httpClient ) + FilePutExchange fileExchange = new FilePutExchange( _server, _batchId, _binding, _binding.getLocalFile(), _observers, _httpClient ) { public void onFileComplete( String url, File localFile ) { @@ -255,7 +255,7 @@ //upload the checksum file Set<StreamObserver> emptySet = Collections.emptySet(); - FilePutExchange checksumExchange = new FilePutExchange( _batchId, binding, file, emptySet, _httpClient ) + FilePutExchange checksumExchange = new FilePutExchange( _server, _batchId, binding, file, emptySet, _httpClient ) { public void onFileComplete( String url, File localFile ) { Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java Wed Aug 13 17:01:07 2008 @@ -39,6 +39,8 @@ import org.mortbay.io.Buffer; import org.mortbay.jetty.HttpMethods; import org.mortbay.jetty.client.HttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -49,6 +51,7 @@ */ public abstract class FilePutExchange extends FileExchange { + private static final Logger log = LoggerFactory.getLogger(FilePutExchange.class); private String _batchId; private InputStream _inputStream; private String _remoteRepoUrl; @@ -60,9 +63,9 @@ public abstract void onFileError( String url, Exception e ); - public FilePutExchange( String batchId, Binding binding, File localFile, Set<StreamObserver> observers, HttpClient client ) + public FilePutExchange( Server server, String batchId, Binding binding, File localFile, Set<StreamObserver> observers, HttpClient client ) { - super( binding, localFile, client ); + super( server, binding, localFile, client ); _observers.addAll(observers); _batchId = batchId; } @@ -79,8 +82,14 @@ setMethod( HttpMethods.PUT ); setRequestHeader( "Content-Type", "application/octet-stream" ); if (_binding.isFile()) + { setRequestHeader( "Content-Length", String.valueOf( _localFile.length() ) ); - + if (log.isDebugEnabled()) + log.debug("PUT of "+_localFile.length()+" bytes"); + + for (StreamObserver o: _observers) + o.setLength(_localFile.length()); + } setRequestContentSource( getInputStream() ); setRequestHeader( __BATCH_HEADER, _batchId ); super.send(); Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java Wed Aug 13 17:01:07 2008 @@ -32,6 +32,7 @@ import org.apache.maven.mercury.crypto.api.StreamObserver; import org.apache.maven.mercury.crypto.api.StreamVerifierException; import org.apache.maven.mercury.crypto.api.StreamVerifierFactory; +import org.apache.maven.mercury.spi.http.client.DestinationRealmResolver; import org.apache.maven.mercury.spi.http.client.HttpClientException; import org.apache.maven.mercury.transport.api.Binding; import org.apache.maven.mercury.transport.api.Server; @@ -83,6 +84,7 @@ { _servers.clear(); _servers.addAll(servers); + _httpClient.setRealmResolver(new DestinationRealmResolver(_servers)); } public Set<Server> getServers() @@ -171,7 +173,7 @@ Server server = resolveServer(binding); Set<StreamObserver> observers = createStreamObservers(server); - target = new RetrievalTarget( DefaultRetriever.this, binding, request.getValidators(), observers ) + target = new RetrievalTarget( server, DefaultRetriever.this, binding, request.getValidators(), observers ) { public void onComplete() { Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java Wed Aug 13 17:01:07 2008 @@ -37,8 +37,12 @@ import org.apache.maven.mercury.transport.api.Binding; import org.apache.maven.mercury.transport.api.Server; import org.mortbay.io.Buffer; +import org.mortbay.io.BufferUtil; +import org.mortbay.jetty.HttpHeaders; import org.mortbay.jetty.HttpMethods; import org.mortbay.jetty.client.HttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -52,9 +56,11 @@ */ public abstract class FileGetExchange extends FileExchange { + private static final Logger log = LoggerFactory.getLogger(FileGetExchange.class); private OutputStream _outputStream; private Set<StreamObserver> _observers = new HashSet<StreamObserver>(); - + int _contentLength = -1; + /** * Constructor. * @@ -63,9 +69,9 @@ * @param observers observers of the io stream * @param client async http client */ - public FileGetExchange( Binding binding, File localFile, Set<StreamObserver> observers, HttpClient client ) + public FileGetExchange( Server server, Binding binding, File localFile, Set<StreamObserver> observers, HttpClient client ) { - super( binding, localFile, client ); + super( server, binding, localFile, client ); _observers.addAll(observers); } @@ -77,6 +83,23 @@ super.send(); } + protected void onResponseHeader(Buffer name, Buffer value) throws IOException + { + int header = HttpHeaders.CACHE.getOrdinal(value); + switch (header) + { + case HttpHeaders.CONTENT_LENGTH_ORDINAL: + _contentLength = BufferUtil.toInt(value); + for (StreamObserver o:_observers) + { + o.setLength(_contentLength); + } + if (log.isDebugEnabled()) + log.debug("GET of "+_contentLength +" bytes"); + break; + } + } + protected void onResponseComplete() { Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java Wed Aug 13 17:01:07 2008 @@ -66,7 +66,7 @@ protected int _checksumState; protected int _targetState; - + protected Server _server; protected HttpClientException _exception; protected Binding _binding; protected File _tempFile; @@ -89,7 +89,7 @@ * @param binding * @param callback */ - public RetrievalTarget( DefaultRetriever retriever, Binding binding, Set<Validator> validators, Set<StreamObserver> observers ) + public RetrievalTarget( Server server, DefaultRetriever retriever, Binding binding, Set<Validator> validators, Set<StreamObserver> observers ) { if ( binding == null || (binding.getRemoteResource() == null) || @@ -98,7 +98,7 @@ { throw new IllegalArgumentException( "Nothing to retrieve" ); } - + _server = server; _retriever = retriever; _binding = binding; _validators = validators; @@ -434,7 +434,7 @@ updateTargetState( __REQUESTED_STATE, null ); //get the file, calculating the digest for it on the fly - FileExchange exchange = new FileGetExchange( _binding, getTempFile(), _observers, _retriever.getHttpClient() ) + FileExchange exchange = new FileGetExchange( _server, _binding, getTempFile(), _observers, _retriever.getHttpClient() ) { public void onFileComplete( String url, File localFile ) { Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java?rev=685731&r1=685730&r2=685731&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java Wed Aug 13 17:01:07 2008 @@ -199,10 +199,10 @@ RetrievalResponse response = retriever.retrieve(request); - System.err.println("--------- testSyncRetrievalAllGood --------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("--------- testSyncRetrievalAllGood --------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals(2,response.getExceptions().size()); assertTrue(!file0.exists()); assertTrue(!file1.exists()); @@ -238,10 +238,10 @@ RetrievalResponse response = retriever.retrieve(request); - System.err.println("--------- testSyncRetrievalPgpGood --------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("--------- testSyncRetrievalPgpGood --------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals( 0, response.getExceptions().size() ); assertTrue( file6.exists() ); @@ -293,10 +293,10 @@ RetrievalResponse response = retriever.retrieve(request); - System.err.println("--------- testSyncRetrievalFailFast -------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("--------- testSyncRetrievalFailFast -------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertTrue(!file0.exists()); assertTrue(!file1.exists()); @@ -347,10 +347,10 @@ request.setFailFast(false); RetrievalResponse response = retriever.retrieve(request); - System.err.println("--------- testSyncRetrievalLenient0 -------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("--------- testSyncRetrievalLenient0 -------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals(1,response.getExceptions().size()); assertEquals(binding2,response.getExceptions().iterator().next().getBinding()); @@ -397,10 +397,10 @@ request.setFailFast(false); RetrievalResponse response = retriever.retrieve(request); - System.err.println("------------- testSyncRetrievalLenient1 ---------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("------------- testSyncRetrievalLenient1 ---------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals(0,response.getExceptions().size()); assertTrue(file0.exists()); @@ -452,10 +452,10 @@ request.setBindings(bindings); RetrievalResponse response = retriever.retrieve(request); - System.err.println("------------ testValidatorSuccess ---------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("------------ testValidatorSuccess ---------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals(0,response.getExceptions().size()); assertTrue(file0.exists()); @@ -506,10 +506,10 @@ request.setBindings(bindings); RetrievalResponse response = retriever.retrieve(request); - System.err.println("---------- testValidatorFail --------------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("---------- testValidatorFail --------------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals(2,response.getExceptions().size()); assertTrue(!file0.exists()); @@ -544,10 +544,10 @@ request.setBindings(bindings); RetrievalResponse response = retriever.retrieve(request); - System.err.println("--------- testMemoryRetrieval -------------------"); - for (HttpClientException t:response.getExceptions()) - t.printStackTrace(); - System.err.println("-------------------------------------------------"); +// System.err.println("--------- testMemoryRetrieval -------------------"); +// for (HttpClientException t:response.getExceptions()) +// t.printStackTrace(); +// System.err.println("-------------------------------------------------"); assertEquals(0,response.getExceptions().size());