diff options
Diffstat (limited to 'src')
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(); + } } |