From cbaa54cde1d4771306f06d510a3690df2470ef77 Mon Sep 17 00:00:00 2001 From: dockes Date: Thu, 9 Nov 2006 08:59:40 +0000 Subject: [PATCH] test driver modifs --- src/utils/mimeparse.cpp | 264 ++++++++++++++++++++++++++-------------- 1 file changed, 170 insertions(+), 94 deletions(-) diff --git a/src/utils/mimeparse.cpp b/src/utils/mimeparse.cpp index e30066b2..fe62a16c 100644 --- a/src/utils/mimeparse.cpp +++ b/src/utils/mimeparse.cpp @@ -1,5 +1,5 @@ #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 /* * 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; extern bool rfc2231_decode(const string& in, string& out, string& charset); 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 main(int argc, const char **argv) { -#if 0 - //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"); - } + int count = 10; - printf("Field value: [%s]\n", parsed.value.c_str()); - map::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()); - } -#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"; + thisprog = argv[0]; + argc--; argv++; - string out; - if (!qp_decode(string(qp), out)) { - fprintf(stderr, "qp_decode returned error\n"); - } - printf("Decoded: '%s'\n", out.c_str()); -#elif 0 - //'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 = + while (argc > 0 && **argv == '-') { + (*argv)++; + if (!(**argv)) + /* Cas du "adb - core" */ + Usage(); + while (**argv) + switch (*(*argv)++) { + case 'p': op_flags |= OPT_p; break; + case 'q': op_flags |= OPT_q; break; + case 'b': op_flags |= OPT_b; break; + 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::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" - "IGxpZ25lClRyb2lzaehtZSBsaWduZQpFdCBsYSBmaW4gKHBhcyBkZSBubCkuIA==\r\n"; + "IGxpZ25lClRyb2lzaehtZSBsaWduZQpFdCBsYSBmaW4gKHBhcyBkZSBubCkuIA==\r\n"; - string out; - if (!base64_decode(string(b64), out)) { - fprintf(stderr, "base64_decode returned error\n"); - exit(1); - } - 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); + string out; + if (!base64_decode(string(b64), out)) { + fprintf(stderr, "base64_decode returned error\n"); + exit(1); + } + printf("Decoded: [%s]\n", out.c_str()); #if 0 - res = rfc2047_decode(line, out); -#else - string charset; - res = rfc2231_decode(line, out, charset); -#endif - 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); - } + 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)) { - fprintf(stderr, "base64_decode returned error\n"); - exit(1); - } - 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 [%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