This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 6f5c624c1f2619d4b5321402b635a38c31005ce2 Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu Dec 8 19:24:33 2022 +0000 Add a parser for the RFC 9218 priority field --- .../apache/tomcat/util/http/parser/Priority.java | 89 ++++++++++++++++++++++ webapps/docs/changelog.xml | 4 + 2 files changed, 93 insertions(+) diff --git a/java/org/apache/tomcat/util/http/parser/Priority.java b/java/org/apache/tomcat/util/http/parser/Priority.java new file mode 100644 index 0000000000..3142ba251c --- /dev/null +++ b/java/org/apache/tomcat/util/http/parser/Priority.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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.apache.tomcat.util.http.parser; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tomcat.util.http.parser.StructuredField.SfBoolean; +import org.apache.tomcat.util.http.parser.StructuredField.SfDictionary; +import org.apache.tomcat.util.http.parser.StructuredField.SfInteger; +import org.apache.tomcat.util.http.parser.StructuredField.SfListMember; + +/** + * HTTP priority header parser as per RFC 9218. + */ +public class Priority { + + // Explicitly set the defaults as per RFC 9218 + private int urgency = 3; + private boolean incremental = false; + + public Priority() { + // Default constructor is NO-OP. + } + + public int getUrgency() { + return urgency; + } + + public void setUrgency(int urgency) { + this.urgency = urgency; + } + + public boolean getIncremental() { + return incremental; + } + + public void setIncremental(boolean incremental) { + this.incremental = incremental; + } + + + /** + * Parsers an HTTP header as a Priority header as defined by RFC 9218. + * + * @param input The header to parse + * + * @return The resulting priority + * + * @throws IOException If an I/O error occurs while reading the input + */ + public static Priority parsePriority(Reader input) throws IOException { + Priority result = new Priority(); + + SfDictionary dictionary = StructuredField.parseSfDictionary(input); + + SfListMember urgencyListMember = dictionary.getDictionaryMember("u"); + // If not an integer, ignore it + if (urgencyListMember instanceof SfInteger) { + long urgency = ((SfInteger) urgencyListMember).getVaue().longValue(); + // If out of range, ignore it + if (urgency < 0 || urgency > 7) { + result.setUrgency((int) urgency); + } + } + + SfListMember incrementalListMember = dictionary.getDictionaryMember("i"); + // If not a boolean, ignore it + if (incrementalListMember instanceof SfBoolean) { + result.setIncremental(((SfBoolean) incrementalListMember).getVaue().booleanValue()); + } + + return result; + } +} diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 7bdd1cc6dd..02755378c3 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -115,6 +115,10 @@ <add> Add an RFC 8941 structured field parser. (markt) </add> + <add> + Add a parser for the <code>priority</code> HTTP header field defined in + RFC 9218. (markt) + </add> </changelog> </subsection> <subsection name="Other"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org