Skip to content

AndreLouisCaron/httpxx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

627cd42 · Jun 20, 2021

History

95 Commits
Jul 18, 2011
Jan 6, 2019
Jun 18, 2021
Jun 18, 2021
Nov 28, 2016
Feb 23, 2016
Nov 8, 2015
Apr 14, 2016
May 12, 2015
Jan 6, 2019
Jul 18, 2011
Nov 28, 2016
Feb 28, 2012
Nov 28, 2016
Jan 21, 2012

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-parser [1] (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.

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

Documentation

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

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

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 submodules [3] too:

$ git clone ...
$ cd httpxx
$ git submodule init
$ git submodule update
[3]http://book.git-scm.com/5_submodules.html

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::string [4] 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.

[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.

Samples / demos

Check out the sample programs in the demo/ subfolder.