I'm not an expert, but I kind of doubt that 'upload_data' is a null-terminated string. It probably just stops at the number of bytes that were specified in 'upload_data_size' and has garbage after that.
So - your std::string.append call is probably adding more than it needs to because it's looking for a null terminator for when to stop. Try using the 'append' function that takes a size: xmlDataString.append(upload_data, *upload_data_size); As a side note - you may also want to consider using a stringstream instead of a std::string. Should be a lot more efficient than repeatedly calling 'append' like this. Hope that helps. Ken On Tue, Feb 24, 2015 at 8:23 AM, dumitrița munteanu <[email protected]> wrote: > > Hello all, > > I am using *MHD daemon server *in order to *send incrementally large > strings containing xml data*. > > The size of the sent data chuck(from curls) is equal with the sum of the > received data chucks > (received data size in MHD daemon server == sum of all upload_data_size > for a specific connection). > > The problem is that *the string in which i append incrementally the data > chunks as they arrive is always bigger than the data it has been > sent/received. * > > I do not understand where from comes this additional data and why my p > ostXMLData variable gets always larger. > > > My code looks like this: > > static postXMLData = ""; > > static int AnswerToConnection (void *cls, struct MHD_Connection > *connection, > const char *url, const char *method, const char *version, > const char *upload_data, size_t *upload_data_size, void **con_cls) > { > static int i; > > // the first call - initialize data structures > if (*con_cls == NULL) > { > *con_cls = &i; > > return MHD_YES; > } > > // next calls - receive data incrementally > if (*upload_data_size != 0) > { > xmlDataString.append(upload_data); > > (*upload_data_size) = 0; > > return MHD_YES; > } > > // last call - upload_data_size = 0 - processed received data > if (*upload_data_size == 0) > { > FILE *f; f=fopen("test_data_output_2.txt", "w"); fprintf(f, "%s", p > ostXMLData .c_str()); fclose(f); > } > > int ret = pProcessRequest->SendPage(connection, ANSWER_PAGE); > return ret; > } >
