package com.webpieces.hpack.api.dto; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.webpieces.http2parser.api.dto.lib.Http2Header; import com.webpieces.http2parser.api.dto.lib.Http2HeaderName; public class Http2HeaderStruct { private Map<String, List<Http2Header>> headers = new HashMap<>(); public Http2Header getHeader(Http2HeaderName name) { return getHeader(name.getHeaderName().toLowerCase()); } public List<Http2Header> getHeaders(Http2HeaderName name) { List<Http2Header> headers2 = getHeaders(name.getHeaderName().toLowerCase()); if(headers2 == null) return new ArrayList<>(); return headers2; } public Http2Header getLastInstanceOfHeader(Http2HeaderName name) { List<Http2Header> headers = getHeaders(name.getHeaderName().toLowerCase()); if(headers == null) return null; else if(headers.size() == 0) return null; return headers.get(headers.size()-1); } public Http2Header getHeader(String key) { List<Http2Header> list = headers.get(key.toLowerCase()); if(list == null) return null; else if(list.size() > 1) throw new IllegalStateException("There are two headers in this http request with key="+key+". use getHeaders method instead"); else if(list.size() == 0) return null; return list.get(0); } public List<Http2Header> getHeaders(String key) { return headers.get(key.toLowerCase()); } /** * It is important that this is not exposed as the duplicate structure could get corrupted. * Adding anything to this from a client does nothing so we don't want to allow this as the * user would think that it would be marshalled out */ protected void addHeader(Http2Header header) { List<Http2Header> list = headers.get(header.getName().toLowerCase()); if(list == null) { list = new ArrayList<>(); //Header names are not case sensitive while values are headers.put(header.getName().toLowerCase(), list); } list.add(header); } }