Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/net/Socket/LinkLocal.java
41152 views
1
/*
2
* Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 4469866
27
* @library /test/lib
28
* @summary Connecting to a link-local IPv6 address should not
29
* causes a SocketException to be thrown.
30
* @library /test/lib
31
* @build jdk.test.lib.NetworkConfiguration
32
* jdk.test.lib.Platform
33
* @run main LinkLocal
34
* @run main/othervm -Djava.net.preferIPv4Stack=true LinkLocal
35
*/
36
37
import java.net.*;
38
import java.util.List;
39
import java.util.stream.Collectors;
40
41
import jdk.test.lib.NetworkConfiguration;
42
import jdk.test.lib.net.IPSupport;
43
44
public class LinkLocal {
45
46
static int testCount = 0;
47
static int failed = 0;
48
49
static void TcpTest(InetAddress ia) throws Exception {
50
System.out.println("**************************************");
51
testCount++;
52
System.out.println("Test " + testCount + ": TCP connect to " + ia);
53
54
/*
55
* Create ServerSocket on wildcard address and then
56
* try to connect Socket to link-local address.
57
*/
58
ServerSocket ss = new ServerSocket();
59
ss.bind(new InetSocketAddress(ia, 0));
60
61
Socket s = new Socket();
62
try {
63
s.connect(new InetSocketAddress(ia, ss.getLocalPort()));
64
65
System.out.println("Test passed - connection established.");
66
67
// connection was established so accept it
68
Socket s2 = ss.accept();
69
s2.close();
70
} catch (SocketException e) {
71
failed++;
72
System.out.println("Test failed: " + e);
73
} finally {
74
s.close();
75
ss.close();
76
}
77
}
78
79
static void UdpTest(InetAddress ia, boolean connected) throws Exception {
80
81
System.out.println("**************************************");
82
testCount++;
83
84
if (connected) {
85
System.out.println("Test " + testCount + ": UDP connect to " + ia);
86
} else {
87
System.out.println("Test " + testCount + ": UDP send to " + ia);
88
}
89
90
DatagramSocket ds1 = new DatagramSocket();
91
DatagramSocket ds2 = new DatagramSocket(0, ia);
92
93
try {
94
byte b[] = "Hello".getBytes();
95
DatagramPacket p = new DatagramPacket(b, b.length);
96
97
if (connected) {
98
ds1.connect( new InetSocketAddress(ia, ds2.getLocalPort()) );
99
System.out.println("DatagramSocket connected.");
100
} else {
101
p.setAddress(ia);
102
p.setPort(ds2.getLocalPort());
103
}
104
ds1.send(p);
105
System.out.println("Packet has been sent.");
106
107
ds2.setSoTimeout(5000);
108
ds2.receive(p);
109
System.out.println("Test passed - packet received.");
110
} catch (SocketException e) {
111
failed++;
112
System.out.println("Test failed: " + e);
113
} finally {
114
ds1.close();
115
ds2.close();
116
}
117
}
118
119
static void TestAddress(InetAddress ia) throws Exception {
120
TcpTest(ia);
121
UdpTest(ia, true); /* unconnected */
122
UdpTest(ia, false); /* connected */
123
}
124
125
public static void main(String args[]) throws Exception {
126
IPSupport.throwSkippedExceptionIfNonOperational();
127
128
/*
129
* If an argument is provided ensure that it's
130
* a link-local IPv6 address.
131
*/
132
if (args.length > 0) {
133
InetAddress ia = InetAddress.getByName(args[0]);
134
135
if ( !(ia instanceof Inet6Address) ||
136
!ia.isLinkLocalAddress()) {
137
throw new Exception(ia +
138
" is not a link-local IPv6 address");
139
}
140
141
TestAddress(ia);
142
}
143
144
/*
145
* If no argument is provided then enumerate the
146
* local addresses and run the test on each link-local
147
* IPv6 address.
148
*/
149
if (args.length == 0) {
150
List<Inet6Address> addrs = NetworkConfiguration.probe()
151
.ip6Addresses()
152
.filter(Inet6Address::isLinkLocalAddress)
153
.collect(Collectors.toList());
154
155
for (Inet6Address addr : addrs) {
156
TestAddress(addr);
157
}
158
}
159
160
/*
161
* Print results
162
*/
163
if (testCount == 0) {
164
System.out.println("No link-local IPv6 addresses - test skipped!");
165
} else {
166
System.out.println("**************************************");
167
System.out.println(testCount + " test(s) executed, " +
168
failed + " failed.");
169
if (failed > 0) {
170
throw new Exception( failed + " test(s) failed.");
171
}
172
}
173
}
174
}
175
176