1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.newsclub.net.unix;
19
20 import java.io.File;
21 import java.io.FileNotFoundException;
22 import java.net.InetAddress;
23 import java.net.SocketAddress;
24 import java.net.SocketException;
25 import java.net.URI;
26 import java.nio.ByteBuffer;
27 import java.util.Arrays;
28 import java.util.Collections;
29 import java.util.Objects;
30 import java.util.Set;
31
32 import org.newsclub.net.unix.pool.ObjectPool.Lease;
33
34
35
36
37
38
39 public final class AFGenericSocketAddress extends AFSocketAddress {
40 private static final long serialVersionUID = 1L;
41
42 private static AFAddressFamily<AFGenericSocketAddress> family;
43 private static final String SELECTOR_PROVIDER_CLASS =
44 "org.newsclub.net.unix.generic.AFGenericSelectorProvider";
45
46 private AFGenericSocketAddress(int port, final byte[] socketAddress,
47 Lease<ByteBuffer> nativeAddress) throws SocketException {
48 super(port, socketAddress, nativeAddress, addressFamily());
49 }
50
51 private static AFGenericSocketAddress newAFSocketAddress(int port, final byte[] socketAddress,
52 Lease<ByteBuffer> nativeAddress) throws SocketException {
53 return newDeserializedAFSocketAddress(port, socketAddress, nativeAddress, addressFamily(),
54 AFGenericSocketAddress::new);
55 }
56
57
58
59
60
61
62
63
64
65
66
67 public static AFGenericSocketAddress unwrap(InetAddress address, int port)
68 throws SocketException {
69 return AFSocketAddress.unwrap(address, port, addressFamily());
70 }
71
72
73
74
75
76
77
78
79
80
81
82
83 public static AFGenericSocketAddress unwrap(String hostname, int port) throws SocketException {
84 return AFSocketAddress.unwrap(hostname, port, addressFamily());
85 }
86
87
88
89
90
91
92
93
94
95 public static AFGenericSocketAddress unwrap(SocketAddress address) throws SocketException {
96 Objects.requireNonNull(address);
97 if (!isSupportedAddress(address)) {
98 throw new SocketException("Unsupported address");
99 }
100 return (AFGenericSocketAddress) address;
101 }
102
103 @Override
104 public String toString() {
105 int port = getPort();
106
107 return getClass().getName() + "[" + (port == 0 ? "" : "port=" + port + ";") + "bytes=" + Arrays
108 .toString(getBytes()) + "]";
109 }
110
111
112
113
114
115
116
117
118
119 public byte[] toBytes() {
120 byte[] bytes = getBytes();
121 return Arrays.copyOf(bytes, bytes.length);
122 }
123
124 @Override
125 public boolean hasFilename() {
126 return false;
127 }
128
129 @Override
130 public File getFile() throws FileNotFoundException {
131 throw new FileNotFoundException("no file");
132 }
133
134
135
136
137
138
139
140
141
142 public static boolean isSupportedAddress(InetAddress addr) {
143 return AFSocketAddress.isSupportedAddress(addr, addressFamily());
144 }
145
146
147
148
149
150
151
152
153 public static boolean isSupportedAddress(SocketAddress addr) {
154 return (addr instanceof AFGenericSocketAddress);
155 }
156
157
158
159
160
161
162 @SuppressWarnings("null")
163 public static synchronized AFAddressFamily<AFGenericSocketAddress> addressFamily() {
164 if (family == null) {
165 family = AFAddressFamily.registerAddressFamily("generic",
166 AFGenericSocketAddress.class, new AFSocketAddressConfig<AFGenericSocketAddress>() {
167
168 private final AFSocketAddressConstructor<AFGenericSocketAddress> addrConstr =
169 isUseDeserializationForInit() ? AFGenericSocketAddress::newAFSocketAddress
170 : AFGenericSocketAddress::new;
171
172 @Override
173 protected AFGenericSocketAddress parseURI(URI u, int port) throws SocketException {
174 return AFGenericSocketAddress.of(u, port);
175 }
176
177 @Override
178 protected AFSocketAddressConstructor<AFGenericSocketAddress> addressConstructor() {
179 return addrConstr;
180 }
181
182 @Override
183 protected String selectorProviderClassname() {
184 return SELECTOR_PROVIDER_CLASS;
185 }
186
187 @Override
188 protected Set<String> uriSchemes() {
189 return Collections.emptySet();
190 }
191 });
192 try {
193 Class.forName(SELECTOR_PROVIDER_CLASS);
194 } catch (ClassNotFoundException e) {
195
196 }
197 }
198 return family;
199 }
200
201
202
203
204
205
206
207
208 @SuppressWarnings("PMD.ShortMethodName")
209 public static AFGenericSocketAddress of(URI uri) throws SocketException {
210 return of(uri, -1);
211 }
212
213
214
215
216
217
218
219
220
221 @SuppressWarnings({"PMD.ShortMethodName"})
222 public static AFGenericSocketAddress of(URI uri, int overridePort) throws SocketException {
223 throw new SocketException("Unsupported");
224 }
225 }