Commit 2eb35573 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Marcus Webster's newly added CURLFORM_CONTENTHEADER

parent e66cdacb
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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)
+2 −0
Original line number Diff line number Diff line
@@ -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>
+2 −0
Original line number Diff line number Diff line
@@ -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 */

+44 −15
Original line number Diff line number Diff line
@@ -402,6 +402,7 @@ static struct HttpPost * AddHttpPost (char * name,
                                     long contentslength,
                                     char *contenttype,
                                     long flags,
                                     struct curl_slist* contentHeader,
                                     struct HttpPost *parent_post,
                                     struct HttpPost **httppost,
                                     struct HttpPost **last_post)
@@ -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,
        post = AddHttpPost(form->name, form->namelength,
                           form->value, form->contentslength,
                           form->contenttype, form->flags,
                           form->contentheader,
                           post, httppost,
                                 last_post)) == NULL) {
                           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
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ typedef struct FormInfo {
  long contentslength;
  char *contenttype;
  long flags;
  struct curl_slist* contentheader;
  struct FormInfo *more;
} FormInfo;