From 80def5a040b56fda7eb62d42f0c73ade6ad00863 Mon Sep 17 00:00:00 2001 From: Jonathan Dieter Date: Mon, 2 Jul 2018 17:25:29 +0300 Subject: [PATCH] Remove README that refers to library we're no longer using Signed-off-by: Jonathan Dieter --- src/lib/dl/README.md | 98 -------------------------------------------- 1 file changed, 98 deletions(-) delete mode 100644 src/lib/dl/README.md diff --git a/src/lib/dl/README.md b/src/lib/dl/README.md deleted file mode 100644 index 455e4da..0000000 --- a/src/lib/dl/README.md +++ /dev/null @@ -1,98 +0,0 @@ -## Multipart form data parser - -### Features -* No dependencies -* Works with chunks of a data - no need to buffer the whole request -* Almost no internal buffering. Buffer size doesn't exceed the size of the boundary (~60-70 bytes) - -Tested as part of [Cosmonaut](https://github.com/iafonov/cosmonaut) HTTP server. - -Implementation based on [node-formidable](https://github.com/felixge/node-formidable) by [Felix Geisendörfer](https://github.com/felixge). - -Inspired by [http-parser](https://github.com/joyent/http-parser) by [Ryan Dahl](https://github.com/ry). - -### Usage (C) -This parser library works with several callbacks, which the user may set up at application initialization time. - -```c -multipart_parser_settings callbacks; - -memset(&callbacks, 0, sizeof(multipart_parser_settings)); - -callbacks.on_header_field = read_header_name; -callbacks.on_header_value = read_header_value; -``` - -These functions must match the signatures defined in the multipart-parser header file. For this simple example, we'll just use two of the available callbacks to print all headers the library finds in multipart messages. - -Returning a value other than 0 from the callbacks will abort message processing. - -```c -int read_header_name(multipart_parser* p, const char *at, size_t length) -{ - printf("%.*s: ", length, at); - return 0; -} - -int read_header_value(multipart_parser* p, const char *at, size_t length) -{ - printf("%.*s\n", length, at); - return 0; -} -``` - -When a message arrives, callers must parse the multipart boundary from the **Content-Type** header (see the [RFC](http://tools.ietf.org/html/rfc2387#section-5.1) for more information and examples), and then execute the parser. - -```c -multipart_parser* parser = multipart_parser_init(boundary, &callbacks); -multipart_parser_execute(parser, body, length); -multipart_parser_free(parser); -``` - -### Usage (C++) -In C++, when the callbacks are static member functions it may be helpful to pass the instantiated multipart consumer along as context. The following (abbreviated) class called `MultipartConsumer` shows how to pass `this` to callback functions in order to access non-static member data. - -```cpp -class MultipartConsumer -{ -public: - MultipartConsumer(const std::string& boundary) - { - memset(&m_callbacks, 0, sizeof(multipart_parser_settings)); - m_callbacks.on_header_field = ReadHeaderName; - m_callbacks.on_header_value = ReadHeaderValue; - - m_parser = multipart_parser_init(boundary.c_str(), &m_callbacks); - multipart_parser_set_data(m_parser, this); - } - - ~MultipartConsumer() - { - multipart_parser_free(m_parser); - } - - int CountHeaders(const std::string& body) - { - multipart_parser_execute(m_parser, body.c_str(), body.size()); - return m_headers; - } - -private: - static int ReadHeaderName(multipart_parser* p, const char *at, size_t length) - { - MultipartConsumer* me = (MultipartConsumer*)multipart_parser_get_data(p); - me->m_headers++; - } - - multipart_parser* m_parser; - multipart_parser_settings m_callbacks; - int m_headers; -}; -``` - -### Contributors -* [Daniel T. Wagner](http://www.danieltwagner.de/) -* [James McLaughlin](http://udp.github.com/) -* [Jay Miller](http://www.cryptofreak.org) - -© 2012 [Igor Afonov](http://iafonov.github.com) -- 2.30.2