1 /*
2 * Copyright 2026 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package io.netty.handler.codec.dns;
17
18 import static io.netty.util.internal.ObjectUtil.checkNotNull;
19
20 /**
21 * Default {@link DnsOptCookieRecord} implementation.
22 */
23 public final class DefaultDnsOptCookieRecord extends AbstractDnsOptPseudoRrRecord implements DnsOptCookieRecord {
24 private final byte[] clientCookie;
25
26 /**
27 * Creates a new instance.
28 *
29 * @param maxPayloadSize the suggested max payload size in bytes
30 * @param clientCookie the client cookie, must be exactly {@link #CLIENT_COOKIE_LENGTH} bytes
31 */
32 public DefaultDnsOptCookieRecord(int maxPayloadSize, byte[] clientCookie) {
33 super(maxPayloadSize, 0, 0);
34 this.clientCookie = verifyCookie(clientCookie).clone();
35 }
36
37 private static byte[] verifyCookie(byte[] clientCookie) {
38 if (checkNotNull(clientCookie, "clientCookie").length != CLIENT_COOKIE_LENGTH) {
39 throw new IllegalArgumentException(
40 "clientCookie.length must be " + CLIENT_COOKIE_LENGTH + " but was " + clientCookie.length);
41 }
42 return clientCookie;
43 }
44
45 @Override
46 public byte[] clientCookie() {
47 return clientCookie.clone();
48 }
49 }