曹妃甸核酸检测平台.apk(点击下载) / ServiceDiscoveryManager.java


package asmack.org.jivesoftware.smackx;

import asmack.org.jivesoftware.smack.Connection;
import asmack.org.jivesoftware.smack.ConnectionCreationListener;
import asmack.org.jivesoftware.smack.ConnectionListener;
import asmack.org.jivesoftware.smack.PacketCollector;
import asmack.org.jivesoftware.smack.PacketInterceptor;
import asmack.org.jivesoftware.smack.PacketListener;
import asmack.org.jivesoftware.smack.SmackConfiguration;
import asmack.org.jivesoftware.smack.XMPPConnection;
import asmack.org.jivesoftware.smack.XMPPException;
import asmack.org.jivesoftware.smack.filter.PacketIDFilter;
import asmack.org.jivesoftware.smack.filter.PacketTypeFilter;
import asmack.org.jivesoftware.smack.packet.IQ;
import asmack.org.jivesoftware.smack.packet.Packet;
import asmack.org.jivesoftware.smack.packet.Presence;
import asmack.org.jivesoftware.smack.packet.XMPPError;
import asmack.org.jivesoftware.smackx.packet.CapsExtension;
import asmack.org.jivesoftware.smackx.packet.DataForm;
import asmack.org.jivesoftware.smackx.packet.DiscoverInfo;
import asmack.org.jivesoftware.smackx.packet.DiscoverItems;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class ServiceDiscoveryManager {
    private static boolean cacheNonCaps = true;
    private static String entityNode = "http://www.igniterealtime.org/projects/smack/";
    private static String identityName = "Smack";
    private static String identityType = "pc";
    private static Map<Connection, ServiceDiscoveryManager> instances = new ConcurrentHashMap();
    private EntityCapsManager capsManager;
    private Connection connection;
    private String currentCapsVersion = null;
    private DataForm extendedInfo = null;
    private final List<String> features = new ArrayList();
    private Map<String, NodeInformationProvider> nodeInformationProviders = new ConcurrentHashMap();
    private Map<String, DiscoverInfo> nonCapsCache = new ConcurrentHashMap();
    private boolean sendPresence = false;

    private class CapsPresenceRenewer implements CapsVerListener {
        private CapsPresenceRenewer() {
        }

        /* synthetic */ CapsPresenceRenewer(ServiceDiscoveryManager serviceDiscoveryManager, CapsPresenceRenewer capsPresenceRenewer) {
            this();
        }

        @Override // asmack.org.jivesoftware.smackx.CapsVerListener
        public void capsVerUpdated(String str) {
            if (!((XMPPConnection) ServiceDiscoveryManager.this.connection).isAuthenticated()) {
                return;
            }
            if (((XMPPConnection) ServiceDiscoveryManager.this.connection).isSendPresence() || ServiceDiscoveryManager.this.isSendPresence()) {
                ServiceDiscoveryManager.this.connection.sendPacket(new Presence(Presence.Type.available));
            }
        }
    }

    static {
        Connection.addConnectionCreationListener(new ConnectionCreationListener() {
            /* class asmack.org.jivesoftware.smackx.ServiceDiscoveryManager.AnonymousClass1 */

            @Override // asmack.org.jivesoftware.smack.ConnectionCreationListener
            public void connectionCreated(Connection connection) {
                new ServiceDiscoveryManager(connection);
            }
        });
    }

    public ServiceDiscoveryManager(Connection connection2) {
        this.connection = connection2;
        if (connection2 instanceof XMPPConnection) {
            setEntityCapsManager(new EntityCapsManager());
            this.capsManager.addCapsVerListener(new CapsPresenceRenewer(this, null));
        }
        renewEntityCapsVersion();
        init();
    }

    public static boolean canPublishItems(DiscoverInfo discoverInfo) {
        return discoverInfo.containsFeature("http://jabber.org/protocol/disco#publish");
    }

    private DiscoverInfo cloneDiscoverInfo(DiscoverInfo discoverInfo) {
        return discoverInfo.clone();
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private String getEntityCapsVersion() {
        EntityCapsManager entityCapsManager = this.capsManager;
        if (entityCapsManager != null) {
            return entityCapsManager.getCapsVersion();
        }
        return null;
    }

    public static String getIdentityName() {
        return identityName;
    }

    public static String getIdentityType() {
        return identityType;
    }

    public static ServiceDiscoveryManager getInstanceFor(Connection connection2) {
        return instances.get(connection2);
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private NodeInformationProvider getNodeInformationProvider(String str) {
        if (str == null) {
            return null;
        }
        return this.nodeInformationProviders.get(str);
    }

    private void init() {
        instances.put(this.connection, this);
        this.connection.addConnectionListener(new ConnectionListener() {
            /* class asmack.org.jivesoftware.smackx.ServiceDiscoveryManager.AnonymousClass2 */

            @Override // asmack.org.jivesoftware.smack.ConnectionListener
            public void connectionClosed() {
                ServiceDiscoveryManager.instances.remove(ServiceDiscoveryManager.this.connection);
            }

            @Override // asmack.org.jivesoftware.smack.ConnectionListener
            public void connectionClosedOnError(Exception exc) {
            }

            @Override // asmack.org.jivesoftware.smack.ConnectionListener
            public void reconnectingIn(int i) {
            }

            @Override // asmack.org.jivesoftware.smack.ConnectionListener
            public void reconnectionFailed(Exception exc) {
            }

            @Override // asmack.org.jivesoftware.smack.ConnectionListener
            public void reconnectionSuccessful() {
            }
        });
        PacketTypeFilter packetTypeFilter = new PacketTypeFilter(Presence.class);
        this.connection.addPacketInterceptor(new PacketInterceptor() {
            /* class asmack.org.jivesoftware.smackx.ServiceDiscoveryManager.AnonymousClass3 */

            @Override // asmack.org.jivesoftware.smack.PacketInterceptor
            public void interceptPacket(Packet packet) {
                if (ServiceDiscoveryManager.this.capsManager != null) {
                    packet.addExtension(new CapsExtension(ServiceDiscoveryManager.this.capsManager.getNode(), ServiceDiscoveryManager.this.getEntityCapsVersion(), EntityCapsManager.HASH_METHOD));
                }
            }
        }, packetTypeFilter);
        PacketTypeFilter packetTypeFilter2 = new PacketTypeFilter(DiscoverItems.class);
        this.connection.addPacketListener(new PacketListener() {
            /* class asmack.org.jivesoftware.smackx.ServiceDiscoveryManager.AnonymousClass4 */

            @Override // asmack.org.jivesoftware.smack.PacketListener
            public void processPacket(Packet packet) {
                DiscoverItems discoverItems = (DiscoverItems) packet;
                if (discoverItems != null && discoverItems.getType() == IQ.Type.GET) {
                    DiscoverItems discoverItems2 = new DiscoverItems();
                    discoverItems2.setType(IQ.Type.RESULT);
                    discoverItems2.setTo(discoverItems.getFrom());
                    discoverItems2.setPacketID(discoverItems.getPacketID());
                    discoverItems2.setNode(discoverItems.getNode());
                    NodeInformationProvider nodeInformationProvider = ServiceDiscoveryManager.this.getNodeInformationProvider(discoverItems.getNode());
                    if (nodeInformationProvider != null) {
                        List<DiscoverItems.Item> nodeItems = nodeInformationProvider.getNodeItems();
                        if (nodeItems != null) {
                            for (DiscoverItems.Item item : nodeItems) {
                                discoverItems2.addItem(item);
                            }
                        }
                    } else if (discoverItems.getNode() != null) {
                        discoverItems2.setType(IQ.Type.ERROR);
                        discoverItems2.setError(new XMPPError(XMPPError.Condition.item_not_found));
                    }
                    ServiceDiscoveryManager.this.connection.sendPacket(discoverItems2);
                }
            }
        }, packetTypeFilter2);
        PacketTypeFilter packetTypeFilter3 = new PacketTypeFilter(DiscoverInfo.class);
        this.connection.addPacketListener(new PacketListener() {
            /* class asmack.org.jivesoftware.smackx.ServiceDiscoveryManager.AnonymousClass5 */

            @Override // asmack.org.jivesoftware.smack.PacketListener
            public void processPacket(Packet packet) {
                DiscoverInfo discoverInfo = (DiscoverInfo) packet;
                if (discoverInfo != null && discoverInfo.getType() == IQ.Type.GET) {
                    DiscoverInfo discoverInfo2 = new DiscoverInfo();
                    discoverInfo2.setType(IQ.Type.RESULT);
                    discoverInfo2.setTo(discoverInfo.getFrom());
                    discoverInfo2.setPacketID(discoverInfo.getPacketID());
                    discoverInfo2.setNode(discoverInfo.getNode());
                    if (!(discoverInfo.getNode() == null || ServiceDiscoveryManager.this.capsManager == null)) {
                        if (!(String.valueOf(ServiceDiscoveryManager.this.capsManager.getNode()) + "#" + ServiceDiscoveryManager.this.getEntityCapsVersion()).equals(discoverInfo.getNode())) {
                            NodeInformationProvider nodeInformationProvider = ServiceDiscoveryManager.this.getNodeInformationProvider(discoverInfo.getNode());
                            if (nodeInformationProvider != null) {
                                List<String> nodeFeatures = nodeInformationProvider.getNodeFeatures();
                                if (nodeFeatures != null) {
                                    for (String str : nodeFeatures) {
                                        discoverInfo2.addFeature(str);
                                    }
                                }
                                List<DiscoverInfo.Identity> nodeIdentities = nodeInformationProvider.getNodeIdentities();
                                if (nodeIdentities != null) {
                                    for (DiscoverInfo.Identity identity : nodeIdentities) {
                                        discoverInfo2.addIdentity(identity);
                                    }
                                }
                            } else {
                                discoverInfo2.setType(IQ.Type.ERROR);
                                discoverInfo2.setError(new XMPPError(XMPPError.Condition.item_not_found));
                            }
                            ServiceDiscoveryManager.this.connection.sendPacket(discoverInfo2);
                        }
                    }
                    ServiceDiscoveryManager.this.addDiscoverInfoTo(discoverInfo2);
                    ServiceDiscoveryManager.this.connection.sendPacket(discoverInfo2);
                }
            }
        }, packetTypeFilter3);
    }

    public static boolean isNonCapsCachingEnabled() {
        return cacheNonCaps;
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private boolean isSendPresence() {
        return this.sendPresence;
    }

    private void renewEntityCapsVersion() {
        EntityCapsManager entityCapsManager;
        if ((this.connection instanceof XMPPConnection) && (entityCapsManager = this.capsManager) != null) {
            entityCapsManager.calculateEntityCapsVersion(getOwnDiscoverInfo(), identityType, identityName, this.features, this.extendedInfo);
        }
    }

    public static void setIdentityName(String str) {
        identityName = str;
    }

    public static void setIdentityType(String str) {
        identityType = str;
    }

    public static void setNonCapsCaching(boolean z) {
        cacheNonCaps = true;
    }

    private void setSendPresence() {
        this.sendPresence = true;
    }

    public void addDiscoverInfoTo(DiscoverInfo discoverInfo) {
        DiscoverInfo.Identity identity = new DiscoverInfo.Identity("client", getIdentityName());
        identity.setType(getIdentityType());
        discoverInfo.addIdentity(identity);
        synchronized (this.features) {
            discoverInfo.addFeature(CapsExtension.XMLNS);
            Iterator<String> features2 = getFeatures();
            while (features2.hasNext()) {
                discoverInfo.addFeature(features2.next());
            }
            if (this.extendedInfo != null) {
                discoverInfo.addExtension(this.extendedInfo);
            }
        }
    }

    public void addFeature(String str) {
        synchronized (this.features) {
            this.features.add(str);
            renewEntityCapsVersion();
        }
    }

    public boolean canPublishItems(String str) throws XMPPException {
        return canPublishItems(discoverInfo(str));
    }

    public DiscoverInfo discoverInfo(String str) throws XMPPException {
        DiscoverInfo discoverInfoByCaps = discoverInfoByCaps(str);
        if (discoverInfoByCaps != null) {
            return discoverInfoByCaps;
        }
        String str2 = null;
        EntityCapsManager entityCapsManager = this.capsManager;
        if (entityCapsManager != null) {
            str2 = entityCapsManager.getNodeVersionByUser(str);
        }
        if (cacheNonCaps && str2 == null && this.nonCapsCache.containsKey(str)) {
            return this.nonCapsCache.get(str);
        }
        DiscoverInfo discoverInfo = discoverInfo(str, str2);
        if (str2 != null && this.capsManager != null) {
            EntityCapsManager.addDiscoverInfoByNode(str2, discoverInfo);
        } else if (cacheNonCaps && str2 == null) {
            this.nonCapsCache.put(str, discoverInfo);
        }
        return discoverInfo;
    }

    public DiscoverInfo discoverInfo(String str, String str2) throws XMPPException {
        DiscoverInfo discoverInfo = new DiscoverInfo();
        discoverInfo.setType(IQ.Type.GET);
        discoverInfo.setTo(str);
        discoverInfo.setNode(str2);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(discoverInfo.getPacketID()));
        this.connection.sendPacket(discoverInfo);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from the server.");
        } else if (iq.getType() != IQ.Type.ERROR) {
            return (DiscoverInfo) iq;
        } else {
            throw new XMPPException(iq.getError());
        }
    }

    public DiscoverInfo discoverInfoByCaps(String str) throws XMPPException {
        DiscoverInfo discoverInfoByUser = this.capsManager.getDiscoverInfoByUser(str);
        if (discoverInfoByUser == null) {
            return null;
        }
        DiscoverInfo cloneDiscoverInfo = cloneDiscoverInfo(discoverInfoByUser);
        cloneDiscoverInfo.setFrom(str);
        return cloneDiscoverInfo;
    }

    public DiscoverItems discoverItems(String str) throws XMPPException {
        return discoverItems(str, null);
    }

    public DiscoverItems discoverItems(String str, String str2) throws XMPPException {
        DiscoverItems discoverItems = new DiscoverItems();
        discoverItems.setType(IQ.Type.GET);
        discoverItems.setTo(str);
        discoverItems.setNode(str2);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(discoverItems.getPacketID()));
        this.connection.sendPacket(discoverItems);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from the server.");
        } else if (iq.getType() != IQ.Type.ERROR) {
            return (DiscoverItems) iq;
        } else {
            throw new XMPPException(iq.getError());
        }
    }

    public EntityCapsManager getEntityCapsManager() {
        return this.capsManager;
    }

    public Iterator<String> getFeatures() {
        Iterator<String> it2;
        synchronized (this.features) {
            it2 = Collections.unmodifiableList(new ArrayList(this.features)).iterator();
        }
        return it2;
    }

    public DiscoverInfo getOwnDiscoverInfo() {
        DiscoverInfo discoverInfo = new DiscoverInfo();
        discoverInfo.setType(IQ.Type.RESULT);
        discoverInfo.setNode(String.valueOf(this.capsManager.getNode()) + "#" + getEntityCapsVersion());
        addDiscoverInfoTo(discoverInfo);
        return discoverInfo;
    }

    public boolean includesFeature(String str) {
        boolean contains;
        synchronized (this.features) {
            contains = this.features.contains(str);
        }
        return contains;
    }

    public void publishItems(String str, DiscoverItems discoverItems) throws XMPPException {
        publishItems(str, null, discoverItems);
    }

    public void publishItems(String str, String str2, DiscoverItems discoverItems) throws XMPPException {
        discoverItems.setType(IQ.Type.SET);
        discoverItems.setTo(str);
        discoverItems.setNode(str2);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(discoverItems.getPacketID()));
        this.connection.sendPacket(discoverItems);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from the server.");
        } else if (iq.getType() == IQ.Type.ERROR) {
            throw new XMPPException(iq.getError());
        }
    }

    public void removeExtendedInfo() {
        this.extendedInfo = null;
        renewEntityCapsVersion();
    }

    public void removeFeature(String str) {
        synchronized (this.features) {
            this.features.remove(str);
            renewEntityCapsVersion();
        }
    }

    public void removeNodeInformationProvider(String str) {
        this.nodeInformationProviders.remove(str);
    }

    public void setEntityCapsManager(EntityCapsManager entityCapsManager) {
        this.capsManager = entityCapsManager;
        if (!(this.connection.getCapsNode() == null || this.connection.getHost() == null)) {
            this.capsManager.addUserCapsNode(this.connection.getHost(), this.connection.getCapsNode());
        }
        this.capsManager.addPacketListener(this.connection);
    }

    public void setExtendedInfo(DataForm dataForm) {
        this.extendedInfo = dataForm;
        renewEntityCapsVersion();
    }

    public void setNodeInformationProvider(String str, NodeInformationProvider nodeInformationProvider) {
        this.nodeInformationProviders.put(str, nodeInformationProvider);
    }
}