aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/eu/siacs/conversations/entities/Contact.java1
-rw-r--r--src/eu/siacs/conversations/persistance/DatabaseBackend.java5
-rw-r--r--src/eu/siacs/conversations/persistance/FileBackend.java47
-rw-r--r--src/eu/siacs/conversations/services/XmppConnectionService.java3
-rw-r--r--src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java134
-rw-r--r--src/eu/siacs/conversations/xmpp/jingle/SocksConnection.java1
-rw-r--r--src/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java18
7 files changed, 118 insertions, 91 deletions
diff --git a/src/eu/siacs/conversations/entities/Contact.java b/src/eu/siacs/conversations/entities/Contact.java
index 132b2717..616146df 100644
--- a/src/eu/siacs/conversations/entities/Contact.java
+++ b/src/eu/siacs/conversations/entities/Contact.java
@@ -164,7 +164,6 @@ public class Contact extends AbstractEntity implements Serializable {
public void updatePresence(String resource, int status) {
this.presences.updatePresence(resource, status);
- Log.d("xmppService","updatingPresence for contact="+this.jid+" resource="+resource+" num="+presences.size());
}
public void removePresence(String resource) {
diff --git a/src/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/eu/siacs/conversations/persistance/DatabaseBackend.java
index 68fc56cd..ad4555c2 100644
--- a/src/eu/siacs/conversations/persistance/DatabaseBackend.java
+++ b/src/eu/siacs/conversations/persistance/DatabaseBackend.java
@@ -207,6 +207,10 @@ public class DatabaseBackend extends SQLiteOpenHelper {
ContentValues values = contact.getContentValues();
if (!updatePresences) {
values.remove(Contact.PRESENCES);
+ } else {
+ values.remove(Contact.DISPLAYNAME);
+ values.remove(Contact.PHOTOURI);
+ values.remove(Contact.SYSTEMACCOUNT);
}
db.update(Contact.TABLENAME, contact.getContentValues(), Contact.UUID
+ "=?", args);
@@ -231,7 +235,6 @@ public class DatabaseBackend extends SQLiteOpenHelper {
if (cursor.getCount()>=1) {
cursor.moveToFirst();
contact.setUuid(cursor.getString(0));
- //contact.setPresences(Presences.fromJsonString(cursor.getString(1)));
updateContact(contact,false);
} else {
contact.setUuid(UUID.randomUUID().toString());
diff --git a/src/eu/siacs/conversations/persistance/FileBackend.java b/src/eu/siacs/conversations/persistance/FileBackend.java
index 7433946b..307a9e2c 100644
--- a/src/eu/siacs/conversations/persistance/FileBackend.java
+++ b/src/eu/siacs/conversations/persistance/FileBackend.java
@@ -1,5 +1,6 @@
package eu.siacs.conversations.persistance;
+import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -10,6 +11,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
+import android.util.Log;
import android.util.LruCache;
import eu.siacs.conversations.entities.Conversation;
@@ -25,7 +27,7 @@ public class FileBackend {
public FileBackend(Context context) {
this.context = context;
-
+
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
int cacheSize = maxMemory / 8;
thumbnailCache = new LruCache<String, Bitmap>(cacheSize) {
@@ -45,7 +47,7 @@ public class FileBackend {
String filename = message.getUuid() + ".webp";
return new JingleFile(path + "/" + filename);
}
-
+
private Bitmap resize(Bitmap originalBitmap, int size) {
int w = originalBitmap.getWidth();
int h = originalBitmap.getHeight();
@@ -59,8 +61,8 @@ public class FileBackend {
scalledW = size;
scalledH = (int) (h / ((double) w / size));
}
- Bitmap scalledBitmap = Bitmap.createScaledBitmap(
- originalBitmap, scalledW, scalledH, true);
+ Bitmap scalledBitmap = Bitmap.createScaledBitmap(originalBitmap,
+ scalledW, scalledH, true);
return scalledBitmap;
} else {
return originalBitmap;
@@ -78,9 +80,10 @@ public class FileBackend {
Bitmap originalBitmap = BitmapFactory.decodeStream(is);
is.close();
Bitmap scalledBitmap = resize(originalBitmap, IMAGE_SIZE);
- boolean success = scalledBitmap.compress(Bitmap.CompressFormat.WEBP,75,os);
+ boolean success = scalledBitmap.compress(
+ Bitmap.CompressFormat.WEBP, 75, os);
if (!success) {
- //Log.d("xmppService", "couldnt compress");
+ // Log.d("xmppService", "couldnt compress");
}
os.close();
return file;
@@ -96,16 +99,17 @@ public class FileBackend {
}
public Bitmap getImageFromMessage(Message message) {
- return BitmapFactory
- .decodeFile(getJingleFile(message).getAbsolutePath());
+ return BitmapFactory.decodeFile(getJingleFile(message)
+ .getAbsolutePath());
}
- public Bitmap getThumbnailFromMessage(Message message, int size) throws FileNotFoundException {
+ public Bitmap getThumbnailFromMessage(Message message, int size)
+ throws FileNotFoundException {
Bitmap thumbnail = thumbnailCache.get(message.getUuid());
- if (thumbnail==null) {
+ if (thumbnail == null) {
Bitmap fullsize = BitmapFactory.decodeFile(getJingleFile(message)
.getAbsolutePath());
- if (fullsize==null) {
+ if (fullsize == null) {
throw new FileNotFoundException();
}
thumbnail = resize(fullsize, size);
@@ -113,4 +117,25 @@ public class FileBackend {
}
return thumbnail;
}
+
+ public void removeFiles(Conversation conversation) {
+ String prefix = context.getFilesDir().getAbsolutePath();
+ String path = prefix + "/" + conversation.getAccount().getJid() + "/"
+ + conversation.getContactJid();
+ File file = new File(path);
+ try {
+ this.deleteFile(file);
+ } catch (IOException e) {
+ Log.d("xmppService",
+ "error deleting file: " + file.getAbsolutePath());
+ }
+ }
+
+ private void deleteFile(File f) throws IOException {
+ if (f.isDirectory()) {
+ for (File c : f.listFiles())
+ deleteFile(c);
+ }
+ f.delete();
+ }
}
diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java
index 69f0b8af..b68dab64 100644
--- a/src/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/eu/siacs/conversations/services/XmppConnectionService.java
@@ -290,7 +290,7 @@ public class XmppConnectionService extends Service {
if ("subscribe".equals(type)) {
account.getXmppConnection().addPendingSubscription(fromParts[0]);
} else {
- Log.d(LOGTAG,packet.getFrom()+ " could not be found");
+ //Log.d(LOGTAG,packet.getFrom()+ " could not be found");
}
return;
}
@@ -667,7 +667,6 @@ public class XmppConnectionService extends Service {
@Override
public void onBind(Account account) {
- Log.d("xmppService","bount. cleaning presences");
databaseBackend.clearPresences(account);
account.clearPresences(); // self presences
if (account.getXmppConnection().hasFeatureRosterManagment()) {
diff --git a/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java b/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
index a7048437..b221ec0c 100644
--- a/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
+++ b/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
@@ -186,8 +186,7 @@ public class JingleConnection {
this.transportId = this.mJingleConnectionManager.nextRandomId();
content.setCandidates(this.transportId,getCandidatesAsElements());
packet.setContent(content);
- Log.d("xmppService",packet.toString());
- account.getXmppConnection().sendIqPacket(packet, this.responseListener);
+ this.sendJinglePacket(packet);
this.status = STATUS_INITIATED;
}
}
@@ -219,7 +218,7 @@ public class JingleConnection {
public void failed() {
content.setCandidates(transportId, getCandidatesAsElements());
packet.setContent(content);
- account.getXmppConnection().sendIqPacket(packet,responseListener);
+ sendJinglePacket(packet);
}
@Override
@@ -227,13 +226,13 @@ public class JingleConnection {
mergeCandidate(candidate);
content.setCandidates(transportId, getCandidatesAsElements());
packet.setContent(content);
- account.getXmppConnection().sendIqPacket(packet,responseListener);
+ sendJinglePacket(packet);
}
});
} else {
content.setCandidates(transportId, getCandidatesAsElements());
packet.setContent(content);
- account.getXmppConnection().sendIqPacket(packet,responseListener);
+ sendJinglePacket(packet);
}
}
});
@@ -250,8 +249,12 @@ public class JingleConnection {
return packet;
}
+ private void sendJinglePacket(JinglePacket packet) {
+ Log.d("xmppService",packet.toPrettyString());
+ account.getXmppConnection().sendIqPacket(packet,responseListener);
+ }
+
private void accept(JinglePacket packet) {
- Log.d("xmppService","session-accept: "+packet.toString());
Content content = packet.getJingleContent();
mergeCandidates(JingleCandidate.parse(content.getCanditates()));
this.status = STATUS_ACCEPTED;
@@ -286,66 +289,72 @@ public class JingleConnection {
private void connect() {
final SocksConnection connection = chooseConnection();
- this.status = STATUS_TRANSMITTING;
- final OnFileTransmitted callback = new OnFileTransmitted() {
-
- @Override
- public void onFileTransmitted(JingleFile file) {
- if (responder.equals(account.getFullJid())) {
- sendSuccess();
- mXmppConnectionService.markMessage(message, Message.STATUS_SEND);
- }
- Log.d("xmppService","sucessfully transmitted file. sha1:"+file.getSha1Sum());
- }
- };
- if (connection.isProxy()&&(connection.getCandidate().isOurs())) {
- Log.d("xmppService","candidate "+connection.getCandidate().getCid()+" was our proxy and needs activation");
- IqPacket activation = new IqPacket(IqPacket.TYPE_SET);
- activation.setTo(connection.getCandidate().getJid());
- activation.query("http://jabber.org/protocol/bytestreams").setAttribute("sid", this.getSessionId());
- activation.query().addChild("activate").setContent(this.getCounterPart());
- this.account.getXmppConnection().sendIqPacket(activation, new OnIqPacketReceived() {
+ if (connection==null) {
+ Log.d("xmppService","could not find suitable candidate");
+ this.disconnect();
+ this.status = STATUS_FAILED;
+ this.mXmppConnectionService.markMessage(this.message, Message.STATUS_SEND_FAILED);
+ } else {
+ this.status = STATUS_TRANSMITTING;
+ final OnFileTransmitted callback = new OnFileTransmitted() {
@Override
- public void onIqPacketReceived(Account account, IqPacket packet) {
- Log.d("xmppService","activation result: "+packet.toString());
- if (initiator.equals(account.getFullJid())) {
- Log.d("xmppService","we were initiating. sending file");
- connection.send(file,callback);
- } else {
- connection.receive(file,callback);
- Log.d("xmppService","we were responding. receiving file");
+ public void onFileTransmitted(JingleFile file) {
+ if (responder.equals(account.getFullJid())) {
+ sendSuccess();
+ mXmppConnectionService.markMessage(message, Message.STATUS_SEND);
}
+ Log.d("xmppService","sucessfully transmitted file. sha1:"+file.getSha1Sum());
}
- });
- } else {
- if (initiator.equals(account.getFullJid())) {
- Log.d("xmppService","we were initiating. sending file");
- connection.send(file,callback);
+ };
+ if (connection.isProxy()&&(connection.getCandidate().isOurs())) {
+ Log.d("xmppService","candidate "+connection.getCandidate().getCid()+" was our proxy and needs activation");
+ IqPacket activation = new IqPacket(IqPacket.TYPE_SET);
+ activation.setTo(connection.getCandidate().getJid());
+ activation.query("http://jabber.org/protocol/bytestreams").setAttribute("sid", this.getSessionId());
+ activation.query().addChild("activate").setContent(this.getCounterPart());
+ this.account.getXmppConnection().sendIqPacket(activation, new OnIqPacketReceived() {
+
+ @Override
+ public void onIqPacketReceived(Account account, IqPacket packet) {
+ Log.d("xmppService","activation result: "+packet.toString());
+ if (initiator.equals(account.getFullJid())) {
+ Log.d("xmppService","we were initiating. sending file");
+ connection.send(file,callback);
+ } else {
+ connection.receive(file,callback);
+ Log.d("xmppService","we were responding. receiving file");
+ }
+ }
+ });
} else {
- Log.d("xmppService","we were responding. receiving file");
- connection.receive(file,callback);
+ if (initiator.equals(account.getFullJid())) {
+ Log.d("xmppService","we were initiating. sending file");
+ connection.send(file,callback);
+ } else {
+ Log.d("xmppService","we were responding. receiving file");
+ connection.receive(file,callback);
+ }
}
}
}
private SocksConnection chooseConnection() {
- Log.d("xmppService","choosing connection from "+this.connections.size()+" possibilties");
SocksConnection connection = null;
Iterator<Entry<String, SocksConnection>> it = this.connections.entrySet().iterator();
while (it.hasNext()) {
Entry<String, SocksConnection> pairs = it.next();
SocksConnection currentConnection = pairs.getValue();
- Log.d("xmppService","comparing candidate: "+currentConnection.getCandidate().toString());
+ //Log.d("xmppService","comparing candidate: "+currentConnection.getCandidate().toString());
if (currentConnection.isEstablished()&&(currentConnection.getCandidate().isUsedByCounterpart()||(!currentConnection.getCandidate().isOurs()))) {
- Log.d("xmppService","is usable");
+ //Log.d("xmppService","is usable");
if (connection==null) {
connection = currentConnection;
} else {
if (connection.getCandidate().getPriority()<currentConnection.getCandidate().getPriority()) {
connection = currentConnection;
} else if (connection.getCandidate().getPriority()==currentConnection.getCandidate().getPriority()) {
- Log.d("xmppService","found two candidates with same priority");
+ //Log.d("xmppService","found two candidates with same priority");
if (initiator.equals(account.getFullJid())) {
if (currentConnection.getCandidate().isOurs()) {
connection = currentConnection;
@@ -360,11 +369,6 @@ public class JingleConnection {
}
it.remove();
}
- if (connection!=null) {
- Log.d("xmppService","chose candidate: "+connection.getCandidate().getHost());
- } else {
- Log.d("xmppService","couldn't find candidate");
- }
return connection;
}
@@ -373,8 +377,7 @@ public class JingleConnection {
Reason reason = new Reason();
reason.addChild("success");
packet.setReason(reason);
- Log.d("xmppService","sending success. "+packet.toString());
- this.account.getXmppConnection().sendIqPacket(packet, responseListener);
+ this.sendJinglePacket(packet);
this.disconnect();
this.status = STATUS_FINISHED;
this.mXmppConnectionService.markMessage(this.message, Message.STATUS_RECIEVED);
@@ -391,28 +394,7 @@ public class JingleConnection {
this.status = STATUS_CANCELED;
this.mXmppConnectionService.markMessage(this.message, Message.STATUS_SEND_REJECTED);
}
-
- /*private void openOurCandidates() {
- for(JingleCandidate candidate : this.candidates) {
- if (candidate.isOurs()) {
- final SocksConnection socksConnection = new SocksConnection(this,candidate);
- connections.put(candidate.getCid(), socksConnection);
- socksConnection.connect(new OnSocksConnection() {
-
- @Override
- public void failed() {
- Log.d("xmppService","connection to our candidate failed");
- }
-
- @Override
- public void established() {
- Log.d("xmppService","connection to our candidate was successful");
- }
- });
- }
- }
- }*/
-
+
private void connectNextCandidate() {
for(JingleCandidate candidate : this.candidates) {
if ((!connections.containsKey(candidate.getCid())&&(!candidate.isOurs()))) {
@@ -430,11 +412,13 @@ public class JingleConnection {
@Override
public void failed() {
+ Log.d("xmppService", "connection failed with "+candidate.getHost()+":"+candidate.getPort());
connectNextCandidate();
}
@Override
public void established() {
+ Log.d("xmppService", "established connection with "+candidate.getHost()+":"+candidate.getPort());
sendCandidateUsed(candidate.getCid());
if ((receivedCandidate)&&(status == STATUS_ACCEPTED)) {
connect();
@@ -461,7 +445,7 @@ public class JingleConnection {
content.setUsedCandidate(this.transportId, cid);
packet.setContent(content);
Log.d("xmppService","send using candidate: "+cid);
- this.account.getXmppConnection().sendIqPacket(packet,responseListener);
+ this.sendJinglePacket(packet);
this.sentCandidate = true;
}
@@ -474,7 +458,7 @@ public class JingleConnection {
content.setCandidateError(this.transportId);
packet.setContent(content);
Log.d("xmppService","send candidate error");
- this.account.getXmppConnection().sendIqPacket(packet,responseListener);
+ this.sendJinglePacket(packet);
this.sentCandidate = true;
}
diff --git a/src/eu/siacs/conversations/xmpp/jingle/SocksConnection.java b/src/eu/siacs/conversations/xmpp/jingle/SocksConnection.java
index 197b9424..897c202f 100644
--- a/src/eu/siacs/conversations/xmpp/jingle/SocksConnection.java
+++ b/src/eu/siacs/conversations/xmpp/jingle/SocksConnection.java
@@ -69,7 +69,6 @@ public class SocksConnection {
inputStream.read(result);
int status = result[1];
if (status == 0) {
- Log.d("xmppService", "established connection with "+candidate.getHost()+":"+candidate.getPort()+ "/" + destination);
isEstablished = true;
callback.established();
} else {
diff --git a/src/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java b/src/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java
index 55700609..e48eadd9 100644
--- a/src/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java
+++ b/src/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java
@@ -92,4 +92,22 @@ public class JinglePacket extends IqPacket {
public boolean isAction(String action) {
return action.equalsIgnoreCase(this.getAction());
}
+
+ public String toPrettyString() {
+ StringBuilder output = new StringBuilder();
+ output.append("["+getAction()+ " to:"+getTo()+" ");
+ if (this.content!=null) {
+ if (this.content.getUsedCandidate()!=null) {
+ output.append("used-candidate="+this.content.getUsedCandidate());
+ } else if (this.content.hasCandidateError()) {
+ output.append("candidate-error");
+ } else {
+ for(Element c : this.content.getCanditates()) {
+ output.append("["+c.getAttribute("host")+":"+c.getAttribute("port")+"]");
+ }
+ }
+ }
+ output.append("]");
+ return output.toString();
+ }
}