File: Frame.hs

package info (click to toggle)
haskell-http2 5.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 55,180 kB
  • sloc: haskell: 8,657; makefile: 5
file content (150 lines) | stat: -rw-r--r-- 3,010 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
{-# LANGUAGE OverloadedStrings #-}

-- | Framing in HTTP\/2(<https://www.rfc-editor.org/rfc/rfc9113>).
module Network.HTTP2.Frame (
    -- * Frame
    Frame (..),
    FrameHeader (..),
    FramePayload (..),
    HeaderBlockFragment,
    Padding,
    isPaddingDefined,

    -- * Encoding
    encodeFrame,
    encodeFrameChunks,
    encodeFrameHeader,
    encodeFrameHeaderBuf,
    encodeFramePayload,
    EncodeInfo (..),
    encodeInfo,
    module Network.HTTP2.Frame.Decode,

    -- * Frame type
    FrameType (
        FrameType,
        FrameData,
        FrameHeaders,
        FramePriority,
        FrameRSTStream,
        FrameSettings,
        FramePushPromise,
        FramePing,
        FrameGoAway,
        FrameWindowUpdate,
        FrameContinuation
    ),
    fromFrameType,
    toFrameType,
    minFrameType,
    maxFrameType,
    framePayloadToFrameType,

    -- * Priority
    Priority (..),
    Weight,

    -- * Stream identifier
    StreamId,
    isControl,
    isClientInitiated,
    isServerInitiated,

    -- * Stream identifier related
    testExclusive,
    setExclusive,
    clearExclusive,

    -- * Flags
    FrameFlags,
    defaultFlags,
    testEndStream,
    testAck,
    testEndHeader,
    testPadded,
    testPriority,
    setEndStream,
    setAck,
    setEndHeader,
    setPadded,
    setPriority,

    -- * SettingsList
    SettingsList,
    SettingsKey (
        SettingsKey,
        SettingsHeaderTableSize,
        SettingsEnablePush,
        SettingsMaxConcurrentStreams,
        SettingsInitialWindowSize,
        SettingsMaxFrameSize,
        SettingsMaxHeaderListSize
    ),
    SettingsValue,
    fromSettingsKey,
    toSettingsKey,

    -- * Payload length
    defaultPayloadLength,
    maxPayloadLength,

    -- * Window
    WindowSize,
    defaultWindowSize,
    maxWindowSize,
    isWindowOverflow,

    -- * Error code
    ErrorCode (
        ErrorCode,
        NoError,
        ProtocolError,
        InternalError,
        FlowControlError,
        SettingsTimeout,
        StreamClosed,
        FrameSizeError,
        RefusedStream,
        Cancel,
        CompressionError,
        ConnectError,
        EnhanceYourCalm,
        InadequateSecurity,
        HTTP11Required
    ),
    fromErrorCode,
    toErrorCode,

    -- * Predefined values
    connectionPreface,
    connectionPrefaceLength,
    frameHeaderLength,
    recommendedConcurrency,

    -- * Deprecated
    ErrorCodeId,
    SettingsKeyId,
    FrameTypeId,
) where

import qualified Data.ByteString as BS
import Network.Control (WindowSize)

import Imports
import Network.HTTP2.Frame.Decode
import Network.HTTP2.Frame.Encode
import Network.HTTP2.Frame.Types

-- | The preface of HTTP\/2.
--
-- >>> connectionPreface
-- "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
connectionPreface :: ByteString
connectionPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

-- | Length of the preface.
--
-- >>> connectionPrefaceLength
-- 24
connectionPrefaceLength :: Int
connectionPrefaceLength = BS.length connectionPreface