I am starting in on an effort to use libmicrohttpd. Having read through the complete tutorial and manual, I am still missing certain key information.
When, exactly, is answer_to_connection() called with respect to the incoming content-data stream from the client? I'm writing a web server that will process certain types of POST data. Suppose the client sends in a 100 KB package of data. Ignoring the first (setup) call to answer_to_connection(), does libmicrohttpd wait until the entire payload has been received before calling answer_to_connection() with a non-zero upload_data_size? Or does it make some decision on how to cut the payload into sections that are passed in successive calls? On what basis is such a decision made, and how consistent and reliable is that logic in the face of varying payload sizes, large and small? My question is very general. In my particular case, the format will be neither application/x-www-form-urlencoded nor multipart/form-data. So whatever the library might decide in those cases does not apply to my situation. But even in those cases, what guarantees are there that data of specific application-level interest does not overlap the boundary between sections that are passed in successive calls to answer_to_connection()? I need to know if the incoming POST data may be passed to my answer_to_connection() routine in multiple sections not necessarily related to semantic boundaries in the payload. If that is the case, it seems like I would need to keep accumulating the data passed in all the calls until I get one with a zero value for upload_data_size, and only then can I reliably process the full dataset. Would that not entail extra data copying into a connection-specific buffer maintained by my application? Is there some per-connection buffer within the libmicrohttpd package that will contain the entire payload as one contiguous section once it has all been received, that my application could access instead of spending precious time in extra data copying along the way? Or can I provide a buffer in response to the first (setup, *con_cls == NULL) call, that would tell libmicrohttpd where to directly place the incoming data, to avoid such extra copying?
