| #ifndef HEADER_CURL_FORMDATA_H |
| #define HEADER_CURL_FORMDATA_H |
| /*************************************************************************** |
| * _ _ ____ _ |
| * Project ___| | | | _ \| | |
| * / __| | | | |_) | | |
| * | (__| |_| | _ <| |___ |
| * \___|\___/|_| \_\_____| |
| * |
| * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. |
| * |
| * This software is licensed as described in the file COPYING, which |
| * you should have received as part of this distribution. The terms |
| * are also available at http://curl.haxx.se/docs/copyright.html. |
| * |
| * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| * copies of the Software, and permit persons to whom the Software is |
| * furnished to do so, under the terms of the COPYING file. |
| * |
| * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| * KIND, either express or implied. |
| * |
| ***************************************************************************/ |
| |
| enum formtype { |
| FORM_DATA, /* form metadata (convert to network encoding if necessary) */ |
| FORM_CONTENT, /* form content (never convert) */ |
| FORM_CALLBACK, /* 'line' points to the custom pointer we pass to the callback |
| */ |
| FORM_FILE /* 'line' points to a file name we should read from |
| to create the form data (never convert) */ |
| }; |
| |
| /* plain and simple linked list with lines to send */ |
| struct FormData { |
| struct FormData *next; |
| enum formtype type; |
| char *line; |
| size_t length; |
| }; |
| |
| struct Form { |
| struct FormData *data; /* current form line to send */ |
| size_t sent; /* number of bytes of the current line that has |
| already been sent in a previous invoke */ |
| FILE *fp; /* file to read from */ |
| curl_read_callback fread_func; /* fread callback pointer */ |
| }; |
| |
| /* used by FormAdd for temporary storage */ |
| typedef struct FormInfo { |
| char *name; |
| bool name_alloc; |
| size_t namelength; |
| char *value; |
| bool value_alloc; |
| size_t contentslength; |
| char *contenttype; |
| bool contenttype_alloc; |
| long flags; |
| char *buffer; /* pointer to existing buffer used for file upload */ |
| size_t bufferlength; |
| char *showfilename; /* The file name to show. If not set, the actual |
| file name will be used */ |
| bool showfilename_alloc; |
| char *userp; /* pointer for the read callback */ |
| struct curl_slist* contentheader; |
| struct FormInfo *more; |
| } FormInfo; |
| |
| int Curl_FormInit(struct Form *form, struct FormData *formdata ); |
| |
| CURLcode Curl_getformdata(struct SessionHandle *data, |
| struct FormData **, |
| struct curl_httppost *post, |
| const char *custom_contenttype, |
| curl_off_t *size); |
| |
| /* fread() emulation */ |
| size_t Curl_FormReader(char *buffer, |
| size_t size, |
| size_t nitems, |
| FILE *mydata); |
| |
| /* |
| * Curl_formpostheader() returns the first line of the formpost, the |
| * request-header part (which is not part of the request-body like the rest of |
| * the post). |
| */ |
| char *Curl_formpostheader(void *formp, size_t *len); |
| |
| char *Curl_FormBoundary(void); |
| |
| void Curl_formclean(struct FormData **); |
| |
| CURLcode Curl_formconvert(struct SessionHandle *, struct FormData *); |
| |
| #endif /* HEADER_CURL_FORMDATA_H */ |