This is the http2 Reference Manual, version 2.0.3, generated automatically by Declt version 4.0 beta 2 "William Riker" on Fri May 15 12:26:32 2026 GMT+0.
http2/http2.asdhttp2/overview.lisphttp2/client/client-utils.lisphttp2/client/client.lisphttp2/client/tutorials.lisphttp2/stream-based/stream-based-connections.lisphttp2/stream-based/payload-streams.lisphttp2/core/package.lisphttp2/core/core/utils.lisphttp2/core/core/pipe.lisphttp2/core/core/errors.lisphttp2/core/core/hpack.lisphttp2/core/core/frames/http2-stream.lisphttp2/core/core/classes.lisphttp2/core/core/frames.lisphttp2/core/core/frames/rst-and-goaway.lisphttp2/core/core/frames/headers.lisphttp2/core/core/frames/data.lisphttp2/core/core/frames/settings.lisphttp2/core/core/frames/push-promise.lisphttp2/core/core/frames/altsvc.lisphttp2/core/core/frames/ping.lisphttp2/core/core/gzip-decode.lisphttp2/core/core/utf8.lisphttp2/server/threaded/../tls/server.lisphttp2/server/threaded/threaded.lisphttp2/server/shared/socket-dispatcher.lisphttp2/server/shared/dispatch.lisphttp2/server/shared/logging.lisphttp2/server/shared/scheduler.lisphttp2/openssl/openssl-grovel.lisphttp2/openssl/openssl.lisphttp2/tcpip/package.lisphttp2/tcpip/server/poll-grovel.lisphttp2/tcpip/server/tcpip.lisphttp2/server/poll/poll-openssl.lisphttp2/server/poll/poll-server.lispThe main system appears first, followed by any subsystem dependency.
http2http2/clienthttp2/stream-basedhttp2/corehttp2/serverhttp2/server/threadedhttp2/server/sharedhttp2/opensslhttp2/tcpiphttp2/server/pollhttp2HTTP/2 library, including a sample client and server.
The system also supports TEST-OP to run the test suite.
2.0.3
http2/client (system).
http2/server (system).
http2/server/poll (system).
overview.lisp (file).
http2/clientAn example of http/2 client
Tomáš Zellerin <tomas@zellerin.cz>
MIT
2.0.4
cl+ssl (system).
puri (system).
http2/stream-based (system).
client-utils.lisp (file).
client.lisp (file).
tutorials.lisp (file).
http2/stream-basedHTTP2 protocol implementation
Tomáš Zellerin <tomas@zellerin.cz>
MIT
http2/core (system).
bordeaux-threads (system).
stream-based-connections.lisp (file).
payload-streams.lisp (file).
http2/coreHTTP2 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/serverHTTP/2 server interface. Provides access to an implementation of a HTTP/2 server - both for running the server and for defining content.
Tomáš Zellerin <tomas@zellerin.cz>
2.0.3
http2/server/threaded (system).
http2/server/poll (system).
http2/server/threadedAn 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/openssl0.1
cffi-grovel (system).
cffi (system).
mgl-pax (system).
anaphora (system).
http2/tcpip (system).
http2/core (system).
openssl-grovel.lisp (file).
openssl.lisp (file).
http2/tcpipcffi-grovel (system).
cffi (system).
mgl-pax (system).
anaphora (system).
cl+ssl (system).
package.lisp (file).
server/poll-grovel.lisp (file).
server/tcpip.lisp (file).
http2/server/pollAsyncronous polling implementations of HTTP2 server.
Tomáš Zellerin <tomas@zellerin.cz>
mgl-pax (system).
puri (system).
http2/server/shared (system).
http2/openssl (system).
let-over-lambda (system).
poll-openssl.lisp (file).
poll-server.lisp (file).
Modules are listed depth-first from the system components tree.
http2/core/corepackage.lisp (file).
http2/core (system).
utils.lisp (file).
pipe.lisp (file).
errors.lisp (file).
hpack.lisp (file).
frames/http2-stream.lisp (file).
classes.lisp (file).
frames.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).
gzip-decode.lisp (file).
utf8.lisp (file).
Files are sorted by type and then listed depth-first from the systems components trees.
http2/http2.asdhttp2/overview.lisphttp2/client/client-utils.lisphttp2/client/client.lisphttp2/client/tutorials.lisphttp2/stream-based/stream-based-connections.lisphttp2/stream-based/payload-streams.lisphttp2/core/package.lisphttp2/core/core/utils.lisphttp2/core/core/pipe.lisphttp2/core/core/errors.lisphttp2/core/core/hpack.lisphttp2/core/core/frames/http2-stream.lisphttp2/core/core/classes.lisphttp2/core/core/frames.lisphttp2/core/core/frames/rst-and-goaway.lisphttp2/core/core/frames/headers.lisphttp2/core/core/frames/data.lisphttp2/core/core/frames/settings.lisphttp2/core/core/frames/push-promise.lisphttp2/core/core/frames/altsvc.lisphttp2/core/core/frames/ping.lisphttp2/core/core/gzip-decode.lisphttp2/core/core/utf8.lisphttp2/server/threaded/../tls/server.lisphttp2/server/threaded/threaded.lisphttp2/server/shared/socket-dispatcher.lisphttp2/server/shared/dispatch.lisphttp2/server/shared/logging.lisphttp2/server/shared/scheduler.lisphttp2/openssl/openssl-grovel.lisphttp2/openssl/openssl.lisphttp2/tcpip/package.lisphttp2/tcpip/server/poll-grovel.lisphttp2/tcpip/server/tcpip.lisphttp2/server/poll/poll-openssl.lisphttp2/server/poll/poll-server.lisphttp2/overview.lisphttp2 (system).
@implementation (special variable).
@index (special variable).
@overview (special variable).
@reference (special variable).
@server-tutorials (special variable).
@systems-and-packages (special variable).
@test (special variable).
@tutorials (special variable).
make-release-documentation (function).
pages (function).
http2/client/client-utils.lisphttp2/client (system).
add-header (method).
client-stream (class).
connect-to-tls-server (function).
extract-charset-from-content-type (function).
peer-ends-http-stream (method).
process-end-headers (method).
vanilla-client-connection (class).
vanilla-client-stream (class).
*charset-names* (special variable).
*default-encoding* (special variable).
*default-text-encoding* (special variable).
@client (special variable).
get-end-headers-fn (reader method).
(setf get-end-headers-fn) (writer method).
get-status (reader method).
(setf get-status) (writer method).
with-http2-connection (macro).
http2/client/client.lispclient-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-api (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/client/tutorials.lispclient.lisp (file).
http2/client (system).
@client-tutorial-simple (special variable).
@client-tutorials (special variable).
@tutorial-build-client (special variable).
http2/stream-based/stream-based-connections.lisphttp2/stream-based (system).
process-pending-frames (function).
read-frame (function).
@stream-based-connection (special variable).
http2/stream-based/payload-streams.lispstream-based-connections.lisp (file).
http2/stream-based (system).
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/package.lisphttp2/core (system).
communication-error (condition).
get-medium (reader method).
(setf get-medium) (writer method).
@error-root (special variable).
http2/core/core/utils.lispcore (module).
*example-url* (special variable).
aref/wide (function).
(setf aref/wide) (function).
certificated-context-mixin (class).
done (condition).
easy-certificated-context-mixin (class).
find-setting-by-id (function).
find-setting-code (function).
frame-size (type).
http2-stream-state (type).
initialize-instance (method).
make-initialized-octet-buffer (function).
make-octet-buffer (function).
octet-vector (type).
print-object (method).
stream-id (type).
trace-object (macro).
vector-from-hex-text (function).
*global-trace-level* (special variable).
*settings* (special variable).
*trace-level* (special variable).
@cerpaths (special variable).
@errs (special variable).
@utils (special variable).
find-certificate-file (function).
find-private-key-file (function).
maybe-create-certificate (function).
http2/core/core/pipe.lispcore (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.lispcore (module).
connection-error (condition).
describe-object (method).
frame-too-small-for-priority (condition).
get-connection (reader method).
(setf get-connection) (writer method).
go-away (condition).
h2-not-supported-by-server (condition).
http-stream-error (condition).
http2-simple-error (condition).
http2-simple-warning (condition).
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-error-name (function).
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).
go-away-no-error (condition).
header-error (condition).
http2-condition (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.lispcore (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/frames/http2-stream.lispcore (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).
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/classes.lispcore (module).
+client-preface-start+ (special variable).
client-http2-connection (class).
close-http2-stream (function).
do-pong (method).
get-authority (reader method).
(setf get-authority) (writer method).
get-connection (method).
get-initial-peer-window-size (reader method).
(setf get-initial-peer-window-size) (writer 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-peer-name (generic function).
get-scheme (reader method).
(setf get-scheme) (writer method).
get-stream-class (reader method).
(setf get-stream-class) (writer method).
http2-connection (class).
http2-stream (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).
timeshift-pinging-connection (class).
@base-classes (special variable).
@callbacks (special variable).
@connections (special variable).
@data-received (special variable).
@implementation/overview (special variable).
@old-frame-functions (special variable).
@stream-closed (special variable).
@streams (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-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-stream-id (method).
get-weight (reader method).
(setf get-weight) (writer method).
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).
write-sequences (function).
http2/core/core/frames.lispcore (module).
flags-to-code (function).
flush-http2-data (generic function).
frame-context (class).
get-flag (compiler macro).
get-flag (function).
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).
padding (type).
parse-frame-header (function).
print-object (method).
queue-frame (generic function).
receiver-fn (type).
stream-based-connection-mixin (class).
with-padding-marks (macro).
write-buffer-connection-mixin (class).
write-frame-header-to-vector (function).
*flag-codes-keywords* (special variable).
*frame-types* (special variable).
+allowed-frame-types-count+ (constant).
@flags (special variable).
@frame-definitions (special variable).
@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).
@padding (special variable).
@padding-read (special variable).
@padding-write (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).
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-keywords (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).
make-frame-type (function).
make-unknown-frame-type (function).
padded-length (function).
process-frames (function).
read-padding-from-vector (function).
trace-frames (function).
write-31-bits (function).
write-body-and-padding (function).
write-frame (function).
write-stream-id (function).
writer-fn (type).
http2/core/core/frames/rst-and-goaway.lispcore (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.lispcore (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-priority (function).
write-simple-headers-frame (function).
http2/core/core/frames/data.lispcore (module).
apply-data-frame (generic function).
apply-text-data-frame (method).
apply-window-size-increment (generic function).
body-collecting-mixin (class).
compile-payload-from-stream (macro).
flow-control-mixin (class).
get-body (reader method).
(setf get-body) (writer method).
get-peer-window-size (method).
get-peer-window-size (reader method).
(setf get-peer-window-size) (writer method).
http-stream-to-string (function).
initialize-instance (method).
long-write (function).
multi-part-data-stream (class).
parse-data-frame (function).
parse-window-update-frame (function).
stream-write-byte (method).
text-collecting-stream (class).
trace-peer-window (function).
trace-window (function).
write-binary-payload (function).
write-data-frame (function).
write-data-frame-multi (function).
write-window-update-frame (function).
+data-frame+ (constant).
+window-update-frame+ (constant).
@accepting-data (special variable).
@data (special variable).
@data-classes (special variable).
@data-frame-lowlevel (special variable).
@data-write (special variable).
@flow-control (special variable).
@lisp-stream-emulation (special variable).
@tracing-windows (special variable).
account-read-window-contribution (function).
account-write-window-contribution (function).
constant-output-stream (class).
continue-long-write (function).
duplicit-long-write (condition).
get-new-action (reader method).
(setf get-new-action) (writer method).
get-old-action (reader method).
(setf get-old-action) (writer method).
get-output-buffer (reader method).
(setf get-output-buffer) (writer method).
get-requested (reader method).
(setf get-requested) (writer method).
get-stream (reader method).
(setf get-stream) (writer method).
get-text (reader method).
(setf get-text) (writer method).
get-window-open-fn (reader method).
(setf get-window-open-fn) (writer method).
get-window-size (reader method).
(setf get-window-size) (writer method).
get-window-size-increment-callback (reader method).
(setf get-window-size-increment-callback) (writer method).
http2/core/core/frames/settings.lispcore (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.lispcore (module).
parse-push-promise-frame (function).
write-push-promise-frame (function).
+push-promise-frame+ (constant).
http2/core/core/frames/altsvc.lispcore (module).
parse-altsvc-frame (function).
write-altsvc-frame (function).
+altsvc-frame+ (constant).
handle-alt-svc (generic function).
http2/core/core/frames/ping.lispcore (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/gzip-decode.lispcore (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.lispcore (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).
is-binary (function).
utf-first-char-size (function).
utf-is-first-char (function).
http2/server/threaded/../tls/server.lisphttp2/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-peer-name (method).
get-peer-name (method).
get-peer-name (method).
get-peer-name (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.lisphttp2/openssl (system).
bio-read% (function).
bio-write (function).
close-openssl (function).
describe-object (method).
err-reason-error-string (function).
h2-server-context-mixin (class).
init-tls-endpoint-core (function).
make-tls-context (generic function).
make-tls-endpoint-core (function).
print-object (method).
ssl-accept (function).
ssl-connect (function).
ssl-is-init-finished (function).
ssl-read% (function).
ssl-set-accept-state (function).
tls-endpoint-core (structure).
with-ssl-context (macro).
with-tls-endpoint-core (macro).
+ssl-filetype-asn1+ (constant).
+ssl-filetype-default+ (constant).
+ssl-filetype-pem+ (constant).
@openssl (special variable).
@openssl-context (special variable).
@openssl-endpoint (special variable).
bio-new (function).
bio-s-mem (function).
bio-test-flags (function).
copy-tls-endpoint-core (function).
err-get-error (function).
make-http2-tls-context (function).
make-tls-endpoint-core% (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-cipher-list (function).
ssl-ctx-set-ciphersuites (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-free (function).
ssl-get-error (function).
ssl-new (function).
ssl-peek% (function).
ssl-pending (function).
ssl-set-bio (function).
ssl-write (function).
tls-endpoint-core-p (function).
tls-endpoint-core-rbio (reader).
tls-endpoint-core-ssl (reader).
(setf tls-endpoint-core-ssl) (writer).
tls-endpoint-core-wbio (reader).
tls-method (function).
http2/tcpip/package.lisphttp2/tcpip (system).
communication-error (condition).
get-medium (reader method).
(setf get-medium) (writer method).
@error-root (special variable).
http2/tcpip/server/tcpip.lisphttp2/tcpip (system).
accept (function).
add-new-fdset-item (function).
add-socket-to-fdset% (function).
call-with-fdset (function).
call-with-poll-info (function).
call-with-tcp-pair (function).
checked-syscall (function).
close-fd (function).
errno (function).
fcntl (function).
fd-to-ip (function).
fdset-manager (class).
get-fdset (reader method).
(setf get-fdset) (writer method).
nonneg-or-eagain (function).
poll (function).
print-object (method).
read-buffer (function).
read-socket* (function).
set-fd-slot (function).
set-nodelay (function).
set-nonblock (function).
setsockopt (function).
socket-bind (function).
strerror (function).
syscall-error (condition).
with-fdset (macro).
with-socket (macro).
with-tcp-pair (macro).
write-buffer* (function).
*fdset-size* (special variable).
@tcpip-syscalls (special variable).
bind (function).
connect (function).
errno% (function).
get-call (reader method).
(setf get-call) (writer method).
get-empty-fdset-items (reader method).
(setf get-empty-fdset-items) (writer method).
get-errno (reader method).
(setf get-errno) (writer method).
get-fdset-size (reader method).
(setf get-fdset-size) (writer method).
get-where (reader method).
(setf get-where) (writer method).
getpeername (function).
getsockname (function).
htons (function).
inet-ntoa (function).
init-fdset (function).
ioctl (function).
listen-2 (function).
poll% (function).
read-2 (function).
read-error (condition).
socket (function).
strerror-r% (function).
tcpdelay-setup-failed (condition).
this-cant-happen (condition).
write-2 (function).
http2/server/poll/poll-openssl.lisphttp2/server/poll (system).
bio-should-retry (function).
encrypt-some* (function).
handle-ssl-errors* (function).
print-object (method).
ssl-blocked (condition).
ssl-error-condition (condition).
ssl-wants-read (condition).
ssl-wants-write (condition).
@ssl (special variable).
@ssl-errors (special variable).
get-code (reader method).
(setf get-code) (writer method).
get-codes (reader method).
(setf get-codes) (writer method).
get-ssl-errors (function).
other-ssl-error (condition).
peer-sent-alert (condition).
peer-sent-close-notify (condition).
retry-flag-not-set (condition).
simple-communication-error (condition).
ssl-syscall-error (condition).
unexpected-eof (condition).
http2/server/poll/poll-server.lisppoll-openssl.lisp (file).
http2/server/poll (system).
*no-client-poll-timeout* (special variable).
*poll-timeout* (special variable).
add-socket-to-fdset (function).
client-ssl (function).
(setf client-ssl) (function).
compute-poll-timeout-value (function).
decrypt-socket-octets (function).
describe-object (method).
detached-poll-dispatcher (class).
do-new-connection (method).
encrypt-and-send (function).
encrypt-data (function).
encrypt-some (function).
flush-http2-data (method).
get-clients (reader method).
(setf get-clients) (writer method).
get-peer-name (method).
make-tls-endpoint (function).
move-encrypted-bytes (function).
on-complete-ssl-data (function).
poll-dispatcher (class).
poll-dispatcher-mixin (class).
poll-timeout (condition).
print-object (method).
print-object (method).
process-client-sockets (function).
process-data-on-socket (function).
queue-frame (method).
read-from-peer (function).
run-user-callback (function).
select-next-action (function).
send-unencrypted-bytes (function).
set-next-action (function).
state (type).
states-to-string (function).
tls-endpoint (structure).
with-tls-endpoint (macro).
write-data-to-socket (function).
write-octets-to-decrypt (function).
*default-buffer-size* (special variable).
*describe-object-buffer-limit* (special variable).
*encrypt-buf-size* (special variable).
*encrypted-buf-size* (special variable).
*initial-state* (special variable).
*nagle* (special variable).
*states* (special variable).
*tls-content-types* (special variable).
*tls-message-types* (special variable).
+client-preface-length+ (constant).
@app-interface (special variable).
@application-loop (special variable).
@async-server (special variable).
@poll-tls-states (special variable).
@port-to-tls (special variable).
@request-handling (special variable).
@socket-setup (special variable).
@tls-endpoint (special variable).
@tls-to-port (special variable).
add-and-maybe-pass-data (function).
add-state (function).
app-callback (type).
buffer-size (type).
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-rbio (function).
client-start-time (reader).
(setf client-start-time) (writer).
client-state (reader).
(setf client-state) (writer).
client-wbio (function).
client-write-buf (reader).
(setf client-write-buf) (writer).
client-write-buf-size (reader).
(setf client-write-buf-size) (writer).
close-client-connection (function).
compute-timeout (function).
concatenate* (function).
copy-tls-endpoint (function).
define-reader (macro).
define-writer (macro).
do-available-actions (function).
double-buffer-size (function).
doubled-buffer (function).
get-client (reader method).
get-client (reader method).
get-client (reader method).
(setf get-client) (writer method).
(setf get-client) (writer method).
(setf get-client) (writer method).
get-dispatch (reader method).
(setf get-dispatch) (writer method).
get-expected (reader method).
get-expected (reader method).
(setf get-expected) (writer method).
(setf get-expected) (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).
get-reason (reader method).
(setf get-reason) (writer method).
get-received (reader method).
(setf get-received) (writer method).
get-written (reader method).
(setf get-written) (writer method).
handle-client-io (function).
handle-ssl-errors (function).
if-state (function).
if-state* (function).
make-client (function).
make-client% (function).
make-tls-server-object (function).
maybe-init-ssl (function).
maybe-process-new-client (function).
not-enough-data (condition).
parse-tls-record (function).
poll-server-close (condition).
poll-server-connection (class).
process-new-client (function).
pull-once-push-bytes (function).
pull-push-bytes (function).
push-bytes (function).
queue-encrypted-bytes (function).
read-encrypted-from-openssl (function).
remove-state (function).
send-to-peer (function).
serve-tls (function).
set-state* (function).
setup-new-connect-pollfd (function).
setup-port (function).
ssl-peek (function).
ssl-read (function).
state-idx (macro).
tls-endpoint-p (function).
with-clients (macro).
write-failed (condition).
Packages are listed by definition order.
http2/stream-overlayhttp2/tcpiphttp2/clienthttp2/corehttp2/opensslhttp2/hpackhttp2http2/utilshttp2/cl+sslhttp2/serverhttp2/stream-overlaycommon-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/tcpipcffi.
common-lisp.
http2/utils.
mgl-pax.
accept (function).
add-new-fdset-item (function).
add-socket-to-fdset% (function).
call-with-fdset (function).
call-with-poll-info (function).
call-with-tcp-pair (function).
checked-syscall (function).
close-fd (function).
errno (function).
fcntl (function).
fd-to-ip (function).
fdset-manager (class).
get-fdset (generic reader).
(setf get-fdset) (generic writer).
nonneg-or-eagain (function).
poll (function).
read-buffer (function).
read-socket* (function).
set-fd-slot (function).
set-nodelay (function).
set-nonblock (function).
setsockopt (function).
socket-bind (function).
strerror (function).
syscall-error (condition).
with-fdset (macro).
with-socket (macro).
with-tcp-pair (macro).
write-buffer* (function).
*fdset-size* (special variable).
@tcpip-syscalls (special variable).
bind (function).
connect (function).
errno% (function).
get-call (generic reader).
(setf get-call) (generic writer).
get-empty-fdset-items (generic reader).
(setf get-empty-fdset-items) (generic writer).
get-errno (generic reader).
(setf get-errno) (generic writer).
get-fdset-size (generic reader).
(setf get-fdset-size) (generic writer).
get-where (generic reader).
(setf get-where) (generic writer).
getpeername (function).
getsockname (function).
htons (function).
inet-ntoa (function).
init-fdset (function).
ioctl (function).
listen-2 (function).
poll% (function).
read-2 (function).
read-error (condition).
socket (function).
strerror-r% (function).
tcpdelay-setup-failed (condition).
this-cant-happen (condition).
write-2 (function).
http2/clientHTTP/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).
client-stream (class).
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).
@client-api (special variable).
@client-tutorial-simple (special variable).
@client-tutorials (special variable).
@customizing-client (special variable).
@customizing-client-example-multi (special variable).
@customizing-client-reference (special variable).
@tutorial-build-client (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-status (generic reader).
(setf get-status) (generic writer).
get-uri (generic reader).
(setf get-uri) (generic writer).
present-result (generic function).
with-http2-connection (macro).
http2/corecommon-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).
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).
flags-to-code (function).
flow-control-mixin (class).
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-flag (compiler macro).
get-flag (function).
get-headers (generic function).
(setf get-headers) (generic writer).
get-initial-peer-window-size (generic reader).
(setf get-initial-peer-window-size) (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-name (generic function).
get-peer-window-size (generic function).
(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-simple-error (condition).
http2-simple-warning (condition).
http2-stream (class).
http2-stream-minimal (class).
is-utf8-p (function).
long-write (function).
make-transport-output-stream (function).
maybe-end-stream (function).
multi-part-data-stream (class).
open-http2-stream (function).
padding (type).
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).
receiver-fn (type).
send-headers (function).
server-http2-connection (class).
server-stream (class).
set-peer-setting (generic function).
state (type).
state (slot).
stream-based-connection-mixin (class).
stream-collection (class).
text-collecting-stream (class).
timeshift-pinging-connection (class).
too-big-frame (condition).
trace-peer-window (function).
trace-window (function).
utf8-parser-mixin (class).
with-padding-marks (macro).
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).
+allowed-frame-types-count+ (constant).
+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).
+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).
@connections (special variable).
@data (special variable).
@data-classes (special variable).
@data-frame-lowlevel (special variable).
@data-received (special variable).
@data-write (special variable).
@errors (special variable).
@flags (special variable).
@flow-control (special variable).
@frame-definitions (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).
@implementation/overview (special variable).
@lisp-stream-emulation (special variable).
@old-frame-functions (special variable).
@padding (special variable).
@padding-read (special variable).
@padding-write (special variable).
@rst (special variable).
@stream-closed (special variable).
@stream-states (special variable).
@streams (special variable).
@tracing-windows (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).
continue-long-write (function).
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).
duplicit-long-write (condition).
dynamic-table-entry-size (function).
find-just-stream-by-id (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-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-error-name (function).
get-flag-keywords (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-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-new-action (generic reader).
(setf get-new-action) (generic writer).
get-old-action (generic reader).
(setf get-old-action) (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-requested (generic reader).
(setf get-requested) (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-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).
go-away-no-error (condition).
handle-alt-svc (generic function).
header-error (condition).
hpack-endpoint (class).
http2-condition (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).
is-binary (function).
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).
process-frames (function).
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).
reserved-bit-set (condition).
send-ping (generic function).
stream-protocol-error (condition).
too-big-padding (condition).
trace-frames (function).
unexpected-continuation-frame (condition).
unimplemented-feature (condition).
unsupported-feature (condition).
utf-first-char-size (function).
utf-is-first-char (function).
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/opensslcffi.
common-lisp.
dref.
http2/utils.
mgl-pax.
bio-read% (function).
bio-should-retry (function).
bio-write (function).
close-openssl (function).
encrypt-some* (function).
err-reason-error-string (function).
handle-ssl-errors* (function).
init-tls-endpoint-core (function).
make-tls-context (generic function).
make-tls-endpoint-core (function).
ssl-accept (function).
ssl-blocked (condition).
ssl-connect (function).
ssl-error-condition (condition).
ssl-is-init-finished (function).
ssl-read% (function).
ssl-set-accept-state (function).
ssl-wants-read (condition).
ssl-wants-write (condition).
tls-endpoint-core (structure).
with-ssl-context (macro).
with-tls-endpoint-core (macro).
+ssl-filetype-asn1+ (constant).
+ssl-filetype-default+ (constant).
+ssl-filetype-pem+ (constant).
@openssl (special variable).
@openssl-context (special variable).
@openssl-endpoint (special variable).
@ssl (special variable).
@ssl-errors (special variable).
bio-new (function).
bio-s-mem (function).
bio-test-flags (function).
copy-tls-endpoint-core (function).
err-get-error (function).
get-code (generic reader).
(setf get-code) (generic writer).
get-codes (generic reader).
(setf get-codes) (generic writer).
get-ssl-errors (function).
make-http2-tls-context (function).
make-tls-endpoint-core% (function).
other-ssl-error (condition).
peer-sent-alert (condition).
peer-sent-close-notify (condition).
retry-flag-not-set (condition).
simple-communication-error (condition).
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-cipher-list (function).
ssl-ctx-set-ciphersuites (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-free (function).
ssl-get-error (function).
ssl-new (function).
ssl-peek% (function).
ssl-pending (function).
ssl-set-bio (function).
ssl-syscall-error (condition).
ssl-write (function).
tls-endpoint-core-p (function).
tls-endpoint-core-rbio (reader).
tls-endpoint-core-ssl (reader).
(setf tls-endpoint-core-ssl) (writer).
tls-endpoint-core-wbio (reader).
tls-method (function).
unexpected-eof (condition).
http2/hpackanaphora.
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).
http2common-lisp.
http2/client.
http2/server.
mgl-pax.
@implementation (special variable).
@index (special variable).
@overview (special variable).
@reference (special variable).
@server-tutorials (special variable).
@systems-and-packages (special variable).
@test (special variable).
@tutorials (special variable).
make-release-documentation (function).
pages (function).
http2/utilscommon-lisp.
mgl-pax.
*example-url* (special variable).
aref/wide (function).
(setf aref/wide) (function).
binary-stream (class).
certificated-context-mixin (class).
communication-error (condition).
done (condition).
easy-certificated-context-mixin (class).
find-setting-by-id (function).
find-setting-code (function).
frame-size (slot).
frame-size (type).
get-index (generic reader).
(setf get-index) (generic writer).
get-medium (generic reader).
(setf get-medium) (generic writer).
h2-server-context-mixin (class).
http2-stream-state (type).
make-full-pipe (function).
make-initialized-octet-buffer (function).
make-octet-buffer (function).
make-pipe (function).
medium (slot).
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).
trace-object (macro).
vector-from-hex-text (function).
*global-trace-level* (special variable).
*settings* (special variable).
*trace-level* (special variable).
@buffer-stream-and-pipes (special variable).
@buffer-stream-and-pipes-impl (special variable).
@cerpaths (special variable).
@error-root (special variable).
@errs (special variable).
@utils (special variable).
find-certificate-file (function).
find-private-key-file (function).
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).
maybe-create-certificate (function).
http2/serverContains
- Functions to start and stop of a HTTP/2 servers,
- implementations of the servers (threaded and polled version), HTTP2 server connections and HTTP2 streams,
- macros to define content for the served pages.
http2/server/shared
http2/server/poll
http2/server/threaded
cffi.
common-lisp.
dref.
http2/core.
http2/openssl.
http2/stream-overlay.
http2/tcpip.
http2/utils.
mgl-pax.
*buffer* (special variable).
*log-stream* (special variable).
*no-client-poll-timeout* (special variable).
*poll-timeout* (special variable).
*vanilla-server-dispatcher* (special variable).
add-socket-to-fdset (function).
base-dispatcher (class).
callback-on-server (function).
client-ssl (function).
(setf client-ssl) (function).
compute-poll-timeout-value (function).
constant-handler (macro).
create-server (function).
decrypt-socket-octets (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).
encrypt-and-send (function).
encrypt-data (function).
encrypt-some (function).
get-clients (generic reader).
(setf get-clients) (generic writer).
handler (macro).
handler (type).
kill-server (function).
make-tls-endpoint (function).
move-encrypted-bytes (function).
on-complete-ssl-data (function).
poll-dispatcher (class).
poll-dispatcher-mixin (class).
poll-timeout (condition).
process-client-sockets (function).
process-data-on-socket (function).
read-from-peer (function).
redirect-handler (function).
run (function).
run-scheduler-in-thread (function).
run-user-callback (function).
schedule-task (generic function).
scheduled-task (class).
scheduler (class).
scheduler-empty-p (function).
scheduler-in-thread (class).
select-next-action (function).
send-goaway (function).
send-text-handler (function).
send-unencrypted-bytes (function).
server-socket-stream (generic function).
set-next-action (function).
single-client-dispatcher (class).
start (function).
start-server-on-socket (generic function).
states-to-string (function).
stop (function).
stop-scheduler-in-thread (function).
threaded-dispatcher (class).
threaded-server-mixin (class).
tls-dispatcher-mixin (class).
tls-endpoint (structure).
tls-single-client-dispatcher (class).
tls-threaded-dispatcher (class).
unsupported-server-setup (condition).
url-from-port (function).
url-from-socket (function).
with-tls-endpoint (macro).
write-data-to-socket (function).
write-octets-to-decrypt (function).
*default-buffer-size* (special variable).
*default-handler* (special variable).
*describe-object-buffer-limit* (special variable).
*dummy-last-task* (special variable).
*encrypt-buf-size* (special variable).
*encrypted-buf-size* (special variable).
*exact-handlers* (special variable).
*initial-state* (special variable).
*nagle* (special variable).
*prefix-handlers* (special variable).
*scheduler* (special variable).
*servers* (special variable).
*states* (special variable).
*tls-content-types* (special variable).
*tls-message-types* (special variable).
*vanilla-host* (special variable).
+client-preface-length+ (constant).
@app-interface (special variable).
@application-loop (special variable).
@async-server (special variable).
@dispatchers (special variable).
@logging (special variable).
@poll-tls-states (special variable).
@port-to-tls (special variable).
@request-body (special variable).
@request-details (special variable).
@request-handling (special variable).
@scheduling (special variable).
@server-actions (special variable).
@server-classes (special variable).
@server-content (special variable).
@server-mixins (special variable).
@server-reference (special variable).
@server-start-stop (special variable).
@server/threaded (special variable).
@socket-setup (special variable).
@tls-endpoint (special variable).
@tls-to-port (special variable).
add-and-maybe-pass-data (function).
add-state (function).
app-callback (type).
buffer-size (type).
certificate-h2-dispatcher (class).
cleanup-connection (generic function).
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-rbio (function).
client-start-time (reader).
(setf client-start-time) (writer).
client-state (reader).
(setf client-state) (writer).
client-wbio (function).
client-write-buf (reader).
(setf client-write-buf) (writer).
client-write-buf-size (reader).
(setf client-write-buf-size) (writer).
close-client-connection (function).
compute-timeout (function).
concatenate* (function).
copy-tls-endpoint (function).
define-reader (macro).
define-some-handler (function).
define-writer (macro).
detached-threaded-dispatcher (class).
do-available-actions (function).
double-buffer-size (function).
doubled-buffer (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-connection-args (generic reader).
(setf get-connection-args) (generic writer).
get-connection-class (generic reader).
(setf get-connection-class) (generic writer).
get-dispatch (generic reader).
(setf get-dispatch) (generic writer).
get-dispatcher (generic reader).
(setf get-dispatcher) (generic writer).
get-exact-handlers (generic reader).
(setf get-exact-handlers) (generic writer).
get-expected (generic reader).
(setf get-expected) (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-reason (generic reader).
(setf get-reason) (generic writer).
get-received (generic reader).
(setf get-received) (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).
get-written (generic reader).
(setf get-written) (generic writer).
handle-client-io (function).
handle-ssl-errors (function).
if-state (function).
if-state* (function).
log-closed-stream (function).
log-server-connected (generic function).
log-server-disconnected (generic function).
make-client (function).
make-client% (function).
make-connection-object (function).
make-tls-server-object (function).
maybe-init-ssl (function).
maybe-process-new-client (function).
not-enough-data (condition).
not-http2-stream (condition).
parse-tls-record (function).
poll-server-close (condition).
poll-server-connection (class).
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-encrypted-from-openssl (function).
remove-state (function).
routing-mixin (class).
run-mature-tasks (function).
scheduling-handler (macro).
send-to-peer (function).
serve-tls (function).
set-state* (function).
setup-new-connect-pollfd (function).
setup-port (function).
ssl-peek (function).
ssl-read (function).
state-idx (macro).
stop-server (generic function).
time-to-action (function).
tls-endpoint-p (function).
vanilla-server-connection (class).
vanilla-server-stream (class).
with-clients (macro).
with-standard-handlers (macro).
write-failed (condition).
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.
Add reporting tracing for FUNCTION. See sbcl manual for trace to see what a
function can be.
The FORMAT is a format string and ARGS is order of an argument in the function input.
This is intended primarily for SBCL. It would use basic tracing on other platform (and this is not tested...)
Run BODY with FDSET slot of DISPATCHER set to a set of file descriptors for
poll (of size FDSET-SIZE, another DISPATCHER slot).
Initialize FDSET. Set EMPTY-FDSET-ITEMS slot of the dispatcher to all slot
items.
Cleanup FDSET - including closing sockets - after BODY is run.
Look at the FLAGS and LENGTH (captured variable, FIXME) of a frame, with
possibly padded payload that starts at START, and adjust START and set END for
this frame to start and end of the actual payload.
CONNECTION is used only to have somewhere to signal possible error.
Run BODY with SOCKET-NAME bound to SOCKET (evaluated). Close the relevant socket at the end.
Run body with SSL context created by MAKE-TLS-CONTEXT in CTX.
Run BODY with A and B bound to connected sockets.
Close thos sockets afterwards.
Run BODY with NAME lexically bound to INIT, and it should be a TLS endpoint.
When control leaves the body, either normally or abnormally, The SSL of the
endpoint is freed.
The defaults reflect the fact that the macro should not be used with TLS endpoints used inside a FDSET.
Run BODY with NAME bound to a fresh TLS-ENDPOINT-CORE instance. Close it on exit.
“‘cl-transcribe
(with-ssl-context (ctx nil) (with-tls-endpoint-core (foo ctx) (print foo)))
..
.. #<tls-core>
==> #<uninitialized or freed tls-core>
“‘
Add new socket to the fdset, and
Construct a little indian number from SIZE octets in SEQUENCE, starting at START.
“‘cl-transcript
=> “CL-TRANSCRIPT
(aref/wide (make-initialized-octet-buffer #(1 2 3)) 0 0)
=> 0
(aref/wide (make-initialized-octet-buffer #(1 2 3)) 0 2)
=> 258
(aref/wide (make-initialized-octet-buffer #(1 2 3)) 0 3)
=> 66051
(aref/wide (make-initialized-octet-buffer #(1 2 3)) 0 4)
.. debugger invoked on SB-INT:INVALID-ARRAY-INDEX-ERROR:
.. Invalid index 3 for (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (3)), should be a non-negative integer below 3.
=> ; No value
“‘
Store a little indian number as SIZE octets to the SEQUENCE.
“‘cl-transcript
(let ((seq (make-octet-buffer 5)))
(setf (aref/wide seq 0 3) 66051)
seq)
=> #(1 2 3 0 0)
“‘
Helper for WITH-FDSET.
Call FN with three parameters, INPUT-READY, OUTPUT-READY ERR-OR-HUP. It should
process the available input and return whether there is
a pending write.
Apply FN on two interconnected TCP sockets.
This is done by creating server and client sockets and connecting client to the
server.
Makes sure that all created sockets are closed afterwards.
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.
Return the result value of the syscall when check passes.
Otherwise signal an error.
See close(2). The Lisp name is changed so that not to cause a conflict.
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.
Close the endpoint core CLIENT at drop the references.
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 human readable 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.
Send data in the VECTOR between FROM and TO to the ② openssl for decryption .
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.
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.
Encrypt octets in VECTOR between FROM and TO. Return number of octets processed, or raise appropriate error.
See man errno(3).
Guess charset from the content type. NIL for binary data.
See man fcntl(2). Used to set the connection non-blocking.
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 setting name by code
“‘cl-transcript
(find-setting-code :max-header-list-size)
=> 6
(find-setting-code :foo)
.. debugger invoked on SIMPLE-ERROR:
.. No setting named FOO
=> ; No value
“‘
Convert list of flags to a flag octet code. This is not supposed to be fast.
“‘cl-transcript
(http2/core:flags-to-code ’(:padded t))
=> 8
“‘
Boolean that indicates whether the flag of FLAG-NAME is in FLAGS.
“‘cl-transcript
(get-flag 21 :ack)
=> T
“‘
For constant FLAG-NAME this is supposed to be fast.
Check RET value of a openssl call and raise relevant error, if any.
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.
Initialize freshly created TLS-CORE.
That is, create a SSL context and bind it with RBIO and WBIO.
This is factored out so that it can be used in structures that inherit TLS-CORE.
Test headers to see if the encoding is UTF-8.
Kill server by invoking KILL-SERVER restart, if it exists.
ACTION is a function that writes data to the stream using appropriate layer (not
necessary flushing), and return two values, next ACTION and size needed for
it. Writing to the stream also implicitly lowers the peer-window-size.
Calling these function is done either till the next action is NIL, or till the
peer window size is too low. In the latter case, store the next function so that
this is re-run when the appropriate window frame is received.
This is supposed to be final part of sending data to the stream. Do not call it second
time on same stream.
See /long example in demo.lisp..
Two values, each representing one end of a full binary pipe: writes to ones are read from the other.
“‘cl-transcript
(make-octet-buffer 10)
=> #(0 0 0 0 0 0 0 0 0 0)
(type-of *)
=> (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (10))
“‘
Two values, each representing one end of a freshly created one-way binary pipe: writer and reader. They share the buffer.
Make a generic instance of a TLS-ENDPOINT usable both for a client and for a server.
The read and write buffers are intitialized to new
New TLS-ENDPOINT-CORE that has context derived from CONTEXT.
An OUTPUT-STREAM built atop RAW STREAM with added text to binary encoding using charset (as understood by flexi-streams) and possibly gzip compression.
Close the STREAM if FLAGS indicates so. It changes state to either of
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.
Helper as first parameter for checked-syscall.
Read number of octets indicated in CLIENT into a vector and then apply client fn on it.
The code assumes that single client request message is not split across several
TLS frames. If it does, well, connection error.
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.
Return parser for a generic data frame (possibly with a padding). That is a function of type PARSER-FN.
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.
Read data from client socket ① and pass them to the tls buffer ② to decrypt.
@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 up to VEC-SIZE octets from the FD and store them in the VEC.
Signal DONE or READ-ERROR where there is nothing on the peer.
Return number of read buffer, This means 0 when nothing was read but data may follow later (EAGAIN).
Read one frame related to the CONNECTION from STREAM. Flush outstanding data to write, read the header and process it.
Move up to VEC-SIZE octets from PEER-IN to the VEC.
Return 0 when no data are
available. Raise an error on error.
This is for debugging/tests only. Return vector read, or nil.
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"
“‘
The individual values are:
- body of the reply (response data) - string or array
- status code as integer
- alist of response headers
- the URL the reply came from (bogus value for Drakma compatibility)
- 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)
Run a default HTTP/2 server on PORT on foreground.
The dispatcher type is not defined and can change in future. This is a thin wrapper over START that cannot be customized.
Make a thread that runs tasks as they mature. CONTINUE restart can be used during the sleep to re-asses next tasks.
Run user defined callback.
The callback is called with two parameters, client application data (opaque) and vector of OCTETS-NEEDED octets. It should return two values, new callback and new expected size.
One of possible next actions consistent with 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.
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.
Add new data to be encrypted and sent to client.
Data are buffered in the ENCRYPT-BUF of the client and when there is enough of
them they are encrypted.
NEW-DATA are completely used up (can be dynamic-extent).
Set FD and EVENTS of slot IDX in fdset.
Set action for next chunk of received data.
Set socket as nonblocking. This is done usually by O_NONBLOCK on fcntl, however,
this failed silently on OSX.
So this uses ioctl and fionbio.
See man setsockopt(2). Optionally used to switch Nagle algorithm.
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
HOST is used to bind appropriately the listening socket. Typically it would be
localhost or "0.0.0.0".
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.
PRIVATE-KEY-FILE and CERTIFICATE-FILE determine where to look for the certificate and the private key. By default, HOSTNAME (defaulting to HOST) is used to find the file in predefined locations (see FIND-PRIVATE-KEY-FILE) respective parameters try to locate the files.
Short string describing the state using codes on the diagram.
Stop a server and remove it from list of servers.
Lisp string for particular error. See man strerror(3).
Trace events related to the windows that peer has to set data:
- when we send out the window update frame (window increases), and - when we receive data (windows decreases).
Trace events related to the window we have to send data:
- When we send data, and
- when we process window size frame callback
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 buffered encrypted data Ⓔ to the client socket ⑥. Update the write buffer to keep what did not fit.
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.
Move octets from VECTOR to the OPENSSL-TO-DECRYPT.
Return 0 when no data are
available. Raise an error on error.
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.
client-stream) (name symbol) value) ¶symbol) value) ¶server-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 stream or connection, and possibly calls WINDOW-OPEN-FN.
(eql :closed)) increment) ¶flow-control-mixin) increment) ¶multi-part-data-stream) increment) ¶OBSOLETE. MAY BE REMOVED SOON. Use handlers for go-away instead.
Called when a go-away frame is received. By default throws GO-AWAY condition if error was reported.
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.
poll-dispatcher-mixin)) ¶automatically generated reader method
poll-dispatcher-mixin)) ¶automatically generated writer method
http2-connection)) ¶Some frame actions can act both on streams and on connection. In that case, pretending that connection of connection is the same connection can be useful.
http2-stream-minimal)) ¶automatically generated reader method
connection-error)) ¶http2-stream-minimal)) ¶automatically generated writer method
connection-error)) ¶hpack-context)) ¶automatically generated reader method
hpack-context)) ¶automatically generated writer method
fdset-manager)) ¶automatically generated reader method
fdset-manager)) ¶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
http2-connection)) ¶automatically generated reader method
http2-connection)) ¶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
communication-error)) ¶communication-error)) ¶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.
Name of the peer. Used primarily in log messages and when object is printed.
Content can vary, e.g.,
- for a server connection peer IP and port,
- for a client connection hostname of the peer.
The fallback is unescaped print of the object.
poll-server-connection)) ¶stream-based-connection-mixin)) ¶fd-stream)) ¶socket)) ¶ssl-stream)) ¶http2-stream-minimal)) ¶(eql :closed))) ¶No data to send to closed peer, so make it 0.
This is used only in tracing, not during normal use.
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
http2-connection)) ¶http2-connection)) ¶Class for new streams
stream-collection)) ¶stream-collection)) ¶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, depending on DISPATCHER.
The specializations include
:
- ALPN callback that selects h2 (h2-server-context-mixin)
- Do not request client certificates
- Do not allow ssl compression and renegotiation.
We should also limit allowed ciphers, but we do not.
h2-server-context-mixin)) ¶For servers
certificated-context-mixin)) ¶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.
client-stream)) ¶gzip-decoding-mixin)) ¶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) ¶http2-condition) out) ¶tls-endpoint-core) stream) ¶hpack-context) stream) ¶tls-endpoint) 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.
http2-stream) &key connection) ¶Set the window parameters of new stream from the connection defaults.
constant-output-stream) &key &allow-other-keys) ¶easy-certificated-context-mixin) &key hostname) ¶window-is-closed) stream) ¶syscall-error) out) ¶http2-connection) out) ¶server-stream) out) ¶http-stream-error) out) ¶http2-stream) out) ¶too-big-frame) stream) ¶connection-error) out) ¶client-preface-mismatch) out) ¶no-payload-action) out) ¶frame-type) stream) ¶ssl-error-condition) stream) ¶tls-endpoint-core) stream) ¶hpack-context) stream) ¶pipe-end-for-read) stream) ¶communication-error) out) ¶pipe-end-for-write) stream) ¶poll-dispatcher-mixin) out) ¶tls-endpoint) 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
Something happens that prevents communication from going on, unless handled.
serious-condition.
:medium
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.
This condition is signalled when the socket on the other side is closed (for reading).
Length of the padding is the length of the frame payload or greater.
Signalled by DO-GOAWAY when go-away frame arrives.
http2-error.
simple-condition.
http2-warning.
simple-condition.
Poll was called with a timeout and returned before any file descriptor became ready.
The operation did not complete and can be retried later.
An error condition on SSL side that is not handled separately.
The list of error codes is in openssl/sslerr.h.
A non-recoverable, fatal error in the SSL library occurred, usually a protocol error. The OpenSSL error queue contains more information on the error. If this error occurs then no further I/O operations should be performed on the connection and SSL_shutdown() must not be called.
:codes
The last operation was a read operation from a nonblocking BIO. Not enough data was available at this time to complete the operation. If at a later time the underlying BIO has data available for reading the same function can be called again.
Syscall failed. The printed form looks like
“‘
(socket-bind -1 0)
.. debugger invoked on SYSCALL-ERROR:
.. #<SYSCALL-ERROR 9 (Bad file descriptor) on -1 during #<FUNCTION BIND>>
“‘
Frame exceeds the size defined in SETTINGS_MAX_FRAME_SIZE.
error.
:dispatcher
Structure capturing stream priority parameters.
Data of one TLS endpoint that is connected to a socket that is part of a FDSET. This includes:
- File descriptor of underlying socket (FD).
- Opaque pointer to the openssl handle (SSL). See SSL-READ and ENCRYPT-SOME.
- Input and output BIO for exchanging data with OPENSSL (WBIO, RBIO).
- Buffer of plain text octets to encrypt and send (ENCRYPT-BUF). This buffer reduces TLS records overhead.
- Buffer of encrypted octets to send to the file descriptor (WRITE-BUF). This buffer reduces network headers overhead and removes delays due to Nagle algorithm.
- Callback function when read data are available (IO-ON-READ) and Number of octets required by it (OCTETS-NEEDED). Negative values have special handling. See RUN-USER-CALLBACK for details.
- Client state from the low-level data flow point of view (STATE).
- Application data (slot to be used by the application). This is usually some application structure, but can be also a symbol in tests. Another input to RUN-USER-CALLBACK.
fixnum
-1
(and (simple-array (unsigned-byte 8)))
(make-array http2/server::*encrypted-buf-size* :element-type (quote (unsigned-byte 8)))
fixnum
0
(simple-array (unsigned-byte 8))
(make-array http2/server::*encrypt-buf-size* :element-type (quote (unsigned-byte 8)))
http2/server::app-callback
(constantly nil)
fixnum
0
fixnum
0
fixnum
0
fixnum
(get-internal-real-time)
http2/core:state
http2/server::*initial-state*
Data of one TLS endpoint. This includes:
- Opaque pointer to the openssl handle (SSL). See SSL-READ and ENCRYPT-SOME. - Input and output BIO for exchanging data with OPENSSL (WBIO, RBIO).
structure-object.
cffi-sys:foreign-pointer
(cffi-sys:null-pointer)
cffi-sys:foreign-pointer
(http2/openssl::bio-new (http2/openssl::bio-s-mem))
This slot is read-only.
cffi-sys:foreign-pointer
(http2/openssl::bio-new (http2/openssl::bio-s-mem))
This slot is read-only.
| Initarg | Value |
|---|---|
:connection-class | (quote vanilla-server-connection) |
:connection-args | nil |
:url | 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 initiate 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.
Uses HOSTNAME (defaulting to localhost) to locate or create the key pair.
| Initarg | Value |
|---|---|
:hostname | localhost |
Treat all non-binary data input as ASCII, that is, convert octets to a string with CODE-CHAR. It is compatible with UTF8-PARSER-MIXIN if provided after it in the list of direct superclasses.
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* |
:clients | nil |
Number of slots for clients to be polled.
:fdset-size
:fdset
:empty-fdset-items
The flow control parameters that are kept both per-stream and per-connection.
In addition to the accounting items (current window size of both endpoints) it also tracks a callback to be called when window is increased (WINDOW-OPEN-FN).
:window-size
:peer-window-size
Reference to a function to call when the window is extended. This is used in the handler for /long in the demo.lisp example.
:window-open-fn
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
This mixin ensures that the server will provide H2 alpn during TLS negotiation.
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 instance reflecting several aspects of the connections:
- connection is a collection of streams (STREAM-COLLECTION),
- connection maintains flow control (FLOW-CONTROL-MIXIN),
- connection maintains hpack state (HPACK-ENDPOINT),
- connection maintain some internal configuration variables such as maximum frames size (FRAME-CONTEXT),
- connection maintain window sizes (FLOW-CONTROL-MIXIN),
- connection can create new streams and needs to track the parameters of the new stream (class, windows sizes)
| 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
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
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
| Initarg | Value |
|---|---|
:connection-class | (quote poll-server-connection) |
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 |
|---|---|
:poll-timeout | *poll-timeout* |
:no-client-poll-timeout | *no-client-poll-timeout* |
:nagle | *nagle* |
:clients | nil |
See *POLL-TIMEOUT*.
:poll-timeout
See *NO-CLIENT-POLL-TIMEOUT*.
:no-client-poll-timeout
:nagle
:clients
| 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
Server connection initiate even numbered streams.
| Initarg | Value |
|---|---|
:id-to-use | 2 |
:peer-accepts-push | t |
:peer-accepts-push
Server streams need to track attributes from the client headers such as PATH.
| 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
Live connections can have zero, one or more @STREAMS that are not closed, and can generate new ones.
| 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).
A mixin that implements specific DO-PING and DO-PONG so that the RTT is printed after DO-PING is send.
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
The size of a frame payload is limited by the maximum size that a receiver advertises in the SETTINGS_MAX_FRAME_SIZE setting. This setting can have any value between 2^14 (16,384) and 2^24-1 (16,777,215) octets, inclusive.
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)
If padding is present, it is an octet vector up to 256 bytes
Function that reads and processes number of octets, and returns next function and its needed size.
Description of actions available to the endpoint.
Streams are identified with an unsigned 31-bit integer.
Frame types are indexed by an octet.
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/1.1 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
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.
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.
Initial size of the vector holding data to encrypt.
Initial size of the vector holding encrypted data
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 tag 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
List of state bits that can a TLS endpoint have.
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.
Define a function named WRITER-NAME name writes a frame of type TYPE-CODE
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.
Update window size when we receive data.
Update peer window size for stream and connection after writing data.
Do not check whether write is possible.
Add new data to buffer if they fit.
If they do not, send it in several parts:
- send the allocated buffer filled up to the max with new data,
- send the new data as bulk if the rest is big enough
Return new buffer actual size and number of new-data octets processed.
The NEW-DATA vector is not stored (can be dynamic-extent).
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.
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)
man connect(2)
Actually implement LONG-WRITE behaviour.
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.
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.
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 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.
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/
name.
Get HTTP/2 error name from the error code.
“‘cl-transcript
(http2/core::get-error-name 1)
=> HTTP2/CORE::+PROTOCOL-ERROR+
(http2/core::get-error-name 33)
=> HTTP2/CORE::UNDEFINED-ERROR-CODE-21
“‘
Decode an integer from starting OCTET and additional octets in STREAM as defined in RFC7541 sect. 5.1.
Get SSL error and either close connection immediately (for some known and expected errors) or let user handle it.
man getsockname(2)
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.
Use to set nonblock on OSX
man listen(2)
Log request information when peer sends all headers or when the request errs for
some reason..
This is to be bound to HTTP-STREAM-ERROR
The function HTTP2/SERVER::MAKE-CLIENT has been deprecated as of http2 version 2.0.3.
Use HTTP2/SERVER:MAKE-TLS-ENDPOINT instead.
Return decoder code for I matching PREFIX among codes.
The function HTTP2/OPENSSL::MAKE-HTTP2-TLS-CONTEXT has been deprecated as of http2 version 2.0.3.
Use HTTP2/OPENSSL:MAKE-TLS-CONTEXT instead.
Do not use that. Changed name, as not http2 specific (use proper mixins for it).
Make package documentation for the release:
- HTML documentation files,
- README to be distributed with the package
Create new TLS ENDPOINT object suitable for TLS server.
Initially, the ENCRYPT-BUFFER contains the settings to send, and next action is reading of the client hello.
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.
Generate key and a self-signed certificate to it for localhost using openssl cli.
If SSL is not initialized yet, initialize it.
Add new client: accept connection, create client and add it to pollfd and to *clients*.
Length of the frame with added padding (incl. padding size).
Parse a TLS record
Synchronous I/O multiplexing. Called by POLL.
Process DATA as frames by CONNECTION.
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.
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.
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.
Serve TLS communication on the LISTENING-SOCKET using DISPATCHER.
Establish appropriate context (clients list, fdset, TLS context, scheduler).
Handle new connections on LISTENING-SOCKET (creates new managed socket) and managed sockets (read and write data, call client callback when data are available), and run scheduled actions.
Set the TCP socket: nonblock and possibly nagle.
man socket(2)
Move up to SIZE octets from the decrypted SSL ③ to the VEC.
Return 0 when no data are available.
Move up to SIZE octets from the decrypted SSL ③ to the VEC.
Return 0 when no data are available. Possibly remove CAN-READ-SSL and/or NEG-BIO-NEEDS-READ flags.
Add STRING to fillable array RES in format defined by HPACK, possibly using huffman encoding.
System error message for error number
ssl.
Trace incoming and outgoing frames on a generic level. Example:
“‘
(http2/core::trace-frames)
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.
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.
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
syscall-error)) ¶syscall-error)) ¶call.
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-close)) ¶poll-server-connection)) ¶automatically generated reader method
write-failed)) ¶poll-server-close)) ¶poll-server-connection)) ¶automatically generated writer method
write-failed)) ¶http-stream-error)) ¶http-stream-error)) ¶code.
connection-error)) ¶connection-error)) ¶code.
other-ssl-error)) ¶other-ssl-error)) ¶code.
ssl-error-condition)) ¶ssl-error-condition)) ¶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
poll-server-close)) ¶poll-server-close)) ¶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
fdset-manager)) ¶automatically generated reader method
fdset-manager)) ¶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
syscall-error)) ¶syscall-error)) ¶routing-mixin)) ¶automatically generated reader method
routing-mixin)) ¶automatically generated writer method
not-enough-data)) ¶not-enough-data)) ¶write-failed)) ¶write-failed)) ¶fdset-manager)) ¶fdset-manager)) ¶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
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.
duplicit-long-write)) ¶duplicit-long-write)) ¶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*.
duplicit-long-write)) ¶duplicit-long-write)) ¶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
poll-server-close)) ¶poll-server-close)) ¶client-preface-mismatch)) ¶client-preface-mismatch)) ¶not-enough-data)) ¶not-enough-data)) ¶duplicit-long-write)) ¶duplicit-long-write)) ¶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)
duplicit-long-write)) ¶duplicit-long-write)) ¶no-new-header-action)) ¶no-new-header-action)) ¶http-stream-error)) ¶http-stream-error)) ¶http2-connection)) ¶It is useful sometimes to treat http connection as a stream with ID 0.
http2-stream-minimal)) ¶automatically generated reader method
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
this-cant-happen)) ¶this-cant-happen)) ¶flow-control-mixin)) ¶flow-control-mixin)) ¶Reference to a function to call when the window is extended. This is used in the handler for /long in the demo.lisp example.
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
write-failed)) ¶write-failed)) ¶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) ¶Log connection established (with PEER).
Connection ends
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
HTTPS server expects a specific sequence of octets at the start of the new connection. The client sent something different.
:received
condition.
:old-action
:new-action
common-lisp.
:stream
:requested
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
condition.
All errors raised from HTTP2 package inherit from this error.
error.
http2-condition.
http2-condition.
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 when the SSL layer did not provide enough data to be processed by the
upper level. This can be fixed and buffered, but sane peers do not bring this situation on us.
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+ |
ssl-get-error return code that we do not handle (yet)
:code
The TLS/SSL peer has closed the connection for writing by sending the close_notify alert. No more data can be read. This does not necessarily indicate that the underlying transport has been closed.
The TLS/SSL peer has closed the connection for writing by sending the close_notify alert. No more data can be read. This does not necessarily indicate that the underlying transport has been closed.
client-preface-mismatch.
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.
Syscall error during read-buffer. Should print nicely, e.g.,
“‘
(http2/tcpip:read-socket* -1)
.. debugger invoked on HTTP2/TCPIP::READ-ERROR:
.. #<READ-ERROR 9 (Bad file descriptor) on -1 during READ>
“‘
Reserved bit is set in received frame header. We ignore it.
Openss
communication-error.
simple-condition.
Some non-recoverable, fatal I/O error occurred. The OpenSSL error
queue may contain more information on the error. For socket I/O on Unix
systems, consult errno for details. If this error occurs then no further I/O
operations should be performed on the connection and SSL_shutdown() must not be
called.
This value can also be returned for other errors, check the error queue for details.
| Initarg | Value |
|---|---|
:code | +protocol-error+ |
:where
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.
On an unexpected EOF, versions before OpenSSL 3.0 returned SSL_ERROR_SYSCALL, nothing was added to the error stack, and errno was 0.
Something that can be implemented to better match RFC suggestions or that we are obliged to ignore
http2-warning.
simple-condition.
warning.
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 |
| Initarg | Value |
|---|---|
:compression-context | (make-instance (quote hpack-context)) |
:decompression-context | (make-instance (quote hpack-context)) |
:compression-context
:decompression-context
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 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 L M N O P Q R S T U V W |
|---|
| Jump to: | (
A B C D E F G H I K L M N 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: | .
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 |
|---|