This is the http2 Reference Manual, version 2.0.2, generated automatically by Declt version 4.0 beta 2 "William Riker" on Sun Jul 13 20:35:29 2025 GMT+0.
http2/http2.asd
http2/overview.lisp
http2/client/client-utils.lisp
http2/client/client.lisp
http2/stream-based/package.lisp
http2/stream-based/core/stream-based-connections.lisp
http2/stream-based/core/payload-streams.lisp
http2/core/package.lisp
http2/core/core/utils.lisp
http2/core/core/pipe.lisp
http2/core/core/errors.lisp
http2/core/core/hpack.lisp
http2/core/core/classes.lisp
http2/core/core/frames.lisp
http2/core/core/frames/http2-stream.lisp
http2/core/core/frames/rst-and-goaway.lisp
http2/core/core/frames/headers.lisp
http2/core/core/frames/data.lisp
http2/core/core/frames/settings.lisp
http2/core/core/frames/push-promise.lisp
http2/core/core/frames/altsvc.lisp
http2/core/core/frames/ping.lisp
http2/core/core/binary-payload.lisp
http2/core/core/gzip-decode.lisp
http2/core/core/utf8.lisp
http2/server/poll-grovel.lisp
http2/server/poll-openssl.lisp
http2/server/poll-server.lisp
http2/server/threaded/../tls/server.lisp
http2/server/threaded/threaded.lisp
http2/server/shared/socket-dispatcher.lisp
http2/server/shared/dispatch.lisp
http2/server/shared/scheduler.lisp
http2/openssl/../package.lisp
http2/openssl/openssl-grovel.lisp
http2/openssl/openssl.lisp
http2/server/poll/poll-grovel.lisp
http2/server/poll/poll-openssl.lisp
http2/server/poll/poll-server.lisp
The main system appears first, followed by any subsystem dependency.
http2
http2/client
http2/stream-based
http2/core
http2/server
http2/server/threaded
http2/server/shared
http2/openssl
http2/server/poll
http2
Otherwise empty system that depends on - and thus loads when loaded - both HTTP/2 client and HTTP/2 server.
The system also supports TEST-OP to run the test suite.
2.0.2
http2/client
(system).
http2/server
(system).
http2/server/poll
(system).
overview.lisp
(file).
http2/client
An example of http/2 client
Tomáš Zellerin <tomas@zellerin.cz>
MIT
2.0.2
cl+ssl
(system).
puri
(system).
http2/stream-based
(system).
client-utils.lisp
(file).
client.lisp
(file).
http2/stream-based
HTTP2 protocol implementation
Tomáš Zellerin <tomas@zellerin.cz>
MIT
http2/core
(system).
bordeaux-threads
(system).
package.lisp
(file).
core
(module).
http2/core
HTTP2 protocol implementation
Tomáš Zellerin <tomas@zellerin.cz>
MIT
trivial-gray-streams
(system).
flexi-streams
(system).
anaphora
(system).
gzip-stream
(system).
alexandria
(system).
trivial-utf-8
(system).
chipz
(system).
mgl-pax
(system).
cl+ssl
(system).
package.lisp
(file).
core
(module).
http2/server
Asyncronous polling implementations of HTTP2 server.
Tomáš Zellerin <tomas@zellerin.cz>
2.0.2
http2/server/threaded
(system).
http2/server/poll
(system).
poll-grovel.lisp
(file).
poll-openssl.lisp
(file).
poll-server.lisp
(file).
http2/server/threaded
An example of http/2 server
Tomáš Zellerin <tomas@zellerin.cz>
MIT
puri
(system).
http2/server/shared
(system).
../tls/server.lisp
(file).
threaded.lisp
(file).
http2/openssl
0.1
cffi-grovel
(system).
cffi
(system).
mgl-pax
(system).
anaphora
(system).
cl+ssl
(system).
../package.lisp
(file).
openssl-grovel.lisp
(file).
openssl.lisp
(file).
http2/server/poll
Asyncronous polling implementations of HTTP2 server.
Tomáš Zellerin <tomas@zellerin.cz>
mgl-pax
(system).
puri
(system).
http2/server/shared
(system).
http2/openssl
(system).
poll-grovel.lisp
(file).
poll-openssl.lisp
(file).
poll-server.lisp
(file).
Modules are listed depth-first from the system components tree.
http2/stream-based/core
package.lisp
(file).
http2/stream-based
(system).
stream-based-connections.lisp
(file).
payload-streams.lisp
(file).
http2/core/core
package.lisp
(file).
http2/core
(system).
utils.lisp
(file).
pipe.lisp
(file).
errors.lisp
(file).
hpack.lisp
(file).
classes.lisp
(file).
frames.lisp
(file).
frames/http2-stream.lisp
(file).
frames/rst-and-goaway.lisp
(file).
frames/headers.lisp
(file).
frames/data.lisp
(file).
frames/settings.lisp
(file).
frames/push-promise.lisp
(file).
frames/altsvc.lisp
(file).
frames/ping.lisp
(file).
binary-payload.lisp
(file).
gzip-decode.lisp
(file).
utf8.lisp
(file).
Files are sorted by type and then listed depth-first from the systems components trees.
http2/http2.asd
http2/overview.lisp
http2/client/client-utils.lisp
http2/client/client.lisp
http2/stream-based/package.lisp
http2/stream-based/core/stream-based-connections.lisp
http2/stream-based/core/payload-streams.lisp
http2/core/package.lisp
http2/core/core/utils.lisp
http2/core/core/pipe.lisp
http2/core/core/errors.lisp
http2/core/core/hpack.lisp
http2/core/core/classes.lisp
http2/core/core/frames.lisp
http2/core/core/frames/http2-stream.lisp
http2/core/core/frames/rst-and-goaway.lisp
http2/core/core/frames/headers.lisp
http2/core/core/frames/data.lisp
http2/core/core/frames/settings.lisp
http2/core/core/frames/push-promise.lisp
http2/core/core/frames/altsvc.lisp
http2/core/core/frames/ping.lisp
http2/core/core/binary-payload.lisp
http2/core/core/gzip-decode.lisp
http2/core/core/utf8.lisp
http2/server/poll-grovel.lisp
http2/server/poll-openssl.lisp
http2/server/poll-server.lisp
http2/server/threaded/../tls/server.lisp
http2/server/threaded/threaded.lisp
http2/server/shared/socket-dispatcher.lisp
http2/server/shared/dispatch.lisp
http2/server/shared/scheduler.lisp
http2/openssl/../package.lisp
http2/openssl/openssl-grovel.lisp
http2/openssl/openssl.lisp
http2/server/poll/poll-grovel.lisp
http2/server/poll/poll-openssl.lisp
http2/server/poll/poll-server.lisp
http2/overview.lisp
http2
(system).
@implementation
(special variable).
@index
(special variable).
@overview
(special variable).
@reference
(special variable).
@test
(special variable).
@tutorial
(special variable).
@tutorials
(special variable).
make-release-documentation
(function).
pages
(function).
http2/client/client-utils.lisp
http2/client
(system).
connect-to-tls-server
(function).
extract-charset-from-content-type
(function).
peer-ends-http-stream
(method).
vanilla-client-connection
(class).
vanilla-client-stream
(class).
*charset-names*
(special variable).
*default-encoding*
(special variable).
*default-text-encoding*
(special variable).
get-end-headers-fn
(reader method).
(setf get-end-headers-fn)
(writer method).
with-http2-connection
(macro).
http2/client/client.lisp
client-utils.lisp
(file).
http2/client
(system).
*default-client-connection-class*
(special variable).
client-done
(condition).
drakma-style-stream-values
(function).
fetch-resource
(generic function).
generic-request
(class).
get-headers
(method).
get-headers
(reader method).
(setf get-headers)
(writer method).
get-method
(reader method).
(setf get-method)
(writer method).
request-headers
(function).
request-with-binary-body
(class).
request-with-body
(class).
request-with-utf8-body
(class).
retrieve-url
(function).
simple-request
(class).
@client
(special variable).
@customizing-client
(special variable).
@customizing-client-example-multi
(special variable).
@customizing-client-reference
(special variable).
get-content
(reader method).
(setf get-content)
(writer method).
get-content-type
(reader method).
(setf get-content-type)
(writer method).
get-gzip-content
(reader method).
(setf get-gzip-content)
(writer method).
get-no-body
(reader method).
(setf get-no-body)
(writer method).
get-result
(reader method).
(setf get-result)
(writer method).
get-uri
(reader method).
(setf get-uri)
(writer method).
present-result
(generic function).
http2/stream-based/core/stream-based-connections.lisp
core
(module).
process-pending-frames
(function).
read-frame
(function).
@stream-based-connection
(special variable).
http2/stream-based/core/payload-streams.lisp
core
(module).
apply-data-frame
(method).
close
(method).
close
(method).
get-index
(reader method).
(setf get-index)
(writer method).
http2-stream-with-input-stream
(class).
initialize-instance
(method).
initialize-instance
(method).
make-transport-output-stream
(function).
print-object
(method).
stream-element-type
(method).
stream-force-output
(method).
stream-listen
(method).
stream-read-byte
(method).
stream-write-byte
(method).
stream-write-sequence
(method).
*charset-names*
(special variable).
*default-encoding*
(special variable).
*default-text-encoding*
(special variable).
@overlay
(special variable).
empty-data-p
(function).
extract-charset-from-content-type
(function).
get-base-http2-stream
(reader method).
(setf get-base-http2-stream)
(writer method).
get-charset
(reader method).
(setf get-charset)
(writer method).
get-compression
(reader method).
(setf get-compression)
(writer method).
get-data
(reader method).
get-data
(reader method).
get-data
(reader method).
(setf get-data)
(writer method).
(setf get-data)
(writer method).
get-output-buffer
(reader method).
(setf get-output-buffer)
(writer method).
get-payload-input-stream
(reader method).
(setf get-payload-input-stream)
(writer method).
get-sent
(reader method).
get-start
(reader method).
(setf get-start)
(writer method).
http2-write-data-stall
(condition).
make-transport-input-stream
(function).
make-transport-input-stream-from-stream
(function).
make-transport-output-stream-from-stream
(function).
payload-input-stream
(class).
payload-output-stream
(class).
payload-stream
(class).
pop-frame
(function).
push-frame
(function).
send-buffer-to-peer
(function).
send-data
(function).
wait-for-window-is-at-least-frame-size
(function).
window-is-closed
(condition).
with-output-payload-slots
(macro).
http2/core/core/utils.lisp
core
(module).
aref/wide
(function).
(setf aref/wide)
(function).
find-setting-by-id
(function).
find-setting-code
(function).
frame-size
(type).
http2-stream-state
(type).
make-initialized-octet-buffer
(function).
make-octet-buffer
(function).
octet-vector
(type).
stream-id
(type).
vector-from-hex-text
(function).
*settings*
(special variable).
@utils
(special variable).
http2/core/core/pipe.lisp
core
(module).
binary-stream
(class).
get-index
(reader method).
(setf get-index)
(writer method).
make-full-pipe
(function).
make-pipe
(function).
pipe-end-for-read
(class).
pipe-end-for-write
(class).
print-object
(method).
print-object
(method).
stream-listen
(method).
stream-read-byte
(method).
stream-write-byte
(method).
@buffer-stream-and-pipes
(special variable).
@buffer-stream-and-pipes-impl
(special variable).
get-buffer
(reader method).
(setf get-buffer)
(writer method).
get-end
(reader method).
(setf get-end)
(writer method).
get-write-buffer
(reader method).
(setf get-write-buffer)
(writer method).
http2/core/core/errors.lisp
core
(module).
connection-error
(condition).
frame-too-small-for-priority
(condition).
get-connection
(reader method).
(setf get-connection)
(writer method).
get-error-name
(function).
go-away
(condition).
h2-not-supported-by-server
(condition).
http-stream-error
(condition).
print-object
(method).
print-object
(method).
print-object
(method).
print-object
(method).
print-object
(method).
print-object
(method).
too-big-frame
(condition).
*error-codes*
(special variable).
+cancel+
(constant).
+compression-error+
(constant).
+connect-error+
(constant).
+enhance-your-calm+
(constant).
+flow-control-error+
(constant).
+frame-size-error+
(constant).
+http-1-1-required+
(constant).
+inadequate-security+
(constant).
+internal-error+
(constant).
+no-error+
(constant).
+protocol-error+
(constant).
+refused-stream+
(constant).
+settings-timeout+
(constant).
+stream-closed+
(constant).
@errors
(special variable).
@warnings
(special variable).
bad-stream-state
(condition).
client-preface-mismatch
(condition).
duplicate-request-header
(condition).
frame-type-needs-connection
(condition).
frame-type-needs-stream
(condition).
get-actual
(reader method).
(setf get-actual)
(writer method).
get-allowed
(reader method).
get-allowed
(reader method).
(setf get-allowed)
(writer method).
(setf get-allowed)
(writer method).
get-class
(reader method).
(setf get-class)
(writer method).
get-code
(reader method).
get-code
(reader method).
(setf get-code)
(writer method).
(setf get-code)
(writer method).
get-debug-data
(reader method).
(setf get-debug-data)
(writer method).
get-error-code
(reader method).
(setf get-error-code)
(writer method).
get-frame-size
(reader method).
(setf get-frame-size)
(writer method).
get-frame-type
(reader method).
get-frame-type
(reader method).
(setf get-frame-type)
(writer method).
(setf get-frame-type)
(writer method).
get-header
(reader method).
(setf get-header)
(writer method).
get-host
(reader method).
(setf get-host)
(writer method).
get-last-stream-id
(reader method).
(setf get-last-stream-id)
(writer method).
get-max-frame-size
(reader method).
(setf get-max-frame-size)
(writer method).
get-max-seen-so-far
(reader method).
(setf get-max-seen-so-far)
(writer method).
get-name
(reader method).
(setf get-name)
(writer method).
get-port
(reader method).
(setf get-port)
(writer method).
get-received
(reader method).
(setf get-received)
(writer method).
get-setting-code
(reader method).
(setf get-setting-code)
(writer method).
get-stream
(reader method).
get-stream
(reader method).
(setf get-stream)
(writer method).
(setf get-stream)
(writer method).
get-stream-id
(reader method).
get-stream-id
(reader method).
(setf get-stream-id)
(writer method).
(setf get-stream-id)
(writer method).
get-value
(reader method).
get-value
(reader method).
get-value
(reader method).
get-value
(reader method).
get-value
(reader method).
(setf get-value)
(writer method).
(setf get-value)
(writer method).
(setf get-value)
(writer method).
(setf get-value)
(writer method).
(setf get-value)
(writer method).
header-error
(condition).
http2-error
(condition).
http2-warning
(condition).
implement-by-user
(condition).
incorrect-enable-push-value
(condition).
incorrect-frame-size
(condition).
incorrect-frame-size-value
(condition).
incorrect-initial-window-size-value
(condition).
incorrect-ping-frame-size
(condition).
incorrect-pseudo-header
(condition).
incorrect-request-pseudo-header
(condition).
incorrect-response-pseudo-header
(condition).
incorrect-rst-frame-size
(condition).
incorrect-setting-value
(condition).
incorrect-settings-frame-size
(condition).
incorrect-window-update-frame-size
(condition).
lowercase-header-field-name
(condition).
missing-header-octets
(condition).
missing-pseudo-header
(condition).
new-stream-id-too-low
(condition).
no-new-header-action
(condition).
no-payload-action
(condition).
null-connection-window-update
(condition).
null-stream-window-update
(condition).
our-id-created-by-peer
(condition).
protocol-error
(condition).
pseudo-header-after-text-header
(condition).
reserved-bit-set
(condition).
stream-protocol-error
(condition).
too-big-padding
(condition).
unexpected-continuation-frame
(condition).
unimplemented-feature
(condition).
unsupported-feature
(condition).
http2/core/core/hpack.lisp
core
(module).
*use-huffman-coding-by-default*
(special variable).
compile-headers
(function).
describe-object
(method).
do-decoded-headers
(function).
get-dynamic-table-size
(reader method).
(setf get-dynamic-table-size)
(writer method).
get-updates-needed
(reader method).
(setf get-updates-needed)
(writer method).
hpack-context
(class).
print-object
(method).
update-dynamic-table-size
(function).
*huffman-code*
(special variable).
+last-static-header-index+
(constant).
+last-static-header-pair+
(constant).
+literal-header-index+
(constant).
+literal-header-never-index+
(constant).
+literal-header-noindex+
(constant).
@hpack-api
(special variable).
add-dynamic-header
(method).
compute-header-size
(function).
compute-update-dynamic-size-codes
(function).
context-table-element
(type).
decode-huffman
(function).
decode-huffman-to-stream
(function).
decode-octet-fn
(function).
dynamic-table-value
(function).
encode-dynamic-table-update
(function).
encode-header
(function).
encode-huffman
(function).
find-header-in-tables
(function).
find-in-tables
(function).
find-pair-in-tables
(function).
get-bytes-left-in-table
(reader method).
(setf get-bytes-left-in-table)
(writer method).
get-deleted-items
(reader method).
(setf get-deleted-items)
(writer method).
get-dynamic-table
(reader method).
(setf get-dynamic-table)
(writer method).
get-integer-from-octet
(function).
header-writer
(function).
huffman-coded-size
(function).
incf*
(macro).
incomplete-header
(condition).
integer-to-array
(function).
make-cond-branch
(function).
read-from-tables
(function).
read-http-header
(function).
read-huffman
(function).
read-literal-header-field-new-name
(function).
read-literal-header-indexed-name
(function).
read-string-from-stream
(function).
static-headers-table
(special variable).
store-string
(function).
vector-index-to-hpack-index
(function).
write-indexed-header-pair
(function).
write-indexed-name
(function).
write-integer-to-array
(function).
write-literal-header-pair
(function).
http2/core/core/classes.lisp
core
(module).
+client-preface-start+
(special variable).
client-http2-connection
(class).
client-stream
(class).
close-http2-stream
(function).
do-goaway
(method).
do-pong
(method).
get-authority
(reader method).
(setf get-authority)
(writer method).
get-connection
(method).
get-method
(reader method).
(setf get-method)
(writer method).
get-network-stream
(generic function).
get-path
(reader method).
(setf get-path)
(writer method).
get-scheme
(reader method).
(setf get-scheme)
(writer method).
get-stream-class
(reader method).
(setf get-stream-class)
(writer method).
http2-connection
(class).
initialize-instance
(method).
initialize-instance
(method).
open-http2-stream
(function).
parse-client-preface
(function).
peer-ends-http-stream
(generic function).
print-object
(method).
print-object
(method).
print-object
(method).
send-headers
(function).
server-http2-connection
(class).
server-stream
(class).
@base-classes
(special variable).
@callbacks
(special variable).
@data-received
(special variable).
@old-frame-functions
(special variable).
@stream-closed
(special variable).
@write-data-handling
(special variable).
check-place-empty-and-set-it
(macro).
count-open-streams
(function).
dynamic-table-entry-size
(function).
get-acked-settings
(reader method).
(setf get-acked-settings)
(writer method).
get-data
(reader method).
(setf get-data)
(writer method).
get-depends-on
(reader method).
(setf get-depends-on)
(writer method).
get-initial-peer-window-size
(reader method).
(setf get-initial-peer-window-size)
(writer method).
get-initial-window-size
(reader method).
(setf get-initial-window-size)
(writer method).
get-peer-accepts-push
(reader method).
(setf get-peer-accepts-push)
(writer method).
get-seen-text-header
(reader method).
(setf get-seen-text-header)
(writer method).
get-settings
(generic function).
get-status
(reader method).
(setf get-status)
(writer method).
get-stream-id
(method).
get-weight
(reader method).
(setf get-weight)
(writer method).
http2-stream
(class).
is-our-stream-id
(method).
is-our-stream-id
(method).
maybe-lock-for-write
(generic function).
maybe-unlock-for-write
(generic function).
peer-sends-push-promise
(generic function).
send-ping
(generic function).
timeshift-pinging-connection
(class).
write-sequences
(function).
http2/core/core/frames.lisp
core
(module).
flush-http2-data
(generic function).
frame-context
(class).
get-max-peer-frame-size
(reader method).
(setf get-max-peer-frame-size)
(writer method).
get-network-stream
(reader method).
(setf get-network-stream)
(writer method).
handle-undefined-frame
(generic function).
parse-frame-header
(function).
print-object
(method).
queue-frame
(generic function).
stream-based-connection-mixin
(class).
write-buffer-connection-mixin
(class).
write-frame-header-to-vector
(function).
*flag-codes-keywords*
(special variable).
*frame-types*
(special variable).
+known-frame-types-count+
(constant).
@frame-handler
(special variable).
@frame-parsers
(special variable).
@frame-writers
(special variable).
@frames-api
(special variable).
@frames-for-classes
(special variable).
@frames-implementation
(special variable).
checked-length
(function).
checked-r-flag
(function).
copy-frame-type
(function).
decode-frame-header
(function).
define-frame-type
(macro).
define-frame-writer
(macro).
flags-to-code
(function).
frame-code-type
(type).
frame-type
(structure).
frame-type-bad-state-error
(reader).
(setf frame-type-bad-state-error)
(writer).
frame-type-connection-ok
(reader).
(setf frame-type-connection-ok)
(writer).
frame-type-documentation
(reader).
(setf frame-type-documentation)
(writer).
frame-type-flag-keywords
(reader).
(setf frame-type-flag-keywords)
(writer).
frame-type-name
(reader).
(setf frame-type-name)
(writer).
frame-type-new-stream-state
(reader).
(setf frame-type-new-stream-state)
(writer).
frame-type-old-stream-ok
(reader).
(setf frame-type-old-stream-ok)
(writer).
frame-type-p
(function).
frame-type-receive-fn
(reader).
(setf frame-type-receive-fn)
(writer).
get-flag
(compiler macro).
get-flag
(function).
get-max-frame-size
(reader method).
(setf get-max-frame-size)
(writer method).
get-to-write
(reader method).
(setf get-to-write)
(writer method).
has-flag
(function).
make-frame-type
(function).
make-unknown-frame-type
(function).
padded-length
(function).
read-padding-from-vector
(function).
receiver-fn
(type).
with-padding-marks
(macro).
write-31-bits
(function).
write-body-and-padding
(function).
write-frame
(function).
write-stream-id
(function).
writer-fn
(type).
http2/core/core/frames/http2-stream.lisp
core
(module).
create-new-local-stream
(function).
find-http-stream-by-id
(function).
get-connection
(reader method).
(setf get-connection)
(writer method).
get-stream-class
(reader method).
(setf get-stream-class)
(writer method).
get-streams
(generic reader).
(setf get-streams)
(writer method).
http2-stream-minimal
(class).
maybe-end-stream
(function).
stream-collection
(class).
@stream-states
(special variable).
@streams
(special variable).
change-state-on-write-end
(function).
check-stream-state-ok
(function).
find-just-stream-by-id
(function).
get-id-to-use
(reader method).
(setf get-id-to-use)
(writer method).
get-last-id-seen
(reader method).
(setf get-last-id-seen)
(writer method).
get-state
(generic function).
(setf get-state)
(writer method).
get-stream-id
(reader method).
(setf get-stream-id)
(writer method).
is-our-stream-id
(generic function).
peer-opens-http-stream-really-open
(function).
http2/core/core/frames/rst-and-goaway.lisp
core
(module).
connection-error
(function).
do-goaway
(generic function).
http-stream-error
(function).
parse-goaway-frame
(function).
parse-rst-stream-frame
(function).
peer-resets-stream
(generic function).
write-goaway-frame
(function).
write-rst-stream-frame
(function).
+goaway-frame+
(constant).
+rst-stream-frame+
(constant).
@rst
(special variable).
http2/core/core/frames/headers.lisp
core
(module).
add-header
(generic function).
apply-stream-priority
(generic function).
get-headers
(reader method).
(setf get-headers)
(writer method).
header-collecting-mixin
(class).
parse-continuation-frame
(function).
parse-headers-frame
(function).
parse-priority-frame
(function).
priority
(structure).
process-end-headers
(generic function).
write-continuation-frame
(function).
write-headers-frame
(function).
write-priority-frame
(function).
+continuation-frame+
(constant).
+headers-frame+
(constant).
+priority-frame+
(constant).
@frame-headers
(special variable).
copy-priority
(function).
get-compression-context
(reader method).
(setf get-compression-context)
(writer method).
get-decompression-context
(reader method).
(setf get-decompression-context)
(writer method).
hpack-endpoint
(class).
make-priority
(function).
parse-header-frame*
(function).
parse-simple-frames-header-end-all
(function).
priority-exclusive
(reader).
(setf priority-exclusive)
(writer).
priority-p
(function).
priority-stream-dependency
(reader).
(setf priority-stream-dependency)
(writer).
priority-weight
(reader).
(setf priority-weight)
(writer).
read-and-add-headers
(function).
read-continuation-frame-on-demand
(function).
read-priority
(function).
write-simple-headers-frame
(function).
http2/core/core/frames/data.lisp
core
(module).
apply-data-frame
(generic function).
apply-window-size-increment
(generic function).
body-collecting-mixin
(class).
get-body
(reader method).
(setf get-body)
(writer method).
get-peer-window-size
(reader method).
(setf get-peer-window-size)
(writer method).
parse-data-frame
(function).
parse-window-update-frame
(function).
write-data-frame
(function).
write-data-frame-multi
(function).
write-window-update-frame
(function).
+data-frame+
(constant).
+window-update-frame+
(constant).
@data
(special variable).
account-read-window-contribution
(function).
account-write-window-contribution
(function).
flow-control-mixin
(class).
get-window-open-fn
(reader method).
(setf get-window-open-fn)
(writer method).
get-window-size
(reader method).
(setf get-window-size)
(writer method).
write-priority
(function).
http2/core/core/frames/settings.lisp
core
(module).
parse-settings-frame
(function).
peer-acks-settings
(generic function).
peer-expects-settings-ack
(generic function).
set-peer-setting
(generic function).
write-ack-setting-frame
(function).
write-settings-frame
(function).
+settings-frame+
(constant).
http2/core/core/frames/push-promise.lisp
core
(module).
parse-push-promise-frame
(function).
write-push-promise-frame
(function).
+push-promise-frame+
(constant).
http2/core/core/frames/altsvc.lisp
core
(module).
parse-altsvc-frame
(function).
write-altsvc-frame
(function).
+altsvc-frame+
(constant).
handle-alt-svc
(generic function).
http2/core/core/frames/ping.lisp
core
(module).
do-pong
(generic function).
parse-ping-frame
(function).
write-ping-frame
(function).
+ping-frame+
(constant).
do-ping
(generic function).
do-ping-fn
(function).
do-pong-fn
(function).
http2/core/core/binary-payload.lisp
core
(module).
apply-text-data-frame
(method).
apply-window-size-increment
(method).
compile-payload-from-stream
(macro).
http-stream-to-string
(function).
initialize-instance
(method).
multi-part-data-stream
(class).
stream-write-byte
(method).
text-collecting-stream
(class).
write-binary-payload
(function).
@accepting-data
(special variable).
@lisp-stream-emulation
(special variable).
constant-output-stream
(class).
get-output-buffer
(reader method).
(setf get-output-buffer)
(writer method).
get-text
(reader method).
(setf get-text)
(writer method).
get-window-size-increment-callback
(reader method).
(setf get-window-size-increment-callback)
(writer method).
http2/core/core/gzip-decode.lisp
core
(module).
apply-data-frame
(method).
gzip-decoding-mixin
(class).
process-end-headers
(method).
*zip-buffer-size*
(special variable).
get-dstate
(reader method).
(setf get-dstate)
(writer method).
http2/core/core/utf8.lisp
core
(module).
apply-data-frame
(method).
apply-data-frame
(method).
fallback-all-is-ascii
(class).
is-utf8-p
(function).
utf8-parser-mixin
(class).
@utf8
(special variable).
get-broken-char
(reader method).
(setf get-broken-char)
(writer method).
utf-first-char-size
(function).
utf-is-first-char
(function).
http2/server/poll-openssl.lisp
poll-grovel.lisp
(file).
http2/server
(system).
bio-should-retry
(function).
encrypt-some*
(function).
handle-ssl-errors*
(function).
process-ssl-errors
(function).
http2/server/poll-server.lisp
poll-openssl.lisp
(file).
http2/server
(system).
*no-client-poll-timeout*
(special variable).
*poll-timeout*
(special variable).
compute-poll-timeout-value
(function).
detached-poll-dispatcher
(class).
do-new-connection
(method).
flush-http2-data
(method).
poll-dispatcher
(class).
poll-dispatcher-mixin
(class).
poll-timeout
(condition).
print-object
(method).
print-object
(method).
queue-frame
(method).
ssl-error-condition
(condition).
*clients*
(special variable).
*default-buffer-size*
(special variable).
*empty-fdset-items*
(special variable).
*encrypt-buf-size*
(special variable).
*fdset-size*
(special variable).
*nagle*
(special variable).
+client-preface-length+
(constant).
@app-interface
(special variable).
@async-server
(special variable).
@request-handling
(special variable).
accept
(function).
add-socket-to-fdset
(function).
add-state
(function).
client
(structure).
client-application-data
(reader).
(setf client-application-data)
(writer).
client-encrypt-buf
(reader).
(setf client-encrypt-buf)
(writer).
client-encrypt-buf-size
(reader).
(setf client-encrypt-buf-size)
(writer).
client-fd
(reader).
(setf client-fd)
(writer).
client-fdset-idx
(reader).
(setf client-fdset-idx)
(writer).
client-io-on-read
(reader).
(setf client-io-on-read)
(writer).
client-octets-needed
(reader).
(setf client-octets-needed)
(writer).
client-p
(function).
client-rbio
(reader).
client-ssl
(reader).
(setf client-ssl)
(writer).
client-start-time
(reader).
(setf client-start-time)
(writer).
client-state
(reader).
(setf client-state)
(writer).
client-wbio
(reader).
client-write-buf
(reader).
(setf client-write-buf)
(writer).
close-client-connection
(function).
close-fd
(function).
compute-timeout
(function).
concatenate*
(function).
copy-client
(function).
decrypt-socket-octets
(function).
define-reader
(macro).
define-writer
(macro).
do-available-actions
(function).
done
(condition).
double-buffer-size
(function).
doubled-buffer
(function).
encrypt-and-send
(function).
encrypt-data
(function).
encrypt-some
(function).
errno
(function).
errno%
(function).
fcntl
(function).
get-client
(reader method).
(setf get-client)
(writer method).
get-code
(reader method).
(setf get-code)
(writer method).
get-fdset-size
(reader method).
(setf get-fdset-size)
(writer method).
get-nagle
(reader method).
(setf get-nagle)
(writer method).
get-no-client-poll-timeout
(method).
get-no-client-poll-timeout
(reader method).
(setf get-no-client-poll-timeout)
(writer method).
get-poll-timeout
(reader method).
(setf get-poll-timeout)
(writer method).
handle-client-io
(function).
handle-ssl-errors
(function).
if-state
(function).
init-fdset
(function).
make-client%
(function).
make-client-object
(function).
maybe-init-ssl
(function).
move-encrypted-bytes
(function).
on-complete-ssl-data
(function).
poll
(function).
poll-server-connection
(class).
process-client-fd
(function).
process-client-sockets
(function).
process-data-on-socket
(function).
process-new-client
(function).
pull-once-push-bytes
(function).
pull-push-bytes
(function).
push-bytes
(function).
queue-encrypted-bytes
(function).
read-2
(function).
read-encrypted-from-openssl
(function).
read-from-peer
(function).
remove-state
(function).
run-user-callback
(function).
select-next-action
(function).
send-to-peer
(function).
send-unencrypted-bytes
(function).
serve-tls
(function).
set-fd-slot
(function).
set-next-action
(function).
setsockopt
(function).
setup-new-connect-pollfd
(function).
setup-port
(function).
ssl-err-reason-error-string
(function).
ssl-read
(function).
states-to-string
(function).
strerror
(function).
strerror-r%
(function).
write-2
(function).
write-data-to-socket
(function).
write-octets-to-decrypt
(function).
http2/server/threaded/../tls/server.lisp
http2/server/threaded
(system).
@server-classes
(special variable).
@server/threaded
(special variable).
http2/server/threaded/threaded.lisp
../tls/server.lisp
(file).
http2/server/threaded
(system).
detached-single-client-dispatcher
(class).
detached-tls-threaded-dispatcher
(class).
do-new-connection
(method).
get-lock
(reader method).
(setf get-lock)
(writer method).
get-scheduler
(reader method).
(setf get-scheduler)
(writer method).
queue-frame
(method).
server-socket-stream
(method).
start-server-on-socket
(method).
threaded-dispatcher
(class).
threaded-server-mixin
(class).
tls-threaded-dispatcher
(class).
cleanup-connection
(method).
detached-threaded-dispatcher
(class).
get-alpn
(reader method).
(setf get-alpn)
(writer method).
get-tls-stream
(reader method).
(setf get-tls-stream)
(writer method).
not-http2-stream
(condition).
http2/openssl/openssl.lisp
http2/openssl
(system).
bio-new
(function).
bio-read%
(function).
bio-s-mem
(function).
bio-write
(function).
certificated-dispatcher
(class).
err-reason-error-string
(function).
make-http2-tls-context
(generic function).
ssl-accept
(function).
ssl-free
(function).
ssl-is-init-finished
(function).
ssl-new
(function).
ssl-read%
(function).
ssl-set-accept-state
(function).
ssl-set-bio
(function).
with-ssl-context
(macro).
+ssl-filetype-asn1+
(constant).
+ssl-filetype-default+
(constant).
+ssl-filetype-pem+
(constant).
bio-test-flags
(function).
err-get-error
(function).
ssl-ctx-check-private-key
(function).
ssl-ctx-ctrl
(function).
ssl-ctx-free
(function).
ssl-ctx-new
(function).
ssl-ctx-set-alpn-select-cb
(function).
ssl-ctx-set-options
(function).
ssl-ctx-use-certificate-chain-file
(function).
ssl-ctx-use-certificate-file
(function).
ssl-ctx-use-private-key-file
(function).
ssl-ctx-use-privatekey-file
(function).
ssl-get-error
(function).
ssl-pending
(function).
ssl-select-next-proto
(function).
ssl-write
(function).
tls-method
(function).
http2/server/poll/poll-openssl.lisp
poll-grovel.lisp
(file).
http2/server/poll
(system).
bio-should-retry
(function).
encrypt-some*
(function).
handle-ssl-errors*
(function).
process-ssl-errors
(function).
http2/server/poll/poll-server.lisp
poll-openssl.lisp
(file).
http2/server/poll
(system).
*no-client-poll-timeout*
(special variable).
*poll-timeout*
(special variable).
compute-poll-timeout-value
(function).
detached-poll-dispatcher
(class).
do-new-connection
(method).
flush-http2-data
(method).
poll-dispatcher
(class).
poll-dispatcher-mixin
(class).
poll-timeout
(condition).
print-object
(method).
print-object
(method).
queue-frame
(method).
ssl-error-condition
(condition).
*clients*
(special variable).
*default-buffer-size*
(special variable).
*empty-fdset-items*
(special variable).
*encrypt-buf-size*
(special variable).
*fdset-size*
(special variable).
*nagle*
(special variable).
+client-preface-length+
(constant).
@app-interface
(special variable).
@async-server
(special variable).
@request-handling
(special variable).
accept
(function).
add-socket-to-fdset
(function).
add-state
(function).
client
(structure).
client-application-data
(reader).
(setf client-application-data)
(writer).
client-encrypt-buf
(reader).
(setf client-encrypt-buf)
(writer).
client-encrypt-buf-size
(reader).
(setf client-encrypt-buf-size)
(writer).
client-fd
(reader).
(setf client-fd)
(writer).
client-fdset-idx
(reader).
(setf client-fdset-idx)
(writer).
client-io-on-read
(reader).
(setf client-io-on-read)
(writer).
client-octets-needed
(reader).
(setf client-octets-needed)
(writer).
client-p
(function).
client-rbio
(reader).
client-ssl
(reader).
(setf client-ssl)
(writer).
client-start-time
(reader).
(setf client-start-time)
(writer).
client-state
(reader).
(setf client-state)
(writer).
client-wbio
(reader).
client-write-buf
(reader).
(setf client-write-buf)
(writer).
close-client-connection
(function).
close-fd
(function).
compute-timeout
(function).
concatenate*
(function).
copy-client
(function).
decrypt-socket-octets
(function).
define-reader
(macro).
define-writer
(macro).
do-available-actions
(function).
done
(condition).
double-buffer-size
(function).
doubled-buffer
(function).
encrypt-and-send
(function).
encrypt-data
(function).
encrypt-some
(function).
errno
(function).
errno%
(function).
fcntl
(function).
get-client
(reader method).
(setf get-client)
(writer method).
get-code
(reader method).
(setf get-code)
(writer method).
get-fdset-size
(reader method).
(setf get-fdset-size)
(writer method).
get-nagle
(reader method).
(setf get-nagle)
(writer method).
get-no-client-poll-timeout
(method).
get-no-client-poll-timeout
(reader method).
(setf get-no-client-poll-timeout)
(writer method).
get-poll-timeout
(reader method).
(setf get-poll-timeout)
(writer method).
handle-client-io
(function).
handle-ssl-errors
(function).
if-state
(function).
init-fdset
(function).
make-client%
(function).
make-client-object
(function).
maybe-init-ssl
(function).
move-encrypted-bytes
(function).
on-complete-ssl-data
(function).
poll
(function).
poll-server-connection
(class).
process-client-fd
(function).
process-client-sockets
(function).
process-data-on-socket
(function).
process-new-client
(function).
pull-once-push-bytes
(function).
pull-push-bytes
(function).
push-bytes
(function).
queue-encrypted-bytes
(function).
read-2
(function).
read-encrypted-from-openssl
(function).
read-from-peer
(function).
remove-state
(function).
run-user-callback
(function).
select-next-action
(function).
send-to-peer
(function).
send-unencrypted-bytes
(function).
serve-tls
(function).
set-fd-slot
(function).
set-next-action
(function).
setsockopt
(function).
setup-new-connect-pollfd
(function).
setup-port
(function).
ssl-err-reason-error-string
(function).
ssl-read
(function).
states-to-string
(function).
strerror
(function).
strerror-r%
(function).
write-2
(function).
write-data-to-socket
(function).
write-octets-to-decrypt
(function).
Packages are listed by definition order.
http2/stream-overlay
http2/client
http2/core
http2/openssl
http2/hpack
http2
http2/utils
http2/cl+ssl
http2/server
http2/stream-overlay
common-lisp
.
http2/core
.
http2/utils
.
get-lock
(generic reader).
(setf get-lock)
(generic writer).
get-scheduler
(generic reader).
(setf get-scheduler)
(generic writer).
http2-stream-with-input-stream
(class).
process-pending-frames
(function).
*charset-names*
(special variable).
*default-encoding*
(special variable).
*default-text-encoding*
(special variable).
@overlay
(special variable).
@stream-based-connection
(special variable).
empty-data-p
(function).
extract-charset-from-content-type
(function).
get-base-http2-stream
(generic reader).
(setf get-base-http2-stream)
(generic writer).
get-charset
(generic reader).
(setf get-charset)
(generic writer).
get-compression
(generic reader).
(setf get-compression)
(generic writer).
get-data
(generic reader).
(setf get-data)
(generic writer).
get-output-buffer
(generic reader).
(setf get-output-buffer)
(generic writer).
get-payload-input-stream
(generic reader).
(setf get-payload-input-stream)
(generic writer).
get-sent
(generic reader).
get-start
(generic reader).
(setf get-start)
(generic writer).
http2-write-data-stall
(condition).
make-transport-input-stream
(function).
make-transport-input-stream-from-stream
(function).
make-transport-output-stream-from-stream
(function).
payload-input-stream
(class).
payload-output-stream
(class).
payload-stream
(class).
pop-frame
(function).
push-frame
(function).
send-buffer-to-peer
(function).
send-data
(function).
wait-for-window-is-at-least-frame-size
(function).
window-is-closed
(condition).
with-output-payload-slots
(macro).
http2/client
HTTP/2 client functions, in particular, RETRIEVE-URL.
alexandria
.
common-lisp
.
dref
.
http2/core
.
http2/stream-overlay
.
http2/utils
.
mgl-pax
.
*default-client-connection-class*
(special variable).
client-done
(condition).
connect-to-tls-server
(function).
drakma-style-stream-values
(function).
extract-charset-from-content-type
(function).
fetch-resource
(generic function).
generic-request
(class).
request-headers
(function).
request-with-binary-body
(class).
request-with-body
(class).
request-with-utf8-body
(class).
retrieve-url
(function).
simple-request
(class).
vanilla-client-connection
(class).
vanilla-client-stream
(class).
*charset-names*
(special variable).
*default-encoding*
(special variable).
*default-text-encoding*
(special variable).
@client
(special variable).
@customizing-client
(special variable).
@customizing-client-example-multi
(special variable).
@customizing-client-reference
(special variable).
get-content
(generic reader).
(setf get-content)
(generic writer).
get-content-type
(generic reader).
(setf get-content-type)
(generic writer).
get-end-headers-fn
(generic reader).
(setf get-end-headers-fn)
(generic writer).
get-gzip-content
(generic reader).
(setf get-gzip-content)
(generic writer).
get-no-body
(generic reader).
(setf get-no-body)
(generic writer).
get-result
(generic reader).
(setf get-result)
(generic writer).
get-uri
(generic reader).
(setf get-uri)
(generic writer).
present-result
(generic function).
with-http2-connection
(macro).
http2/core
common-lisp
.
http2/hpack
.
http2/utils
.
+client-preface-start+
(special variable).
add-header
(generic function).
apply-data-frame
(generic function).
apply-stream-priority
(generic function).
apply-text-data-frame
(generic function).
apply-window-size-increment
(generic function).
body-collecting-mixin
(class).
client-http2-connection
(class).
client-stream
(class).
close-http2-stream
(function).
compile-payload-from-stream
(macro).
connection-error
(function).
connection-error
(condition).
create-new-local-stream
(function).
do-goaway
(generic function).
do-pong
(generic function).
fallback-all-is-ascii
(class).
find-http-stream-by-id
(function).
flush-http2-data
(generic function).
frame-context
(class).
frame-too-small-for-priority
(condition).
get-authority
(generic reader).
(setf get-authority)
(generic writer).
get-body
(generic reader).
(setf get-body)
(generic writer).
get-connection
(generic function).
(setf get-connection)
(generic writer).
get-headers
(generic function).
(setf get-headers)
(generic writer).
get-max-peer-frame-size
(generic reader).
(setf get-max-peer-frame-size)
(generic writer).
get-method
(generic reader).
(setf get-method)
(generic writer).
get-network-stream
(generic function).
(setf get-network-stream)
(generic writer).
get-path
(generic reader).
(setf get-path)
(generic writer).
get-peer-window-size
(generic reader).
(setf get-peer-window-size)
(generic writer).
get-scheme
(generic reader).
(setf get-scheme)
(generic writer).
get-stream-class
(generic reader).
(setf get-stream-class)
(generic writer).
get-streams
(generic reader).
(setf get-streams)
(generic writer).
go-away
(condition).
gzip-decoding-mixin
(class).
h2-not-supported-by-server
(condition).
handle-undefined-frame
(generic function).
header-collecting-mixin
(class).
http-stream-error
(function).
http-stream-error
(condition).
http-stream-to-string
(function).
http2-connection
(class).
http2-stream-minimal
(class).
is-utf8-p
(function).
make-transport-output-stream
(function).
maybe-end-stream
(function).
multi-part-data-stream
(class).
open-http2-stream
(function).
parse-altsvc-frame
(function).
parse-client-preface
(function).
parse-continuation-frame
(function).
parse-data-frame
(function).
parse-frame-header
(function).
parse-goaway-frame
(function).
parse-headers-frame
(function).
parse-ping-frame
(function).
parse-priority-frame
(function).
parse-push-promise-frame
(function).
parse-rst-stream-frame
(function).
parse-settings-frame
(function).
parse-window-update-frame
(function).
peer-acks-settings
(generic function).
peer-ends-http-stream
(generic function).
peer-expects-settings-ack
(generic function).
peer-resets-stream
(generic function).
priority
(structure).
process-end-headers
(generic function).
queue-frame
(generic function).
read-frame
(function).
send-headers
(function).
server-http2-connection
(class).
server-stream
(class).
set-peer-setting
(generic function).
state
(slot).
stream-based-connection-mixin
(class).
stream-collection
(class).
text-collecting-stream
(class).
too-big-frame
(condition).
utf8-parser-mixin
(class).
write-ack-setting-frame
(function).
write-altsvc-frame
(function).
write-binary-payload
(function).
write-buffer-connection-mixin
(class).
write-continuation-frame
(function).
write-data-frame
(function).
write-data-frame-multi
(function).
write-frame-header-to-vector
(function).
write-goaway-frame
(function).
write-headers-frame
(function).
write-ping-frame
(function).
write-priority-frame
(function).
write-push-promise-frame
(function).
write-rst-stream-frame
(function).
write-settings-frame
(function).
write-window-update-frame
(function).
*error-codes*
(special variable).
*flag-codes-keywords*
(special variable).
*frame-types*
(special variable).
*zip-buffer-size*
(special variable).
+altsvc-frame+
(constant).
+cancel+
(constant).
+compression-error+
(constant).
+connect-error+
(constant).
+continuation-frame+
(constant).
+data-frame+
(constant).
+enhance-your-calm+
(constant).
+flow-control-error+
(constant).
+frame-size-error+
(constant).
+goaway-frame+
(constant).
+headers-frame+
(constant).
+http-1-1-required+
(constant).
+inadequate-security+
(constant).
+internal-error+
(constant).
+known-frame-types-count+
(constant).
+no-error+
(constant).
+ping-frame+
(constant).
+priority-frame+
(constant).
+protocol-error+
(constant).
+push-promise-frame+
(constant).
+refused-stream+
(constant).
+rst-stream-frame+
(constant).
+settings-frame+
(constant).
+settings-timeout+
(constant).
+stream-closed+
(constant).
+window-update-frame+
(constant).
@accepting-data
(special variable).
@base-classes
(special variable).
@callbacks
(special variable).
@data
(special variable).
@data-received
(special variable).
@errors
(special variable).
@frame-handler
(special variable).
@frame-headers
(special variable).
@frame-parsers
(special variable).
@frame-writers
(special variable).
@frames-api
(special variable).
@frames-for-classes
(special variable).
@frames-implementation
(special variable).
@lisp-stream-emulation
(special variable).
@old-frame-functions
(special variable).
@rst
(special variable).
@stream-closed
(special variable).
@stream-states
(special variable).
@streams
(special variable).
@utf8
(special variable).
@warnings
(special variable).
@write-data-handling
(special variable).
account-read-window-contribution
(function).
account-write-window-contribution
(function).
bad-stream-state
(condition).
change-state-on-write-end
(function).
check-place-empty-and-set-it
(macro).
check-stream-state-ok
(function).
checked-length
(function).
checked-r-flag
(function).
client-preface-mismatch
(condition).
constant-output-stream
(class).
copy-frame-type
(function).
copy-priority
(function).
count-open-streams
(function).
decode-frame-header
(function).
define-frame-type
(macro).
define-frame-writer
(macro).
do-ping
(generic function).
do-ping-fn
(function).
do-pong-fn
(function).
duplicate-request-header
(condition).
dynamic-table-entry-size
(function).
find-just-stream-by-id
(function).
flags-to-code
(function).
flow-control-mixin
(class).
frame-code-type
(type).
frame-type
(structure).
frame-type-bad-state-error
(reader).
(setf frame-type-bad-state-error)
(writer).
frame-type-connection-ok
(reader).
(setf frame-type-connection-ok)
(writer).
frame-type-documentation
(reader).
(setf frame-type-documentation)
(writer).
frame-type-flag-keywords
(reader).
(setf frame-type-flag-keywords)
(writer).
frame-type-name
(reader).
(setf frame-type-name)
(writer).
frame-type-needs-connection
(condition).
frame-type-needs-stream
(condition).
frame-type-new-stream-state
(reader).
(setf frame-type-new-stream-state)
(writer).
frame-type-old-stream-ok
(reader).
(setf frame-type-old-stream-ok)
(writer).
frame-type-p
(function).
frame-type-receive-fn
(reader).
(setf frame-type-receive-fn)
(writer).
get-acked-settings
(generic reader).
(setf get-acked-settings)
(generic writer).
get-actual
(generic reader).
(setf get-actual)
(generic writer).
get-allowed
(generic reader).
(setf get-allowed)
(generic writer).
get-broken-char
(generic reader).
(setf get-broken-char)
(generic writer).
get-class
(generic reader).
(setf get-class)
(generic writer).
get-code
(generic reader).
(setf get-code)
(generic writer).
get-compression-context
(generic reader).
(setf get-compression-context)
(generic writer).
get-data
(generic reader).
(setf get-data)
(generic writer).
get-debug-data
(generic reader).
(setf get-debug-data)
(generic writer).
get-decompression-context
(generic reader).
(setf get-decompression-context)
(generic writer).
get-depends-on
(generic reader).
(setf get-depends-on)
(generic writer).
get-dstate
(generic reader).
(setf get-dstate)
(generic writer).
get-error-code
(generic reader).
(setf get-error-code)
(generic writer).
get-flag
(compiler macro).
get-flag
(function).
get-frame-size
(generic reader).
(setf get-frame-size)
(generic writer).
get-frame-type
(generic reader).
(setf get-frame-type)
(generic writer).
get-header
(generic reader).
(setf get-header)
(generic writer).
get-host
(generic reader).
(setf get-host)
(generic writer).
get-id-to-use
(generic reader).
(setf get-id-to-use)
(generic writer).
get-initial-peer-window-size
(generic reader).
(setf get-initial-peer-window-size)
(generic writer).
get-initial-window-size
(generic reader).
(setf get-initial-window-size)
(generic writer).
get-last-id-seen
(generic reader).
(setf get-last-id-seen)
(generic writer).
get-last-stream-id
(generic reader).
(setf get-last-stream-id)
(generic writer).
get-max-frame-size
(generic reader).
(setf get-max-frame-size)
(generic writer).
get-max-seen-so-far
(generic reader).
(setf get-max-seen-so-far)
(generic writer).
get-name
(generic reader).
(setf get-name)
(generic writer).
get-output-buffer
(generic reader).
(setf get-output-buffer)
(generic writer).
get-peer-accepts-push
(generic reader).
(setf get-peer-accepts-push)
(generic writer).
get-port
(generic reader).
(setf get-port)
(generic writer).
get-received
(generic reader).
(setf get-received)
(generic writer).
get-seen-text-header
(generic reader).
(setf get-seen-text-header)
(generic writer).
get-setting-code
(generic reader).
(setf get-setting-code)
(generic writer).
get-settings
(generic function).
get-state
(generic function).
(setf get-state)
(generic writer).
get-status
(generic reader).
(setf get-status)
(generic writer).
get-stream
(generic reader).
(setf get-stream)
(generic writer).
get-stream-id
(generic function).
(setf get-stream-id)
(generic writer).
get-text
(generic reader).
(setf get-text)
(generic writer).
get-to-write
(generic reader).
(setf get-to-write)
(generic writer).
get-value
(generic reader).
(setf get-value)
(generic writer).
get-weight
(generic reader).
(setf get-weight)
(generic writer).
get-window-open-fn
(generic reader).
(setf get-window-open-fn)
(generic writer).
get-window-size
(generic reader).
(setf get-window-size)
(generic writer).
get-window-size-increment-callback
(generic reader).
(setf get-window-size-increment-callback)
(generic writer).
handle-alt-svc
(generic function).
has-flag
(function).
header-error
(condition).
hpack-endpoint
(class).
http2-error
(condition).
http2-stream
(class).
http2-warning
(condition).
implement-by-user
(condition).
incorrect-enable-push-value
(condition).
incorrect-frame-size
(condition).
incorrect-frame-size-value
(condition).
incorrect-initial-window-size-value
(condition).
incorrect-ping-frame-size
(condition).
incorrect-pseudo-header
(condition).
incorrect-request-pseudo-header
(condition).
incorrect-response-pseudo-header
(condition).
incorrect-rst-frame-size
(condition).
incorrect-setting-value
(condition).
incorrect-settings-frame-size
(condition).
incorrect-window-update-frame-size
(condition).
is-our-stream-id
(generic function).
lowercase-header-field-name
(condition).
make-frame-type
(function).
make-priority
(function).
make-unknown-frame-type
(function).
maybe-lock-for-write
(generic function).
maybe-unlock-for-write
(generic function).
missing-header-octets
(condition).
missing-pseudo-header
(condition).
new-stream-id-too-low
(condition).
no-new-header-action
(condition).
no-payload-action
(condition).
null-connection-window-update
(condition).
null-stream-window-update
(condition).
our-id-created-by-peer
(condition).
padded-length
(function).
parse-header-frame*
(function).
parse-simple-frames-header-end-all
(function).
peer-opens-http-stream-really-open
(function).
peer-sends-push-promise
(generic function).
priority-exclusive
(reader).
(setf priority-exclusive)
(writer).
priority-p
(function).
priority-stream-dependency
(reader).
(setf priority-stream-dependency)
(writer).
priority-weight
(reader).
(setf priority-weight)
(writer).
protocol-error
(condition).
pseudo-header-after-text-header
(condition).
read-and-add-headers
(function).
read-continuation-frame-on-demand
(function).
read-padding-from-vector
(function).
read-priority
(function).
receiver-fn
(type).
reserved-bit-set
(condition).
send-ping
(generic function).
stream-protocol-error
(condition).
timeshift-pinging-connection
(class).
too-big-padding
(condition).
unexpected-continuation-frame
(condition).
unimplemented-feature
(condition).
unsupported-feature
(condition).
utf-first-char-size
(function).
utf-is-first-char
(function).
with-padding-marks
(macro).
write-31-bits
(function).
write-body-and-padding
(function).
write-frame
(function).
write-priority
(function).
write-sequences
(function).
write-simple-headers-frame
(function).
write-stream-id
(function).
writer-fn
(type).
http2/openssl
cffi
.
common-lisp
.
bio-new
(function).
bio-read%
(function).
bio-s-mem
(function).
bio-should-retry
(function).
bio-write
(function).
certificated-dispatcher
(class).
encrypt-some*
(function).
err-reason-error-string
(function).
handle-ssl-errors*
(function).
make-http2-tls-context
(generic function).
ssl-accept
(function).
ssl-error-condition
(condition).
ssl-free
(function).
ssl-is-init-finished
(function).
ssl-new
(function).
ssl-read%
(function).
ssl-set-accept-state
(function).
ssl-set-bio
(function).
with-ssl-context
(macro).
+ssl-filetype-asn1+
(constant).
+ssl-filetype-default+
(constant).
+ssl-filetype-pem+
(constant).
bio-test-flags
(function).
err-get-error
(function).
process-ssl-errors
(function).
ssl-ctx-check-private-key
(function).
ssl-ctx-ctrl
(function).
ssl-ctx-free
(function).
ssl-ctx-new
(function).
ssl-ctx-set-alpn-select-cb
(function).
ssl-ctx-set-options
(function).
ssl-ctx-use-certificate-chain-file
(function).
ssl-ctx-use-certificate-file
(function).
ssl-ctx-use-private-key-file
(function).
ssl-ctx-use-privatekey-file
(function).
ssl-get-error
(function).
ssl-pending
(function).
ssl-select-next-proto
(function).
ssl-write
(function).
tls-method
(function).
http2/hpack
anaphora
.
common-lisp
.
http2/utils
.
*use-huffman-coding-by-default*
(special variable).
compile-headers
(function).
do-decoded-headers
(function).
get-dynamic-table-size
(generic reader).
(setf get-dynamic-table-size)
(generic writer).
get-updates-needed
(generic reader).
(setf get-updates-needed)
(generic writer).
hpack-context
(class).
update-dynamic-table-size
(function).
*huffman-code*
(special variable).
+last-static-header-index+
(constant).
+last-static-header-pair+
(constant).
+literal-header-index+
(constant).
+literal-header-never-index+
(constant).
+literal-header-noindex+
(constant).
@hpack-api
(special variable).
add-dynamic-header
(generic function).
compute-header-size
(function).
compute-update-dynamic-size-codes
(function).
context-table-element
(type).
decode-huffman
(function).
decode-huffman-to-stream
(function).
decode-octet-fn
(function).
dynamic-table-value
(function).
encode-dynamic-table-update
(function).
encode-header
(function).
encode-huffman
(function).
find-header-in-tables
(function).
find-in-tables
(function).
find-pair-in-tables
(function).
get-bytes-left-in-table
(generic reader).
(setf get-bytes-left-in-table)
(generic writer).
get-deleted-items
(generic reader).
(setf get-deleted-items)
(generic writer).
get-dynamic-table
(generic reader).
(setf get-dynamic-table)
(generic writer).
get-integer-from-octet
(function).
header-writer
(function).
huffman-coded-size
(function).
incf*
(macro).
incomplete-header
(condition).
integer-to-array
(function).
make-cond-branch
(function).
read-from-tables
(function).
read-http-header
(function).
read-huffman
(function).
read-literal-header-field-new-name
(function).
read-literal-header-indexed-name
(function).
read-string-from-stream
(function).
static-headers-table
(special variable).
store-string
(function).
vector-index-to-hpack-index
(function).
write-indexed-header-pair
(function).
write-indexed-name
(function).
write-integer-to-array
(function).
write-literal-header-pair
(function).
http2
common-lisp
.
http2/client
.
http2/server
.
mgl-pax
.
@implementation
(special variable).
@index
(special variable).
@overview
(special variable).
@reference
(special variable).
@test
(special variable).
@tutorial
(special variable).
@tutorials
(special variable).
make-release-documentation
(function).
pages
(function).
http2/utils
common-lisp
.
mgl-pax
.
aref/wide
(function).
(setf aref/wide)
(function).
binary-stream
(class).
find-setting-by-id
(function).
find-setting-code
(function).
frame-size
(slot).
frame-size
(type).
get-error-name
(function).
get-index
(generic reader).
(setf get-index)
(generic writer).
http2-stream-state
(type).
make-full-pipe
(function).
make-initialized-octet-buffer
(function).
make-octet-buffer
(function).
make-pipe
(function).
octet-vector
(type).
pipe-end-for-read
(class).
pipe-end-for-write
(class).
stream-id
(slot).
stream-id
(slot).
stream-id
(slot).
stream-id
(type).
vector-from-hex-text
(function).
*settings*
(special variable).
@buffer-stream-and-pipes
(special variable).
@buffer-stream-and-pipes-impl
(special variable).
@utils
(special variable).
get-buffer
(generic reader).
(setf get-buffer)
(generic writer).
get-end
(generic reader).
(setf get-end)
(generic writer).
get-write-buffer
(generic reader).
(setf get-write-buffer)
(generic writer).
http2/server
HTTP/2 server functions - for example START to start the server and DEFINE-EXACT-HANDLER and HANDLER macro to define content to serve.
http2/server/shared
http2/server/poll
http2/server/threaded
cffi
.
common-lisp
.
dref
.
http2/core
.
http2/openssl
.
http2/stream-overlay
.
http2/utils
.
mgl-pax
.
*buffer*
(special variable).
*no-client-poll-timeout*
(special variable).
*poll-timeout*
(special variable).
*vanilla-server-dispatcher*
(special variable).
base-dispatcher
(class).
callback-on-server
(function).
compute-poll-timeout-value
(function).
constant-handler
(macro).
create-server
(function).
define-exact-handler
(macro).
define-prefix-handler
(macro).
detached-poll-dispatcher
(class).
detached-server-mixin
(class).
detached-single-client-dispatcher
(class).
detached-tls-single-client-dispatcher
(class).
detached-tls-threaded-dispatcher
(class).
do-new-connection
(generic function).
find-certificate-file
(function).
find-private-key-file
(function).
handler
(macro).
handler
(type).
kill-server
(function).
maybe-create-certificate
(function).
poll-dispatcher
(class).
poll-dispatcher-mixin
(class).
poll-timeout
(condition).
redirect-handler
(function).
run
(function).
run-scheduler-in-thread
(function).
schedule-task
(generic function).
scheduled-task
(class).
scheduler
(class).
scheduler-empty-p
(function).
scheduler-in-thread
(class).
send-goaway
(function).
send-text-handler
(function).
server-socket-stream
(generic function).
single-client-dispatcher
(class).
start
(function).
start-server-on-socket
(generic function).
stop
(function).
stop-scheduler-in-thread
(function).
threaded-dispatcher
(class).
threaded-server-mixin
(class).
tls-dispatcher-mixin
(class).
tls-single-client-dispatcher
(class).
tls-threaded-dispatcher
(class).
unsupported-server-setup
(condition).
url-from-port
(function).
url-from-socket
(function).
*clients*
(special variable).
*default-buffer-size*
(special variable).
*default-handler*
(special variable).
*dummy-last-task*
(special variable).
*empty-fdset-items*
(special variable).
*encrypt-buf-size*
(special variable).
*exact-handlers*
(special variable).
*fdset-size*
(special variable).
*nagle*
(special variable).
*prefix-handlers*
(special variable).
*scheduler*
(special variable).
*servers*
(special variable).
*vanilla-host*
(special variable).
+client-preface-length+
(constant).
@app-interface
(special variable).
@async-server
(special variable).
@dispatchers
(special variable).
@request-body
(special variable).
@request-details
(special variable).
@request-handling
(special variable).
@scheduling
(special variable).
@server
(special variable).
@server-actions
(special variable).
@server-classes
(special variable).
@server-content
(special variable).
@server-mixins
(special variable).
@server-reference
(special variable).
@server/threaded
(special variable).
accept
(function).
add-socket-to-fdset
(function).
add-state
(function).
cleanup-connection
(generic function).
client
(structure).
client-application-data
(reader).
(setf client-application-data)
(writer).
client-encrypt-buf
(reader).
(setf client-encrypt-buf)
(writer).
client-encrypt-buf-size
(reader).
(setf client-encrypt-buf-size)
(writer).
client-fd
(reader).
(setf client-fd)
(writer).
client-fdset-idx
(reader).
(setf client-fdset-idx)
(writer).
client-io-on-read
(reader).
(setf client-io-on-read)
(writer).
client-octets-needed
(reader).
(setf client-octets-needed)
(writer).
client-p
(function).
client-rbio
(reader).
client-ssl
(reader).
(setf client-ssl)
(writer).
client-start-time
(reader).
(setf client-start-time)
(writer).
client-state
(reader).
(setf client-state)
(writer).
client-wbio
(reader).
client-write-buf
(reader).
(setf client-write-buf)
(writer).
close-client-connection
(function).
close-fd
(function).
code
(slot).
compute-timeout
(function).
concatenate*
(function).
copy-client
(function).
decrypt-socket-octets
(function).
define-reader
(macro).
define-some-handler
(function).
define-writer
(macro).
detached-threaded-dispatcher
(class).
do-available-actions
(function).
done
(condition).
double-buffer-size
(function).
doubled-buffer
(function).
encrypt-and-send
(function).
encrypt-data
(function).
encrypt-some
(function).
errno
(function).
errno%
(function).
fcntl
(function).
find-matching-handler
(function).
get-action-name
(generic reader).
(setf get-action-name)
(generic writer).
get-action-to-run
(generic reader).
(setf get-action-to-run)
(generic writer).
get-alpn
(generic reader).
(setf get-alpn)
(generic writer).
get-client
(generic reader).
(setf get-client)
(generic writer).
get-code
(generic reader).
(setf get-code)
(generic writer).
get-connection-args
(generic reader).
(setf get-connection-args)
(generic writer).
get-connection-class
(generic reader).
(setf get-connection-class)
(generic writer).
get-dispatcher
(generic reader).
(setf get-dispatcher)
(generic writer).
get-exact-handlers
(generic reader).
(setf get-exact-handlers)
(generic writer).
get-fdset-size
(generic reader).
(setf get-fdset-size)
(generic writer).
get-internal-time-to-run
(generic reader).
(setf get-internal-time-to-run)
(generic writer).
get-nagle
(generic reader).
(setf get-nagle)
(generic writer).
get-name
(generic reader).
(setf get-name)
(generic writer).
get-next-task
(function).
get-no-client-poll-timeout
(generic function).
(setf get-no-client-poll-timeout)
(generic writer).
get-poll-timeout
(generic reader).
(setf get-poll-timeout)
(generic writer).
get-prefix-handlers
(generic reader).
(setf get-prefix-handlers)
(generic writer).
get-scheduled-tasks
(generic reader).
(setf get-scheduled-tasks)
(generic writer).
get-thread
(generic reader).
(setf get-thread)
(generic writer).
get-tls
(generic function).
get-tls-stream
(generic reader).
(setf get-tls-stream)
(generic writer).
get-url
(generic reader).
(setf get-url)
(generic writer).
handle-client-io
(function).
handle-ssl-errors
(function).
if-state
(function).
init-fdset
(function).
make-client%
(function).
make-client-object
(function).
maybe-init-ssl
(function).
move-encrypted-bytes
(function).
not-http2-stream
(condition).
on-complete-ssl-data
(function).
poll
(function).
poll-server-connection
(class).
process-client-fd
(function).
process-client-sockets
(function).
process-data-on-socket
(function).
process-new-client
(function).
process-server-stream
(function).
pull-once-push-bytes
(function).
pull-push-bytes
(function).
push-bytes
(function).
queue-encrypted-bytes
(function).
read-2
(function).
read-encrypted-from-openssl
(function).
read-from-peer
(function).
remove-state
(function).
routing-mixin
(class).
run-mature-tasks
(function).
run-user-callback
(function).
scheduling-handler
(macro).
select-next-action
(function).
send-to-peer
(function).
send-unencrypted-bytes
(function).
serve-tls
(function).
set-fd-slot
(function).
set-next-action
(function).
setsockopt
(function).
setup-new-connect-pollfd
(function).
setup-port
(function).
ssl-err-reason-error-string
(function).
ssl-read
(function).
states-to-string
(function).
stop-server
(generic function).
strerror
(function).
strerror-r%
(function).
time-to-action
(function).
vanilla-server-connection
(class).
vanilla-server-stream
(class).
with-standard-handlers
(macro).
write-2
(function).
write-data-to-socket
(function).
write-octets-to-decrypt
(function).
Definitions are sorted by export status, category, package, and then by lexicographic order.
Preallocated buffer for reading from stream. This is initialized for each connection depending on the dispatch method.
Default class to be used for new connections in FETCH-RESOURCE.
Default timeout in seconds to use when there is no client (to limit time to a client to
connect).
This is supposed to be used primarily in the automated tests, where you do not
want indefinite waits in case of a problem.
On timeout signals POLL-TIMEOUT error.
Default means an indefinite wait.
Default timeout in seconds to use for poll when there are connected clients,
but no client communication.
On timeout signals POLL-TIMEOUT error.
Default means an indefinite wait.
Is set, the headers are by default huffman-encoded. Special value :maybe means whatever is shorter, plain encoding in case of draw.
Default value of the server dispatcher. One of DETACHED-TLS-THREADED-DISPATCHER ot POLL-DISPATCHER
The client connection preface starts with a sequence of 24 octets, which in hex notation is this. That is, the connection preface starts with the string "PRI * HTTP/2.0rnrnSMrnrn").
Run BODY with STREAM-NAME bound to a stream named STREAM-NAME. Return octets
that represent text written to that stream given specified CHARSET, possibly
compressed.
“‘cl-transcript
(http2/core:compile-payload-from-stream (foo :utf8 nil) (princ "Hello😃" foo))
=> #(72 101 108 108 111 240 159 152 131)
“‘
Run BODY to print the output to FLEXI-STREAM-NAME in compile time. This constant (static) page is served every time as-is.
Define function to run when peer closes http stream on CONNECTION (or any server defined in future) if the path of the stream is PATH.
Define function to run when peer closes http stream on CONNECTION (or any server defined in future) if the path of the stream starts with PREFIX.
Return a HANDLER type function.
This handler, when called, runs BODY in a context where
- FLEXI-STREAM-NAME is bound to an open flexi stream that can be written to (to write response). On background, written text is converted from CHARSET to octets, possibly compressed by GZIP and split into frames,
- and two lexical functions are defined, SEND-HEADERS and SEND-GOAWAY.
The SEND-HEADERS sends the provided headers to the STREAM.
The SEND-GOAWAY sends go away frame to the client to close connection.
The handler body needs to close the underlying stream if the response is
actually to be sent, or possibly schedule sending more data for later.
Run body with SSL context created by MAKE-SSL-CONTEXT in CTX.
Same as read-bytes, but from a sequence
Return a function that takes one parameter, URL, as a parameter and calls FN on it in a separate thread. Then it kills the server by invoking KILL-SERVER restart.
This is to be used as callback on an open server for testing it.
Close the http2 stream.
It marks the stream as closed, which is maybe unnecessary, as the stream is
immediately removed from the list of streams of its connection. This is
consistent with the concept that any stream not in the connection streams
explicitly is either idle (if above last-id-seen or id-to-use, depending on
even/odd) or closed - see FIND-HTTP-STREAM-BY-ID.
The removal of unused streams is necessary to prevent leakage for big requests -
other solution would be to send go-away after the number of streams is too high;
however some clients (e.g., h2load) do not retry when they receive this.
This stream removal should be done with lock on the appropriate stream when in multiple threads.
Compile headers with given CONTEXT to an array. Context can be NIL; if it is
not, the headers are stored in the dynamic table and the CONTEXT it is updated
appropriately.
Each header is a list of form (NAME VALUE &KEY HUFFMAN INDEX):
- NO-INDEX indicates that it should be stored in the dynamic table (if possible), should not, or use the NEVER encoding (value :never), - HUFFMAN to use huffman encoding
Compute poll timeout from "nice" value (seconds or :∞) to value accepted by poll (miliseconds or -1)
Return a client TLS stream to HOST on PORT, created using SNI and with specified ALPN protocol (H2 by default).
Send \GOAWAY frame to the PEER and raise the CONNECTION-ERROR[condition]. NETWORK-STREAM used.
Create new local stream of default class on CONNECTION. Additional PARS are passed to the make-instance
Create a server on HOST and PORT that handles connections using DISPATCH-METHOD.
Establishes restart KILL-SERVER to close the TCP connection and return.
Calls DO-NEW-CONNECTION to actually handle the connections after the callback
returns This function also receives the listening socket and TLS and
DISPATCH-METHOD as parameters.
Additional keyword parameters are allowed; they are defined and consumed by the dispatcher.
Call FN on each header decoded from DATA between START and END.
Return nil if the complete headers were processed, or index to first unprocessed octet.
Return values as from DRAKMA:HTTP-REQUEST. Some of the values are meaningless,
but kept for compatibility purposes.
- body of the reply
- status code as integer
- alist of headers
- the URL the reply came from (bogus value)
- the connection the reply comes from (not network stream as in Drakma, but same purpose - can be reused for ruther queries.)
- whether connection is closed (passed as parameter)
- reason phrase (bogus value)
Guess charset from the content type. NIL for binary data.
Find a certificate file for private key stored in KEYPATH.
Try file of same name ending with .crt, or, if the name of private key was privkey.pem, try fullchain.pem (this is what let’s encrypt uses).
Find HTTP stream in the connection.
Returns either HTTP2-STREAM object (existing or new), CONNECTION or one of IDLE
and CLOSED for yet or already nonexistent streams.
Also do some checks on the stream id based on the frame type.
Find the private key for HOSTNAME or create it.
Look for
- /etc/letsencrypt/live/<hostname>privkey.pem (this is where let’s encrypt stores them)
- file named <hostname>.key in /tmp (ad-hoc generated files)
If it does not exist, generate the key and self signed cert in /tmp/
Find setting name by code
Get HTTP/2 error name from the error code.
Check RET value of a openssl call. Either raise a condition, or return a state to add to the client, if any, or nil
We detected a HTTP2-STREAM-ERROR in a peer frame. So we send a RST frame, raise appropriate warning in case someone is interested, close affected stream, and continue.
HTTP-STREAM should be a TEXT-COLLECTING-STREAM.
HTTP-STREAM-TO-VECTOR then assembles the text from individual chunks.
Test headers to see if the encoding is UTF-8.
Kill server by invoking KILL-SERVER restart, if it exists.
Two values, each representing one end of a full binary pipe: writes to ones are read from the other.
Two values, each representing one end of a freshly created one-way binary pipe: writer and reader. They share the buffer.
An OUTPUT-STREAM built atop RAW STREAM with added text to binary encoding using charset (as understood by flexi-streams) and possibly gzip compression.
Generate key and a self-signed certificate to it for localhost using openssl cli.
Close the STREAM if FLAGS indicates so. It changes state to either of
Open HTTP/2 stream (typically, from client side) by sending headers.
- STREAM-PARS are used as parameters for creating new stream instance.
- HEADERS are headers to be send for the client. You can use REQUEST-HEADERS to
get necessary headers.
- END-HEADERS is aflag to the server that no more headers would be sent; true by default.
- END-STREAM is a flag to the server that there would be no payload.
Parse client preface.
Check that buffer contains a client preface, or raise an error.
Then write the initial settings frame, and expect normal frame. Actually, this should be a settings frame, but this is not enforced now.
Parse header (9 octets array) and return two values, a function to parse following data (that can be again #’PARSE-FRAME-HEADER if there is no payload), and size of data that the following function expects.
Read incoming headers and call ADD-HEADER callback for each header.
Call PROCESS-END-HEADERS and PEER-ENDS-HTTP-STREAM (in this order) if relevant
flag is set.
At the beginning, invoke APPLY-STREAM-PRIORITY if priority was present.
@FRAME-HANDLER built atop CL streams.
Read and process frames on the input stream taken from the CONNECTION’s network-stream.
Finish normally when either
- peer closes connection (END-OF-FILE, CONNECTION-ERROR condition or CL+SSL::SSL-ERROR was signalled), or
- JUST-PENDING was true, we are at a frame border and there is no additional input on the stream
This is to be called on client when the initial request was send, or on server
to serve requests.
May block.
Read one frame related to the CONNECTION from STREAM. Flush outstanding data to write, read the header and process it.
A handler that emits redirect response with http status being CODE, and optionally provides CONTENT with CONTENT-TYPE.
Encode standard request headers. The obligatory headers are passed as the positional arguments. ADDITIONAL-HEADERS are a list of conses, each containing header name and value.
Retrieve URL (a string) through HTTP/2 over TLS.
See FETCH-RESOURCE for documentation of the keyword parameters.
Example:
“‘
(http2/client:retrieve-url "https://example.com")
==> "<!doctype html>
... <html>
... <head>
... <title>Example Domain</title>
...
... <meta charset="utf-8" />
... <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
... <meta name="viewport" conten...[sly-elided string of length 1256]"
==> 200 (8 bits, #xC8, #o310, #b11001000)
==> (("content-length" . "1256") ("x-cache" . "HIT") ("vary" . "Accept-Encoding")
... ("server" . "ECS (bsb/27E0)")
... ("last-modified" . "Thu, 17 Oct 2019 07:18:26 GMT")
... ("expires" . "Thu, 28 Sep 2023 19:38:44 GMT")
... ("etag" . "\"3147526947+ident\"") ("date" . "Thu, 21 Sep 2023 19:38:44 GMT")
... ("content-type" . "text/html; charset=UTF-8")
... ("cache-control" . "max-age=604800") ("age" . "151654"))
==> "/"
==> #<VANILLA-CLIENT-CONNECTION >
==> NIL
==> "HTTP2 does not provide reason phrases"
“‘
See DRAKMA-STYLE-STREAM-VALUES for meaning of the individual values.
Run a default HTTP/2 server on PORT on foreground.
Make a thread that runs tasks as they mature. CONTINUE restart can be used during the sleep to re-asses next tasks.
Start closing connection, sending CODE and DEBUG-DATA in the go-away frame to peer. Must be called from inside of HANDLER macro.
Send HEADERS to a HTTP2 stream. The stream is returned.
The END-HEADERS and END-STREAM allow to set the appropriate flags.
Inside HANDLER macro, this names a function that has the STREAM argument implicit and only HEADERS and key parameters are to be provided.
A handler that returns TEXT as content of CONTENT-TYPE.
TEXT is evaluated when handler is defined, not when handler is invoked. For
content that can change on individual invocations write to the stream.
ADDITIONAL-HEADERS are sent along with :status and content-type headers.
Start a default HTTP/2 https server on PORT on background.
Returns two values with a detached (see below) dispatcher, which is default:
- Server instance (that is appropriate parameter for stop)
- base url of the server (most useful when PORT was 0 - any free port)
With a non-detached dispatcher the value is not specified.
DISPATCHER parameter sets the dispatcher to use for the server. Dispatchers
determine how are new requests handled. Presently there are several sets of
dispatchers defined, see @DISPATCHERS
Detached variants run the server in a separate thread and returns immediately
after opening the socket.
Value of *VANILLA-SERVER-DISPATCHER* is not specified (set it if you care) but
should be presently best detached dispatcher.
FIND-PRIVATE-KEY-FILE and FIND-CERTIFICATE-FILE as default values for the respective parameters try to locate the files.
Stop a server and remove it from list of servers.
Update dynamic table for new size that is smaller than the previous one. This is
called after receiving appropriate settings update.
Zero size means evict completely; in this case the new vector can be cleaned
Return URL that combines HOST with the port of the SOCKET.
This is to be used as callback fn on an open server for testing it.
Return URL that combines HOST with the port of the SOCKET.
This is to be used as callback fn on an open server for testing it.
Convert a hex string to an octet vector.
Write ACK settings frame.
ACK (0x1): When set, bit 0 indicates that this frame acknowledges receipt and application of the peer’s SETTINGS frame. When this bit is set, the payload of the SETTINGS frame MUST be empty. Receipt of a SETTINGS frame with the ACK flag set and a length field value other than 0 MUST be treated as a connection error (Section 5.4.1) of type FRAME_SIZE_ERROR. For more information, see Section 6.5.3 ("Settings Synchronization").
See RFC 7838. The ALTSVC HTTP/2 frame advertises the availability of an
alternative service to an HTTP/2 client.
“‘ +——————————-+——————————-+ | Origin-Len (16) | Origin? (*) ... +——————————-+——————————-+ | Alt-Svc-Field-Value (*) ... +—————————————————————+ “‘
Write binary PAYLOAD to the http2 STREAM.
The payload is written in chunks of peer frame size, and if the available window is not big enough we stop writing and return, making sure that the writing continues when window size increases.
“‘
+—————————————————————+
| Header Block Fragment (*) ...
+—————————————————————+
“‘
The CONTINUATION frame (type=0x9) is used to continue a sequence of header block fragments (Section 4.3). Any number of CONTINUATION frames can be sent, as long as the preceding frame is on the same stream and is a HEADERS, PUSH_PROMISE, or CONTINUATION frame without the END_HEADERS flag set.
“‘
+—————+———————————————–+
| Data (*) ...
+—————————————————————+
“‘
DATA frames (type=0x0) convey arbitrary, variable-length sequences of octets associated with a stream. One or more DATA frames are used, for instance, to carry HTTP request or response payloads.
Write a data frame that includes DATA - that is a sequence of octet vectors.
Write a frame header to an octet buffer.
“‘
+-+————————————————————-+
|R| Last-Stream-ID (31) |
+-+————————————————————-+
| Error Code (32) |
+—————————————————————+
| Additional Debug Data (*) |
+—————————————————————+
“‘
The GOAWAY frame (type=0x7) is used to initiate shutdown of a connection or to signal serious error conditions. GOAWAY allows an endpoint to gracefully stop accepting new streams while still finishing processing of previously established streams. This enables administrative actions, like server maintenance.
“‘
+-+————-+———————————————–+
|E| Stream Dependency? (31) |
+-+————-+———————————————–+
| Weight? (8) |
+-+————-+———————————————–+
| Header Block Fragment (*) ...
+—————————————————————+
“‘
The HEADERS frame (type=0x1) is used to open a stream (Section 5.1), and additionally carries a header block fragment. HEADERS frames can .be sent on a stream in the "idle", "reserved (local)", "open", or "half-closed (remote)" state.
The PING frame (type=0x6) is a mechanism for measuring a minimal
round-trip time from the sender, as well as determining whether an
idle connection is still functional. PING frames can be sent from
any endpoint.
“‘
+—————————————————————+
| |
| Opaque Data (64) |
| |
+—————————————————————+
“‘
In addition to the frame header, PING frames MUST contain 8 octets of
opaque data in the payload. A sender can include any value it
chooses and use those octets in any fashion.
Receivers of a PING frame that does not include an ACK flag MUST send
a PING frame with the ACK flag set in response, with an identical
payload. PING responses SHOULD be given higher priority than any
other frame.
The PING frame defines the following flags:
ACK (0x1): When set, bit 0 indicates that this PING frame is a PING response. An endpoint MUST set this flag in PING responses. An endpoint MUST NOT respond to PING frames containing this flag.
The PRIORITY frame (type=0x2) specifies the sender-advised priority
of a stream ([Section 5.3](https://www.rfc-editor.org/rfc/rfc9113.html#name-prioritization)).
“‘
+-+————————————————————-+
|E| Stream Dependency (31) |
+-+————-+———————————————–+
| Weight (8) |
+-+————-+
“‘
The payload of a PRIORITY frame contains the following fields:
E: A single-bit flag indicating that the stream dependency is
exclusive.
Stream Dependency: A 31-bit stream identifier for the stream that
this stream depends on.
Weight: An unsigned 8-bit integer representing a priority weight for
the stream. Add one to the value to obtain a
weight between 1 and 256.
The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint
in advance of streams the sender intends to initiate. The
PUSH_PROMISE frame includes the unsigned 31-bit identifier of the
stream the endpoint plans to create along with a set of headers that
provide additional context for the stream. Section 8.2 contains a
thorough description of the use of PUSH_PROMISE frames.
“‘
+-+————-+———————————————–+
|R| Promised Stream ID (31) |
+-+—————————–+——————————-+
| Header Block Fragment (*) ...
+—————————————————————+
“‘
The PUSH_PROMISE frame payload has the following fields:
R: A single reserved bit.
Promised Stream ID: An unsigned 31-bit integer that identifies the
stream that is reserved by the PUSH_PROMISE. The promised stream
identifier MUST be a valid choice for the next stream sent by the
sender (see "new stream identifier" in Section 5.1.1).
Header Block Fragment: A header block fragment (Section 4.3)
containing request header fields.
The PUSH_PROMISE frame defines the following flags:
END_HEADERS (0x4): When set, bit 2 indicates that this frame
contains an entire header block (Section 4.3) and is not followed
by any CONTINUATION frames.
A PUSH_PROMISE frame without the END_HEADERS flag set MUST be followed by a CONTINUATION frame for the same stream. A receiver MUST treat the receipt of any other type of frame or a frame on a different stream as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
The RST_STREAM frame (type=0x3) allows for immediate termination of a
stream. RST_STREAM is sent to request cancellation of a stream or to
indicate that an error condition has occurred.
“‘
+—————————————————————+
| Error Code (32) |
+—————————————————————+
“‘
The RST_STREAM frame contains a single unsigned, 32-bit integer
identifying the error code (Section 7). The error code indicates why
the stream is being terminated.
The RST_STREAM frame does not define any flags.
“‘
+——————————-+
| Identifier (16) |
+——————————-+——————————-+
| Value (32) |
+—————————————————————+
“‘
The SETTINGS frame (type=0x4) conveys configuration parameters that affect how endpoints communicate, such as preferences and constraints on peer behavior. The SETTINGS frame is also used to acknowledge the receipt of those parameters. Individually, a SETTINGS parameter can also be referred to as a "setting".
“‘
+-+————————————————————-+
|R| Window Size Increment (31) |
+-+————————————————————-+
“‘
The WINDOW_UPDATE frame (type=0x8) is used to implement flow control; see Section 5.2 for an overview. Flow control operates at two levels: on each individual stream and on the entire connection.
server-stream
) (name symbol
) value) ¶client-stream
) (name symbol
) value) ¶header-collecting-mixin
) name value) ¶STREAM (a HTTP/2 stream) should process received PAYLOAD from the data frame from START to END.
http2-stream-with-input-stream
) frame-data start end) ¶fallback-all-is-ascii
) payload start end) ¶utf8-parser-mixin
) payload start end) ¶When headers satisfy IS-UTF8-P, convert the the binary frame to text (taking care about UTF-8 characters possibly split between frames) and call APPLY-TEXT-DATA-FRAME on it.
gzip-decoding-mixin
) payload start end) ¶When there is a ‘Content-Encoding: gzip‘ header, decompress the data and call next APPLY-DATA-FRAME methods.
Just ignore the data and warn about it.
body-collecting-mixin
) data start end) ¶Concatenate received data to the BODY slot of the object.
Called when priority frame - or other frame with priority settings set - arrives. Does nothing, as priorities are deprecated in RFC9113 anyway.
text-collecting-stream
) text) ¶Called on window update frame. By default, increases PEER-WINDOW-SIZE slot of the strem or connection.
multi-part-data-stream
) increment) ¶(eql :closed)
) increment) ¶flow-control-mixin
) increment) ¶Called when a go-away frame is received. By default throws GO-AWAY condition if error was reported.
server-http2-connection
) error-code last-stream-id debug-data) ¶This method is implemented for the separate connection types. It waits on
new (possibly tls) connection to the LISTENING-SOCKET and start handling it
using DISPATCH-METHOD.
See @IMPLEMENTATIONS for available DISPATCH-METHOD.
TLS is either NIL or :TLS. Note that when using HTTP/2 without TLS, most clients
have to be instructed to use tls - e.g., –http2-prior-knowledge for curl.
Raise UNSUPPORTED-SERVER-SETUP if there is no relevant method.
poll-dispatcher-mixin
)) ¶Handle new connections by adding pollfd to and then polling.
When poll indicates available data, process them with openssl using BIO. Data to
the client are sent to SSL to BIO to socket buffer (and again poll to write
them).
This in the end does not use usocket, async nor cl+ssl - it is a direct rewrite from C code.
threaded-dispatcher
)) ¶single-client-dispatcher
)) ¶Called when ping-frame with ACK is received. By default warns about unexpected ping response; see also TIMESHIFT-PINGING-CONNECTION mixin.
timeshift-pinging-connection
) data) ¶Retrieve URL over some medium - HTTP/2 connection, network socket, .....
The ARGS is a property list used by some methods and ignored/passed down by others.
string
) args) ¶Parse URL into PURI:URI object and fetch the resource using that.
uri
) args) ¶Convert URL into an instance of SIMPLE-REQUEST, REQUEST-WITH-UTF8-BODY or REQUEST-WITH-BINARY-BODY class.
Pass ARGS to the MAKE-INSTANCE call.
If ARGS (a property list) has CONTENT property, check its type - if it is a
string, REQUEST-WITH-UTF8-BODY is created, if a simple or octet vector,
REQUEST-WITH-BINARY-BODY, if not present or nil SIMPLE-REQUEST. If it is
something else, behaviour is undocumented.
Note that some of the methods actually wait to get the responses.
(eql :connect)
) (request generic-request
) args) ¶Not part of API.
stream
) (request generic-request
) args) ¶Open HTTP/2 connection over the STREAM and fetch the resource using this connection.
*Wait for the pending frames to actually receive the response*.
Class of the new connection is taken from :CONNECTION-CLASS property of ARGS, falling back to *DEFAULT-CLIENT-CONNECTION-CLASS*. ARGS are passed to the MAKE-INSTANCE.
client-http2-connection
) (request generic-request
) args) ¶Open the new stream by sending headers frame to the server.
Details of the frame are taken from the REQUEST instance.
Return the new stream.
client-http2-connection
) (request request-with-utf8-body
) args) ¶Open the HTTP/2 stream and send out the content as UTF-8.
client-http2-connection
) (request request-with-binary-body
) args) ¶Open the HTTP/2 stream and send out the content as octets sequence.
Send all the pending connection data to the peer.
poll-server-connection
)) ¶stream-based-connection-mixin
)) ¶server-stream
)) ¶server-stream
)) ¶The authority portion of the target URI ([RFC3986], Section 3.2)
body-collecting-mixin
)) ¶body-collecting-mixin
)) ¶Body of the request as an octet vector.
May be empty if some higher priority mixin (e.g., UTF8-PARSER-MIXIN) processed the data.
body
.
http2-stream-minimal
)) ¶automatically generated reader method
http2-connection
)) ¶connection-error
)) ¶http2-stream-minimal
)) ¶automatically generated writer method
connection-error
)) ¶hpack-context
)) ¶automatically generated reader method
hpack-context
)) ¶automatically generated writer method
request-with-body
)) ¶generic-request
)) ¶automatically generated reader method
header-collecting-mixin
)) ¶List of collected (header . value) pairs. Does not include ‘:method‘, ‘:path‘, etc.
generic-request
)) ¶automatically generated writer method
header-collecting-mixin
)) ¶List of collected (header . value) pairs. Does not include ‘:method‘, ‘:path‘, etc.
payload-input-stream
)) ¶automatically generated reader method
pipe-end-for-read
)) ¶automatically generated reader method
payload-input-stream
)) ¶automatically generated writer method
pipe-end-for-read
)) ¶automatically generated writer method
threaded-server-mixin
)) ¶automatically generated reader method
lock
.
threaded-server-mixin
)) ¶automatically generated writer method
lock
.
frame-context
)) ¶automatically generated reader method
frame-context
)) ¶automatically generated writer method
generic-request
)) ¶automatically generated reader method
server-stream
)) ¶The HTTP method ([RFC7231], Section 4)
generic-request
)) ¶automatically generated writer method
server-stream
)) ¶The HTTP method ([RFC7231], Section 4)
Get network stream for the object.
stream-based-connection-mixin
)) ¶automatically generated reader method
http2-stream
)) ¶stream-based-connection-mixin
)) ¶automatically generated writer method
server-stream
)) ¶server-stream
)) ¶The path and query parts of the target URI
path
.
flow-control-mixin
)) ¶automatically generated reader method
flow-control-mixin
)) ¶automatically generated writer method
threaded-server-mixin
)) ¶automatically generated reader method
threaded-server-mixin
)) ¶automatically generated writer method
server-stream
)) ¶server-stream
)) ¶Scheme portion of the target URI ([RFC3986], Section 3.1).
Not restricted to "http" and "https" schemed URIs.
A proxy or gateway can translate requests for non-HTTP schemes,
enabling the use of HTTP to interact with non-HTTP services
stream-collection
)) ¶stream-collection
)) ¶Class for new streams
http2-connection
)) ¶http2-connection
)) ¶Class for new streams
stream-collection
)) ¶Sequence of streams the connection knows about.
This includes all open and half-closed streams, but not the already closed and
idle streams.
stream-collection
)) ¶Sequence of streams the connection knows about.
This includes all open and half-closed streams, but not the already closed and
idle streams.
hpack-context
)) ¶automatically generated reader method
hpack-context
)) ¶automatically generated writer method
Callback that is called when a frame of unknown type is received.
Make TLS context suitable for http2.
Practically, it means:
- ALPN callback that selects h2 if present,
- Do not request client certificates
- Do not allow ssl compression and renegotiation.
We should also limit allowed ciphers, but we do not.
certificated-dispatcher
)) ¶Called when SETTINGS-FRAME with ACK flag is received. By default does nothing.
Do relevant state changes when peer closes HTTP-STREAM (as part of received HEADERS or
PAYLOAD). Does nothing by default; client and server would want to specialize it to send response or process it.
vanilla-server-stream
)) ¶Send appropriate payload, or an error page.
vanilla-client-stream
)) ¶Called when settings-frame without ACK is received, after individual SET-PEER-SETTING calls. By default, send ACK frame.
The RST_STREAM frame fully terminates the referenced stream and causes it to enter the "closed" state. After receiving a RST_STREAM on a stream, the receiver MUST NOT send additional frames for that stream, with the exception of PRIORITY. However, after sending the RST_STREAM, the sending endpoint MUST be prepared to receive and process additional frames sent on the stream that might have been sent by the peer prior to the arrival of the RST_STREAM.
gzip-decoding-mixin
)) ¶client-stream
)) ¶server-stream
)) ¶Send or queue FRAME (octet vector) to the connection.
Each connection has to actually implement it.
Existing implementations are for:
- STREAM-BASED-CONNECTION-MIXIN, where the data are simply sent to the List stream, - WRITE-BUFFER-CONNECTION-MIXIN, where the data are pushed to a buffer.
poll-server-connection
) frame) ¶threaded-server-mixin
) frame) ¶write-buffer-connection-mixin
) frame) ¶stream-based-connection-mixin
) frame) ¶scheduler-in-thread
) delay action name) ¶Add a new action to server with scheduler. If scheduler already has a thread, wake it up by invoking CONTINUE restart.
Make a Lisp stream from a socket. This is primarily used as a hook to insert TLS layer when needed.
tls-dispatcher-mixin
)) ¶The cl-ssl server socket.
Process received information about peers setting.
The setting relates to the CONNECTION. NAME is a keyword symbol (see *SETTINGS*, subject to possible change to 16bit number in future) and VALUE is 32bit number.
Fallback.
(eql :header-table-size)
) value) ¶(eql :initial-window-size)
) value) ¶(eql :max-frame-size)
) value) ¶(eql :no-rfc5740-priorities)
) value) ¶(eql :max-header-list-size)
) value) ¶client-http2-connection
) (name (eql :enable-push)
) value) ¶server-http2-connection
) (name (eql :enable-push)
) value) ¶(eql :max-concurrent-streams)
) value) ¶tls-threaded-dispatcher
) socket) ¶detached-server-mixin
) socket) ¶payload-input-stream
) &key &allow-other-keys) ¶payload-output-stream
) &key &allow-other-keys) ¶hpack-context
) stream) ¶payload-input-stream
) &key base-http2-stream &allow-other-keys) ¶payload-output-stream
) &key base-http2-stream connection window-size &allow-other-keys) ¶client-http2-connection
) &key &allow-other-keys) ¶In HTTP/2, each endpoint is required to send a connection preface as a
final confirmation of the protocol in use and to establish the
initial settings for the HTTP/2 connection. The client and server
each send a different connection preface.
The client connection preface starts with a sequence of 24 octets. This sequence MUST be followed by a SETTINGS frame (Section 6.5), which MAY be empty.
constant-output-stream
) &key &allow-other-keys) ¶http2-stream
) &key connection) ¶window-is-closed
) stream) ¶connection-error
) out) ¶server-stream
) out) ¶http2-connection
) out) ¶http-stream-error
) out) ¶too-big-frame
) stream) ¶frame-type
) stream) ¶client-preface-mismatch
) out) ¶http2-stream
) out) ¶no-payload-action
) out) ¶ssl-error-condition
) stream) ¶hpack-context
) stream) ¶pipe-end-for-read
) stream) ¶pipe-end-for-write
) stream) ¶detached-server-mixin
) out) ¶scheduled-task
) stream) ¶binary-stream
)) ¶payload-output-stream
)) ¶sb-gray
.
payload-input-stream
)) ¶sb-gray
.
pipe-end-for-read
)) ¶If the index is not on end of stream, it can probably be read.
Note that this does not work on clisp, see https://clisp.sourceforge.io/impnotes/non-block-io.html
sb-gray
.
payload-input-stream
)) ¶sb-gray
.
pipe-end-for-read
)) ¶sb-gray
.
payload-output-stream
) byte) ¶Write an octet to the output buffer.
Special cases:
- Buffer is full -> warn and do nothing (FIXME: handle it somehow)
- Buffer contains more that max peer frame size octets -> send the data out
sb-gray
.
constant-output-stream
) byte) ¶sb-gray
.
pipe-end-for-write
) byte) ¶sb-gray
.
payload-output-stream
) sequence start end &key) ¶trivial-gray-streams
.
Handled by RETRIEVE-URL. The client should signal it when the processing is done.
condition
.
(quote nil)
:result
A connection error is signalled when we detect an illegal frame content.
Use [CONNECTION-ERROR][function] function to signal it or its subclasses. Application must handle it, including closing associated NETWORK-STREAM.
Length of the padding is the length of the frame payload or greater.
Signaled when GO-AWAY frame is received.
Poll was called with a timeout and returned before any file descriptor became ready.
error
.
The socket on the other side is closed.
error
.
:code
Frame exceeds the size defined in SETTINGS_MAX_FRAME_SIZE.
error
.
:dispatcher
Structure capturing stream priority parameters.
Initarg | Value |
---|---|
:connection-class | (quote vanilla-server-connection) |
:connection-args | nil |
:connection-class
:connection-args
:url
Mixin to collect all payload parts to one string.
Initarg | Value |
---|---|
:body | nil |
Body of the request as an octet vector.
May be empty if some higher priority mixin (e.g., UTF8-PARSER-MIXIN) processed the data.
:body
Dispatcher with two slots, CERTIFICATE-FILE and PRIVATE-KEY-FILE, that are used for TLS context creation.
Client connections have odd-numbered streams.
Initarg | Value |
---|---|
:id-to-use | 1 |
HTTP2 stream that checks headers as required for clients (no psedoheader other than :status allowed, etc.
Initarg | Value |
---|---|
:status | nil |
HTTP status code field (see [RFC7231], Section 6)
:status
Detached version of the POLL-DISPATCHER.
Base class for requests. It has slots for URI, HTTP METHOD, HEADERS (some headers are implicit) and NO-BODY flag to determine whether there would be data frames sent.
Initarg | Value |
---|---|
:method | get |
:headers | nil |
:uri
common-lisp
.
:method
:headers
:no-body
:dstate
Mixin to be used to collect all observed headers to a slot.
Initarg | Value |
---|---|
:headers | nil |
List of collected (header . value) pairs. Does not include ‘:method‘, ‘:path‘, etc.
:headers
Dynamic tables implementation: they are stored in an adjustable array, with
[0] element storing first element initially (indexed by s+1), and (s+k)th element after k
insertions.
After deletion of D elements, element s+k is stored on index D, element s+1
on index
<———- Index Address Space ———->
<– Static Table –> <– Dynamic Table –>
+—+———–+—+ +—–+———–+—–+
| 1 | ... | s | |s+1+D| ... |s+k+D| ...deleted...
+—+———–+—+ +—–+———–+—–+
k D 0
<—– table aref index ————–>
^ |
| V
Insertion Point Dropping Point
Initarg | Value |
---|---|
:dynamic-table | (make-array 0 fill-pointer 0 adjustable t) |
:dynamic-table-size | 4096 |
:deleted-items | 0 |
:updates-needed | nil |
:dynamic-table
:dynamic-table-size
:dynamic-table-size
:updates-needed
:deleted-items
A simple connection: promise push not allowed, otherwise reasonable behaviour
Initarg | Value |
---|---|
:id-to-use | 1 |
:last-id-seen | 0 |
:streams | nil |
:acked-settings | nil |
:window-size | 65535 |
:compression-context | (make-instance (quote hpack-context)) |
:decompression-context | (make-instance (quote hpack-context)) |
:stream-class | (quote http2-stream) |
:initial-peer-window-size | 65535 |
:initial-window-size | 65535 |
:peer-window-size | 65535 |
:acked-settings
Class for new streams
:stream-class
:initial-window-size
:initial-peer-window-size
Part of representation of HTTP/2 stream needed to read and write frames.
Initarg | Value |
---|---|
:window-size | 0 |
:state | (quote idle) |
:connection
http2/utils:stream-id
:stream-id
http2/utils:http2-stream-state
:state
HTTP2 stream that passes all its DATA frames to PAYLOAD-INPUT-STREAM.
Implement writing of data that may possibly be too big to send at once.
When peer sends window size increment frame, call specified callback function. This is set in WRITE-BINARY-PAYLOAD to write rest of data to write.
Initarg | Value |
---|---|
:window-size-increment-callback | nil |
:window-size-increment-callback
Octet stream backed by a buffer.
Each instance has a buffer and an index to the first unread element of it. It is assumed that whole the buffer can be read.
binary-stream
.
fundamental-binary-input-stream
.
:buffer
:index
:end
binary-stream
.
fundamental-binary-output-stream
.
:write-buffer
Uses poll to listen to a set of clients and handle arriving packets in a single
thread.
Maximum number of clients is fixed (by default *fdset-size*, by default
10). Additional clients wait until one of existing client leaves.
Timeouts can be specified for polling.
Initarg | Value |
---|---|
:fdset-size | *fdset-size* |
:poll-timeout | *poll-timeout* |
:no-client-poll-timeout | *no-client-poll-timeout* |
:nagle | *nagle* |
Number of slots for clients to be polled.
:fdset-size
See *POLL-TIMEOUT*.
:poll-timeout
See *NO-CLIENT-POLL-TIMEOUT*.
:no-client-poll-timeout
:nagle
Initarg | Value |
---|---|
:content-type | application/octet-stream |
Base class for requests with a body. Implies POST method by default. Some method for FETCH-RESOURCE must be defined to actually send the content in data frames.
Initarg | Value |
---|---|
:no-body | nil |
:method | post |
:content
:content-type
:gzip-content
Initarg | Value |
---|---|
:content-type | text/plain; charset=utf-8 |
Simple scheduler of delayed tasks. Holds a list of tasks to run.
Simple scheduler of delayed tasks that runs in a thread.
Initarg | Value |
---|---|
:thread | nil |
:thread
Initarg | Value |
---|---|
:id-to-use | 2 |
:peer-accepts-push | t |
:peer-accepts-push
Initarg | Value |
---|---|
:method | nil |
:scheme | nil |
:authority | nil |
:path | nil |
The HTTP method ([RFC7231], Section 4)
common-lisp
.
:method
Scheme portion of the target URI ([RFC3986], Section 3.1).
Not restricted to "http" and "https" schemed URIs.
A proxy or gateway can translate requests for non-HTTP schemes,
enabling the use of HTTP to interact with non-HTTP services
:scheme
The authority portion of the target URI ([RFC3986], Section 3.2)
:authority
The path and query parts of the target URI
string
:path
Class for requests with no body. Implies GET method by default.
Initarg | Value |
---|---|
:method | get |
:headers | nil |
:no-body | t |
Handle the connection while doing nothing else.
Serve just one client at time: when it connects, read the incoming requests and
handle them as they arrive. When the client sends go-away frame, close the
connection and be ready to serve another client.
Obviously, there is little overhead and this version is actually pretty fast - for one client and in ideal conditions (especially with request pilelining).
A mixin for connections that read frames from and write to Common Lisp stream (in slot NETWORK-STREAM).
:network-stream
Initarg | Value |
---|---|
:id-to-use | 1 |
:last-id-seen | 0 |
:streams | nil |
:window-size | 65535 |
:initial-peer-window-size | 65535 |
:initial-window-size | 65535 |
Sequence of streams the connection knows about.
This includes all open and half-closed streams, but not the already closed and
idle streams.
:streams
http2/utils:stream-id
:id-to-use
http2/utils:stream-id
:last-id-seen
Class for new streams
:stream-class
Mixin that collect all the received body (possibly unzipped data frames converted to proper encoding) into its TEXT slot.
Initarg | Value |
---|---|
:text | nil |
:text
Specialize DO-NEW-CONNECTION to process new connections each in a separate thread.
A mixin for a connection that holds a lock in actions that write to the output network stream, and provides a second thread for scheduled activities (e.g., periodical events).
Specializes SERVER-SOCKET-STREAM to add TLS layer to the created sockets, and START-SERVER-ON-SOCKET to use a context created by MAKE-HTTP2-TLS-CONTEXT.
Defines a method on APPLY-DATA-FRAME that, if CONTENT-TYPE indicates UTF-8, reads octets, converts them to UTF-8 text, and calls APPLY-TEXT-DATA-FRAME on the stream and the text.
:broken-char
Connection class for retrieve-url style functions that uses streams of VANILLA-CLIENT-STREAM. Behaves as client, can send pings to measure roundtrip time and optionally prints history. See individual superclasses for details.
Initarg | Value |
---|---|
:stream-class | (quote vanilla-client-stream) |
Stream class for retrieve-url style functions. Behaves as a client stream, allows one to treat data frames as streams, collect headers to slot HEADERS so that they can be later shown as a list, and optionally prints callback logs. See individual superclasses for details.
Initarg | Value |
---|---|
:end-headers-fn | (constantly nil) |
:end-headers-fn
Stores queued frame in a per-connection write buffer. The internals of the buffer are opaque.
Initarg | Value |
---|---|
:to-write | (make-array 3 fill-pointer 0 adjustable t) |
:to-write
Function that can be called with CONNECTION and HTTP2-STREAM to write a response to the http request described by STREAM object.
HTTP2 state. Currently a symbol from fixed list, might be a number in future.
An octet vector of length LENGTH (if specified)
Streams are identified with an unsigned 31-bit integer.
The endpoint indicates that the stream is no longer needed
The endpoint is unable to maintain the header compression context for the connection
The connection established in response to a CONNECT request was reset or abnormally closed
The endpoint detected that its peer is exhibiting a behavior that might be generating excessive load
The endpoint detected that its peer violated the flow-control protocol
The endpoint received a frame with an invalid size
The endpoint requires that HTTP/11 be used instead of HTTP/2
The underlying transport has properties that do not meet minimum security requirements
The endpoint encountered an unexpected internal error
Frame types are indexed by an octet.
The associated condition is not a result of an error
The endpoint detected an unspecific protocol error
The endpoint refused the stream prior to performing any application processing
The endpoint sent a SETTINGS frame but did not receive a response in a timely manner
The endpoint received a frame after a stream was half-closed
Translation table from header charset names to FLEXI-STREAM keywords.
Translation table from header charset names to FLEXI-STREAM keywords.
List of clients processed.
Character encoding to be used when not recognized from headers. Default is nil - binary.
Character encoding to be used when not recognized from headers. Default is nil - binary.
Handler used as last resort - page not found.
Character encoding for text/ content to be used when not recognized from headers.
Character encoding for text/ content to be used when not recognized from headers.
List of empty slots in the fdset table.
Initial size of the vector holding data to encrypt.
This table maps error codes to mnemonic names - symbols.
Error codes are 32-bit fields that are used in RST_STREAM and GOAWAY frames to convey the reasons for the stream or connection error.
Error codes share a common code space. Some error codes apply only to either streams or the entire connection and have no defined semantics in the other context.
Alist of paths and functions of connection and stream to make http response.
Size of the fdset - that, is, maximum number of concurrent clients.
Property list of flag names and their values..
This makes use of the fact that same flag name has same index in all headers where it is used.
Array of frame types. It is populated later with DEFINE-FRAME-TYPE.
The code-and-code-size table from the RFC 7541 (hpack) appendix B
If nil, disable Nagle algorithm (= enable nodelay)
Alist of prefixes and functions of connection and stream to make http response.
List of started servers
See https://www.iana.org/assignments/http2-parameters/http2-parameters.xhtml
Static headers table. Each element is either list of header name and value, or just header name. The content is defined in the RFC7541, and is supposed to start at index 1, so leading nil.
All HTTP/2 requests MUST include exactly one valid value for the :method, :scheme, and :path pseudo-header fields, unless it is a CONNECT request (Section 8.3). An HTTP request that omits mandatory pseudo-header fields is malformed (Section 8.1.2.6).
Define:
- A frame type object that allows to read frame of given type,
- a constant named ‘+foo+‘ that translates to TYPE-CODE,
- a writer function WRITE-FOO that takes CONNECTION or HTTP-STREAM and possibly
other PARAMETERS and FLAGSs and writes appropriate frame.
Each PARAMETER is a list of name, size in bits or type specifier and documentation.
Version of HANDLER that is to be used for scheduled (or otherwise processed in
another thread) responses:
- It makes accessible in BODY function SCHEDULE that takes two parameters, delay in miliseconds and action to run after delay. See event stream implementation in the example server for the possible usage.
Run BODY with NAME bound to instance of CLASS with parameters.
Find free slot in the FDSET and put client there.
Change state of the stream when STREAM-END is sent.
Throw BAD-STATE-ERROR when the stream state is not appropriate for the frame type.
Return the HTTP-STREAM.
ssl
.
Size of the header for dynamic cache purposes: 32 octets plus header and name sizes, including leading : at special header names.
Compute time for wait for any communication.
This is determined by lesser of timeout for ending the communication and
scheduler timeout.
Second value indicates whether the timeout should signal a condition (i.e., it is not from scheduler)
Decode frame header into several values:
- frame type object,
- length of the frame,
- flags,
- relevant stream, and
- R (reserved bit).
This function is primarily factored out to be TRACEd to see arriving frames.
Send data in the VECTOR between FROM and TO to the ② openssl for decryption .
Run available actions as selected by SELECT-NEXT-ACTION till there is none.
Analog of realloc.
Return a larger buffer with same initial data as the provided one.
The size of an entry is the sum of its name’s length in octets (as
defined in Section 5.2), its value’s length in octets, and 32.
The size of an entry is calculated using the length of its name and value without any Huffman encoding applied.
Header on position IDX in the dynamic table in CONTEXT.
This is factored out to be used in testing.
Encode table update to NEW-SIZE to an adjustable array RES.
Encode header consisting of NAME and VALUE.
The ‘never-indexed‘ format is never generated,
use a separate function for this (and this function needs to be written).
When CONTEXT is provided, use incremental indexing with dynamic table in
that CONTEXT.
Use Huffman when HUFFMAN is true.
Convert string to huffman encoding.
Encrypt data in client’s ENCRYPT-BUF.
Do nothing if there is no data to encrypt or SSL not yet initialized (and return zero).
Otherwise, use a temporary vector to write data
Move octets from VECTOR to the OUTPUT-SSL.
Return 0 when no data are
available. Raise an error on error.
See man errno(3).
Guess charset from the content type. NIL for binary data.
Find header NAME in static table and, if CONNECTION is not null, in its dynamic table. Return the index, or NIL if not found.
Find something (pair or header name) in static and possibly dynamic table.
Find STREAM by ID in STREAMS, or :closed
The list of streams should already be sorted from high number to low number, so we could stop as soon as we can see lower value. However, we assume the list needed to be searched is pretty short so we do not care.
Function that should prepare response for request on PATH in streams of given CONNECTION.
Find header PAIR in static table and, if CONNECTION is not null, in its dynamic table. Return the index, or NIL if not found.
name
.
Decode an integer from starting OCTET and additional octets in STREAM as defined in RFC7541 sect. 5.1.
Check real error after a call to SSL_connect, SSL_accept,
SSL_do_handshake, SSL_read_ex, SSL_read, SSL_peek_ex, SSL_peek, SSL_shutdown,
SSL_write_ex or SSL_write.
If the operation was successfully completed, do nothing.
If it is a harmless one (want read or want write), try to process the data.
Raise error otherwise.
Encode header consisting of NAME and VALUE to a fillable array RES..
The ‘never-indexed‘ format is never generated, use a separate function for
this (and this function needs to be written).
When CONTEXT is provided, use incremental indexing with dynamic table in
that CONTEXT.
Use Huffman when HUFFMAN is true.
Size of huffman-coded text
Represent integer to a vector as defined in RFC7541 sect. 5.1.
Create new CLIENT object suitable for TLS server.
Initially, the ENCRYPT-BUFFER contains the settings to send, and next action is reading of client hello.
Return decoder code for I matching PREFIX among codes.
Make package documentation for the release:
- HTML documentation files,
- README to be distributed with the package
INPUT-STREAM built atop RAW-STREAM.
Guess encoding and need to gunzip from headers:
- apply zip decompression if gzip is set
- if charset is not null, use it to convert to text.
INPUT-STREAM built atop RAW-STREAM.
Guess encoding and need to gunzip from headers:
- apply zip decompression content-encoding is gzip (FIXME: also compression)
- use charset if understood in content-type
- otherwise guess whether text (use UTF-8) or binary.
An OUTPUT-STREAM built atop RAW STREAM with added charset and possibly compression.
If SSL is not initialized yet, initialize it.
Move data encrypted by OpenSSL to the socket write queue Ⓔ.
This should be called in a way friendly to Nagle algorithm. My understaning is this is either when we pipeline a lot of data, or when we send out somethinf that expects a response.
Read number of octets indicated in CLIENT into a vector and then apply client fn on it.
FIXME: process that anyway
Length of the frame with added padding (incl. padding size).
Process events available on FD-PTR (a pointer to struct pollfd) with CLIENT.
The new possible action corresponding to ① or ⑥ on the diagram above is added to the client state and DO-AVAILABLE-ACTIONS is called to react to that.
Read data from client socket ① and pass them to the tls buffer ② to decrypt.
Add new client: accept connection, create client and add it to pollfd and to *clients*.
Make a HTTP2 connection of CONNECTION-CLASS on the underlying STREAM (that is a stream in Common Lisp sense, so either network stream or even standard io) and read frames from it until END-OF-FILE (client closed the underlying stream - or maybe we do) or GO-AWAY (client closes connection - or maybe we do) is signalled.
Read data using IN-FN and write them out using OUT-FN.
Pass CLIENT as the first argument to both of them. the other are vector to read
or write and the size to read or write. Read function should return number of
bytes read.
Finish when the last read reads nothing.
Assumes writes cannot fail.
Read data using IN-FN and write them out using OUT-FN.
Pass CLIENT as the first argument to both of them. the other are vector to read
or write and the size to read or write. Read function should return number of
bytes read.
Finish when the last read reads nothing.
Assumes writes cannot fail.
Process octets in the VECTOR in the interval <FROM TO).
Call OUT-FN on VECTOR, FROM TO. It returns number of processed octets (or 0 if
none, or raises an error). If something is written, NEXT-FN is also called to do "next stage".
Repeat on partial write.
Move octets from NEW-DATA to the WRITE-BUFFER.
Return 0 when no data are
available. Raise an error on error.
Read http headers from payload in DATA, starting at START.
Returns next function to call and size of expected data. If the END-HEADERS was
present, it would be PARSE-FRAME-HEADER, if not a continuation frame is to be
read.
Note that END-STREAM is present in the first header flag, not in the continuation flags, if any, so must be separate.
Move up to SIZE octets from BIO-OUT to the VEC.
Return 0 when no data are
available. Raise an error on error.
Move up to VEC-SIZE octets from PEER-IN to the VEC.
Return 0 when no data are
available. Raise an error on error.
Read item on INDEX in static table or dynamic table in CONNECTION.
Read one header from network stream using READ-BYTE* as two-item list (NAME
VALUE) using dynamic table CONTEXT. Update CONTEXT appropriately.
Can also return NIL if no header is available if it is not detected earlier; this can happen, e.g., when there is a zero sized continuation header frame..
Read Huffman coded text of length LEN from STREAM.
See 6.2.1 fig. 7, and 6.2.2. fig. 9 -
Neither name of the header nor value is in table, so read both as literals.
See Fig. 6 and Fig. 8 - Name of header is in tables, value is literal.
Use USE-BITS from the OCTET0 for name index
Ignore the padding octets. Frame header is next FIXME: might be also continuation-frame-header
Read string literal from a STREAM as defined in RFC7541 sect 5.2.
Run user defined callback and user return values to set next action.
One of possible next actions consistent with then the state of the client, or
nil if no action is available.
This is factored out so that it can be traced. There is a TLS-SERVER/MEASURE::ACTIONS clip on this function.
Send data in OUTPUT-BUFFER and SIZE data from SEQUENCE starting at START in
one data frame; mark them as sent.
Return new START.
Move octets from VECTOR to the PEER-OUT.
Return 0 when no data are
available. Raise an error on error.
Collect new data to be encrypted and sent to client.
Data are just concatenated to the ENCRYPT-BUF. Later, they would be encrypted and passed.
Set FD and EVENTS of slot IDX in fdset.
Set action for next chunk of received data.
Set the TCP socket: nonblock and possibly nagle.
Move up to SIZE octets from the decrypted SSL ③ to the VEC.
Return 0 when no data are available. Possibly remove CAN-READ-SSL flag.
Short string describing the state using codes on the diagram.
Add STRING to fillable array RES in format defined by HPACK, possibly using huffman encoding.
Lisp string for particular error. See man strerror(3).
Convert between hpack index and index in the vector. This works both ways.
Write 31 bits of VALUE to a VECTOR. Set first bit if FLAG is set.
Add payload and possibly padding to a BUFFER that already contains 9 octets of the header.
Write buffered encrypted data Ⓔ to the client socket ⑥. Update the write buffer to keep what did not fit.
Universal function to write a frame to a stream and account for possible stream
state change.
Queues using QUEUE-FRAME an octet vector with the frame, including
frame header (9 octets) and padding octets.
The payload is generated using WRITER object. The WRITER takes CONNECTION and PARS as its parameters.
Write integer to a fillable vector as defined in RFC7541 sect. 5.1.
Return the fillable vector.
Move octets from VECTOR to the OPENSSL-TO-DECRYPT.
Return 0 when no data are
available. Raise an error on error.
Write a tree of sequences to stream.
No priority, no padding.
+-+————-+———————————————–+
| Header Block Fragment (*) ...
+—————————————————————+
“‘
The HEADERS frame (type=0x1) is used to open a stream (Section 5.1), and additionally carries a header block fragment. HEADERS frames can .be sent on a stream in the "idle", "reserved (local)", "open", or "half-closed (remote)" state.
Write STREAM-ID to the binary stream
Add dynamic header to a table. Return the header.
Remove resources associated with a server connection. Called after connection is closed.
threaded-server-mixin
)) ¶Called when ping-frame without ACK is received. By default send ping-frame with ACK and same data.
http2-connection
)) ¶automatically generated reader method
http2-connection
)) ¶automatically generated writer method
scheduled-task
)) ¶automatically generated reader method
scheduled-task
)) ¶automatically generated writer method
scheduled-task
)) ¶automatically generated reader method
scheduled-task
)) ¶automatically generated writer method
bad-stream-state
)) ¶bad-stream-state
)) ¶bad-stream-state
)) ¶bad-stream-state
)) ¶incorrect-setting-value
)) ¶incorrect-setting-value
)) ¶not-http2-stream
)) ¶not-http2-stream
)) ¶alpn
.
payload-stream
)) ¶automatically generated reader method
payload-stream
)) ¶automatically generated writer method
utf8-parser-mixin
)) ¶automatically generated reader method
utf8-parser-mixin
)) ¶automatically generated writer method
pipe-end-for-read
)) ¶automatically generated reader method
pipe-end-for-read
)) ¶automatically generated writer method
hpack-context
)) ¶automatically generated reader method
hpack-context
)) ¶automatically generated writer method
http2-stream-with-input-stream
)) ¶automatically generated reader method
http2-stream-with-input-stream
)) ¶automatically generated writer method
no-payload-action
)) ¶no-payload-action
)) ¶poll-server-connection
)) ¶automatically generated reader method
poll-server-connection
)) ¶automatically generated writer method
http-stream-error
)) ¶http-stream-error
)) ¶code
.
connection-error
)) ¶connection-error
)) ¶code
.
ssl-error-condition
)) ¶ssl-error-condition
)) ¶code
.
http2-stream-with-input-stream
)) ¶automatically generated reader method
http2-stream-with-input-stream
)) ¶automatically generated writer method
hpack-endpoint
)) ¶automatically generated reader method
hpack-endpoint
)) ¶automatically generated writer method
base-dispatcher
)) ¶automatically generated reader method
base-dispatcher
)) ¶automatically generated writer method
base-dispatcher
)) ¶automatically generated reader method
base-dispatcher
)) ¶automatically generated writer method
request-with-body
)) ¶automatically generated reader method
request-with-body
)) ¶automatically generated writer method
request-with-body
)) ¶automatically generated reader method
request-with-body
)) ¶automatically generated writer method
payload-input-stream
)) ¶payload-input-stream
)) ¶tlist of accepted frames
data
.
window-is-closed
)) ¶window-is-closed
)) ¶data
.
http2-write-data-stall
)) ¶data
.
http2-stream
)) ¶automatically generated reader method
data
.
http2-stream
)) ¶automatically generated writer method
data
.
hpack-endpoint
)) ¶automatically generated reader method
hpack-endpoint
)) ¶automatically generated writer method
hpack-context
)) ¶automatically generated reader method
hpack-context
)) ¶automatically generated writer method
http2-stream
)) ¶automatically generated reader method
http2-stream
)) ¶automatically generated writer method
unsupported-server-setup
)) ¶unsupported-server-setup
)) ¶gzip-decoding-mixin
)) ¶automatically generated reader method
gzip-decoding-mixin
)) ¶automatically generated writer method
hpack-context
)) ¶automatically generated reader method
hpack-context
)) ¶automatically generated writer method
pipe-end-for-read
)) ¶automatically generated reader method
pipe-end-for-read
)) ¶automatically generated writer method
vanilla-client-stream
)) ¶automatically generated reader method
vanilla-client-stream
)) ¶automatically generated writer method
routing-mixin
)) ¶automatically generated reader method
routing-mixin
)) ¶automatically generated writer method
poll-dispatcher-mixin
)) ¶poll-dispatcher-mixin
)) ¶Number of slots for clients to be polled.
too-big-frame
)) ¶too-big-frame
)) ¶frame-type-needs-connection
)) ¶frame-type-needs-connection
)) ¶frame-type-needs-stream
)) ¶frame-type-needs-stream
)) ¶request-with-body
)) ¶automatically generated reader method
request-with-body
)) ¶automatically generated writer method
no-new-header-action
)) ¶no-new-header-action
)) ¶h2-not-supported-by-server
)) ¶h2-not-supported-by-server
)) ¶host
.
stream-collection
)) ¶automatically generated reader method
stream-collection
)) ¶automatically generated writer method
http2-connection
)) ¶automatically generated reader method
http2-connection
)) ¶automatically generated writer method
http2-connection
)) ¶automatically generated reader method
http2-connection
)) ¶automatically generated writer method
scheduled-task
)) ¶automatically generated reader method
scheduled-task
)) ¶automatically generated writer method
stream-collection
)) ¶automatically generated reader method
stream-collection
)) ¶automatically generated writer method
frame-context
)) ¶automatically generated reader method
too-big-frame
)) ¶frame-context
)) ¶automatically generated writer method
too-big-frame
)) ¶new-stream-id-too-low
)) ¶new-stream-id-too-low
)) ¶poll-dispatcher-mixin
)) ¶automatically generated reader method
poll-dispatcher-mixin
)) ¶automatically generated writer method
header-error
)) ¶header-error
)) ¶name
.
generic-request
)) ¶automatically generated reader method
generic-request
)) ¶automatically generated writer method
poll-dispatcher
)) ¶poll-dispatcher-mixin
)) ¶See *NO-CLIENT-POLL-TIMEOUT*.
poll-dispatcher-mixin
)) ¶See *NO-CLIENT-POLL-TIMEOUT*.
payload-output-stream
)) ¶automatically generated reader method
payload-output-stream
)) ¶automatically generated writer method
constant-output-stream
)) ¶automatically generated reader method
constant-output-stream
)) ¶automatically generated writer method
http2-stream-with-input-stream
)) ¶automatically generated reader method
http2-stream-with-input-stream
)) ¶automatically generated writer method
server-http2-connection
)) ¶automatically generated reader method
server-http2-connection
)) ¶automatically generated writer method
poll-dispatcher-mixin
)) ¶poll-dispatcher-mixin
)) ¶See *POLL-TIMEOUT*.
h2-not-supported-by-server
)) ¶h2-not-supported-by-server
)) ¶port
.
routing-mixin
)) ¶automatically generated reader method
routing-mixin
)) ¶automatically generated writer method
client-preface-mismatch
)) ¶client-preface-mismatch
)) ¶client-done
)) ¶client-done
)) ¶http2-stream
)) ¶http2-stream
)) ¶Set if in the header block a non-pseudo header was already seen.
http2-write-data-stall
)) ¶sent
.
incorrect-setting-value
)) ¶incorrect-setting-value
)) ¶append
.
:most-specific-first
client-http2-connection
)) ¶window-is-closed
)) ¶window-is-closed
)) ¶State of a HTTP stream. The parameter is either a HTTP2-STREAM object (that keeps state in an appropriate slot) or placeholder values CLOSED or IDLE
(eql :closed)
)) ¶http2-stream-minimal
)) ¶automatically generated reader method
http2-stream-minimal
)) ¶automatically generated writer method
client-stream
)) ¶client-stream
)) ¶HTTP status code field (see [RFC7231], Section 6)
no-new-header-action
)) ¶no-new-header-action
)) ¶http-stream-error
)) ¶http-stream-error
)) ¶http2-stream-minimal
)) ¶automatically generated reader method
http2-connection
)) ¶It is useful sometimes to treat http connection as a stream with ID 0.
bad-stream-state
)) ¶new-stream-id-too-low
)) ¶http2-stream-minimal
)) ¶automatically generated writer method
bad-stream-state
)) ¶new-stream-id-too-low
)) ¶text-collecting-stream
)) ¶automatically generated reader method
text
.
text-collecting-stream
)) ¶automatically generated writer method
text
.
scheduler-in-thread
)) ¶automatically generated reader method
detached-server-mixin
)) ¶automatically generated reader method
scheduler-in-thread
)) ¶automatically generated writer method
detached-server-mixin
)) ¶automatically generated writer method
tls-dispatcher-mixin
)) ¶base-dispatcher
)) ¶automatically generated reader method
tls
.
symbol
)) ¶not-http2-stream
)) ¶not-http2-stream
)) ¶write-buffer-connection-mixin
)) ¶automatically generated reader method
write-buffer-connection-mixin
)) ¶automatically generated writer method
generic-request
)) ¶automatically generated reader method
uri
.
generic-request
)) ¶automatically generated writer method
uri
.
base-dispatcher
)) ¶automatically generated reader method
url
.
base-dispatcher
)) ¶automatically generated writer method
url
.
header-error
)) ¶header-error
)) ¶incorrect-initial-window-size-value
)) ¶incorrect-initial-window-size-value
)) ¶incorrect-frame-size-value
)) ¶incorrect-frame-size-value
)) ¶incorrect-enable-push-value
)) ¶incorrect-enable-push-value
)) ¶incorrect-setting-value
)) ¶incorrect-setting-value
)) ¶http2-stream
)) ¶automatically generated reader method
http2-stream
)) ¶automatically generated writer method
flow-control-mixin
)) ¶automatically generated reader method
flow-control-mixin
)) ¶automatically generated writer method
flow-control-mixin
)) ¶automatically generated reader method
flow-control-mixin
)) ¶automatically generated writer method
multi-part-data-stream
)) ¶automatically generated reader method
multi-part-data-stream
)) ¶automatically generated writer method
pipe-end-for-write
)) ¶automatically generated reader method
pipe-end-for-write
)) ¶automatically generated writer method
An ALTSVC frame from a server to a client on a stream other than
stream 0 indicates that the conveyed alternative service is
associated with the origin of that stream.
An ALTSVC frame from a server to a client on stream 0 indicates that the conveyed alternative service is associated with the origin contained in the Origin field of the frame. An association with an origin that the client does not consider authoritative for the current connection MUST be ignored.
Default method ignores alt-svc info.
server-http2-connection
) stream-id) ¶client-http2-connection
) stream-id) ¶This is called when a new frame is ready
This is called when a new frame is ready
This should be called on push promise (FIXME: and maybe it is not, and maybe the parameters should be different anyway). By default throws an error.
client-stream
)) ¶Send a ping request.
timeshift-pinging-connection
) &optional payload) ¶detached-server-mixin
)) ¶Frame cannot be applied to stream in particular state
:received
The socket on the other side is closed.
error
.
Frame type must be applied on connection.
:frame-type
Frame MUST be associated with a stream. If a frame is received whose stream identifier field is 0x0, the recipient MUST respond with a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
:frame-type
All errors raised from HTTP2 package inherit from this error.
error
.
warning
.
Signalled when data are to be sent and there is not big enough window available to sent. Tracks DATA to sent and number of octets actually SENT.
warning
.
Something that the HTTP2 library expects to be implemented by server/client.
http2-warning
.
simple-condition
.
condition
.
Client must have ENABLE-PUSH 0 or 1. Server must have ENABLE-PUSH 0.
:value
A PRIORITY frame with a length other than 5 octets MUST be treated as a stream error (Section 5.4.2) of type FRAME_SIZE_ERROR.
Initarg | Value |
---|---|
:code | +frame-size-error+ |
Frame size MUST be between the initial value 16384 and the maximum allowed frame size (2^24-1 or 16,777,215 octets), inclusive.
:value
SETTINGS_INITIAL_WINDOW_SIZE must be below 2^31.
:value
Receipt of a PING frame with a length field value other than 8 MUST be treated as a connection error (Section 5.4.1) of type FRAME_SIZE_ERROR.
Initarg | Value |
---|---|
:code | +frame-size-error+ |
A RST_STREAM frame with a length other than 4 octets MUST be treated as a connection error (Section 5.4.1) of type FRAME_SIZE_ERROR.
Initarg | Value |
---|---|
:code | +frame-size-error+ |
A SETTINGS frame with a length other than a multiple of 6 octets MUST be treated as a connection error (Section 5.4.1) of type FRAME_SIZE_ERROR.
Initarg | Value |
---|---|
:code | +frame-size-error+ |
Receipt of a PING frame with a length field value other than 8 MUST be treated as a connection error (Section 5.4.1) of type FRAME_SIZE_ERROR.
Initarg | Value |
---|---|
:code | +frame-size-error+ |
A request or response containing uppercase header field names MUST be treated as malformed. (...) Malformed requests or responses that are detected MUST be treated as a stream error of type PROTOCOL_ERROR.
We try to process headers, but end up in a middle of one.
:status pseudo-header field MUST be included in all responses.
All HTTP/2 requests MUST include exactly one valid value for the :method, :scheme, and :path pseudo-header fields, unless it is a CONNECT request.
The identifier of a newly established stream MUST be numerically
greater than all streams that the initiating endpoint has opened or
reserved (max was ~d). This governs streams that are opened using a
HEADERS frame and streams that are reserved using PUSH_PROMISE. An
endpoint that receives an unexpected stream identifier MUST respond with a
connection error (Section 5.4.1) of type PROTOCOL_ERROR.
Header that could not be handled arrived.
No payload action defined, and payload received.
common-lisp
.
:class
Signalled to decline handling of TLS stream as HTTP2 stream due to different ALPN.
Errors on the connection flow-control window MUST be treated as a connection error.
A receiver MUST treat the receipt of a WINDOW_UPDATE frame with a flow-control window increment of 0 as a stream error.
Initarg | Value |
---|---|
:code | +protocol-error+ |
frame-too-small-for-priority
.
frame-type-needs-connection
.
frame-type-needs-stream
.
incorrect-enable-push-value
.
incorrect-frame-size-value
.
incorrect-initial-window-size-value
.
incorrect-setting-value
.
missing-header-octets
.
new-stream-id-too-low
.
null-connection-window-update
.
our-id-created-by-peer
.
too-big-padding
.
unexpected-continuation-frame
.
Initarg | Value |
---|---|
:code | +protocol-error+ |
Pseudo header follows text header.
Reserved bit is set in received frame header. We ignore it.
Initarg | Value |
---|---|
:code | +protocol-error+ |
Length of the padding is the length of the frame payload or greater.
A CONTINUATION frame MUST be preceded by a HEADERS, PUSH_PROMISE or CONTINUATION frame without the END_HEADERS flag set. A recipient that observes violation of this rule MUST respond with a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
Something that can be implemented to better match RFC suggestions or that we are obliged to ignore
http2-warning
.
simple-condition
.
warning
.
Data of one client connection. This includes:
- File descriptor of underlying socket (FD),
- Opaque pointer to the openssl handle (SSL),
- Input and output BIO for exchanging data with OPENSSL (RBIO, WBIO),
- Plain text octets to encrypt and send (ENCRYPT-BUF),
- Encrypted octets to send to the file descriptor (WRITE-BUF),
- Callback function when read data are available (IO-ON-READ).
- Number of octets required by IO-ON-READ. Negative values have special handling.
- Client state from the low-level data flow point of view (STATE)
- Application data (slot to be used by the application)
structure-object
.
fixnum
-1
cffi-sys:foreign-pointer
(cffi-sys:null-pointer)
cffi-sys:foreign-pointer
(cffi-sys:null-pointer)
This slot is read-only.
cffi-sys:foreign-pointer
(cffi-sys:null-pointer)
This slot is read-only.
(or null cons)
(simple-array (unsigned-byte 8))
(make-array http2/server::*encrypt-buf-size* :element-type (quote (unsigned-byte 8)))
compiled-function
(function http2/core:parse-client-preface)
fixnum
0
fixnum
(length http2/core:+client-preface-start+)
fixnum
0
fixnum
(get-internal-real-time)
(list (quote http2/server::can-write) (quote http2/openssl:can-write-ssl) (quote http2/openssl:bio-needs-read) (quote http2/server::ssl-init-needed))
Description of a frame type.
Apart from name and documentation, each frame type keeps this:
- RECEIVE-FN :: How to handle reading of received frames
- NEW-STREAM-STATE :: whether it can be used to create new streams (i.e., is allowed on streams in
IDLE state) and if so what is new state of such stream
- OLD-STREAM-OK :: in what stream states the frame can be received
- CONNECTION-OK :: whether the frame can have STREAM-ID equal to zero, that is, act on connections.
structure-object
.
common-lisp
.
(or null string)
symbol
(and compiled-function (function (t t) http2/core::receiver-fn))
(constantly nil)
(or null (unsigned-byte 8))
Binary stream that accepts new octets to the output-buffer
binary-stream
.
fundamental-binary-output-stream
.
Initarg | Value |
---|---|
:to-write | 0 |
:to-store | 0 |
The flow control parameters that are kept both per-stream and per-connection.
Initarg | Value |
---|---|
:compression-context | (make-instance (quote hpack-context)) |
:decompression-context | (make-instance (quote hpack-context)) |
:compression-context
:decompression-context
Representation of HTTP/2 stream. See RFC7540.
Initarg | Value |
---|---|
:window-size | 0 |
:weight | 16 |
:depends-on | (quote (non-exclusive 0)) |
:seen-text-header | nil |
:data
:weight
:depends-on
Set if in the header block a non-pseudo header was already seen.
:seen-text-header
Binary stream that reads data from the http stream.
It keeps data from last data frame in BUFFER, starting with INDEX.
fundamental-binary-input-stream
.
payload-stream
.
Initarg | Value |
---|---|
:index | 0 |
:data | (cons nil nil) |
:index
tlist of accepted frames
:data
Binary stream that accepts new octets to the output-buffer, until it is big
enough to send the data as a data frame on BASE-HTTP2-STREAM (or forced to by close of force-output)
fundamental-binary-output-stream
.
payload-stream
.
Initarg | Value |
---|---|
:to-write | 0 |
:to-store | 0 |
Base class for a CL binary stream that is defined over http2 stream
:base-http2-stream
The poll server connection has a client object and send data to it.
Initarg | Value |
---|---|
:stream-class | (quote vanilla-server-stream) |
:client
Server with behaviour that is defined by two sets of handlers, exact and
prefix. Appropriate handler is run to process the request when peer closes the
http2 stream. The exact handler must match fully the path (so not the query),
prefix handlers matches when the path starts with the prefix.
Protocol and domain are not checked. The behaviour is implemented in the appropriate PEER-ENDS-HTTP-STREAM method.
A mixin that implements specific DO-PING and DO-PONG so that the RTT is printed after DO-PING is send.
A server connection that spawns streams of VANILLA-SERVER-STREAM type when a new stream is requested, allows scheduled or other asynchronous writes, and optionally prints activities.
Initarg | Value |
---|---|
:stream-class | (quote vanilla-server-stream) |
A server-side stream that can be used as a binary output stream, optionally prints activities, and reads full body from client if clients sends one.
Jump to: | (
A B C D E F G H I K M O P Q R S T U V W |
---|
Jump to: | (
A B C D E F G H I K M O P Q R S T U V W |
---|
Jump to: | *
+
@
A B C D E F G H I L M N O P R S T U V W |
---|
Jump to: | *
+
@
A B C D E F G H I L M N O P R S T U V W |
---|
Jump to: | .
B C D E F G H I L M N O P R S T U V W |
---|
Jump to: | .
B C D E F G H I L M N O P R S T U V W |
---|