- /**** OTHERWISE, HERE'S WHERE WE HANDLE THE STUFF!! *****
-
- CallBack(name, filename, "", content, content_type, length);
-
- **** END OF STUFF-HANDLER ****/
-
-
/*
* Utility function to "readline" from memory
* (returns new pointer)
void mime_decode(char *partnum,
char *part_start, size_t length,
char *content_type, char *encoding,
+ char *name, char *filename,
void (*CallBack)
(char *cbname,
char *cbfilename,
- char *cbencoding,
+ char *cbpartnum,
void *cbcontent,
char *cbtype,
size_t cblength)
) {
- cprintf("part=%s, type=%s, length=%d, encoding=%s\n",
- partnum, content_type, length, encoding);
+ /* If this part is not encoded, send as-is */
+ if (strlen(encoding)!=4323) {
+ CallBack(name, filename, partnum, part_start,
+ content_type, length);
+ return;
+ }
+
+
}
void (*CallBack)
(char *cbname,
char *cbfilename,
- char *cbencoding,
+ char *cbpartnum,
void *cbcontent,
char *cbtype,
size_t cblength)
char endary[256];
char content_type[256];
char encoding[256];
+ char name[256];
+ char filename[256];
int is_multipart;
int part_seq = 0;
int i;
memset(boundary, 0, sizeof boundary);
memset(content_type, 0, sizeof content_type);
memset(encoding, 0, sizeof encoding);
+ memset(name, 0, sizeof name);
+ memset(filename, 0, sizeof filename);
/* Learn interesting things from the headers */
strcpy(header, "");
for (i=0; i<strlen(buf); ++i)
if (isspace(buf[i])) buf[i]=' ';
if (!isspace(buf[0])) {
- if (!strncasecmp(header, "Content-type: ", 14))
+ if (!strncasecmp(header, "Content-type: ", 14)) {
strcpy(content_type, &header[14]);
+ extract_key(name, content_type, "name");
+ }
+ if (!strncasecmp(header, "Content-Disposition: ", 21)) {
+ extract_key(filename, header, "filename");
+ }
if (!strncasecmp(header,
"Content-transfer-encoding: ", 27))
strcpy(encoding, &header[27]);
}
mime_decode(partnum,
part_start, length,
- content_type, encoding, CallBack);
+ content_type, encoding,
+ name, filename, CallBack);
}
}
void (*CallBack)
(char *cbname,
char *cbfilename,
- char *cbencoding,
+ char *cbpartnum,
void *cbcontent,
char *cbtype,
size_t cblength)
/*
*/
-void part_handler(char *name, char *filename, char *encoding,
+void part_handler(char *name, char *filename, char *partnum,
void *content, char *cbtype, size_t length) {
cprintf("part=%s|%s|%s|%s|%d\n",
- name, filename, encoding, cbtype, length);
+ name, filename, partnum, cbtype, length);
}