Merge branch 'master' into development

This commit is contained in:
Daniel Gultsch 2015-08-16 15:01:06 +02:00
commit 9edcca1045
3 changed files with 35 additions and 34 deletions

View File

@ -101,6 +101,9 @@ public class ScramSha1 extends SaslMechanism {
public String getResponse(final String challenge) throws AuthenticationException { public String getResponse(final String challenge) throws AuthenticationException {
switch (state) { switch (state) {
case AUTH_TEXT_SENT: case AUTH_TEXT_SENT:
if (challenge == null) {
throw new AuthenticationException("challenge can not be null");
}
serverFirstMessage = Base64.decode(challenge, Base64.DEFAULT); serverFirstMessage = Base64.decode(challenge, Base64.DEFAULT);
final Tokenizer tokenizer = new Tokenizer(serverFirstMessage); final Tokenizer tokenizer = new Tokenizer(serverFirstMessage);
String nonce = ""; String nonce = "";

View File

@ -358,11 +358,7 @@ public class FileBackend {
file.delete(); file.delete();
return false; return false;
} }
} catch (FileNotFoundException e) { } catch (IllegalArgumentException | IOException | NoSuchAlgorithmException e) {
return false;
} catch (IOException e) {
return false;
} catch (NoSuchAlgorithmException e) {
return false; return false;
} finally { } finally {
close(os); close(os);

View File

@ -150,7 +150,6 @@ public class XmppConnection implements Runnable {
shouldAuthenticate = shouldBind = !account.isOptionSet(Account.OPTION_REGISTER); shouldAuthenticate = shouldBind = !account.isOptionSet(Account.OPTION_REGISTER);
tagReader = new XmlReader(wakeLock); tagReader = new XmlReader(wakeLock);
tagWriter = new TagWriter(); tagWriter = new TagWriter();
packetCallbacks.clear();
this.changeStatus(Account.State.CONNECTING); this.changeStatus(Account.State.CONNECTING);
if (DNSHelper.isIp(account.getServer().toString())) { if (DNSHelper.isIp(account.getServer().toString())) {
socket = new Socket(); socket = new Socket();
@ -197,10 +196,7 @@ public class XmppConnection implements Runnable {
socket = new Socket(); socket = new Socket();
socket.connect(addr, Config.SOCKET_TIMEOUT * 1000); socket.connect(addr, Config.SOCKET_TIMEOUT * 1000);
socketError = false; socketError = false;
} catch (final UnknownHostException e) { } catch (final Throwable e) {
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage());
i++;
} catch (final IOException e) {
Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage());
i++; i++;
} }
@ -470,26 +466,28 @@ public class XmppConnection implements Runnable {
this.jingleListener.onJinglePacketReceived(account,(JinglePacket) packet); this.jingleListener.onJinglePacketReceived(account,(JinglePacket) packet);
} }
} else { } else {
if (packetCallbacks.containsKey(packet.getId())) { synchronized (this.packetCallbacks) {
final Pair<IqPacket, OnIqPacketReceived> packetCallbackDuple = packetCallbacks.get(packet.getId()); if (packetCallbacks.containsKey(packet.getId())) {
// Packets to the server should have responses from the server final Pair<IqPacket, OnIqPacketReceived> packetCallbackDuple = packetCallbacks.get(packet.getId());
if (packetCallbackDuple.first.toServer(account)) { // Packets to the server should have responses from the server
if (packet.fromServer(account)) { if (packetCallbackDuple.first.toServer(account)) {
packetCallbackDuple.second.onIqPacketReceived(account, packet); if (packet.fromServer(account)) {
packetCallbacks.remove(packet.getId()); packetCallbackDuple.second.onIqPacketReceived(account, packet);
packetCallbacks.remove(packet.getId());
} else {
Log.e(Config.LOGTAG, account.getJid().toBareJid().toString() + ": ignoring spoofed iq packet");
}
} else { } else {
Log.e(Config.LOGTAG,account.getJid().toBareJid().toString()+": ignoring spoofed iq packet"); if (packet.getFrom().equals(packetCallbackDuple.first.getTo())) {
} packetCallbackDuple.second.onIqPacketReceived(account, packet);
} else { packetCallbacks.remove(packet.getId());
if (packet.getFrom().equals(packetCallbackDuple.first.getTo())) { } else {
packetCallbackDuple.second.onIqPacketReceived(account, packet); Log.e(Config.LOGTAG, account.getJid().toBareJid().toString() + ": ignoring spoofed iq packet");
packetCallbacks.remove(packet.getId()); }
} else {
Log.e(Config.LOGTAG,account.getJid().toBareJid().toString()+": ignoring spoofed iq packet");
} }
} else if (packet.getType() == IqPacket.TYPE.GET || packet.getType() == IqPacket.TYPE.SET) {
this.unregisteredIqListener.onIqPacketReceived(account, packet);
} }
} else if (packet.getType() == IqPacket.TYPE.GET|| packet.getType() == IqPacket.TYPE.SET) {
this.unregisteredIqListener.onIqPacketReceived(account, packet);
} }
} }
} }
@ -720,13 +718,15 @@ public class XmppConnection implements Runnable {
} }
private void clearIqCallbacks() { private void clearIqCallbacks() {
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": clearing iq iq callbacks"); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": clearing iq iq callbacks");
final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR); final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR);
Iterator<Entry<String, Pair<IqPacket, OnIqPacketReceived>>> iterator = this.packetCallbacks.entrySet().iterator(); synchronized (this.packetCallbacks) {
while(iterator.hasNext()) { Iterator<Entry<String, Pair<IqPacket, OnIqPacketReceived>>> iterator = this.packetCallbacks.entrySet().iterator();
Entry<String, Pair<IqPacket, OnIqPacketReceived>> entry = iterator.next(); while (iterator.hasNext()) {
entry.getValue().second.onIqPacketReceived(account,failurePacket); Entry<String, Pair<IqPacket, OnIqPacketReceived>> entry = iterator.next();
iterator.remove(); entry.getValue().second.onIqPacketReceived(account, failurePacket);
iterator.remove();
}
} }
} }
@ -899,7 +899,9 @@ public class XmppConnection implements Runnable {
packet.setAttribute("id", id); packet.setAttribute("id", id);
} }
if (callback != null) { if (callback != null) {
packetCallbacks.put(packet.getId(), new Pair<>(packet, callback)); synchronized (this.packetCallbacks) {
packetCallbacks.put(packet.getId(), new Pair<>(packet, callback));
}
} }
this.sendPacket(packet); this.sendPacket(packet);
} }