test driver modifs
This commit is contained in:
parent
df7b8711a1
commit
cbaa54cde1
@ -1,5 +1,5 @@
|
|||||||
#ifndef lint
|
#ifndef lint
|
||||||
static char rcsid[] = "@(#$Id: mimeparse.cpp,v 1.15 2006-11-07 18:28:48 dockes Exp $ (C) 2004 J.F.Dockes";
|
static char rcsid[] = "@(#$Id: mimeparse.cpp,v 1.16 2006-11-09 08:59:40 dockes Exp $ (C) 2004 J.F.Dockes";
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -741,110 +741,186 @@ time_t rfc2822DateToUxTime(const string& dt)
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
extern bool rfc2231_decode(const string& in, string& out, string& charset);
|
extern bool rfc2231_decode(const string& in, string& out, string& charset);
|
||||||
extern time_t rfc2822DateToUxTime(const string& date);
|
extern time_t rfc2822DateToUxTime(const string& date);
|
||||||
|
static const char *thisprog;
|
||||||
|
|
||||||
|
static char usage [] =
|
||||||
|
"-p: header value and parameter test\n"
|
||||||
|
"-q: qp decoding\n"
|
||||||
|
"-b: base64\n"
|
||||||
|
"-7: rfc2047\n"
|
||||||
|
"-1: rfc2331\n"
|
||||||
|
"-t: date time\n"
|
||||||
|
" \n\n"
|
||||||
|
;
|
||||||
|
static void
|
||||||
|
Usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: usage:\n%s", thisprog, usage);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int op_flags;
|
||||||
|
#define OPT_MOINS 0x1
|
||||||
|
#define OPT_p 0x2
|
||||||
|
#define OPT_q 0x4
|
||||||
|
#define OPT_b 0x8
|
||||||
|
#define OPT_7 0x10
|
||||||
|
#define OPT_1 0x20
|
||||||
|
#define OPT_t 0x40
|
||||||
int
|
int
|
||||||
main(int argc, const char **argv)
|
main(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
#if 0
|
int count = 10;
|
||||||
//const char *tr = "text/html; charset=utf-8; otherparam=garb";
|
|
||||||
|
|
||||||
const char *tr = "text/html;charset = UTF-8 ; otherparam=garb; \n"
|
|
||||||
"QUOTEDPARAM=\"quoted value\"";
|
|
||||||
|
|
||||||
// const char *tr = "application/x-stuff;"
|
|
||||||
// "title*0*=us-ascii'en'This%20is%20even%20more%20;"
|
|
||||||
//"title*1*=%2A%2A%2Afun%2A%2A%2A%20;"
|
|
||||||
//"title*2=\"isn't it!\"";
|
|
||||||
|
|
||||||
MimeHeaderValue parsed;
|
|
||||||
|
|
||||||
if (!parseMimeHeaderValue(tr, parsed)) {
|
|
||||||
fprintf(stderr, "PARSE ERROR\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Field value: [%s]\n", parsed.value.c_str());
|
thisprog = argv[0];
|
||||||
map<string, string>::iterator it;
|
argc--; argv++;
|
||||||
for (it = parsed.params.begin();it != parsed.params.end();it++) {
|
|
||||||
if (it == parsed.params.begin())
|
|
||||||
printf("Parameters:\n");
|
|
||||||
printf(" [%s] = [%s]\n", it->first.c_str(), it->second.c_str());
|
|
||||||
}
|
|
||||||
#elif 0
|
|
||||||
const char *qp = "=41=68 =e0 boire=\r\n continue 1ere\ndeuxieme\n\r3eme "
|
|
||||||
"agrave is: '=E0' probable skipped decode error: =\n"
|
|
||||||
"Actual decode error =xx this wont show";
|
|
||||||
|
|
||||||
string out;
|
while (argc > 0 && **argv == '-') {
|
||||||
if (!qp_decode(string(qp), out)) {
|
(*argv)++;
|
||||||
fprintf(stderr, "qp_decode returned error\n");
|
if (!(**argv))
|
||||||
}
|
/* Cas du "adb - core" */
|
||||||
printf("Decoded: '%s'\n", out.c_str());
|
Usage();
|
||||||
#elif 0
|
while (**argv)
|
||||||
//'C'est à boire qu'il nous faut éviter l'excès.'
|
switch (*(*argv)++) {
|
||||||
//'Deuxième ligne'
|
case 'p': op_flags |= OPT_p; break;
|
||||||
//'Troisième ligne'
|
case 'q': op_flags |= OPT_q; break;
|
||||||
//'Et la fin (pas de nl). '
|
case 'b': op_flags |= OPT_b; break;
|
||||||
const char *b64 =
|
case '1': op_flags |= OPT_1; break;
|
||||||
|
case '7': op_flags |= OPT_7; break;
|
||||||
|
case 't': op_flags |= OPT_t; break;
|
||||||
|
default: Usage(); break;
|
||||||
|
}
|
||||||
|
b1: argc--; argv++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
Usage();
|
||||||
|
|
||||||
|
if (op_flags & OPT_p) {
|
||||||
|
// Mime header value and parameters extraction
|
||||||
|
const char *tr[] = {
|
||||||
|
"text/html;charset = UTF-8 ; otherparam=garb; \n"
|
||||||
|
"QUOTEDPARAM=\"quoted value\"",
|
||||||
|
|
||||||
|
"application/x-stuff;"
|
||||||
|
"title*0*=us-ascii'en'This%20is%20even%20more%20;"
|
||||||
|
"title*1*=%2A%2A%2Afun%2A%2A%2A%20;"
|
||||||
|
"title*2=\"isn't it!\""
|
||||||
|
};
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < sizeof(tr) / sizeof(char *); i++) {
|
||||||
|
MimeHeaderValue parsed;
|
||||||
|
if (!parseMimeHeaderValue(tr[i], parsed)) {
|
||||||
|
fprintf(stderr, "PARSE ERROR for [%s]\n", tr[i]);
|
||||||
|
}
|
||||||
|
printf("Field value: [%s]\n", parsed.value.c_str());
|
||||||
|
map<string, string>::iterator it;
|
||||||
|
for (it = parsed.params.begin();it != parsed.params.end();it++) {
|
||||||
|
if (it == parsed.params.begin())
|
||||||
|
printf("Parameters:\n");
|
||||||
|
printf(" [%s] = [%s]\n", it->first.c_str(), it->second.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (op_flags & OPT_q) {
|
||||||
|
// Quoted printable stuff
|
||||||
|
const char *qp =
|
||||||
|
"=41=68 =e0 boire=\r\n continue 1ere\ndeuxieme\n\r3eme "
|
||||||
|
"agrave is: '=E0' probable skipped decode error: =\n"
|
||||||
|
"Actual decode error =xx this wont show";
|
||||||
|
|
||||||
|
string out;
|
||||||
|
if (!qp_decode(string(qp), out)) {
|
||||||
|
fprintf(stderr, "qp_decode returned error\n");
|
||||||
|
}
|
||||||
|
printf("Decoded: '%s'\n", out.c_str());
|
||||||
|
} else if (op_flags & OPT_b) {
|
||||||
|
// Base64
|
||||||
|
//'C'est à boire qu'il nous faut éviter l'excès.'
|
||||||
|
//'Deuxième ligne'
|
||||||
|
//'Troisième ligne'
|
||||||
|
//'Et la fin (pas de nl). '
|
||||||
|
const char *b64 =
|
||||||
"Qydlc3Qg4CBib2lyZSBxdSdpbCBub3VzIGZhdXQg6XZpdGVyIGwnZXhj6HMuCkRldXhp6G1l\r\n"
|
"Qydlc3Qg4CBib2lyZSBxdSdpbCBub3VzIGZhdXQg6XZpdGVyIGwnZXhj6HMuCkRldXhp6G1l\r\n"
|
||||||
"IGxpZ25lClRyb2lzaehtZSBsaWduZQpFdCBsYSBmaW4gKHBhcyBkZSBubCkuIA==\r\n";
|
"IGxpZ25lClRyb2lzaehtZSBsaWduZQpFdCBsYSBmaW4gKHBhcyBkZSBubCkuIA==\r\n";
|
||||||
|
|
||||||
string out;
|
string out;
|
||||||
if (!base64_decode(string(b64), out)) {
|
if (!base64_decode(string(b64), out)) {
|
||||||
fprintf(stderr, "base64_decode returned error\n");
|
fprintf(stderr, "base64_decode returned error\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("Decoded: '%s'\n", out.c_str());
|
printf("Decoded: [%s]\n", out.c_str());
|
||||||
#elif 0
|
|
||||||
char line [1024];
|
|
||||||
string out;
|
|
||||||
bool res;
|
|
||||||
while (fgets(line, 1023, stdin)) {
|
|
||||||
int l = strlen(line);
|
|
||||||
if (l == 0)
|
|
||||||
continue;
|
|
||||||
line[l-1] = 0;
|
|
||||||
fprintf(stderr, "Line: [%s]\n", line);
|
|
||||||
#if 0
|
#if 0
|
||||||
res = rfc2047_decode(line, out);
|
string coded, decoded;
|
||||||
#else
|
const char *fname = "/tmp/recoll_decodefail";
|
||||||
string charset;
|
if (!file_to_string(fname, coded)) {
|
||||||
res = rfc2231_decode(line, out, charset);
|
fprintf(stderr, "Cant read %s\n", fname);
|
||||||
#endif
|
exit(1);
|
||||||
if (res)
|
}
|
||||||
fprintf(stderr, "Out: [%s]\n", out.c_str());
|
|
||||||
else
|
|
||||||
fprintf(stderr, "Decoding failed\n");
|
|
||||||
}
|
|
||||||
#elif 0
|
|
||||||
string coded, decoded;
|
|
||||||
const char *fname = "/tmp/recoll_decodefail";
|
|
||||||
if (!file_to_string(fname, coded)) {
|
|
||||||
fprintf(stderr, "Cant read %s\n", fname);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!base64_decode(coded, decoded)) {
|
if (!base64_decode(coded, decoded)) {
|
||||||
fprintf(stderr, "base64_decode returned error\n");
|
fprintf(stderr, "base64_decode returned error\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("Decoded: [%s]\n", decoded.c_str());
|
printf("Decoded: [%s]\n", decoded.c_str());
|
||||||
#elif 1
|
|
||||||
{
|
|
||||||
time_t t;
|
|
||||||
|
|
||||||
const char *dates[] = {
|
|
||||||
" Wed, 13 Sep 2006 11:40:26 -0700 (PDT)",
|
|
||||||
" Mon, 3 Jul 2006 09:51:58 +0200",
|
|
||||||
" Wed, 13 Sep 2006 08:19:48 GMT-07:00",
|
|
||||||
" Wed, 13 Sep 2006 11:40:26 -0700 (PDT)",
|
|
||||||
" Sat, 23 Dec 89 19:27:12 EST",
|
|
||||||
" 13 Jan 90 08:23:29 GMT"};
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i <sizeof(dates) / sizeof(char *); i++) {
|
|
||||||
t = rfc2822DateToUxTime(dates[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
} else if (op_flags & (OPT_7|OPT_1)) {
|
||||||
|
// rfc2047
|
||||||
|
char line [1024];
|
||||||
|
string out;
|
||||||
|
bool res;
|
||||||
|
while (fgets(line, 1023, stdin)) {
|
||||||
|
int l = strlen(line);
|
||||||
|
if (l == 0)
|
||||||
|
continue;
|
||||||
|
line[l-1] = 0;
|
||||||
|
fprintf(stderr, "Line: [%s]\n", line);
|
||||||
|
string charset;
|
||||||
|
if (op_flags & OPT_7) {
|
||||||
|
res = rfc2047_decode(line, out);
|
||||||
|
} else {
|
||||||
|
res = rfc2231_decode(line, out, charset);
|
||||||
|
}
|
||||||
|
if (res)
|
||||||
|
fprintf(stderr, "Out: [%s] cs %s\n", out.c_str(), charset.c_str());
|
||||||
|
else
|
||||||
|
fprintf(stderr, "Decoding failed\n");
|
||||||
|
}
|
||||||
|
} else if (op_flags & OPT_t) {
|
||||||
|
time_t t;
|
||||||
|
|
||||||
|
const char *dates[] = {
|
||||||
|
" Wed, 13 Sep 2006 11:40:26 -0700 (PDT)",
|
||||||
|
" Mon, 3 Jul 2006 09:51:58 +0200",
|
||||||
|
" Wed, 13 Sep 2006 08:19:48 GMT-07:00",
|
||||||
|
" Wed, 13 Sep 2006 11:40:26 -0700 (PDT)",
|
||||||
|
" Sat, 23 Dec 89 19:27:12 EST",
|
||||||
|
" 13 Jan 90 08:23:29 GMT"};
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i <sizeof(dates) / sizeof(char *); i++) {
|
||||||
|
t = rfc2822DateToUxTime(dates[i]);
|
||||||
|
struct tm *tm = localtime(&t);
|
||||||
|
char datebuf[100];
|
||||||
|
strftime(datebuf, 99, " %Y-%m-%d %H:%M:%S %z", tm);
|
||||||
|
printf("[%s] -> [%s]\n", dates[i], datebuf);
|
||||||
|
}
|
||||||
|
printf("Enter date:\n");
|
||||||
|
char line [1024];
|
||||||
|
while (fgets(line, 1023, stdin)) {
|
||||||
|
int l = strlen(line);
|
||||||
|
if (l == 0) continue;
|
||||||
|
line[l-1] = 0;
|
||||||
|
t = rfc2822DateToUxTime(line);
|
||||||
|
struct tm *tm = localtime(&t);
|
||||||
|
char datebuf[100];
|
||||||
|
strftime(datebuf, 99, " %Y-%m-%d %H:%M:%S %z", tm);
|
||||||
|
printf("[%s] -> [%s]\n", line, datebuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // TEST_MIMEPARSE
|
#endif // TEST_MIMEPARSE
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user