mime header parsing embryo
This commit is contained in:
parent
6a81e8cacc
commit
c14b34647a
100
src/utils/mimeparse.cpp
Normal file
100
src/utils/mimeparse.cpp
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#ifndef lint
|
||||||
|
static char rcsid[] = "@(#$Id: mimeparse.cpp,v 1.1 2005-01-26 11:45:55 dockes Exp $ (C) 2004 J.F.Dockes";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TEST_MIMEPARSE
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "mimeparse.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
#define WHITE " \t\n"
|
||||||
|
|
||||||
|
static void stripw_lc(string &in)
|
||||||
|
{
|
||||||
|
// fprintf(stderr, "In: '%s'\n", in.c_str());
|
||||||
|
string::size_type pos, pos1;
|
||||||
|
pos = in.find_first_not_of(WHITE);
|
||||||
|
if (pos == string::npos) {
|
||||||
|
// All white
|
||||||
|
in = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
in.replace(0, pos, "");
|
||||||
|
pos1 = in.find_last_not_of(WHITE);
|
||||||
|
if (pos1 != in.length() -1)
|
||||||
|
in = in.replace(pos1+1, string::npos, "");
|
||||||
|
string::iterator i;
|
||||||
|
for (i = in.begin(); i != in.end(); i++)
|
||||||
|
*i = tolower(*i);
|
||||||
|
}
|
||||||
|
|
||||||
|
MimeHeaderValue parseMimeHeaderValue(const string &ein)
|
||||||
|
{
|
||||||
|
string in = ein;
|
||||||
|
MimeHeaderValue out;
|
||||||
|
string::size_type pos, pos1;
|
||||||
|
|
||||||
|
pos = in.find_first_not_of(WHITE);
|
||||||
|
if (pos == string::npos)
|
||||||
|
return out;
|
||||||
|
in = in.substr(pos, string::npos);
|
||||||
|
if ((pos = in.find_first_of(";")) == string::npos) {
|
||||||
|
out.value = in;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
out.value = in.substr(0, pos);
|
||||||
|
stripw_lc(out.value);
|
||||||
|
in = in.substr(pos+1, string::npos);
|
||||||
|
for (;;) {
|
||||||
|
// Skip whitespace
|
||||||
|
if ((pos = in.find_first_not_of(WHITE)) == string::npos)
|
||||||
|
return out;
|
||||||
|
in = in.substr(pos, string::npos);
|
||||||
|
|
||||||
|
if ((pos = in.find_first_of("=")) == string::npos)
|
||||||
|
return out;
|
||||||
|
string pname = in.substr(0, pos);
|
||||||
|
stripw_lc(pname);
|
||||||
|
in = in.substr(pos+1, string::npos);
|
||||||
|
|
||||||
|
pos = in.find_first_of(";");
|
||||||
|
string pvalue = in.substr(0, pos);
|
||||||
|
stripw_lc(pvalue);
|
||||||
|
out.params[pname] = pvalue;
|
||||||
|
if (pos == string::npos)
|
||||||
|
return out;
|
||||||
|
in = in.substr(pos+1, string::npos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "mimeparse.h"
|
||||||
|
using namespace std;
|
||||||
|
int
|
||||||
|
main(int argc, const char **argv)
|
||||||
|
{
|
||||||
|
|
||||||
|
MimeHeaderValue parsed;
|
||||||
|
|
||||||
|
// const char *tr = "text/html; charset=utf-8; otherparam=garb";
|
||||||
|
const char *tr = "text/html;charset = UTF-8 ; otherparam=garb;";
|
||||||
|
|
||||||
|
parsed = parseMimeHeaderValue(tr);
|
||||||
|
|
||||||
|
printf("'%s' \n", parsed.value.c_str());
|
||||||
|
map<string, string>::iterator it;
|
||||||
|
for (it = parsed.params.begin();it != parsed.params.end();it++) {
|
||||||
|
printf(" '%s' = '%s'\n", it->first.c_str(), it->second.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // TEST_MIMEPARSE
|
||||||
17
src/utils/mimeparse.h
Normal file
17
src/utils/mimeparse.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef _MIME_H_INCLUDED_
|
||||||
|
#define _MIME_H_INCLUDED_
|
||||||
|
/* @(#$Id: mimeparse.h,v 1.1 2005-01-26 11:45:55 dockes Exp $ (C) 2004 J.F.Dockes */
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
// Simple (no quoting) mime value parser. Input: "value; pn1=pv1; pn2=pv2
|
||||||
|
class MimeHeaderValue {
|
||||||
|
public:
|
||||||
|
std::string value;
|
||||||
|
std::map<std::string, std::string> params;
|
||||||
|
};
|
||||||
|
extern MimeHeaderValue parseMimeHeaderValue(const std::string &in);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _MIME_H_INCLUDED_ */
|
||||||
Loading…
x
Reference in New Issue
Block a user