27 #ifndef CURL_DISABLE_HTTP 29 #if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME) 50 #define HTTPPOST_CONTENTTYPE_DEFAULT "application/octet-stream" 52 #define HTTPPOST_PTRNAME CURL_HTTPPOST_PTRNAME 53 #define HTTPPOST_FILENAME CURL_HTTPPOST_FILENAME 54 #define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS 55 #define HTTPPOST_READFILE CURL_HTTPPOST_READFILE 56 #define HTTPPOST_PTRBUFFER CURL_HTTPPOST_PTRBUFFER 57 #define HTTPPOST_CALLBACK CURL_HTTPPOST_CALLBACK 58 #define HTTPPOST_BUFFER CURL_HTTPPOST_BUFFER 86 post->
namelength = (long)(name?(namelength?namelength:strlen(name)):0);
145 if(parent_form_info) {
147 form_info->
more = parent_form_info->
more;
150 parent_form_info->
more = form_info;
167 const char *prevtype)
179 static const struct ContentType ctts[]={
180 {
".gif",
"image/gif"},
181 {
".jpg",
"image/jpeg"},
182 {
".jpeg",
"image/jpeg"},
183 {
".txt",
"text/plain"},
184 {
".html",
"text/html"},
185 {
".xml",
"application/xml"}
190 contenttype = prevtype;
195 for(i = 0; i<
sizeof(ctts)/
sizeof(ctts[0]); i++) {
196 if(strlen(filename) >= strlen(ctts[i].
extension)) {
198 strlen(filename) - strlen(ctts[i].extension),
199 ctts[i].extension)) {
200 contenttype = ctts[
i].type;
264 FormInfo *first_form, *current_form, *form = NULL;
266 const char *prevtype = NULL;
270 char *array_value = NULL;
275 bool array_state =
FALSE;
284 current_form = first_form;
292 if(array_state && forms) {
295 array_value = (
char *)forms->
value;
298 if(CURLFORM_END == option) {
307 if(CURLFORM_END == option)
328 case CURLFORM_PTRNAME:
329 #ifdef CURL_DOES_CONVERSIONS 338 case CURLFORM_COPYNAME:
339 if(current_form->
name)
342 char *
name = array_state?
343 array_value:va_arg(params,
char *);
350 case CURLFORM_NAMELENGTH:
355 array_state?(
size_t)array_value:(
size_t)va_arg(params,
long);
361 case CURLFORM_PTRCONTENTS:
363 case CURLFORM_COPYCONTENTS:
364 if(current_form->
value)
368 array_state?array_value:va_arg(params,
char *);
375 case CURLFORM_CONTENTSLENGTH:
377 array_state?(
size_t)array_value:(
size_t)va_arg(params,
long);
380 case CURLFORM_CONTENTLEN:
387 case CURLFORM_FILECONTENT:
392 array_value:va_arg(params,
char *);
395 if(!current_form->
value)
410 const char *
filename = array_state?array_value:
411 va_arg(params,
char *);
413 if(current_form->
value) {
416 char *fname =
strdup(filename);
441 if(!current_form->
value)
454 case CURLFORM_BUFFERPTR:
460 array_state?array_value:va_arg(params,
char *);
471 case CURLFORM_BUFFERLENGTH:
476 array_state?(
size_t)array_value:(
size_t)va_arg(params,
long);
479 case CURLFORM_STREAM:
481 if(current_form->
userp)
485 array_state?array_value:va_arg(params,
char *);
487 current_form->
userp = userp;
488 current_form->
value = userp;
498 case CURLFORM_CONTENTTYPE:
500 const char *contenttype =
501 array_state?array_value:va_arg(params,
char *);
505 char *type =
strdup(contenttype);
540 case CURLFORM_CONTENTHEADER:
555 case CURLFORM_FILENAME:
556 case CURLFORM_BUFFER:
558 const char *
filename = array_state?array_value:
559 va_arg(params,
char *);
581 for(ptr = first_form; ptr != NULL; ptr = ptr->
more) {
606 for(form = first_form;
609 if(((!form->
name || !form->
value) && !post) ||
651 (form == first_form) ) {
658 strlen(form->
name) + 1);
672 clen = strlen(form->
value) + 1;
704 for(ptr = form; ptr != NULL; ptr = ptr->
more) {
749 va_start(arg, last_post);
750 result =
FormAdd(httppost, last_post, arg);
776 size_t nread =
Curl_mime_read(buffer, 1,
sizeof buffer, &toppart);
783 if(append(arg, buffer, nread) != nread)
880 for(; !result &&
post; post = post->
next) {
888 result =
setname(part, post->
name, post->namelength);
899 for(file = post; !result && file; file = file->
more) {
910 if(!result &&file->contenttype)
914 if(!result && !post->more)
915 result =
setname(part, post->
name, post->namelength);
922 clen = post->contentlen;
927 if(!strcmp(file->contents,
"-")) {
935 NULL, (
void *) stdin);
944 post->bufferlength? post->bufferlength: -1);
949 fread_func, NULL, NULL, post->userp);
952 #ifdef CURL_DOES_CONVERSIONS 954 if(!result && data && part->
datasize)
961 if(!result && post->showfilename)
CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, const char *filename)
CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, struct curl_slist *headers, int take_ownership)
struct curl_httppost * post
CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, const char *data, size_t datasize)
void Curl_mime_cleanpart(curl_mimepart *part)
UNITTEST_START char * ptr
void * Curl_memdup(const void *src, size_t length)
CURL_EXTERN curl_mime * curl_mime_init(CURL *easy)
CURLcode Curl_mime_prepare_headers(curl_mimepart *part, const char *contenttype, const char *disposition, enum mimestrategy strategy)
#define strcasecompare(a, b)
UNITTEST_START int result
int(* curl_seek_callback)(void *instream, curl_off_t offset, int origin)
struct curl_httppost * more
memcpy(filename, filename1, strlen(filename1))
size_t Curl_mime_read(char *buffer, size_t size, size_t nitems, void *instream)
CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name)
curl_easy_setopt expects a curl_off_t argument for this option curl_easy_setopt expects a curl_write_callback argument for this option curl_easy_setopt expects a curl_ioctl_callback argument for this option curl_easy_setopt expects a curl_opensocket_callback argument for this option curl_easy_setopt expects a curl_debug_callback argument for this option curl_easy_setopt expects a curl_conv_callback argument for this option curl_easy_setopt expects a private data pointer as argument for this option curl_easy_setopt expects a FILE *argument for this option curl_easy_setopt expects a struct curl_httppost *argument for this option curl_easy_setopt expects a struct curl_slist *argument for this option curl_easy_getinfo expects a pointer to char *for this info curl_easy_getinfo expects a pointer to double for this info curl_easy_getinfo expects a pointer to struct curl_tlssessioninfo *for this info curl_easy_getinfo expects a pointer to curl_socket_t for this info size_t
size_t(* curl_formget_callback)(void *arg, const char *buf, size_t len)
#define Curl_convert_to_network(a, b, c)
CURL_TYPEOF_CURL_OFF_T curl_off_t
size_t(* curl_read_callback)(char *buffer, size_t size, size_t nitems, void *instream)
#define Curl_safefree(ptr)
#define CURL_READFUNC_ABORT
void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy)
CURL_EXTERN curl_mimepart * curl_mime_addpart(curl_mime *mime)
ROSCPP_DECL std::string append(const std::string &left, const std::string &right)
struct curl_slist * contentheader
CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, const char *filename)
#define CURL_READFUNC_PAUSE
struct curl_httppost * next
UNITTEST_START int * value
CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype)
CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, curl_off_t datasize, curl_read_callback readfunc, curl_seek_callback seekfunc, curl_free_callback freefunc, void *arg)
#define calloc(nbelem, size)
#define CURL_HTTPPOST_LARGE
CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, curl_mime *subparts)