package com.webpieces.hpack.api.dto; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.webpieces.http2parser.api.dto.lib.Http2Header; import com.webpieces.http2parser.api.dto.lib.Http2MsgType; import com.webpieces.http2parser.api.dto.lib.PartialStream; public class Http2Push implements PartialStream { private int streamId; private int promisedStreamId; protected List<Http2Header> headers = new ArrayList<>(); //Convenience structure that further morphs the headers into a Map that can //be looked up by key. private transient Http2HeaderStruct headersStruct = new Http2HeaderStruct(); public Http2Push() {} public Http2Push(List<Http2Header> headerList) { for(Http2Header header : headerList) { addHeader(header); } } public int getStreamId() { return streamId; } public void setStreamId(int streamId) { this.streamId = streamId; } public int getPromisedStreamId() { return promisedStreamId; } public void setPromisedStreamId(int promisedStreamId) { this.promisedStreamId = promisedStreamId; } /** * Order of HTTP Headers matters for Headers with the same key */ public List<Http2Header> getHeaders() { return Collections.unmodifiableList(headers); } public void addHeader(Http2Header header) { headers.add(header); headersStruct.addHeader(header); } /** * * @return */ public Http2HeaderStruct getHeaderLookupStruct() { return headersStruct; } @Override public boolean isEndOfStream() { return false; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((headers == null) ? 0 : headers.hashCode()); result = prime * result + promisedStreamId; result = prime * result + streamId; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Http2Push other = (Http2Push) obj; if (headers == null) { if (other.headers != null) return false; } else if (!headers.equals(other.headers)) return false; if (promisedStreamId != other.promisedStreamId) return false; if (streamId != other.streamId) return false; return true; } @Override public Http2MsgType getMessageType() { return Http2MsgType.PUSH_PROMISE; } @Override public String toString() { return "Http2Push [streamId=" + streamId + ", promisedStreamId=" + promisedStreamId + ", headers=" + headers + "]"; } }