mime.h
Go to the documentation of this file.
1 #ifndef HEADER_CURL_MIME_H
2 #define HEADER_CURL_MIME_H
3 /***************************************************************************
4  * _ _ ____ _
5  * Project ___| | | | _ \| |
6  * / __| | | | |_) | |
7  * | (__| |_| | _ <| |___
8  * \___|\___/|_| \_\_____|
9  *
10  * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
11  *
12  * This software is licensed as described in the file COPYING, which
13  * you should have received as part of this distribution. The terms
14  * are also available at https://curl.haxx.se/docs/copyright.html.
15  *
16  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17  * copies of the Software, and permit persons to whom the Software is
18  * furnished to do so, under the terms of the COPYING file.
19  *
20  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21  * KIND, either express or implied.
22  *
23  ***************************************************************************/
24 
25 #define MIME_RAND_BOUNDARY_CHARS 16 /* Nb. of random boundary chars. */
26 #define MAX_ENCODED_LINE_LENGTH 76 /* Maximum encoded line length. */
27 #define ENCODING_BUFFER_SIZE 256 /* Encoding temp buffers size. */
28 
29 /* Part flags. */
30 #define MIME_USERHEADERS_OWNER (1 << 0)
31 #define MIME_BODY_ONLY (1 << 1)
32 
33 /* Part source kinds. */
34 enum mimekind {
35  MIMEKIND_NONE = 0, /* Part not set. */
36  MIMEKIND_DATA, /* Allocated mime data. */
37  MIMEKIND_FILE, /* Data from file. */
38  MIMEKIND_CALLBACK, /* Data from `read' callback. */
39  MIMEKIND_MULTIPART, /* Data is a mime subpart. */
41 };
42 
43 /* Readback state tokens. */
44 enum mimestate {
45  MIMESTATE_BEGIN, /* Readback has not yet started. */
46  MIMESTATE_CURLHEADERS, /* In curl-generated headers. */
47  MIMESTATE_USERHEADERS, /* In caller's supplied headers. */
48  MIMESTATE_EOH, /* End of headers. */
49  MIMESTATE_BODY, /* Placeholder. */
50  MIMESTATE_BOUNDARY1, /* In boundary prefix. */
51  MIMESTATE_BOUNDARY2, /* In boundary. */
52  MIMESTATE_CONTENT, /* In content. */
53  MIMESTATE_END, /* End of part reached. */
55 };
56 
57 /* Mime headers strategies. */
59  MIMESTRATEGY_MAIL, /* Mime mail. */
60  MIMESTRATEGY_FORM, /* HTTP post form. */
62 };
63 
64 /* Content transfer encoder. */
65 typedef struct {
66  const char * name; /* Encoding name. */
67  size_t (*encodefunc)(char *buffer, size_t size, bool ateof,
68  curl_mimepart *part); /* Encoded read. */
69  curl_off_t (*sizefunc)(curl_mimepart *part); /* Encoded size. */
70 } mime_encoder;
71 
72 /* Content transfer encoder state. */
73 typedef struct {
74  size_t pos; /* Position on output line. */
75  size_t bufbeg; /* Next data index in input buffer. */
76  size_t bufend; /* First unused byte index in input buffer. */
77  char buf[ENCODING_BUFFER_SIZE]; /* Input buffer. */
79 
80 /* Mime readback state. */
81 typedef struct {
82  enum mimestate state; /* Current state token. */
83  void *ptr; /* State-dependent pointer. */
84  size_t offset; /* State-dependent offset. */
85 } mime_state;
86 
87 /* A mime multipart. */
88 struct curl_mime_s {
89  struct Curl_easy *easy; /* The associated easy handle. */
90  curl_mimepart *parent; /* Parent part. */
91  curl_mimepart *firstpart; /* First part. */
92  curl_mimepart *lastpart; /* Last part. */
93  char *boundary; /* The part boundary. */
94  mime_state state; /* Current readback state. */
95 };
96 
97 /* A mime part. */
99  struct Curl_easy *easy; /* The associated easy handle. */
100  curl_mime *parent; /* Parent mime structure. */
101  curl_mimepart *nextpart; /* Forward linked list. */
102  enum mimekind kind; /* The part kind. */
103  char *data; /* Memory data or file name. */
104  curl_read_callback readfunc; /* Read function. */
105  curl_seek_callback seekfunc; /* Seek function. */
106  curl_free_callback freefunc; /* Argument free function. */
107  void *arg; /* Argument to callback functions. */
108  FILE *fp; /* File pointer. */
109  struct curl_slist *curlheaders; /* Part headers. */
110  struct curl_slist *userheaders; /* Part headers. */
111  char *mimetype; /* Part mime type. */
112  char *filename; /* Remote file name. */
113  char *name; /* Data name. */
114  curl_off_t datasize; /* Expected data size. */
115  unsigned int flags; /* Flags. */
116  mime_state state; /* Current readback state. */
117  const mime_encoder *encoder; /* Content data encoder. */
118  mime_encoder_state encstate; /* Data encoder state. */
119 };
120 
121 
122 /* Prototypes. */
123 void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy);
126  const char *contenttype,
127  const char *disposition,
128  enum mimestrategy strategy);
130 size_t Curl_mime_read(char *buffer, size_t size, size_t nitems,
131  void *instream);
133 CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt, ...);
134 
135 #endif /* HEADER_CURL_MIME_H */
#define state(x, y)
Definition: ftp.c:100
void Curl_mime_cleanpart(curl_mimepart *part)
Definition: mime.c:1097
curl_off_t Curl_mime_size(curl_mimepart *part)
Definition: mime.c:1484
FILE * fp
Definition: mime.h:108
mime_encoder_state encstate
Definition: mime.h:118
char * filename
Definition: mime.h:112
curl_mime * parent
Definition: mime.h:100
mimestrategy
Definition: mime.h:58
CURLcode
Definition: curl.h:454
size_t offset
Definition: mime.h:84
CURLcode Curl_mime_prepare_headers(curl_mimepart *part, const char *contenttype, const char *disposition, enum mimestrategy strategy)
Definition: mime.c:1577
unsigned int flags
Definition: mime.h:115
char * name
Definition: mime.h:113
void * ptr
Definition: mime.h:83
char * data
Definition: mime.h:103
struct Curl_easy * easy
Definition: mime.h:99
mimestate
Definition: mime.h:44
curl_read_callback readfunc
Definition: mime.h:104
char buffer[]
Definition: unit1308.c:48
int(* curl_seek_callback)(void *instream, curl_off_t offset, int origin)
Definition: curl.h:344
char * boundary
Definition: mime.h:93
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_mime_read(char *buffer, size_t size, size_t nitems, void *instream)
Definition: mime.c:1428
mimekind
Definition: mime.h:34
#define ENCODING_BUFFER_SIZE
Definition: mime.h:27
char * mimetype
Definition: mime.h:111
curl_free_callback freefunc
Definition: mime.h:106
curl_seek_callback seekfunc
Definition: mime.h:105
CURL_TYPEOF_CURL_OFF_T curl_off_t
Definition: system.h:420
size_t pos
Definition: mime.h:74
size_t(* curl_read_callback)(char *buffer, size_t size, size_t nitems, void *instream)
Definition: curl.h:355
CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt,...)
Definition: mime.c:1507
mime_state state
Definition: mime.h:94
curl_mimepart * firstpart
Definition: mime.h:91
mime_state state
Definition: mime.h:116
curl_mimepart * parent
Definition: mime.h:90
CURLcode Curl_mime_rewind(curl_mimepart *part)
Definition: mime.c:1437
curl_mimepart * nextpart
Definition: mime.h:101
size_t bufbeg
Definition: mime.h:75
const char * name
Definition: mime.h:66
char buf[3]
Definition: unit1398.c:32
void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy)
Definition: mime.c:1161
struct curl_slist * curlheaders
Definition: mime.h:109
curl_mimepart * lastpart
Definition: mime.h:92
curl_off_t datasize
Definition: mime.h:114
void * arg
Definition: mime.h:107
struct Curl_easy * easy
Definition: mime.h:89
size_t size
Definition: unit1302.c:52
struct curl_slist * userheaders
Definition: mime.h:110
static CURL * easy[MAX_EASY_HANDLES]
void(* curl_free_callback)(void *ptr)
Definition: curl.h:420
const mime_encoder * encoder
Definition: mime.h:117
size_t bufend
Definition: mime.h:76


rc_tagdetect_client
Author(s): Monika Florek-Jasinska , Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:15