diff options
author | Erwin Hoffmann <feh@fehcom.de> | 2023-09-21 17:36:16 +0200 |
---|---|---|
committer | Erwin Hoffmann <feh@fehcom.de> | 2023-09-21 17:36:16 +0200 |
commit | 44388ac49531af9e2565f76ef99ff7afb757b3fb (patch) | |
tree | 4eeb294db5bc3dbd075d0df5fea13c664cc331e2 /src/mime-getpart.cc | |
parent | 889d69a87d51c8df531885cf1ac3d12d64a0cff7 (diff) |
all sources
Diffstat (limited to 'src/mime-getpart.cc')
-rw-r--r-- | src/mime-getpart.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/mime-getpart.cc b/src/mime-getpart.cc new file mode 100644 index 0000000..7ce84fd --- /dev/null +++ b/src/mime-getpart.cc @@ -0,0 +1,69 @@ +/** -------------------------------------------------------------------- + * @file mime-getpart.cc + * @brief Implementation of main mime parser components + * @author Andreas Aardal Hanssen + * @date 2002-2005 + * ----------------------------------------------------------------- **/ +#include "mime.h" +#include "convert.h" +#include <string> +#include <vector> +#include <map> +#include <exception> +#include <iostream> + +#include <string.h> +#include <ctype.h> +#include <stdio.h> +#include <errno.h> + +using namespace ::std; + +//------------------------------------------------------------------------ +const Binc::MimePart *Binc::MimePart::getPart(const string &findpart, + string genpart, FetchType fetchType) const +{ + if (findpart == genpart) + return this; + + if (isMultipart()) { + if (members.size() != 0) { + vector<MimePart>::const_iterator i = members.begin(); + int part = 1; + while (i != members.end()) { + BincStream ss; + ss << genpart; + if (genpart != "") + ss << "."; + ss << part; + + const MimePart *m; + if ((m = (*i).getPart(findpart, ss.str())) != 0) { + if (fetchType == FetchHeader && m->isMessageRFC822()) + m = &m->members[0]; + return m; + } + + ++i; + ++part; + } + } + } else if (isMessageRFC822()) { + if (members.size() == 1) { + const MimePart *m = members[0].getPart(findpart, genpart); + return m; + } else { + return 0; + } + } else { + // Singlepart + if (genpart != "") + genpart += "."; + genpart += "1"; + + if (findpart == genpart) + return this; + } + + return 0; +} |