@Override public HttpHeaders set(final String name, final Object value) { String strVal = toString(value); boolean validateName = false; if (validate) { validateHeaderValue0(strVal); validateName = !KNOWN_NAMES.contains(name); } int h = hash(name, validateName); int i = index(h); remove0(h, i, name); add0(h, i, name, strVal); return this; }
private String get(final String name, boolean last) { if (name == null) { throw new NullPointerException("name"); } int h = hash(name, false); int i = index(h); HeaderEntry e = entries[i]; String value = null; // loop until the first header was found while (e != null) { if (e.hash == h && eq(name, e.key)) { value = e.value; if (last) { break; } } e = e.next; } return value; }
@Override public boolean contains(String name) { return get(name, true) != null; }
@Override public HttpHeaders getReadTrailers() { if (readHeaders == null) { readHeaders = new DefaultHttpHeaders(); } return readHeaders; } }
private static int hash(String name, boolean validate) { int h = 0; for (int i = name.length() - 1; i >= 0; i --) { char c = name.charAt(i); if (validate) { valideHeaderNameChar(c); } c = toLowerCase(c); h = 31 * h + c; } if (h > 0) { return h; } else if (h == Integer.MIN_VALUE) { return Integer.MAX_VALUE; } else { return -h; } }
@Override public HttpHeaders set(String name, Iterable<?> values) { if (validate) { validateName(name); } return super.set(name, values); }
@Override public HttpHeaders add(String name, Object value) { if (validate) { validateName(name); } return super.add(name, value); }
private static boolean eq(String name1, String name2) { if (name1 == name2) { // check for object equality as the user may reuse our static fields in HttpHeaders.Names return true; } int nameLen = name1.length(); if (nameLen != name2.length()) { return false; } for (int i = nameLen - 1; i >= 0; i --) { char c1 = name1.charAt(i); char c2 = name2.charAt(i); if (c1 != c2) { if (toLowerCase(c1) != toLowerCase(c2)) { return false; } } } return true; }
@Override public HttpHeaders getReadHeaders() { if (readHeaders == null) { readHeaders = new DefaultHttpHeaders(); } return readHeaders; }
@Override public HttpHeaders set(String name, Object value) { if (validate) { validateName(name); } return super.set(name, value); }
@Override public HttpHeaders add(String name, Iterable<?> values) { if (validate) { validateName(name); } return super.add(name, values); }
@Override public HttpHeaders add(final String name, final Object value) { String strVal = toString(value); boolean validateName = false; if (validate) { validateHeaderValue0(strVal); validateName = !KNOWN_NAMES.contains(name); } int h = hash(name, validateName); int i = index(h); add0(h, i, name, strVal); return this; }
@Override public List<String> getAll(final String name) { if (name == null) { throw new NullPointerException("name"); } LinkedList<String> values = new LinkedList<String>(); int h = hash(name, false); int i = index(h); HeaderEntry e = entries[i]; while (e != null) { if (e.hash == h && eq(name, e.key)) { values.addFirst(e.value); } e = e.next; } return values; }
@Override public HttpHeaders getWriteTrailers() { if (writeTrailers == null) { writeTrailers = new DefaultHttpHeaders(); } return writeTrailers; }
@Override public String get(final String name) { return get(name, false); }
@Override public HttpHeaders add(String name, Iterable<?> values) { boolean validateName = false; if (validate) { validateName = !KNOWN_NAMES.contains(name); } int h = hash(name, validateName); int i = index(h); for (Object v: values) { String vstr = toString(v); if (validate) { validateHeaderValue0(vstr); } add0(h, i, name, vstr); } return this; }
@Override public boolean contains(String name, String value, boolean ignoreCaseValue) { if (name == null) { throw new NullPointerException("name"); } int h = hash(name, false); int i = index(h); HeaderEntry e = entries[i]; while (e != null) { if (e.hash == h && eq(name, e.key)) { if (ignoreCaseValue) { if (e.value.equalsIgnoreCase(value)) { return true; } } else { if (e.value.equals(value)) { return true; } } } e = e.next; } return false; }
@Override public HttpHeaders getWriteHeaders() { if (writeHeaders == null) { writeHeaders = new DefaultHttpHeaders(); } return writeHeaders; }