| /** @file |
| |
| HTTPVersion - class to track the HTTP version |
| |
| @section license License |
| |
| 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. |
| */ |
| |
| #pragma once |
| |
| class HTTPVersion |
| { |
| public: |
| HTTPVersion() {} |
| HTTPVersion(HTTPVersion const &that) = default; |
| HTTPVersion &operator=(const HTTPVersion &) = default; |
| |
| explicit HTTPVersion(int version); |
| constexpr HTTPVersion(uint8_t ver_major, uint8_t ver_minor); |
| |
| int operator==(const HTTPVersion &hv) const; |
| int operator!=(const HTTPVersion &hv) const; |
| int operator>(const HTTPVersion &hv) const; |
| int operator<(const HTTPVersion &hv) const; |
| int operator>=(const HTTPVersion &hv) const; |
| int operator<=(const HTTPVersion &hv) const; |
| |
| uint8_t get_major() const; |
| uint8_t get_minor() const; |
| uint32_t get_flat_version() const; |
| |
| private: |
| uint8_t vmajor = 0; |
| uint8_t vminor = 0; |
| }; |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline HTTPVersion::HTTPVersion(int version) |
| { |
| vmajor = (version >> 16) & 0xFFFF; |
| vminor = version & 0xFFFF; |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline constexpr HTTPVersion::HTTPVersion(uint8_t ver_major, uint8_t ver_minor) : vmajor(ver_major), vminor(ver_minor) {} |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline uint8_t |
| HTTPVersion::get_major() const |
| { |
| return vmajor; |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline uint8_t |
| HTTPVersion::get_minor() const |
| { |
| return vminor; |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline uint32_t |
| HTTPVersion::get_flat_version() const |
| { |
| return vmajor << 16 | vminor; |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline int |
| HTTPVersion::operator==(const HTTPVersion &hv) const |
| { |
| return vmajor == hv.get_major() && vminor == hv.get_minor(); |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline int |
| HTTPVersion::operator!=(const HTTPVersion &hv) const |
| { |
| return !(*this == hv); |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline int |
| HTTPVersion::operator>(const HTTPVersion &hv) const |
| { |
| return vmajor > hv.get_major() || (vmajor == hv.get_major() && vminor > hv.get_minor()); |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline int |
| HTTPVersion::operator<(const HTTPVersion &hv) const |
| { |
| return vmajor < hv.get_major() || (vmajor == hv.get_major() && vminor < hv.get_minor()); |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline int |
| HTTPVersion::operator>=(const HTTPVersion &hv) const |
| { |
| return vmajor > hv.get_major() || (vmajor == hv.get_major() && vminor >= hv.get_minor()); |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| inline int |
| HTTPVersion::operator<=(const HTTPVersion &hv) const |
| { |
| return vmajor < hv.get_major() || (vmajor == hv.get_major() && vminor <= hv.get_minor()); |
| } |
| |
| /*------------------------------------------------------------------------- |
| -------------------------------------------------------------------------*/ |
| |
| constexpr HTTPVersion HTTP_INVALID{0, 0}; |
| constexpr HTTPVersion HTTP_0_9{0, 9}; |
| constexpr HTTPVersion HTTP_1_0{1, 0}; |
| constexpr HTTPVersion HTTP_1_1{1, 1}; |
| constexpr HTTPVersion HTTP_2_0{2, 0}; |
| constexpr HTTPVersion HTTP_3_0{3, 0}; |