From 44388ac49531af9e2565f76ef99ff7afb757b3fb Mon Sep 17 00:00:00 2001 From: Erwin Hoffmann Date: Thu, 21 Sep 2023 17:36:16 +0200 Subject: all sources --- src/mime-getpart.cc | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/mime-getpart.cc (limited to 'src/mime-getpart.cc') 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 +#include +#include +#include +#include + +#include +#include +#include +#include + +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::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; +} -- cgit v1.2.3