Skip to content

Commit 9da71ef

Browse files
committed
Set checksum from filter stream after upload.
1 parent 469f536 commit 9da71ef

File tree

6 files changed

+23
-27
lines changed

6 files changed

+23
-27
lines changed

backblaze/src/test/java/ch/cyberduck/core/worker/B2ConcurrentTransferWorkerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public Session create() {
113113
final B2LargeUploadService upload = new B2LargeUploadService(this, new B2VersionIdProvider(this)
114114
) {
115115
@Override
116-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) {
116+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) {
117117
if(failed.get()) {
118118
// Second attempt successful
119119
return in;

backblaze/src/test/java/ch/cyberduck/core/worker/B2SingleTransferWorkerTest.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,7 @@
4141
import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader;
4242
import ch.cyberduck.core.ssl.DefaultX509KeyManager;
4343
import ch.cyberduck.core.ssl.DefaultX509TrustManager;
44-
import ch.cyberduck.core.transfer.DisabledTransferErrorCallback;
45-
import ch.cyberduck.core.transfer.DisabledTransferPrompt;
46-
import ch.cyberduck.core.transfer.Transfer;
47-
import ch.cyberduck.core.transfer.TransferAction;
48-
import ch.cyberduck.core.transfer.TransferItem;
49-
import ch.cyberduck.core.transfer.TransferOptions;
50-
import ch.cyberduck.core.transfer.TransferSpeedometer;
51-
import ch.cyberduck.core.transfer.UploadTransfer;
44+
import ch.cyberduck.core.transfer.*;
5245
import ch.cyberduck.core.transfer.upload.UploadFilterOptions;
5346
import ch.cyberduck.test.IntegrationTest;
5447
import ch.cyberduck.test.VaultTest;
@@ -110,7 +103,7 @@ public String getProperty(final String key) {
110103
final B2LargeUploadService upload = new B2LargeUploadService(this, new B2VersionIdProvider(this)
111104
) {
112105
@Override
113-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) {
106+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) {
114107
if(failed.get()) {
115108
// Second attempt successful
116109
return in;

core/src/main/java/ch/cyberduck/core/shared/DefaultUploadFeature.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import ch.cyberduck.core.features.Upload;
2828
import ch.cyberduck.core.features.Write;
2929
import ch.cyberduck.core.io.BandwidthThrottle;
30+
import ch.cyberduck.core.io.Checksum;
3031
import ch.cyberduck.core.io.StatusOutputStream;
3132
import ch.cyberduck.core.io.StreamCancelation;
3233
import ch.cyberduck.core.io.StreamCopier;
@@ -36,6 +37,7 @@
3637
import ch.cyberduck.core.transfer.TransferStatus;
3738
import ch.cyberduck.core.transfer.upload.UploadFilterOptions;
3839

40+
import org.apache.commons.codec.binary.Hex;
3941
import org.apache.logging.log4j.LogManager;
4042
import org.apache.logging.log4j.Logger;
4143

@@ -59,7 +61,7 @@ public Reply upload(final Write<Reply> write, final Path file, final Local local
5961
protected Reply transfer(final Write<Reply> write, final Path file, final Local local, final BandwidthThrottle throttle, final StreamListener listener,
6062
final TransferStatus status, final StreamCancelation cancel, final StreamProgress progress,
6163
final ConnectionCallback callback, final UploadFilterOptions options) throws BackgroundException {
62-
final InputStream in = this.decorate(local.getInputStream(), options);
64+
final InputStream in = this.decorate(local.getInputStream(), status, options);
6365
final StatusOutputStream<Reply> out = write.write(file, status, callback);
6466
new StreamCopier(cancel, progress)
6567
.withOffset(status.getOffset())
@@ -73,10 +75,11 @@ protected Reply transfer(final Write<Reply> write, final Path file, final Local
7375
* Wrap input stream if checksum calculation is enabled.
7476
*
7577
* @param in File input stream
78+
* @param status
7679
* @param options
7780
* @return Wrapped or same stream
7881
*/
79-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) throws BackgroundException {
82+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) throws BackgroundException {
8083
if(options.checksum) {
8184
final MessageDigest digest;
8285
try {
@@ -86,7 +89,13 @@ protected InputStream decorate(final InputStream in, final UploadFilterOptions o
8689
throw new DefaultIOExceptionMappingService().map(e);
8790
}
8891
if(null != digest) {
89-
return new DigestInputStream(in, digest);
92+
return new DigestInputStream(in, digest) {
93+
@Override
94+
public void close() throws IOException {
95+
super.close();
96+
status.setChecksum(Checksum.parse(Hex.encodeHexString(digest.digest())));
97+
}
98+
};
9099
}
91100
}
92101
return in;

dropbox/src/test/java/ch/cyberduck/core/dropbox/DropboxUploadFeatureTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import ch.cyberduck.core.exception.BackgroundException;
2727
import ch.cyberduck.core.features.Delete;
2828
import ch.cyberduck.core.io.BandwidthThrottle;
29+
import ch.cyberduck.core.transfer.Transfer;
2930
import ch.cyberduck.core.transfer.TransferStatus;
3031
import ch.cyberduck.core.transfer.upload.UploadFilterOptions;
3132
import ch.cyberduck.test.IntegrationTest;
@@ -81,9 +82,9 @@ public void testDecorate() throws Exception {
8182
final NullInputStream n = new NullInputStream(1L);
8283
assertSame(NullInputStream.class, new DropboxUploadFeature() {
8384
@Override
84-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) throws BackgroundException {
85-
return super.decorate(in, options);
85+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) throws BackgroundException {
86+
return super.decorate(in, status, options);
8687
}
87-
}.decorate(n, new UploadFilterOptions(session.getHost())).getClass());
88+
}.decorate(n, new TransferStatus(), new UploadFilterOptions(session.getHost())).getClass());
8889
}
8990
}

openstack/src/test/java/ch/cyberduck/core/worker/SwiftSingleTransferWorkerTest.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,7 @@
3838
import ch.cyberduck.core.openstack.SwiftSession;
3939
import ch.cyberduck.core.ssl.DefaultX509KeyManager;
4040
import ch.cyberduck.core.ssl.DisabledX509TrustManager;
41-
import ch.cyberduck.core.transfer.DisabledTransferErrorCallback;
42-
import ch.cyberduck.core.transfer.DisabledTransferPrompt;
43-
import ch.cyberduck.core.transfer.Transfer;
44-
import ch.cyberduck.core.transfer.TransferAction;
45-
import ch.cyberduck.core.transfer.TransferItem;
46-
import ch.cyberduck.core.transfer.TransferOptions;
47-
import ch.cyberduck.core.transfer.TransferSpeedometer;
48-
import ch.cyberduck.core.transfer.UploadTransfer;
41+
import ch.cyberduck.core.transfer.*;
4942
import ch.cyberduck.core.transfer.upload.UploadFilterOptions;
5043
import ch.cyberduck.test.IntegrationTest;
5144
import ch.cyberduck.test.VaultTest;
@@ -101,7 +94,7 @@ public <T> T _getFeature(final Class<T> type) {
10194
final SwiftRegionService regionService = new SwiftRegionService(this);
10295
return (T) new SwiftLargeObjectUploadFeature(this, regionService, 1024L * 1024L, 5) {
10396
@Override
104-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) {
97+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) {
10598
if(failed.get()) {
10699
// Second attempt successful
107100
return in;

s3/src/test/java/ch/cyberduck/core/worker/S3SingleTransferWorkerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public <T> T _getFeature(final Class<T> type) {
147147
if(type == Upload.class) {
148148
return (T) new S3MultipartUploadService(this, new S3AccessControlListFeature(this), 5 * 1024L * 1024L, 5) {
149149
@Override
150-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) {
150+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) {
151151
if(failed.get()) {
152152
// Second attempt successful
153153
return in;
@@ -225,7 +225,7 @@ public <T> T _getFeature(final Class<T> type) {
225225
if(type == Upload.class) {
226226
return (T) new S3SingleUploadService(this) {
227227
@Override
228-
protected InputStream decorate(final InputStream in, final UploadFilterOptions options) {
228+
protected InputStream decorate(final InputStream in, final TransferStatus status, final UploadFilterOptions options) {
229229
if(failed.get()) {
230230
// Second attempt successful
231231
return in;

0 commit comments

Comments
 (0)