chickadee » hpack

Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

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

make-hpack-decoderprocedure

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

make-hpack-encoderprocedure

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

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

creates a header table for an encoder/decoder

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

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

Contents »