add methods to check max file size for http upload

This commit is contained in:
Daniel Gultsch 2016-03-31 21:56:59 +02:00
parent e074104004
commit 74c496fe3e
5 changed files with 41 additions and 12 deletions

View file

@ -52,8 +52,12 @@ public class Account extends AbstractEntity {
public static final int OPTION_USECOMPRESSION = 3;
public final HashSet<Pair<String, String>> inProgressDiscoFetches = new HashSet<>();
public boolean httpUploadAvailable(long filesize) {
return xmppConnection != null && xmppConnection.getFeatures().httpUpload(filesize);
}
public boolean httpUploadAvailable() {
return xmppConnection != null && xmppConnection.getFeatures().httpUpload();
return httpUploadAvailable(0);
}
public void setDisplayName(String displayName) {

View file

@ -190,6 +190,19 @@ public class ServiceDiscoveryResult {
return false;
}
public String getExtendedDiscoInformation(String formType, String name) {
for(Data form : this.forms) {
if (formType.equals(form.getFormType())) {
for(Field field: form.getFields()) {
if (name.equals(field.getFieldName())) {
return field.getValue();
}
}
}
}
return null;
}
protected byte[] mkCapHash() {
StringBuilder s = new StringBuilder();

View file

@ -847,8 +847,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
private void sendFileMessage(final Message message, final boolean delay) {
Log.d(Config.LOGTAG, "send file message");
final Account account = message.getConversation().getAccount();
final XmppConnection connection = account.getXmppConnection();
if (connection != null && connection.getFeatures().httpUpload()) {
if (account.httpUploadAvailable()) {
mHttpConnectionManager.createNewUploadConnection(message, delay);
} else {
mJingleConnectionManager.createNewConnection(message);

View file

@ -688,7 +688,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
} else {
this.mServerInfoPep.setText(R.string.server_info_unavailable);
}
if (features.httpUpload()) {
if (features.httpUpload(0)) {
this.mServerInfoHttpUpload.setText(R.string.server_info_available);
} else {
this.mServerInfoHttpUpload.setText(R.string.server_info_unavailable);

View file

@ -1346,12 +1346,12 @@ public class XmppConnection implements Runnable {
this.streamId = null;
}
public List<Jid> findDiscoItemsByFeature(final String feature) {
private List<Entry<Jid, ServiceDiscoveryResult>> findDiscoItemsByFeature(final String feature) {
synchronized (this.disco) {
final List<Jid> items = new ArrayList<>();
final List<Entry<Jid, ServiceDiscoveryResult>> items = new ArrayList<>();
for (final Entry<Jid, ServiceDiscoveryResult> cursor : this.disco.entrySet()) {
if (cursor.getValue().getFeatures().contains(feature)) {
items.add(cursor.getKey());
items.add(cursor);
}
}
return items;
@ -1359,9 +1359,9 @@ public class XmppConnection implements Runnable {
}
public Jid findDiscoItemByFeature(final String feature) {
final List<Jid> items = findDiscoItemsByFeature(feature);
final List<Entry<Jid, ServiceDiscoveryResult>> items = findDiscoItemsByFeature(feature);
if (items.size() >= 1) {
return items.get(0);
return items.get(0).getKey();
}
return null;
}
@ -1505,7 +1505,6 @@ public class XmppConnection implements Runnable {
public boolean pep() {
synchronized (XmppConnection.this.disco) {
final Pair<String, String> needle = new Pair<>("pubsub", "pep");
ServiceDiscoveryResult info = disco.get(account.getServer());
if (info != null && info.hasIdentity("pubsub", "pep")) {
return true;
@ -1534,8 +1533,22 @@ public class XmppConnection implements Runnable {
this.blockListRequested = value;
}
public boolean httpUpload() {
return !Config.DISABLE_HTTP_UPLOAD && findDiscoItemsByFeature(Xmlns.HTTP_UPLOAD).size() > 0;
public boolean httpUpload(long filesize) {
if (Config.DISABLE_HTTP_UPLOAD) {
return false;
} else {
List<Entry<Jid, ServiceDiscoveryResult>> items = findDiscoItemsByFeature(Xmlns.HTTP_UPLOAD);
if (items.size() > 0) {
try {
long maxsize = Long.parseLong(items.get(0).getValue().getExtendedDiscoInformation(Xmlns.HTTP_UPLOAD, "max-file-size"));
return maxsize <= filesize;
} catch (Exception e) {
return filesize <= 0;
}
} else {
return false;
}
}
}
}