blob: a373d584cbe216404a30199e76078f1d8ea41538 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
package de.thedevstack.conversationsplus.services.filetransfer.http.upload;
import java.net.MalformedURLException;
import java.net.URL;
import de.thedevstack.android.logcat.Logging;
import de.thedevstack.conversationsplus.Config;
import de.thedevstack.conversationsplus.ConversationsPlusApplication;
import de.thedevstack.conversationsplus.entities.FileParams;
import de.thedevstack.conversationsplus.entities.Message;
import de.thedevstack.conversationsplus.enums.FileStatus;
import de.thedevstack.conversationsplus.services.filetransfer.FileTransferEntity;
import de.thedevstack.conversationsplus.services.filetransfer.FileTransferFailureReason;
import de.thedevstack.conversationsplus.utils.CryptoHelper;
import de.thedevstack.conversationsplus.utils.MessageUtil;
import de.thedevstack.conversationsplus.xmpp.filetransfer.http.upload.HttpUploadSlot;
/**
*
*/
public class HttpFileTransferEntity extends FileTransferEntity {
private HttpUploadSlot slot;
private final byte[] key;
private final boolean delayed;
public HttpFileTransferEntity(Message message, boolean delayed) {
super(message);
this.getMessage().setHttpUploaded(true);
this.getMessage().setNoDownloadable(); // TODO Set rmeote file status to uploaded
FileParams fileParams = this.getMessage().getFileParams();
if (null == fileParams) {
fileParams = new FileParams();
}
fileParams.setFileStatus(FileStatus.NEEDS_UPLOAD);
this.getMessage().setFileParams(fileParams);
if (Config.ENCRYPT_ON_HTTP_UPLOADED
|| message.getEncryption() == Message.ENCRYPTION_AXOLOTL
|| message.getEncryption() == Message.ENCRYPTION_OTR) {
this.key = new byte[48];
ConversationsPlusApplication.getSecureRandom().nextBytes(this.key);
this.getFile().setKeyAndIv(this.key);
} else {
this.key = null;
}
this.delayed = delayed;
}
public void setSlot(HttpUploadSlot slot) {
this.slot = slot;
}
public String getGetUrl() {
return this.slot.getGetUrl();
}
public String getPutUrl() {
return this.slot.getPutUrl();
}
public byte[] getKey() {
return key;
}
public boolean isDelayed() {
return this.delayed;
}
@Override
public void fail(FileTransferFailureReason failureReason) {
this.getMessage().setHttpUploaded(false);
super.fail(failureReason);
}
@Override
public void cancel() {
this.getMessage().setHttpUploaded(false);
super.cancel();
}
@Override
public void transferred() {
try {
URL getUrl = new URL(this.getGetUrl());
if (this.getKey() != null) {
getUrl = new URL(getUrl.toString() + "#" + CryptoHelper.bytesToHex(this.getKey()));
}
this.getMessage().getFileParams().setFileStatus(FileStatus.UPLOADED);
MessageUtil.updateFileParams(this.getMessage(), getUrl);
} catch (MalformedURLException e) {
Logging.e("httpupload", "Not a valid get url");
}
super.transferred();
}
}
|