About
=====

GNU libmicrohttpd is a GNU package offering a C library that provides
a compact API and implementation of an HTTP 1.1 web server (HTTP 1.0
is also supported).  GNU libmicrohttpd only implements the HTTP 1.1
protocol.  The main application must still provide the application
logic to generate the content.

Additionally, a second, still very experimental library is provided
for SPDY (the base for HTTP 2.0) support.  libmicrospdy provides a
compact API and implementation of SPDY server. libmicrospdy currently
only implements partially version 3 of SPDY.


Installation
============

If you are using Subversion, run "autoreconf -fi" to create configure.

In order to run the testcases, you need a recent version of libcurl.
libcurl is not required if you just want to install the library.

Especially for development, do use the MHD_USE_DEBUG option to get
error messages.


Requirements for libmicrospdy
=============================

The following packages are needed to build libmicrospdy:

* zlib 
* OpenSSL >= 1.0.1

To run the test cases, involving requests, version of Spdylay, supporting
SPDY v3, is required. Spdylay is still under development and can be
found here:

http://spdylay.sourceforge.net/


Configure options
=================


If you are concerned about space, you should set "CFLAGS" to "-Os
-fomit-frame-pointer" to have gcc generate tight code.

You can use the following options to disable certain MHD features:

--disable-https: no HTTPS / TLS / SSL support (significant reduction)
--disable-messages: no error messages (they take space!)
--disable-postprocessor: no MHD_PostProcessor API
--disable-dauth: no digest authentication API
--disable-epoll: no support for epoll, even on Linux

The resulting binary should be about 30-40k depending on the platform.


Portability
===========

The latest version of libmicrohttpd will try to avoid SIGPIPE on its
sockets.  This should work on OS X, Linux and recent BSD systems (at
least).  On other systems that may trigger a SIGPIPE on send/recv, the
main application should install a signal handler to handle SIGPIPE.

libmicrohttpd should work well on GNU/Linux, BSD, OS X, W32 and z/OS.
Note that HTTPS is not supported on z/OS (yet).  We also have reports
of users using it on vxWorks and Symbian.  Note that on platforms
where the compiler does not support the "constructor" attribute, you
must call "MHD_init" before using any MHD functions and "MHD_fini"
after you are done using MHD.


Development Status
==================

This is a beta release for libmicrohttpd.  Before declaring the
library stable, we should implement support for HTTP "Upgrade" 
requests and have testcases for the following features:

- HTTP/1.1 pipelining (need to figure out how to ensure curl pipelines 
  -- and it seems libcurl has issues with pipelining, 
  see http://curl.haxx.se/mail/lib-2007-12/0248.html)
- resource limit enforcement
- client queuing early response, suppressing 100 CONTINUE
- chunked encoding to validate handling of footers
- more testing for SSL support
- MHD basic and digest authentication

In particular, the following functions are not covered by 'make check':
- mhd_panic_std (daemon.c); special case (abort)
- parse_options (daemon.c)
- MHD_set_panic_func (daemon.c)
- MHD_get_version (daemon.c)


This is an early alpha release for libmicrospdy.  The following things
should be implemented (in order of importance) before we can claim to
be reasonably complete:
- 8 different output queues (one for each priority) have to be implemented
together with a suitable algorithm for utilizing them. Otherwise, downloading
a file will block all responses with same or smaller priority
- SPDY RST_STREAM sending on each possible error (DONE?)
- SPDY_close_session
- Find the best way for closing still opened stream (new call or existing)
- SPDY_is_stream_opened
- SPDY PING (used often by browsers)
- receiving SPDY WINDOW_UPDATE
- SPDY Settings
- SPDY PUSH
- SPDY HEADERS
- SPDY Credentials

Additional ideas for features include:
- Individual callbacks for each session
- Individual timeout for each session

Unimplemented API functions of libmicrospdy:
- SPDY_settings_create ();
- SPDY_settings_add (...);
- SPDY_settings_lookup (...);
- SPDY_settings_iterate (...);
- SPDY_settings_destroy (...);
- SPDY_close_session(...);
- SPDY_send_ping(...);
- SPDY_send_settings (...);

In particular, we should write tests for:
- Enqueueing responses while considering request priorities.
- HTTP methods other than GET





Missing documentation:
======================

- libmicrospdy manual:
  * missing entirely
