1 /* 2 * Copyright 2015 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 17 /* 18 * Copyright 2014 Twitter, Inc. 19 * 20 * Licensed under the Apache License, Version 2.0 (the "License"); 21 * you may not use this file except in compliance with the License. 22 * You may obtain a copy of the License at 23 * 24 * https://www.apache.org/licenses/LICENSE-2.0 25 * 26 * Unless required by applicable law or agreed to in writing, software 27 * distributed under the License is distributed on an "AS IS" BASIS, 28 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 29 * See the License for the specific language governing permissions and 30 * limitations under the License. 31 */ 32 package io.netty5.handler.codec.http2; 33 34 import static io.netty5.handler.codec.http2.HpackUtil.equalsVariableTime; 35 import static java.util.Objects.requireNonNull; 36 37 class HpackHeaderField { 38 39 // Section 4.1. Calculating Table Size 40 // The additional 32 octets account for an estimated 41 // overhead associated with the structure. 42 static final int HEADER_ENTRY_OVERHEAD = 32; 43 44 static long sizeOf(CharSequence name, CharSequence value) { 45 return name.length() + value.length() + HEADER_ENTRY_OVERHEAD; 46 } 47 48 final CharSequence name; 49 final CharSequence value; 50 51 // This constructor can only be used if name and value are ISO-8859-1 encoded. 52 HpackHeaderField(CharSequence name, CharSequence value) { 53 this.name = requireNonNull(name, "name"); 54 this.value = requireNonNull(value, "value"); 55 } 56 57 final int size() { 58 return name.length() + value.length() + HEADER_ENTRY_OVERHEAD; 59 } 60 61 public final boolean equalsForTest(HpackHeaderField other) { 62 return equalsVariableTime(name, other.name) && equalsVariableTime(value, other.value); 63 } 64 65 @Override 66 public String toString() { 67 return name + ": " + value; 68 } 69 }