Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
JDK 11 jdk.naming.dns.jmod - Naming DNS Module
JDK 11 jdk.naming.dns.jmod is the JMOD file for JDK 11 Naming DNS module.
JDK 11 Naming DNS module compiled class files are stored in \fyicenter\jdk-11.0.1\jmods\jdk.naming.dns.jmod.
JDK 11 Naming DNS module compiled class files are also linked and stored in the \fyicenter\jdk-11.0.1\lib\modules JImage file.
JDK 11 Naming DNS module source code files are stored in \fyicenter\jdk-11.0.1\lib\src.zip\jdk.naming.dns.
You can click and view the content of each source code file in the list below.
✍: FYIcenter
⏎ com/sun/jndi/dns/DNSDatagramSocketFactory.java
/* * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package com.sun.jndi.dns; import java.io.IOException; import java.net.DatagramSocket; import java.net.ProtocolFamily; import java.net.SocketException; import java.net.InetSocketAddress; import java.nio.channels.DatagramChannel; import java.util.Objects; import java.util.Random; class DNSDatagramSocketFactory { static final int DEVIATION = 3; static final int THRESHOLD = 6; static final int BIT_DEVIATION = 2; static final int HISTORY = 32; static final int MAX_RANDOM_TRIES = 5; /** * The dynamic allocation port range (aka ephemeral ports), as configured * on the system. Use nested class for lazy evaluation. */ static final class EphemeralPortRange { private EphemeralPortRange() {} static final int LOWER = sun.net.PortConfig.getLower(); static final int UPPER = sun.net.PortConfig.getUpper(); static final int RANGE = UPPER - LOWER + 1; } // Records a subset of max {@code capacity} previously used ports static final class PortHistory { final int capacity; final int[] ports; final Random random; int index; PortHistory(int capacity, Random random) { this.random = random; this.capacity = capacity; this.ports = new int[capacity]; } // returns true if the history contains the specified port. public boolean contains(int port) { int p = 0; for (int i=0; i<capacity; i++) { if ((p = ports[i]) == 0 || p == port) break; } return p == port; } // Adds the port to the history - doesn't check whether the port // is already present. Always adds the port and always return true. public boolean add(int port) { if (ports[index] != 0) { // at max capacity // remove one port at random and store the new port there ports[random.nextInt(capacity)] = port; } else { // there's a free slot ports[index] = port; } if (++index == capacity) index = 0; return true; } // Adds the port to the history if not already present. // Return true if the port was added, false if the port was already // present. public boolean offer(int port) { if (contains(port)) return false; else return add(port); } } int lastport = 0; int suitablePortCount; int unsuitablePortCount; final ProtocolFamily family; // null (default) means dual stack final int thresholdCount; // decision point final int deviation; final Random random; final PortHistory history; DNSDatagramSocketFactory() { this(new Random()); } DNSDatagramSocketFactory(Random random) { this(Objects.requireNonNull(random), null, DEVIATION, THRESHOLD); } DNSDatagramSocketFactory(Random random, ProtocolFamily family, int deviation, int threshold) { this.random = Objects.requireNonNull(random); this.history = new PortHistory(HISTORY, random); this.family = family; this.deviation = Math.max(1, deviation); this.thresholdCount = Math.max(2, threshold); } /** * Opens a datagram socket listening to the wildcard address on a * random port. If the underlying OS supports UDP port randomization * out of the box (if binding a socket to port 0 binds it to a random * port) then the underlying OS implementation is used. Otherwise, this * method will allocate and bind a socket on a randomly selected ephemeral * port in the dynamic range. * @return A new DatagramSocket bound to a random port. * @throws SocketException if the socket cannot be created. */ public synchronized DatagramSocket open() throws SocketException { int lastseen = lastport; DatagramSocket s; boolean thresholdCrossed = unsuitablePortCount > thresholdCount; if (thresholdCrossed) { // Underlying stack does not support random UDP port out of the box. // Use our own algorithm to allocate a random UDP port s = openRandom(); if (s != null) return s; // couldn't allocate a random port: reset all counters and fall // through. unsuitablePortCount = 0; suitablePortCount = 0; lastseen = 0; } // Allocate an ephemeral port (port 0) s = openDefault(); lastport = s.getLocalPort(); if (lastseen == 0) { history.offer(lastport); return s; } thresholdCrossed = suitablePortCount > thresholdCount; boolean farEnough = Integer.bitCount(lastseen ^ lastport) > BIT_DEVIATION && Math.abs(lastport - lastseen) > deviation; boolean recycled = history.contains(lastport); boolean suitable = (thresholdCrossed || farEnough && !recycled); if (suitable && !recycled) history.add(lastport); if (suitable) { if (!thresholdCrossed) { suitablePortCount++; } else if (!farEnough || recycled) { unsuitablePortCount = 1; suitablePortCount = thresholdCount/2; } // Either the underlying stack supports random UDP port allocation, // or the new port is sufficiently distant from last port to make // it look like it is. Let's use it. return s; } // Undecided... the new port was too close. Let's allocate a random // port using our own algorithm assert !thresholdCrossed; DatagramSocket ss = openRandom(); if (ss == null) return s; unsuitablePortCount++; s.close(); return ss; } private DatagramSocket openDefault() throws SocketException { if (family != null) { try { DatagramChannel c = DatagramChannel.open(family); try { DatagramSocket s = c.socket(); s.bind(null); return s; } catch (Throwable x) { c.close(); throw x; } } catch (SocketException x) { throw x; } catch (IOException x) { SocketException e = new SocketException(x.getMessage()); e.initCause(x); throw e; } } return new DatagramSocket(); } synchronized boolean isUsingNativePortRandomization() { return unsuitablePortCount <= thresholdCount && suitablePortCount > thresholdCount; } synchronized boolean isUsingJavaPortRandomization() { return unsuitablePortCount > thresholdCount ; } synchronized boolean isUndecided() { return !isUsingJavaPortRandomization() && !isUsingNativePortRandomization(); } private DatagramSocket openRandom() { int maxtries = MAX_RANDOM_TRIES; while (maxtries-- > 0) { int port = EphemeralPortRange.LOWER + random.nextInt(EphemeralPortRange.RANGE); try { if (family != null) { DatagramChannel c = DatagramChannel.open(family); try { DatagramSocket s = c.socket(); s.bind(new InetSocketAddress(port)); return s; } catch (Throwable x) { c.close(); throw x; } } return new DatagramSocket(port); } catch (IOException x) { // try again until maxtries == 0; } } return null; } }
⏎ com/sun/jndi/dns/DNSDatagramSocketFactory.java
Or download all of them as a single archive file:
File name: jdk.naming.dns-11.0.1-src.zip File size: 45078 bytes Release date: 2018-11-04 Download
⇒ JDK 11 jdk.naming.rmi.jmod - Naming RMI Module
2020-06-21, 7827👍, 0💬
Popular Posts:
ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify ex...
io.jar is a component in iText Java library to provide input/output functionalities. iText Java libr...
How to download and install Apache XMLBeans-2.6.0.zip? If you want to try the XMLBeans Java library,...
JDK 17 java.base.jmod is the JMOD file for JDK 17 Base module. JDK 17 Base module compiled class fil...
JDK 11 jdk.jshell.jmod is the JMOD file for JDK 11 JShell tool, which can be invoked by the "jshell"...