You are looking at historical revision 32432 of this page. It may differ significantly from its current revision.

hpack

Description

A HTTP/2 header compression library for Chicken.

Current status

In its current form, the library correctly encodes and decodes HTTP2 headers. It implements Huffman encoding/decoding, indexed and literal header representations, header-tables etc. However, performance and error-handling need to be improved before production use.

Author

Omar Shorbaji

Requirements

defstruct

API

[procedure] (make-hpack-decoder)

returns a function that accepts a string and returns a list of headers decoded.

[procedure] (make-hpack-encoder)

returns a function that accepts a list of headers and returns an HPACK string. The function takes an optional argument telling it whether to index headers when possible or not. Note that a header is a pair of a symbol and a string

[procedure] (make-header-table #!optional (size: 4096)

creates a header table for an encoder/decoder

<procedure> (hpack-encode header-table headers #!optional (index-headers? #t)) <procedure> (hpack-decode header-table code)

Encode decode procedures using a header-table

Examples

(define encode (make-hpack-encoder))

(define headers 
 '((:authority . "127.0.0.1")
   (:method . "GET")
   (:scheme . "http")
   (:path . "/")
   (foo . "bar")))
   

(encode headers)
;=> "A�\b�\\\v�p����@���\x03bar"

(encode headers index: #f)
;.=> "\x11�\b�\\\v�p����\x10���\x03bar"

(define (decode (make-hpack-decoder)))

(decode (encode headers))

;=> ((:authority . "127.0.0.1")
;   (:method . "GET")
;   (:scheme . "http")
;   (:path . "/")
;   (foo . "bar"))

Repository

https://github.com/shorbaji/hpack

License

;; Copyright (c) 2014, Omar Shorbaji
;; All rights reserved.
;; 
;; Redistribution and use in source and binary forms, with or without
;; modification, are permitted provided that the following conditions are met:
;; 
;; Redistributions of source code must retain the above copyright notice, this
;; list of conditions and the following disclaimer. 
;; Redistributions in binary form must reproduce the above copyright notice,
;; this list of conditions and the following disclaimer in the documentation
;; and/or other materials provided with the distribution.  
;; Neither the name of the author nor the names of its contributors may be
;; used to endorse or promote products derived from this software without
;; specific prior written permission.  
;; 
;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OFcl
;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
;; POSSIBILITY OF SUCH DAMAGE.

Version History

0.1 alpha release 0.2 updated api to include hpack-encode, hpack-decode and make-header-table