LCOV - code coverage report
Current view: top level - zephyr/net/http - hpack.h Hit Total Coverage
Test: new.info Lines: 8 8 100.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /** @file
       2             :  * @brief HTTP HPACK
       3             :  */
       4             : 
       5             : /*
       6             :  * Copyright (c) 2023 Emna Rekik
       7             :  * Copyright (c) 2024 Nordic Semiconductor ASA
       8             :  *
       9             :  * SPDX-License-Identifier: Apache-2.0
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_NET_HTTP_SERVER_HPACK_H_
      13             : #define ZEPHYR_INCLUDE_NET_HTTP_SERVER_HPACK_H_
      14             : 
      15             : #include <stddef.h>
      16             : #include <stdint.h>
      17             : 
      18             : /**
      19             :  * @brief HTTP HPACK
      20             :  * @defgroup http_hpack HTTP HPACK
      21             :  * @since 3.7
      22             :  * @version 0.1.0
      23             :  * @ingroup networking
      24             :  * @{
      25             :  */
      26             : 
      27             : #ifdef __cplusplus
      28             : extern "C" {
      29             : #endif
      30             : 
      31             : /** @cond INTERNAL_HIDDEN */
      32             : 
      33             : enum http_hpack_static_key {
      34             :         HTTP_SERVER_HPACK_INVALID = 0,
      35             :         HTTP_SERVER_HPACK_AUTHORITY = 1,
      36             :         HTTP_SERVER_HPACK_METHOD_GET = 2,
      37             :         HTTP_SERVER_HPACK_METHOD_POST = 3,
      38             :         HTTP_SERVER_HPACK_PATH_ROOT = 4,
      39             :         HTTP_SERVER_HPACK_PATH_INDEX = 5,
      40             :         HTTP_SERVER_HPACK_SCHEME_HTTP = 6,
      41             :         HTTP_SERVER_HPACK_SCHEME_HTTPS = 7,
      42             :         HTTP_SERVER_HPACK_STATUS_200 = 8,
      43             :         HTTP_SERVER_HPACK_STATUS_204 = 9,
      44             :         HTTP_SERVER_HPACK_STATUS_206 = 10,
      45             :         HTTP_SERVER_HPACK_STATUS_304 = 11,
      46             :         HTTP_SERVER_HPACK_STATUS_400 = 12,
      47             :         HTTP_SERVER_HPACK_STATUS_404 = 13,
      48             :         HTTP_SERVER_HPACK_STATUS_500 = 14,
      49             :         HTTP_SERVER_HPACK_ACCEPT_CHARSET = 15,
      50             :         HTTP_SERVER_HPACK_ACCEPT_ENCODING = 16,
      51             :         HTTP_SERVER_HPACK_ACCEPT_LANGUAGE = 17,
      52             :         HTTP_SERVER_HPACK_ACCEPT_RANGES = 18,
      53             :         HTTP_SERVER_HPACK_ACCEPT = 19,
      54             :         HTTP_SERVER_HPACK_ACCESS_CONTROL_ALLOW_ORIGIN = 20,
      55             :         HTTP_SERVER_HPACK_AGE = 21,
      56             :         HTTP_SERVER_HPACK_ALLOW = 22,
      57             :         HTTP_SERVER_HPACK_AUTHORIZATION = 23,
      58             :         HTTP_SERVER_HPACK_CACHE_CONTROL = 24,
      59             :         HTTP_SERVER_HPACK_CONTENT_DISPOSITION = 25,
      60             :         HTTP_SERVER_HPACK_CONTENT_ENCODING = 26,
      61             :         HTTP_SERVER_HPACK_CONTENT_LANGUAGE = 27,
      62             :         HTTP_SERVER_HPACK_CONTENT_LENGTH = 28,
      63             :         HTTP_SERVER_HPACK_CONTENT_LOCATION = 29,
      64             :         HTTP_SERVER_HPACK_CONTENT_RANGE = 30,
      65             :         HTTP_SERVER_HPACK_CONTENT_TYPE = 31,
      66             :         HTTP_SERVER_HPACK_COOKIE = 32,
      67             :         HTTP_SERVER_HPACK_DATE = 33,
      68             :         HTTP_SERVER_HPACK_ETAG = 34,
      69             :         HTTP_SERVER_HPACK_EXPECT = 35,
      70             :         HTTP_SERVER_HPACK_EXPIRES = 36,
      71             :         HTTP_SERVER_HPACK_FROM = 37,
      72             :         HTTP_SERVER_HPACK_HOST = 38,
      73             :         HTTP_SERVER_HPACK_IF_MATCH = 39,
      74             :         HTTP_SERVER_HPACK_IF_MODIFIED_SINCE = 40,
      75             :         HTTP_SERVER_HPACK_IF_NONE_MATCH = 41,
      76             :         HTTP_SERVER_HPACK_IF_RANGE = 42,
      77             :         HTTP_SERVER_HPACK_IF_UNMODIFIED_SINCE = 43,
      78             :         HTTP_SERVER_HPACK_LAST_MODIFIED = 44,
      79             :         HTTP_SERVER_HPACK_LINK = 45,
      80             :         HTTP_SERVER_HPACK_LOCATION = 46,
      81             :         HTTP_SERVER_HPACK_MAX_FORWARDS = 47,
      82             :         HTTP_SERVER_HPACK_PROXY_AUTHENTICATE = 48,
      83             :         HTTP_SERVER_HPACK_PROXY_AUTHORIZATION = 49,
      84             :         HTTP_SERVER_HPACK_RANGE = 50,
      85             :         HTTP_SERVER_HPACK_REFERER = 51,
      86             :         HTTP_SERVER_HPACK_REFRESH = 52,
      87             :         HTTP_SERVER_HPACK_RETRY_AFTER = 53,
      88             :         HTTP_SERVER_HPACK_SERVER = 54,
      89             :         HTTP_SERVER_HPACK_SET_COOKIE = 55,
      90             :         HTTP_SERVER_HPACK_STRICT_TRANSPORT_SECURITY = 56,
      91             :         HTTP_SERVER_HPACK_TRANSFER_ENCODING = 57,
      92             :         HTTP_SERVER_HPACK_USER_AGENT = 58,
      93             :         HTTP_SERVER_HPACK_VARY = 59,
      94             :         HTTP_SERVER_HPACK_VIA = 60,
      95             :         HTTP_SERVER_HPACK_WWW_AUTHENTICATE = 61,
      96             : };
      97             : 
      98             : /* TODO Kconfig */
      99             : #define HTTP2_HEADER_FIELD_MAX_LEN 256
     100             : 
     101             : #if defined(CONFIG_HTTP_SERVER)
     102             : #define HTTP_SERVER_HUFFMAN_DECODE_BUFFER_SIZE CONFIG_HTTP_SERVER_HUFFMAN_DECODE_BUFFER_SIZE
     103             : #else
     104             : #define HTTP_SERVER_HUFFMAN_DECODE_BUFFER_SIZE 0
     105             : #endif
     106             : 
     107             : /** @endcond */
     108             : 
     109             : /** HTTP2 header field with decoding buffer. */
     110           1 : struct http_hpack_header_buf {
     111             :         /** A pointer to the decoded header field name. */
     112           1 :         const char *name;
     113             : 
     114             :         /** A pointer to the decoded header field value. */
     115           1 :         const char *value;
     116             : 
     117             :         /** Length of the decoded header field name. */
     118           1 :         size_t name_len;
     119             : 
     120             :         /** Length of the decoded header field value. */
     121           1 :         size_t value_len;
     122             : 
     123             :         /** Encoding/Decoding buffer. Used with Huffman encoding/decoding. */
     124           1 :         uint8_t buf[HTTP_SERVER_HUFFMAN_DECODE_BUFFER_SIZE];
     125             : 
     126             :         /** Length of the data in the decoding buffer. */
     127           1 :         size_t datalen;
     128             : };
     129             : 
     130             : /** @cond INTERNAL_HIDDEN */
     131             : 
     132             : int http_hpack_huffman_decode(const uint8_t *encoded_buf, size_t encoded_len,
     133             :                               uint8_t *buf, size_t buflen);
     134             : int http_hpack_huffman_encode(const uint8_t *str, size_t str_len,
     135             :                               uint8_t *buf, size_t buflen);
     136             : int http_hpack_decode_header(const uint8_t *buf, size_t datalen,
     137             :                              struct http_hpack_header_buf *header);
     138             : int http_hpack_encode_header(uint8_t *buf, size_t buflen,
     139             :                              struct http_hpack_header_buf *header);
     140             : 
     141             : /** @endcond */
     142             : 
     143             : #ifdef __cplusplus
     144             : }
     145             : #endif
     146             : 
     147             : /**
     148             :  * @}
     149             :  */
     150             : 
     151             : #endif

Generated by: LCOV version 1.14