Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/sample/nio/multicast/MulticastAddress.java
38829 views
1
/*
2
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* - Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* - Neither the name of Oracle nor the names of its
16
* contributors may be used to endorse or promote products derived
17
* from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
/*
33
* This source code is provided to illustrate the usage of a given feature
34
* or technique and has been deliberately simplified. Additional steps
35
* required for a production-quality application, such as security checks,
36
* input validation and proper error handling, might not be present in
37
* this sample code.
38
*/
39
40
41
import java.net.InetAddress;
42
import java.net.NetworkInterface;
43
import java.net.UnknownHostException;
44
import java.net.SocketException;
45
46
/**
47
* Parses and represents a multicast address.
48
*/
49
50
class MulticastAddress {
51
private final InetAddress group;
52
private final int port;
53
private final NetworkInterface interf;
54
55
private MulticastAddress(InetAddress group, int port, NetworkInterface interf) {
56
this.group = group;
57
this.port = port;
58
this.interf = interf;
59
}
60
61
InetAddress group() {
62
return group;
63
}
64
65
int port() {
66
return port;
67
}
68
69
/**
70
* @return The network interface, may be {@code null}
71
*/
72
NetworkInterface interf() {
73
return interf;
74
}
75
76
/**
77
* Parses a string of the form "group:port[@interface]", returning
78
* a MulticastAddress representing the address
79
*/
80
static MulticastAddress parse(String s) {
81
String[] components = s.split("@");
82
if (components.length > 2)
83
throw new IllegalArgumentException("At most one '@' expected");
84
85
// get group and port
86
String target = components[0];
87
int len = components[0].length();
88
int colon = components[0].lastIndexOf(':');
89
if ((colon < 1) || (colon > (len-2)))
90
throw new IllegalArgumentException("group:port expected");
91
String groupString = target.substring(0, colon);
92
int port = -1;
93
try {
94
port = Integer.parseInt(target.substring(colon+1, len));
95
} catch (NumberFormatException x) {
96
throw new IllegalArgumentException(x);
97
}
98
99
// handle IPv6 literal address
100
if (groupString.charAt(0) == '[') {
101
len = groupString.length();
102
if (groupString.charAt(len-1) != ']')
103
throw new IllegalArgumentException("missing ']'");
104
groupString = groupString.substring(1,len-1);
105
if (groupString.length() == 0)
106
throw new IllegalArgumentException("missing IPv6 address");
107
}
108
109
// get group address
110
InetAddress group = null;
111
try {
112
group = InetAddress.getByName(groupString);
113
} catch (UnknownHostException x) {
114
throw new IllegalArgumentException(x);
115
}
116
if (!group.isMulticastAddress()) {
117
throw new IllegalArgumentException("'" + group.getHostAddress() +
118
"' is not multicast address");
119
}
120
121
// optional interface
122
NetworkInterface interf = null;
123
if (components.length == 2) {
124
try {
125
interf = NetworkInterface.getByName(components[1]);
126
} catch (SocketException x) {
127
throw new IllegalArgumentException(x);
128
}
129
if (interf == null) {
130
throw new IllegalArgumentException("'" + components[1] +
131
"' is not valid interface");
132
}
133
}
134
return new MulticastAddress(group, port, interf);
135
}
136
}
137
138