package io.grpc.internal; import com.google.common.base.Verify; import io.grpc.internal.DnsNameResolver; import java.util.ArrayList; import java.util.Collections; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes6.dex */ public final class JndiResourceResolverFactory implements DnsNameResolver.ResourceResolverFactory { private static final Throwable JNDI_UNAVAILABILITY_CAUSE = initJndi(); /* loaded from: classes6.dex */ interface RecordFetcher { List getAllRecords(String str, String str2) throws NamingException; } private static Throwable initJndi() { try { Class.forName("javax.naming.directory.InitialDirContext"); Class.forName("com.sun.jndi.dns.DnsContextFactory"); return null; } catch (ClassNotFoundException e) { return e; } catch (Error e2) { return e2; } catch (RuntimeException e3) { return e3; } } @Override // io.grpc.internal.DnsNameResolver.ResourceResolverFactory public final DnsNameResolver.ResourceResolver newResourceResolver() { if (unavailabilityCause() != null) { return null; } return new JndiResourceResolver(new JndiRecordFetcher()); } /* loaded from: classes6.dex */ static final class JndiResourceResolver implements DnsNameResolver.ResourceResolver { static final boolean $assertionsDisabled = false; private static final Logger logger = Logger.getLogger(JndiResourceResolver.class.getName()); private static final Pattern whitespace = Pattern.compile("\\s+"); private final RecordFetcher recordFetcher; public JndiResourceResolver(RecordFetcher recordFetcher) { this.recordFetcher = recordFetcher; } @Override // io.grpc.internal.DnsNameResolver.ResourceResolver public final List resolveTxt(String str) throws NamingException { Logger logger2 = logger; if (logger2.isLoggable(Level.FINER)) { logger2.log(Level.FINER, "About to query TXT records for {0}", new Object[]{str}); } List allRecords = this.recordFetcher.getAllRecords("TXT", "dns:///".concat(String.valueOf(str))); if (logger2.isLoggable(Level.FINER)) { logger2.log(Level.FINER, "Found {0} TXT records", new Object[]{Integer.valueOf(allRecords.size())}); } ArrayList arrayList = new ArrayList(allRecords.size()); Iterator it = allRecords.iterator(); while (it.hasNext()) { arrayList.add(unquote(it.next())); } return Collections.unmodifiableList(arrayList); } @Override // io.grpc.internal.DnsNameResolver.ResourceResolver public final List resolveSrv(String str) throws Exception { String[] split; Logger logger2 = logger; if (logger2.isLoggable(Level.FINER)) { logger2.log(Level.FINER, "About to query SRV records for {0}", new Object[]{str}); } List allRecords = this.recordFetcher.getAllRecords("SRV", "dns:///".concat(String.valueOf(str))); if (logger2.isLoggable(Level.FINER)) { logger2.log(Level.FINER, "Found {0} SRV records", new Object[]{Integer.valueOf(allRecords.size())}); } ArrayList arrayList = new ArrayList(allRecords.size()); Level level = Level.WARNING; RuntimeException runtimeException = null; for (String str2 : allRecords) { try { split = whitespace.split(str2); Verify.verify(split.length == 4, "Bad SRV Record: %s", str2); } catch (RuntimeException e) { logger.log(level, "Failed to construct SRV record ".concat(String.valueOf(str2)), (Throwable) e); if (runtimeException == null) { level = Level.FINE; runtimeException = e; } } if (!split[3].endsWith(".")) { StringBuilder sb = new StringBuilder(); sb.append("Returned SRV host does not end in period: "); sb.append(split[3]); throw new RuntimeException(sb.toString()); break; } arrayList.add(new DnsNameResolver.SrvRecord(split[3], Integer.parseInt(split[2]))); } if (arrayList.isEmpty() && runtimeException != null) { throw runtimeException; } return Collections.unmodifiableList(arrayList); } static String unquote(String str) { StringBuilder sb = new StringBuilder(str.length()); int i = 0; boolean z = false; while (i < str.length()) { char charAt = str.charAt(i); if (z) { if (charAt == '\"') { z = false; } else { if (charAt == '\\') { i++; charAt = str.charAt(i); } sb.append(charAt); } } else if (charAt != ' ') { if (charAt == '\"') { z = true; } sb.append(charAt); } i++; } return sb.toString(); } } /* loaded from: classes6.dex */ static final class JndiRecordFetcher implements RecordFetcher { static final boolean $assertionsDisabled = false; JndiRecordFetcher() { } @Override // io.grpc.internal.JndiResourceResolverFactory.RecordFetcher public final List getAllRecords(String str, String str2) throws NamingException { checkAvailable(); String[] strArr = {str}; ArrayList arrayList = new ArrayList(); Hashtable hashtable = new Hashtable(); hashtable.put("com.sun.jndi.ldap.connect.timeout", "5000"); hashtable.put("com.sun.jndi.ldap.read.timeout", "5000"); InitialDirContext initialDirContext = new InitialDirContext(hashtable); try { NamingEnumeration all = initialDirContext.getAttributes(str2, strArr).getAll(); while (all.hasMore()) { try { NamingEnumeration all2 = ((Attribute) all.next()).getAll(); while (all2.hasMore()) { try { arrayList.add(String.valueOf(all2.next())); } catch (NamingException e) { closeThenThrow((NamingEnumeration) all2, e); } } all2.close(); } catch (NamingException e2) { closeThenThrow((NamingEnumeration) all, e2); } } all.close(); } catch (NamingException e3) { closeThenThrow((DirContext) initialDirContext, e3); } initialDirContext.close(); return arrayList; } private static void closeThenThrow(NamingEnumeration namingEnumeration, NamingException namingException) throws NamingException { try { namingEnumeration.close(); throw namingException; } catch (NamingException unused) { throw namingException; } } private static void closeThenThrow(DirContext dirContext, NamingException namingException) throws NamingException { try { dirContext.close(); throw namingException; } catch (NamingException unused) { throw namingException; } } private static void checkAvailable() { if (JndiResourceResolverFactory.JNDI_UNAVAILABILITY_CAUSE != null) { throw new UnsupportedOperationException("JNDI is not currently available", JndiResourceResolverFactory.JNDI_UNAVAILABILITY_CAUSE); } } } @Override // io.grpc.internal.DnsNameResolver.ResourceResolverFactory public final Throwable unavailabilityCause() { return JNDI_UNAVAILABILITY_CAUSE; } }