mirror of
https://github.com/curl/curl.git
synced 2024-11-21 01:16:58 +08:00
Marcus Webster's newly added CURLFORM_CONTENTHEADER
This commit is contained in:
parent
e66cdacb93
commit
2eb355733f
19
CHANGES
19
CHANGES
@ -6,6 +6,25 @@
|
||||
|
||||
History of Changes
|
||||
|
||||
Daniel (14 December 2001)
|
||||
- Marcus Webster provided code for the new CURLFORM_CONTENTHEADER option for
|
||||
curl_formadd(), that lets an application add a set of headers for that
|
||||
particular part in a multipart/form-post. We need to add
|
||||
|
||||
Daniel (11 December 2001)
|
||||
- Ben Greear made me aware of the fact that the Curl_failf() usage internally
|
||||
was a bit sloppy with adding newlines or not to the error messages. Let's
|
||||
once and for all say that they do not belong there!
|
||||
|
||||
- When uploading files with -T to give a local file name, and you end the URL
|
||||
with a slash to have the local file name used remote too, we now no longer
|
||||
use the local directory as well. Only the file part of the -T file name
|
||||
will be appended to the right of the slash in the URL.
|
||||
|
||||
Daniel (7 December 2001)
|
||||
- Michal Bonino pointed out that Digital Unix doesn't have gmtime_r so the
|
||||
link failed. Added a configure check and corrected source code.
|
||||
|
||||
Version 7.9.2
|
||||
|
||||
Daniel (5 December 2001)
|
||||
|
@ -76,3 +76,5 @@ that have contributed with non-trivial parts:
|
||||
- Tomasz Lacki <Tomasz.Lacki@primark.pl>
|
||||
- Georg Huettenegger <georg@ist.org>
|
||||
- John Lask <johnlask@hotmail.com>
|
||||
- Eric Lavigne <erlavigne@wanadoo.fr>
|
||||
- Marcus Webster <marcus.webster@phocis.com>
|
||||
|
@ -62,6 +62,7 @@ struct HttpPost {
|
||||
char *contents; /* pointer to allocated data contents */
|
||||
long contentslength; /* length of contents field */
|
||||
char *contenttype; /* Content-Type */
|
||||
struct curl_slist* contentheader; /* list of extra headers for this form */
|
||||
struct HttpPost *more; /* if one field name has more than one file, this
|
||||
link should link to following files */
|
||||
long flags; /* as defined below */
|
||||
@ -543,6 +544,7 @@ typedef enum {
|
||||
CFINIT(ARRAY_START), /* below are the options allowed within a array */
|
||||
CFINIT(FILE),
|
||||
CFINIT(CONTENTTYPE),
|
||||
CFINIT(CONTENTHEADER),
|
||||
CFINIT(END),
|
||||
CFINIT(ARRAY_END), /* up are the options allowed within a array */
|
||||
|
||||
|
@ -396,15 +396,16 @@ int curl_formparse(char *input,
|
||||
* Returns newly allocated HttpPost on success and NULL if malloc failed.
|
||||
*
|
||||
***************************************************************************/
|
||||
static struct HttpPost * AddHttpPost (char * name,
|
||||
long namelength,
|
||||
char * value,
|
||||
long contentslength,
|
||||
char *contenttype,
|
||||
long flags,
|
||||
struct HttpPost *parent_post,
|
||||
struct HttpPost **httppost,
|
||||
struct HttpPost **last_post)
|
||||
static struct HttpPost * AddHttpPost(char * name,
|
||||
long namelength,
|
||||
char * value,
|
||||
long contentslength,
|
||||
char *contenttype,
|
||||
long flags,
|
||||
struct curl_slist* contentHeader,
|
||||
struct HttpPost *parent_post,
|
||||
struct HttpPost **httppost,
|
||||
struct HttpPost **last_post)
|
||||
{
|
||||
struct HttpPost *post;
|
||||
post = (struct HttpPost *)malloc(sizeof(struct HttpPost));
|
||||
@ -415,6 +416,7 @@ static struct HttpPost * AddHttpPost (char * name,
|
||||
post->contents = value;
|
||||
post->contentslength = contentslength;
|
||||
post->contenttype = contenttype;
|
||||
post->contentheader = contentHeader;
|
||||
post->flags = flags;
|
||||
}
|
||||
else
|
||||
@ -823,6 +825,21 @@ FORMcode FormAdd(struct HttpPost **httppost,
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CURLFORM_CONTENTHEADER:
|
||||
{
|
||||
struct curl_slist* list = NULL;
|
||||
if( array_state )
|
||||
list = (struct curl_slist*)array_value;
|
||||
else
|
||||
list = va_arg(params,struct curl_slist*);
|
||||
|
||||
if( current_form->contentheader )
|
||||
return_value = FORMADD_OPTION_TWICE;
|
||||
else
|
||||
current_form->contentheader = list;
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
fprintf (stderr, "got unknown CURLFORM_OPTION: %d\n", option);
|
||||
return_value = FORMADD_UNKNOWN_OPTION;
|
||||
@ -872,13 +889,16 @@ FORMcode FormAdd(struct HttpPost **httppost,
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( (post = AddHttpPost(form->name, form->namelength,
|
||||
form->value, form->contentslength,
|
||||
form->contenttype, form->flags,
|
||||
post, httppost,
|
||||
last_post)) == NULL) {
|
||||
post = AddHttpPost(form->name, form->namelength,
|
||||
form->value, form->contentslength,
|
||||
form->contenttype, form->flags,
|
||||
form->contentheader,
|
||||
post, httppost,
|
||||
last_post);
|
||||
|
||||
if(!post)
|
||||
return_value = FORMADD_MEMORY;
|
||||
}
|
||||
|
||||
if (form->contenttype)
|
||||
prevtype = form->contenttype;
|
||||
}
|
||||
@ -1029,6 +1049,8 @@ struct FormData *Curl_getFormData(struct HttpPost *post,
|
||||
int size =0;
|
||||
char *boundary;
|
||||
char *fileboundary=NULL;
|
||||
struct curl_slist* curList;
|
||||
|
||||
|
||||
if(!post)
|
||||
return NULL; /* no input => no output! */
|
||||
@ -1090,6 +1112,13 @@ struct FormData *Curl_getFormData(struct HttpPost *post,
|
||||
file->contenttype);
|
||||
}
|
||||
|
||||
curList = file->contentheader;
|
||||
while( curList ) {
|
||||
/* Process the additional headers specified for this form */
|
||||
size += AddFormDataf( &form, "\r\n%s", curList->data );
|
||||
curList = curList->next;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* The header Content-Transfer-Encoding: seems to confuse some receivers
|
||||
* (like the built-in PHP engine). While I can't see any reason why it
|
||||
|
@ -44,6 +44,7 @@ typedef struct FormInfo {
|
||||
long contentslength;
|
||||
char *contenttype;
|
||||
long flags;
|
||||
struct curl_slist* contentheader;
|
||||
struct FormInfo *more;
|
||||
} FormInfo;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user