package asmack.org.jivesoftware.smack.provider; import asmack.org.jivesoftware.smack.packet.IQ; import asmack.org.jivesoftware.smack.packet.PacketExtension; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; public class ProviderManager { private static ProviderManager instance; private Map<String, Object> extensionProviders = new ConcurrentHashMap(); private Map<String, Object> iqProviders = new ConcurrentHashMap(); private Map<String, PacketProvider> packetProviders = new ConcurrentHashMap(); private ProviderManager() { initialize(); } private ClassLoader[] getClassLoaders() { ClassLoader[] classLoaderArr = {ProviderManager.class.getClassLoader(), Thread.currentThread().getContextClassLoader()}; ArrayList arrayList = new ArrayList(); for (ClassLoader classLoader : classLoaderArr) { if (classLoader != null) { arrayList.add(classLoader); } } return (ClassLoader[]) arrayList.toArray(new ClassLoader[arrayList.size()]); } public static synchronized ProviderManager getInstance() { ProviderManager providerManager; synchronized (ProviderManager.class) { if (instance == null) { instance = new ProviderManager(); } providerManager = instance; } return providerManager; } private String getProviderKey(String str, String str2) { return "<" + str + "/><" + str2 + "/>"; } public static synchronized void setInstance(ProviderManager providerManager) { synchronized (ProviderManager.class) { if (instance == null) { instance = providerManager; } else { throw new IllegalStateException("ProviderManager singleton already set"); } } } public void addExtensionProvider(String str, String str2, Object obj) { if ((obj instanceof PacketExtensionProvider) || (obj instanceof Class)) { this.extensionProviders.put(getProviderKey(str, str2), obj); return; } throw new IllegalArgumentException("Provider must be a PacketExtensionProvider or a Class instance."); } public void addIQProvider(String str, String str2, Object obj) { if ((obj instanceof IQProvider) || ((obj instanceof Class) && IQ.class.isAssignableFrom((Class) obj))) { this.iqProviders.put(getProviderKey(str, str2), obj); return; } throw new IllegalArgumentException("Provider must be an IQProvider or a Class instance."); } public void addPacketProvider(String str, PacketProvider packetProvider) { this.packetProviders.put(str, packetProvider); } public Object getExtensionProvider(String str, String str2) { return this.extensionProviders.get(getProviderKey(str, str2)); } public Collection<Object> getExtensionProviders() { return Collections.unmodifiableCollection(this.extensionProviders.values()); } public Object getIQProvider(String str, String str2) { return this.iqProviders.get(getProviderKey(str, str2)); } public Collection<Object> getIQProviders() { return Collections.unmodifiableCollection(this.iqProviders.values()); } public PacketProvider getPacketProvider(String str) { return this.packetProviders.get(str); } /* access modifiers changed from: protected */ /* JADX WARNING: Removed duplicated region for block: B:44:0x00fb A[SYNTHETIC, Splitter:B:44:0x00fb] */ public void initialize() { Map<String, Object> map; Object obj; Map<String, Object> map2; Object obj2; try { for (ClassLoader classLoader : getClassLoaders()) { Enumeration<URL> resources = classLoader.getResources("META-INF/smack.providers"); while (resources.hasMoreElements()) { InputStream inputStream = null; try { InputStream openStream = resources.nextElement().openStream(); XmlPullParser newPullParser = XmlPullParserFactory.newInstance().newPullParser(); newPullParser.setFeature("http://xmlpull.org/v1/doc/features.html#process-namespaces", true); newPullParser.setInput(openStream, "UTF-8"); int eventType = newPullParser.getEventType(); do { if (eventType == 2) { if (newPullParser.getName().equals("iqProvider")) { newPullParser.next(); newPullParser.next(); String nextText = newPullParser.nextText(); newPullParser.next(); newPullParser.next(); String nextText2 = newPullParser.nextText(); newPullParser.next(); newPullParser.next(); String nextText3 = newPullParser.nextText(); String providerKey = getProviderKey(nextText, nextText2); if (!this.iqProviders.containsKey(providerKey)) { try { Class<?> cls = Class.forName(nextText3); if (IQProvider.class.isAssignableFrom(cls)) { map2 = this.iqProviders; obj2 = cls.newInstance(); } else if (IQ.class.isAssignableFrom(cls)) { map2 = this.iqProviders; obj2 = cls; } map2.put(providerKey, obj2 == 1 ? 1 : 0); } catch (ClassNotFoundException e2) { e = e2; e.printStackTrace(); eventType = newPullParser.next(); if (eventType == 1) { } } } } else if (newPullParser.getName().equals("extensionProvider")) { newPullParser.next(); newPullParser.next(); String nextText4 = newPullParser.nextText(); newPullParser.next(); newPullParser.next(); String nextText5 = newPullParser.nextText(); newPullParser.next(); newPullParser.next(); String nextText6 = newPullParser.nextText(); String providerKey2 = getProviderKey(nextText4, nextText5); if (!this.extensionProviders.containsKey(providerKey2)) { try { Class<?> cls2 = Class.forName(nextText6); if (PacketExtensionProvider.class.isAssignableFrom(cls2)) { map = this.extensionProviders; obj = cls2.newInstance(); } else if (PacketExtension.class.isAssignableFrom(cls2)) { map = this.extensionProviders; obj = cls2; } map.put(providerKey2, obj == 1 ? 1 : 0); } catch (ClassNotFoundException e3) { e = e3; e.printStackTrace(); eventType = newPullParser.next(); if (eventType == 1) { } } } } } eventType = newPullParser.next(); } while (eventType == 1); } finally { try { inputStream.close(); } catch (Exception unused) { } } } } } catch (Exception e4) { e4.printStackTrace(); } } public void removeExtensionProvider(String str, String str2) { this.extensionProviders.remove(getProviderKey(str, str2)); } public void removeIQProvider(String str, String str2) { this.iqProviders.remove(getProviderKey(str, str2)); } public void removePacketProvider(String str) { this.packetProviders.remove(str); } }