diff options
author | Vincent Richard <[email protected]> | 2005-07-15 09:51:55 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2005-07-15 09:51:55 +0000 |
commit | b8b096c44ffc63ed1fc4514a6b7f20bb87c1bfb8 (patch) | |
tree | ed257b2492d4126944ad21fdcffde70264dbaa4b /src/messageParser.cpp | |
parent | Reference counting and smart pointers. (diff) | |
download | vmime-b8b096c44ffc63ed1fc4514a6b7f20bb87c1bfb8.tar.gz vmime-b8b096c44ffc63ed1fc4514a6b7f20bb87c1bfb8.zip |
Added getName() to retrieve attachment filename.
Diffstat (limited to 'src/messageParser.cpp')
-rw-r--r-- | src/messageParser.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/messageParser.cpp b/src/messageParser.cpp index 94fec668..a3b71375 100644 --- a/src/messageParser.cpp +++ b/src/messageParser.cpp @@ -153,6 +153,7 @@ void messageParser::findAttachments(const bodyPart& part) if (isAttachment) { // Determine the media type of this attachment + const contentTypeField* contTypeField = NULL; mediaType type; try @@ -161,6 +162,8 @@ void messageParser::findAttachments(const bodyPart& part) (*hdr.findField(fields::CONTENT_TYPE)); type = ctf.getValue(); + + contTypeField = &ctf; } catch (exceptions::no_such_field) { @@ -184,10 +187,43 @@ void messageParser::findAttachments(const bodyPart& part) // No description available. } + // Get the name/filename (if available) + word name; + + // -- try the 'filename' parameter of 'Content-Disposition' field + if (contentDispField != NULL) + { + try + { + name = contentDispField->getFilename(); + } + catch (exceptions::no_such_parameter) + { + // No 'filename' parameter + } + } + + // -- try the 'name' parameter of 'Content-Type' field + if (name.getBuffer().empty() && contTypeField != NULL) + { + try + { + ref <defaultParameter> prm = contTypeField-> + findParameter("name").dynamicCast <defaultParameter>(); + + if (prm != NULL) + name = prm->getValue(); + } + catch (exceptions::no_such_parameter) + { + // No attachment name available. + } + } + // Construct the attachment object ref <attachment> attach = vmime::create <defaultAttachment> (bdy.getContents()->clone().dynamicCast <contentHandler>(), - bdy.getEncoding(), type, description); + bdy.getEncoding(), type, description, name); if (contentDispField != NULL) { |