1 /*
2 * Copyright (c) 2008, 2018, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
46
47 private volatile boolean invalid;
48
49 // lock used when creating or accessing blockedSet
50 private final Object stateLock = new Object();
51
52 // set of source addresses that are blocked
53 private HashSet<InetAddress> blockedSet;
54
55 private MembershipKeyImpl(MulticastChannel ch,
56 InetAddress group,
57 NetworkInterface interf,
58 InetAddress source)
59 {
60 this.ch = ch;
61 this.group = group;
62 this.interf = interf;
63 this.source = source;
64 }
65
66 /**
67 * MembershipKey will additional context for IPv4 membership
68 */
69 static class Type4 extends MembershipKeyImpl {
70 private final int groupAddress;
71 private final int interfAddress;
72 private final int sourceAddress;
73
74 Type4(MulticastChannel ch,
75 InetAddress group,
76 NetworkInterface interf,
77 InetAddress source,
78 int groupAddress,
79 int interfAddress,
80 int sourceAddress)
81 {
82 super(ch, group, interf, source);
83 this.groupAddress = groupAddress;
84 this.interfAddress = interfAddress;
85 this.sourceAddress = sourceAddress;
86 }
87
88 int groupAddress() {
89 return groupAddress;
90 }
91
92 int interfaceAddress() {
93 return interfAddress;
94 }
95
96 int source() {
97 return sourceAddress;
98 }
99 }
100
101 /**
102 * MembershipKey will additional context for IPv6 membership
103 */
104 static class Type6 extends MembershipKeyImpl {
105 private final byte[] groupAddress;
106 private final int index;
107 private final byte[] sourceAddress;
108
109 Type6(MulticastChannel ch,
110 InetAddress group,
111 NetworkInterface interf,
112 InetAddress source,
113 byte[] groupAddress,
114 int index,
115 byte[] sourceAddress)
116 {
117 super(ch, group, interf, source);
118 this.groupAddress = groupAddress;
119 this.index = index;
120 this.sourceAddress = sourceAddress;
121 }
122
123 byte[] groupAddress() {
124 return groupAddress;
125 }
126
127 int index() {
128 return index;
129 }
130
131 byte[] source() {
132 return sourceAddress;
133 }
134 }
135
136 public boolean isValid() {
137 return !invalid;
138 }
139
140 // package-private
141 void invalidate() {
142 invalid = true;
143 }
144
145 public void drop() {
146 // delegate to channel
147 ((DatagramChannelImpl)ch).drop(this);
148 }
149
150 @Override
|
1 /*
2 * Copyright (c) 2008, 2020, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
46
47 private volatile boolean invalid;
48
49 // lock used when creating or accessing blockedSet
50 private final Object stateLock = new Object();
51
52 // set of source addresses that are blocked
53 private HashSet<InetAddress> blockedSet;
54
55 private MembershipKeyImpl(MulticastChannel ch,
56 InetAddress group,
57 NetworkInterface interf,
58 InetAddress source)
59 {
60 this.ch = ch;
61 this.group = group;
62 this.interf = interf;
63 this.source = source;
64 }
65
66 int interfaceIndex() {
67 return interf.getIndex();
68 }
69
70 /**
71 * MembershipKey will additional context for IPv4 membership
72 */
73 static class Type4 extends MembershipKeyImpl {
74 private final int groupAddress;
75 private final int interfAddress;
76 private final int sourceAddress;
77
78 Type4(MulticastChannel ch,
79 InetAddress group,
80 NetworkInterface interf,
81 InetAddress source,
82 int groupAddress,
83 int interfAddress,
84 int sourceAddress)
85 {
86 super(ch, group, interf, source);
87 this.groupAddress = groupAddress;
88 this.interfAddress = interfAddress;
89 this.sourceAddress = sourceAddress;
90 }
91
92 int groupAddress() {
93 return groupAddress;
94 }
95
96 int interfaceAddress() {
97 return interfAddress;
98 }
99
100 int source() {
101 return sourceAddress;
102 }
103 }
104
105 /**
106 * MembershipKey will additional context for IPv6 membership
107 */
108 static class Type6 extends MembershipKeyImpl {
109 private final byte[] groupAddress;
110 private final byte[] sourceAddress;
111
112 Type6(MulticastChannel ch,
113 InetAddress group,
114 NetworkInterface interf,
115 InetAddress source,
116 byte[] groupAddress,
117 byte[] sourceAddress)
118 {
119 super(ch, group, interf, source);
120 this.groupAddress = groupAddress;
121 this.sourceAddress = sourceAddress;
122 }
123
124 byte[] groupAddress() {
125 return groupAddress;
126 }
127
128 byte[] source() {
129 return sourceAddress;
130 }
131 }
132
133 public boolean isValid() {
134 return !invalid;
135 }
136
137 // package-private
138 void invalidate() {
139 invalid = true;
140 }
141
142 public void drop() {
143 // delegate to channel
144 ((DatagramChannelImpl)ch).drop(this);
145 }
146
147 @Override
|