mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 14:22:05 +01:00
Smack 4.1.2
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQF8BAABCgBmBQJVjpgTXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQxMzU3QjAxODY1QjI1MDNDMTg0NTNEMjA4 Q0FDMkE5Njc4NTQ4RTM1AAoJEIysKpZ4VI41g0IH/3dJedDe6D8BySl4YVoFkQEk Ax6T9oguTHN4o+6wnIjZUMBqycxKbwCppwE8ydrsarpxBicehwLzgaegxqVOtqM/ /7ZNzMiASxzeSCOQpR6dxNYGZp/buY3yaL4hweVh8V+vRVxzk/dXBpl6Syba+G1N ytpCfeC6bGd+Gf5aQ9SA8rPz3ZP99twFNuKYwZGkC8/ePtieT8YthKwwnaIlCuFL BZbhgR24W5pDtaCocTBUnI2wTqv2WsEx6+6LNEHsg2pbAwf2hYw12LPk0krvZOOV PSK/Jtq5qdXrq/vNudvfuVmk5KnhS8BO/WIY+8+EsYBFfP0W7ajZl69KGOxobNQ= =dg39 -----END PGP SIGNATURE----- Merge tag '4.1.2' Smack 4.1.2 Conflicts: version.gradle
This commit is contained in:
commit
ebcbdb75cd
8 changed files with 97 additions and 12 deletions
|
@ -141,6 +141,37 @@ hr {
|
||||||
|
|
||||||
<div id="pageBody">
|
<div id="pageBody">
|
||||||
|
|
||||||
|
<h2>4.1.2 -- <span style="font-weight: normal;">2015-06-27</span></h2>
|
||||||
|
|
||||||
|
<h2> Bug
|
||||||
|
</h2>
|
||||||
|
<ul>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-664'>SMACK-664</a>] - Invalid IQ error response to OfferRequestPacket and OfferRevokePacket
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-668'>SMACK-668</a>] - ReconnectionManager's value of 'attempts' is not reset after successful reconnection
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-669'>SMACK-669</a>] - Only add Entity Capabilities extension to available presences
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-670'>SMACK-670</a>] - SASLMechanism.authenticate should treat an empty byte array like 'null' byte array
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-672'>SMACK-672</a>] - Memory leak caused by RosterGroup declaring a strong reference to XMPPConnection
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-673'>SMACK-673</a>] - VCard API does not support all elements
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-676'>SMACK-676</a>] - ConcurrentModificationException in ServerPingWithAlarmManager
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-678'>SMACK-678</a>] - Login hangs if starttls advertised, but security is set to 'disabled' and compression is also advertised
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2> Improvement
|
||||||
|
</h2>
|
||||||
|
<ul>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-667'>SMACK-667</a>] - Request Stream Mangement Acknowledgement after re-sending unack'ed stanzas after stream resumption
|
||||||
|
</li>
|
||||||
|
<li>[<a href='https://igniterealtime.org/issues/browse/SMACK-671'>SMACK-671</a>] - Don't disable Scoks5BytestreamManager on connection termination
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2>4.1.1 -- <span style="font-weight: normal;">2015-05-09</span></h2>
|
<h2>4.1.1 -- <span style="font-weight: normal;">2015-05-09</span></h2>
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,10 @@
|
||||||
|
|
||||||
package org.jivesoftware.smackx.ping.android;
|
package org.jivesoftware.smackx.ping.android;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -110,10 +112,16 @@ public final class ServerPingWithAlarmManager extends Manager {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
LOGGER.fine("Ping Alarm broadcast received");
|
LOGGER.fine("Ping Alarm broadcast received");
|
||||||
Iterator<XMPPConnection> it = INSTANCES.keySet().iterator();
|
Set<Entry<XMPPConnection, ServerPingWithAlarmManager>> managers;
|
||||||
while (it.hasNext()) {
|
synchronized (ServerPingWithAlarmManager.class) {
|
||||||
XMPPConnection connection = it.next();
|
// Make a copy to avoid ConcurrentModificationException when
|
||||||
if (ServerPingWithAlarmManager.getInstanceFor(connection).isEnabled()) {
|
// iterating directly over INSTANCES and the Set is modified
|
||||||
|
// concurrently by creating a new ServerPingWithAlarmManager.
|
||||||
|
managers = new HashSet<>(INSTANCES.entrySet());
|
||||||
|
}
|
||||||
|
for (Entry<XMPPConnection, ServerPingWithAlarmManager> entry : managers) {
|
||||||
|
XMPPConnection connection = entry.getKey();
|
||||||
|
if (entry.getValue().isEnabled()) {
|
||||||
LOGGER.fine("Calling pingServerIfNecessary for connection "
|
LOGGER.fine("Calling pingServerIfNecessary for connection "
|
||||||
+ connection);
|
+ connection);
|
||||||
final PingManager pingManager = PingManager.getInstanceFor(connection);
|
final PingManager pingManager = PingManager.getInstanceFor(connection);
|
||||||
|
|
|
@ -301,7 +301,12 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ConnectionConfiguration getConfiguration() {
|
/**
|
||||||
|
* Get the connection configuration used by this connection.
|
||||||
|
*
|
||||||
|
* @return the connection configuration.
|
||||||
|
*/
|
||||||
|
public ConnectionConfiguration getConfiguration() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.jivesoftware.smack.XMPPException.StreamErrorException;
|
||||||
import org.jivesoftware.smack.packet.StreamError;
|
import org.jivesoftware.smack.packet.StreamError;
|
||||||
import org.jivesoftware.smack.util.Async;
|
import org.jivesoftware.smack.util.Async;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
@ -239,8 +240,17 @@ public final class ReconnectionManager {
|
||||||
if (isReconnectionPossible(connection)) {
|
if (isReconnectionPossible(connection)) {
|
||||||
connection.connect();
|
connection.connect();
|
||||||
}
|
}
|
||||||
|
// TODO Starting with Smack 4.2, connect() will no
|
||||||
|
// longer login automatically. So change this and the
|
||||||
|
// previous lines to connection.connect().login() in the
|
||||||
|
// 4.2, or any later, branch.
|
||||||
|
if (!connection.isAuthenticated()) {
|
||||||
|
connection.login();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
// Successfully reconnected.
|
||||||
|
attempts = 0;
|
||||||
|
}
|
||||||
|
catch (SmackException | IOException | XMPPException | InterruptedException e) {
|
||||||
// Fires the failed reconnection notification
|
// Fires the failed reconnection notification
|
||||||
for (ConnectionListener listener : connection.connectionListeners) {
|
for (ConnectionListener listener : connection.connectionListeners) {
|
||||||
listener.reconnectionFailed(e);
|
listener.reconnectionFailed(e);
|
||||||
|
|
|
@ -108,6 +108,8 @@ public class VCard extends IQ {
|
||||||
private String firstName;
|
private String firstName;
|
||||||
private String lastName;
|
private String lastName;
|
||||||
private String middleName;
|
private String middleName;
|
||||||
|
private String prefix;
|
||||||
|
private String suffix;
|
||||||
|
|
||||||
private String emailHome;
|
private String emailHome;
|
||||||
private String emailWork;
|
private String emailWork;
|
||||||
|
@ -198,6 +200,24 @@ public class VCard extends IQ {
|
||||||
updateFN();
|
updateFN();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getPrefix() {
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrefix(String prefix) {
|
||||||
|
this.prefix = prefix;
|
||||||
|
updateFN();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSuffix() {
|
||||||
|
return suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSuffix(String suffix) {
|
||||||
|
this.suffix = suffix;
|
||||||
|
updateFN();
|
||||||
|
}
|
||||||
|
|
||||||
public String getNickName() {
|
public String getNickName() {
|
||||||
return otherSimpleFields.get("NICKNAME");
|
return otherSimpleFields.get("NICKNAME");
|
||||||
}
|
}
|
||||||
|
@ -572,6 +592,8 @@ public class VCard extends IQ {
|
||||||
xml.optElement("FAMILY", lastName);
|
xml.optElement("FAMILY", lastName);
|
||||||
xml.optElement("GIVEN", firstName);
|
xml.optElement("GIVEN", firstName);
|
||||||
xml.optElement("MIDDLE", middleName);
|
xml.optElement("MIDDLE", middleName);
|
||||||
|
xml.optElement("PREFIX", prefix);
|
||||||
|
xml.optElement("SUFFIX", suffix);
|
||||||
xml.closeElement("N");
|
xml.closeElement("N");
|
||||||
}
|
}
|
||||||
if (hasOrganizationFields()) {
|
if (hasOrganizationFields()) {
|
||||||
|
@ -696,7 +718,8 @@ public class VCard extends IQ {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasNameField() {
|
private boolean hasNameField() {
|
||||||
return firstName != null || lastName != null || middleName != null;
|
return firstName != null || lastName != null || middleName != null
|
||||||
|
|| prefix != null || suffix != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasOrganizationFields() {
|
private boolean hasOrganizationFields() {
|
||||||
|
|
|
@ -284,6 +284,12 @@ public class VCardProvider extends IQProvider<VCard> {
|
||||||
case "MIDDLE":
|
case "MIDDLE":
|
||||||
vCard.setMiddleName(parser.nextText());
|
vCard.setMiddleName(parser.nextText());
|
||||||
break;
|
break;
|
||||||
|
case "PREFIX":
|
||||||
|
vCard.setPrefix(parser.nextText());
|
||||||
|
break;
|
||||||
|
case "SUFFIX":
|
||||||
|
vCard.setSuffix(parser.nextText());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ public class VCardTest extends InitExtensions {
|
||||||
+ "<FAMILY>Name</FAMILY>"
|
+ "<FAMILY>Name</FAMILY>"
|
||||||
+ "<GIVEN>User</GIVEN>"
|
+ "<GIVEN>User</GIVEN>"
|
||||||
+ "<MIDDLE>PJ</MIDDLE>"
|
+ "<MIDDLE>PJ</MIDDLE>"
|
||||||
|
+ "<PREFIX>Mr.</PREFIX>"
|
||||||
|
+ "<SUFFIX>III</SUFFIX>"
|
||||||
+ "</N>"
|
+ "</N>"
|
||||||
+ "<NICKNAME>User dude</NICKNAME>"
|
+ "<NICKNAME>User dude</NICKNAME>"
|
||||||
+ "<URL>http://www.igniterealtime.org</URL>"
|
+ "<URL>http://www.igniterealtime.org</URL>"
|
||||||
|
@ -92,6 +94,8 @@ public class VCardTest extends InitExtensions {
|
||||||
assertEquals("Name", vCard.getLastName());
|
assertEquals("Name", vCard.getLastName());
|
||||||
assertEquals("PJ", vCard.getMiddleName());
|
assertEquals("PJ", vCard.getMiddleName());
|
||||||
assertEquals("User dude", vCard.getNickName());
|
assertEquals("User dude", vCard.getNickName());
|
||||||
|
assertEquals("Mr.", vCard.getPrefix());
|
||||||
|
assertEquals("III", vCard.getSuffix());
|
||||||
|
|
||||||
assertEquals("Programmer & tester", vCard.getField("TITLE"));
|
assertEquals("Programmer & tester", vCard.getField("TITLE"));
|
||||||
assertEquals("Bug fixer", vCard.getField("ROLE"));
|
assertEquals("Bug fixer", vCard.getField("ROLE"));
|
||||||
|
|
|
@ -846,12 +846,10 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.getSecurityMode() == ConnectionConfiguration.SecurityMode.disabled) {
|
if (config.getSecurityMode() != ConnectionConfiguration.SecurityMode.disabled) {
|
||||||
// Do not secure the connection using TLS since TLS was disabled
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
send(new StartTls());
|
send(new StartTls());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// If TLS is required but the server doesn't offer it, disconnect
|
// If TLS is required but the server doesn't offer it, disconnect
|
||||||
// from the server and throw an error. First check if we've already negotiated TLS
|
// from the server and throw an error. First check if we've already negotiated TLS
|
||||||
// and are secure, however (features get parsed a second time after TLS is established).
|
// and are secure, however (features get parsed a second time after TLS is established).
|
||||||
|
|
Loading…
Reference in a new issue