/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package org.jboss.netty.handler.codec.spdy; import java.util.List; import java.util.Map; import java.util.Set; /** * A SPDY Name/Value Header Block which provides common properties for * {@link SpdySynStreamFrame}, {@link SpdySynReplyFrame}, and * {@link SpdyHeadersFrame}. * @see SpdyHeaders */ public interface SpdyHeaderBlock { /** * Returns {@code true} if this header block is invalid. * A RST_STREAM frame with code PROTOCOL_ERROR should be sent. */ boolean isInvalid(); /** * Marks this header block as invalid. */ void setInvalid(); /** * Returns the header value with the specified header name. If there is * more than one header value for the specified header name, the first * value is returned. * * @return the header value or {@code null} if there is no such header */ String getHeader(String name); /** * Returns the header values with the specified header name. * * @return the {@link List} of header values. An empty list if there is no * such header. */ List<String> getHeaders(String name); /** * Returns all header names and values that this block contains. * * @return the {@link List} of the header name-value pairs. An empty list * if there is no header in this message. */ List<Map.Entry<String, String>> getHeaders(); /** * Returns {@code true} if and only if there is a header with the specified * header name. */ boolean containsHeader(String name); /** * Returns the {@link Set} of all header names that this block contains. */ Set<String> getHeaderNames(); /** * Adds a new header with the specified name and value. */ void addHeader(String name, Object value); /** * Sets a new header with the specified name and value. If there is an * existing header with the same name, the existing header is removed. */ void setHeader(String name, Object value); /** * Sets a new header with the specified name and values. If there is an * existing header with the same name, the existing header is removed. */ void setHeader(String name, Iterable<?> values); /** * Removes the header with the specified name. */ void removeHeader(String name); /** * Removes all headers from this block. */ void clearHeaders(); }