Merge branch 'master' into development
This commit is contained in:
		
						commit
						9edcca1045
					
				| @ -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 = ""; | ||||||
|  | |||||||
| @ -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); | ||||||
|  | |||||||
| @ -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); | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch