Skip to content

qfiard/httpxx

 
 

Repository files navigation

httpxx --- HTTP Parser for C++

authors

André Caron

contact

andre.l.caron@gmail.com

version

0.1

date

2011-07-18

Description

This library is a simple C++ wrapper for the C library http-parser1 (This code was derived from the HTTP parser code in NGINX). http-parser is a simple HTTP streaming parser (for those of you familiar with XML, it works much like a SAX parser). It knows nothing of sockets or streams. You feed it data and it invokes registered callbacks to notify of available data. Because http-parser operates at the very lowest level, it does not buffer data or allocate memory dynamically. This library attempts to make that library easily usable by C++ programs by interpreting those callbacks and buffering data where needed.

Documentation

The API for defined classes is documented using Doxygen2. You will need to run Doxygen from the project source folder to generate the output HTML.

Compiled HTML documentation for official releases is available online. Check the project page.

Fetching the code

This project does not distribute the code to http-parser directly. To fetch the entire source code, make sure you fetch submodules3 too:

$ git clone ...
$ cd httpxx
$ git submodule init
$ git submodule update

Portability

http-parser itself has no dependencies and compiles with C++ compilers. httpcxx uses only standard library facilities (namely std::string and std::map) and introduces no additional dependencies.

The code should compile as is under a standard-compliant C++03 implementation.

Memory allocation policy

A good memory allocation policy is important in server programs, which typically run for a long time and suffer from memory fragmentation. httpcxx does its best to avoid repeated allocation, but it needs a little help on your part.

http::Request and http::Response parser object allocate memory as required because they buffer different parts of the incoming HTTP request/response in std::string instances. However, they are implemented carefully as to use the growing property of std::string4 to their advantage. In particular, you may re-use http::Request and http::Response parser objects for parsing multiple request/response objects using their .clear() method. This method marks all header lengths as 0 but keeps the instances as well as the map. All this ensures that parsers avoid repeated memory allocation.

Samples / demos

Check out the sample programs in the demo/ subfolder.


  1. https://github.com/ry/http-parser.

  2. http://www.stack.nl/~dimitri/doxygen/

  3. http://book.git-scm.com/5_submodules.html

  4. std::string instances keep the allocated memory buffer even when you resize them such that their length decreases. In particular, std::string::clear() marks the string length as 0 but keeps the allocated buffer.

About

C++ wrapper for C-based HTTP parser

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 100.0%