Hi dudes!

Consider the following file:

http://brook.no-ip.org/download/content.bin

request:

# debugdump.txt just for debuging
$ url --header "Content-Type:application/octet-stream" --trace-ascii
debugdump.txt --data-binary @content.bin http://localhost:9090

and example:

#include <microhttpd.h>
#include <stdio.h>
#include <string.h>

static int answer_to_connection(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) {
    if (!*con_cls) {
        *con_cls = (void *) 1;
        return MHD_YES;
    }
    *con_cls = NULL;
    printf("*upload_data_size: %zd\n", *upload_data_size);
    return MHD_NO;
}

int main(void) {
    struct MHD_Daemon *daemon;
    daemon = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, 9090, NULL,
NULL, &answer_to_connection, NULL, MHD_OPTION_END);
    getchar();
    MHD_stop_daemon(daemon);
    return 0;
}

the result is:

*upload_data_size: 1995

but the upload_data buffer contains only 746 characters. OK, my file is a
binary that contains some NULLs, so it should be sent
via multipart/form-data, however, I've tested it with other servers and the
binary content is sent properly as application/octet-stream. (eg. NodeJS
uses its req.buffer to get octet-streams)

It seems MHD's payload (upload_data) ends with first NULL character. So, is
there any chance to get a binary content without using HTML forms?

Thank you!

-- 
Silvio Clécio

Reply via email to