mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-25 15:52:06 +01:00
Merge branch '4.0'
Conflicts: build.gradle smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java
This commit is contained in:
commit
3e18a23e47
4 changed files with 46 additions and 29 deletions
|
@ -214,6 +214,12 @@ subprojects {
|
|||
}
|
||||
}
|
||||
|
||||
subprojects*.jar {
|
||||
manifest {
|
||||
from sharedManifest
|
||||
}
|
||||
}
|
||||
|
||||
def getGitCommit() {
|
||||
def dotGit = new File("$projectDir/.git")
|
||||
if (!dotGit.isDirectory()) return 'non-git build'
|
||||
|
|
|
@ -29,6 +29,7 @@ public enum SASLError {
|
|||
invalid_authzid,
|
||||
invalid_mechanism,
|
||||
malformed_request,
|
||||
mechanism_too_weak,
|
||||
not_authorized,
|
||||
temporary_auth_failure;
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ import org.jxmpp.util.XmppStringUtils;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* A MultipleRecipientManager allows to send packets to multiple recipients by making use of
|
||||
|
@ -45,6 +47,8 @@ import java.util.List;
|
|||
*/
|
||||
public class MultipleRecipientManager {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(MultipleRecipientManager.class.getName());
|
||||
|
||||
/**
|
||||
* Create a cache to hold the 100 most recently accessed elements for a period of
|
||||
* 24 hours.
|
||||
|
@ -204,7 +208,7 @@ public class MultipleRecipientManager {
|
|||
*/
|
||||
public static MultipleRecipientInfo getMultipleRecipientInfo(Packet packet) {
|
||||
MultipleAddresses extension = (MultipleAddresses) packet
|
||||
.getExtension("addresses", "http://jabber.org/protocol/address");
|
||||
.getExtension(MultipleAddresses.ELEMENT, MultipleAddresses.NAMESPACE);
|
||||
return extension == null ? null : new MultipleRecipientInfo(extension);
|
||||
}
|
||||
|
||||
|
@ -294,34 +298,37 @@ public class MultipleRecipientManager {
|
|||
String serviceName = connection.getServiceName();
|
||||
String serviceAddress = (String) services.get(serviceName);
|
||||
if (serviceAddress == null) {
|
||||
synchronized (services) {
|
||||
serviceAddress = (String) services.get(serviceName);
|
||||
if (serviceAddress == null) {
|
||||
|
||||
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
|
||||
// Send the disco packet to the server itself
|
||||
DiscoverInfo info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo(
|
||||
serviceName);
|
||||
// Check if the server supports JEP-33
|
||||
if (info.containsFeature("http://jabber.org/protocol/address")) {
|
||||
DiscoverInfo info = sdm.discoverInfo(serviceName);
|
||||
// Check if the server supports XEP-33
|
||||
if (info.containsFeature(MultipleAddresses.NAMESPACE)) {
|
||||
serviceAddress = serviceName;
|
||||
}
|
||||
else {
|
||||
// Get the disco items and send the disco packet to each server item
|
||||
DiscoverItems items = ServiceDiscoveryManager.getInstanceFor(connection).discoverItems(
|
||||
serviceName);
|
||||
DiscoverItems items = sdm.discoverItems(serviceName);
|
||||
for (DiscoverItems.Item item : items.getItems()) {
|
||||
info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo(
|
||||
item.getEntityID(), item.getNode());
|
||||
if (info.containsFeature("http://jabber.org/protocol/address")) {
|
||||
try {
|
||||
info = sdm.discoverInfo(item.getEntityID(), item.getNode());
|
||||
}
|
||||
catch (XMPPErrorException|NoResponseException e) {
|
||||
// Don't throw this exceptions if one of the server's items fail
|
||||
LOGGER.log(Level.WARNING,
|
||||
"Exception while discovering info of " + item.getEntityID()
|
||||
+ " node: " + item.getNode(), e);
|
||||
continue;
|
||||
}
|
||||
if (info.containsFeature(MultipleAddresses.NAMESPACE)) {
|
||||
serviceAddress = serviceName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Use the empty string to indicate that no service is known for this connection
|
||||
serviceAddress = serviceAddress == null ? "" : serviceAddress;
|
||||
// Cache the discovered information
|
||||
services.put(serviceName, serviceAddress == null ? "" : serviceAddress);
|
||||
}
|
||||
}
|
||||
services.put(serviceName, serviceAddress);
|
||||
}
|
||||
|
||||
return "".equals(serviceAddress) ? null : serviceAddress;
|
||||
|
|
|
@ -30,6 +30,9 @@ import java.util.List;
|
|||
*/
|
||||
public class MultipleAddresses implements PacketExtension {
|
||||
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/address";
|
||||
public static final String ELEMENT = "addresses";
|
||||
|
||||
public static final String BCC = "bcc";
|
||||
public static final String CC = "cc";
|
||||
public static final String NO_REPLY = "noreply";
|
||||
|
@ -94,17 +97,17 @@ public class MultipleAddresses implements PacketExtension {
|
|||
}
|
||||
|
||||
public String getElementName() {
|
||||
return "addresses";
|
||||
return ELEMENT;
|
||||
}
|
||||
|
||||
public String getNamespace() {
|
||||
return "http://jabber.org/protocol/address";
|
||||
return NAMESPACE;
|
||||
}
|
||||
|
||||
public String toXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<").append(getElementName());
|
||||
buf.append(" xmlns=\"").append(getNamespace()).append("\">");
|
||||
buf.append(" xmlns=\"").append(NAMESPACE).append("\">");
|
||||
// Loop through all the addresses and append them to the string buffer
|
||||
for (Iterator<Address> i = addresses.iterator(); i.hasNext();) {
|
||||
Address address = (Address) i.next();
|
||||
|
|
Loading…
Reference in a new issue