forms/source/component/DatabaseForm.cxx | 11 include/rtl/string.hxx | 49 + include/tools/inetmsg.hxx | 130 -- include/tools/inetstrm.hxx | 105 -- sal/CppunitTest_sal_rtl_strings.mk | 1 sal/qa/rtl/strings/test_ostring.cxx | 92 + sw/inc/fesh.hxx | 2 sw/source/core/frmedt/fefly1.cxx | 2 sw/source/uibase/shells/basesh.cxx | 2 tools/source/inet/inetmsg.cxx | 602 ------------ tools/source/inet/inetstrm.cxx | 1513 ++------------------------------ 11 files changed, 324 insertions(+), 2185 deletions(-)
New commits: commit 62f489c88ea0067adb0f6762c6bc331c2c51005d Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 22:13:08 2015 +0200 loplugin:staticmethods Change-Id: I00acce39f94653ef8e2465f15ba572b619a1c7fb diff --git a/sw/inc/fesh.hxx b/sw/inc/fesh.hxx index 6e66129..2cda774 100644 --- a/sw/inc/fesh.hxx +++ b/sw/inc/fesh.hxx @@ -380,7 +380,7 @@ public: bool IsFrmSelected() const; bool GetFlyFrmAttr( SfxItemSet &rSet ) const; bool SetFlyFrmAttr( SfxItemSet &rSet ); - SfxItemSet makeItemSetFromFormatAnchor(SfxItemPool& rPool, const SwFormatAnchor &rAnchor) const; + static SfxItemSet makeItemSetFromFormatAnchor(SfxItemPool& rPool, const SwFormatAnchor &rAnchor); bool ResetFlyFrmAttr( sal_uInt16 nWhich, const SfxItemSet* pSet = 0 ); const SwFrameFormat *NewFlyFrm( const SfxItemSet &rSet, bool bAnchValid = false, SwFrameFormat *pParent = 0 ); diff --git a/sw/source/core/frmedt/fefly1.cxx b/sw/source/core/frmedt/fefly1.cxx index 3f126fb..d1cda53 100644 --- a/sw/source/core/frmedt/fefly1.cxx +++ b/sw/source/core/frmedt/fefly1.cxx @@ -1053,7 +1053,7 @@ bool SwFEShell::SetFlyFrmAttr( SfxItemSet& rSet ) return bRet; } -SfxItemSet SwFEShell::makeItemSetFromFormatAnchor(SfxItemPool& rPool, const SwFormatAnchor &rAnchor) const +SfxItemSet SwFEShell::makeItemSetFromFormatAnchor(SfxItemPool& rPool, const SwFormatAnchor &rAnchor) { // The set also includes VERT/HORI_ORIENT, because the align // shall be changed in FEShell::SetFlyFrmAttr/SetFlyFrmAnchor, diff --git a/sw/source/uibase/shells/basesh.cxx b/sw/source/uibase/shells/basesh.cxx index 07eb9ee..92898c5 100644 --- a/sw/source/uibase/shells/basesh.cxx +++ b/sw/source/uibase/shells/basesh.cxx @@ -1013,7 +1013,7 @@ void SwBaseShell::Execute(SfxRequest &rReq) else if (rSh.IsFrmSelected()) { SwFormatAnchor aAnc(eSet, rSh.GetPhyPageNum()); - SfxItemSet aSet(rSh.makeItemSetFromFormatAnchor(GetPool(), aAnc)); + SfxItemSet aSet(SwFEShell::makeItemSetFromFormatAnchor(GetPool(), aAnc)); rSh.SetFlyFrmAttr(aSet); } // if new anchor is 'as char' and it is a Math object and the usual commit 1a9293242b90920b24880cbc69406296cae581df Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 20:45:41 2015 +0200 Remove unused INetMIMEMessage parts Change-Id: Ica7d3e7e52ccdfe833ac10567c6f5f7bb7085dee diff --git a/include/tools/inetmsg.hxx b/include/tools/inetmsg.hxx index 3d3002c..fa4d159 100644 --- a/include/tools/inetmsg.hxx +++ b/include/tools/inetmsg.hxx @@ -50,9 +50,6 @@ public: : m_aName (rHdr.m_aName), m_aValue (rHdr.m_aValue) {} - ~INetMessageHeader() - {} - INetMessageHeader& operator= (const INetMessageHeader& rHdr) { m_aName = rHdr.m_aName; @@ -62,57 +59,15 @@ public: const OString& GetName() const { return m_aName; } const OString& GetValue() const { return m_aValue; } - - friend SvStream& WriteINetMessageHeader( - SvStream& rStrm, const INetMessageHeader& rHdr) - { - write_uInt16_lenPrefixed_uInt8s_FromOString(rStrm, rHdr.m_aName); - write_uInt16_lenPrefixed_uInt8s_FromOString(rStrm, rHdr.m_aValue); - return rStrm; - } - - friend SvStream& ReadINetMessageHeader ( - SvStream& rStrm, INetMessageHeader& rHdr) - { - rHdr.m_aName = read_uInt16_lenPrefixed_uInt8s_ToOString(rStrm); - rHdr.m_aValue = read_uInt16_lenPrefixed_uInt8s_ToOString(rStrm); - return rStrm; - } -}; - -/** - RFC822 fields -*/ -enum class InetMessageField -{ - BCC = 0, - CC = 1, - COMMENTS = 2, - DATE = 3, - FROM = 4, - IN_REPLY_TO = 5, - KEYWORDS = 6, - MESSAGE_ID = 7, - REFERENCES = 8, - REPLY_TO = 9, - RETURN_PATH = 10, - SENDER = 11, - SUBJECT = 12, - TO = 13, - X_MAILER = 14, - RETURN_RECEIPT_TO = 15, - NUMHDR = 16, }; enum class InetMessageMime { VERSION = 0, - CONTENT_DESCRIPTION = 1, - CONTENT_DISPOSITION = 2, - CONTENT_ID = 3, - CONTENT_TYPE = 4, - CONTENT_TRANSFER_ENCODING = 5, - NUMHDR = 6, + CONTENT_DISPOSITION = 1, + CONTENT_TYPE = 2, + CONTENT_TRANSFER_ENCODING = 3, + NUMHDR = 4, }; class TOOLS_DLLPUBLIC INetMIMEMessage @@ -120,29 +75,12 @@ class TOOLS_DLLPUBLIC INetMIMEMessage ::std::vector< INetMessageHeader* > m_aHeaderList; - sal_uIntPtr m_nDocSize; - OUString m_aDocName; SvLockBytesRef m_xDocLB; - void ListCleanup_Impl(); - void ListCopy (const INetMIMEMessage& rMsg); - - ::std::map<InetMessageField, sal_uIntPtr> m_nRFC822Index; - ::std::map<InetMessageMime, sal_uIntPtr> m_nMIMEIndex; INetMIMEMessage* pParent; ::std::vector< INetMIMEMessage* > aChildren; OString m_aBoundary; - bool bHeaderParsed; - - friend class INetMIMEMessageStream; - - const OString& GetMultipartBoundary() const { return m_aBoundary; } - void SetMultipartBoundary (const OString& rBnd) { m_aBoundary = rBnd; } - - void CleanupImp(); - void CopyImp (const INetMIMEMessage& rMsg); - void SetHeaderParsed() { bHeaderParsed = true; } OUString GetHeaderValue_Impl ( sal_uIntPtr nIndex, INetMIME::HeaderFieldType eType) const @@ -176,23 +114,21 @@ class TOOLS_DLLPUBLIC INetMIMEMessage const OUString &rValue, sal_uIntPtr &rnIndex); - sal_uIntPtr SetRFC822HeaderField ( - const INetMessageHeader &rHeader, sal_uIntPtr nNewIndex); + bool IsMessage() const + { + OUString aType (GetContentType()); + return aType.matchIgnoreAsciiCase("message/"); + } + + INetMIMEMessage (const INetMIMEMessage& rMsg) = delete; + INetMIMEMessage& operator= (const INetMIMEMessage& rMsg) = delete; public: INetMIMEMessage(); - INetMIMEMessage (const INetMIMEMessage& rMsg); ~INetMIMEMessage(); - INetMIMEMessage& operator= (const INetMIMEMessage& rMsg); - sal_uIntPtr GetHeaderCount() const { return m_aHeaderList.size(); } - OUString GetHeaderValue (sal_uIntPtr nIndex) const - { - return GetHeaderValue_Impl (nIndex, INetMIME::HEADER_FIELD_TEXT); - } - INetMessageHeader GetHeaderField (sal_uIntPtr nIndex) const { if ( nIndex < m_aHeaderList.size() ) { @@ -202,36 +138,23 @@ public: } } - sal_uIntPtr SetHeaderField ( - const INetMessageHeader &rField, - sal_uIntPtr nIndex = ((sal_uIntPtr)-1) - ); - - sal_uIntPtr GetDocumentSize() const { return m_nDocSize; } - void SetDocumentSize (sal_uIntPtr nSize) { m_nDocSize = nSize; } - SvLockBytes* GetDocumentLB() const { return m_xDocLB; } void SetDocumentLB (SvLockBytes *pDocLB) { m_xDocLB = pDocLB; } static bool ParseDateField ( const OUString& rDateField, DateTime& rDateTime); - static INetMIMEMessage* CreateMessage ( - const INetMIMEMessage& rMsg); - void SetMIMEVersion (const OUString& rVersion); void SetContentDisposition (const OUString& rDisposition); void SetContentType (const OUString& rType); OUString GetContentType() const { - return GetHeaderValue (m_nMIMEIndex.at(InetMessageMime::CONTENT_TYPE)); + return GetHeaderValue_Impl( + m_nMIMEIndex.at(InetMessageMime::CONTENT_TYPE), + INetMIME::HEADER_FIELD_TEXT); } void SetContentTransferEncoding (const OUString& rEncoding); - OUString GetContentTransferEncoding() const - { - return GetHeaderValue (m_nMIMEIndex.at(InetMessageMime::CONTENT_TRANSFER_ENCODING)); - } OUString GetDefaultContentType (); @@ -241,11 +164,6 @@ public: { return (IsMessage() || IsMultipart()); } - bool IsMessage() const - { - OUString aType (GetContentType()); - return aType.matchIgnoreAsciiCase("message/"); - } bool IsMultipart() const { OUString aType (GetContentType()); @@ -261,6 +179,8 @@ public: bool EnableAttachMultipartFormDataChild(); bool AttachChild ( INetMIMEMessage& rChildMsg, bool bOwner = true ); + + const OString& GetMultipartBoundary() const { return m_aBoundary; } }; #endif diff --git a/tools/source/inet/inetmsg.cxx b/tools/source/inet/inetmsg.cxx index bf12438..099e6bf 100644 --- a/tools/source/inet/inetmsg.cxx +++ b/tools/source/inet/inetmsg.cxx @@ -40,40 +40,6 @@ inline bool ascii_isLetter( sal_Unicode ch ) return (( (ch >= 0x0041) && (ch <= 0x005A)) || ((ch >= 0x0061) && (ch <= 0x007A))); } -inline sal_Unicode ascii_toLowerCase( sal_Unicode ch ) -{ - if ( (ch >= 0x0041) && (ch <= 0x005A) ) - return ch + 0x20; - else - return ch; -} - -void INetMIMEMessage::ListCleanup_Impl() -{ - // Cleanup. - sal_uIntPtr i, n = m_aHeaderList.size(); - for (i = 0; i < n; i++) - delete m_aHeaderList[ i ]; - m_aHeaderList.clear(); -} - -void INetMIMEMessage::ListCopy (const INetMIMEMessage &rMsg) -{ - if (!(this == &rMsg)) - { - // Cleanup. - ListCleanup_Impl(); - - // Copy. - sal_uIntPtr i, n = rMsg.GetHeaderCount(); - for (i = 0; i < n; i++) - { - INetMessageHeader *p = rMsg.m_aHeaderList[ i ]; - m_aHeaderList.push_back( new INetMessageHeader(*p) ); - } - } -} - void INetMIMEMessage::SetHeaderField_Impl ( INetMIME::HeaderFieldType eType, const OString &rName, @@ -87,43 +53,6 @@ void INetMIMEMessage::SetHeaderField_Impl ( INetMessageHeader (rName, aSink.takeBuffer()), rnIndex); } -static const std::map<InetMessageField, const char *> ImplINetRFC822MessageHeaderData = -{ - { InetMessageField::BCC, "BCC" } , - { InetMessageField::CC, "CC" } , - { InetMessageField::COMMENTS, "Comments" } , - { InetMessageField::DATE, "Date" } , - { InetMessageField::FROM, "From" } , - { InetMessageField::IN_REPLY_TO, "In-Reply-To" } , - { InetMessageField::KEYWORDS, "Keywords" } , - { InetMessageField::MESSAGE_ID, "Message-ID" } , - { InetMessageField::REFERENCES, "References" } , - { InetMessageField::REPLY_TO, "Reply-To" } , - { InetMessageField::RETURN_PATH, "Return-Path" } , - { InetMessageField::SUBJECT, "Subject" } , - { InetMessageField::SENDER, "Sender" } , - { InetMessageField::TO, "To" } , - { InetMessageField::X_MAILER, "X-Mailer" } , - { InetMessageField::RETURN_RECEIPT_TO, "Return-Receipt-To" } , -}; - -/* - State of RFC822 header parsing -*/ -enum class HeaderState -{ - BEGIN, - CHECK, - OK, - JUNK, - - TOKEN_RE, - TOKEN_RETURNMINUS, - TOKEN_XMINUS, - LETTER_C, - LETTER_S -}; - /* ParseDateField and local helper functions. * * Parses a String in (implied) GMT format into class Date and tools::Time objects. @@ -276,483 +205,29 @@ bool INetMIMEMessage::ParseDateField ( (rDateTime.GetHour() > 23) )); } -// Header Field Parser -sal_uIntPtr INetMIMEMessage::SetRFC822HeaderField ( - const INetMessageHeader &rHeader, sal_uIntPtr nNewIndex) -{ - OString aName (rHeader.GetName()); - const sal_Char *pData = aName.getStr(); - const sal_Char *pStop = pData + aName.getLength() + 1; - const sal_Char *check = ""; - - InetMessageField nIdx = static_cast<InetMessageField>(CONTAINER_APPEND); - HeaderState eState = HeaderState::BEGIN; - HeaderState eOkState = HeaderState::OK; - - while (pData < pStop) - { - switch (eState) - { - case HeaderState::BEGIN: - eState = HeaderState::CHECK; - eOkState = HeaderState::OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'b': - check = "cc"; - nIdx = InetMessageField::BCC; - break; - - case 'c': - eState = HeaderState::LETTER_C; - break; - - case 'd': - check = "ate"; - nIdx = InetMessageField::DATE; - break; - - case 'f': - check = "rom"; - nIdx = InetMessageField::FROM; - break; - - case 'i': - check = "n-reply-to"; - nIdx = InetMessageField::IN_REPLY_TO; - break; - - case 'k': - check = "eywords"; - nIdx = InetMessageField::KEYWORDS; - break; - - case 'm': - check = "essage-id"; - nIdx = InetMessageField::MESSAGE_ID; - break; - - case 'r': - check = "e"; - eOkState = HeaderState::TOKEN_RE; - break; - - case 's': - eState = HeaderState::LETTER_S; - break; - - case 't': - check = "o"; - nIdx = InetMessageField::TO; - break; - - case 'x': - check = "-"; - eOkState = HeaderState::TOKEN_XMINUS; - break; - - default: - eState = HeaderState::JUNK; - break; - } - pData++; - break; - - case HeaderState::TOKEN_RE: - eState = HeaderState::CHECK; - eOkState = HeaderState::OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'f': - check = "erences"; - nIdx = InetMessageField::REFERENCES; - break; - - case 'p': - check = "ly-to"; - nIdx = InetMessageField::REPLY_TO; - break; - - case 't': - check = "urn-"; - eOkState = HeaderState::TOKEN_RETURNMINUS; - break; - - default: - eState = HeaderState::JUNK; - break; - } - pData++; - break; - - case HeaderState::TOKEN_RETURNMINUS: - eState = HeaderState::CHECK; - eOkState = HeaderState::OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'p': - check = "ath"; - nIdx = InetMessageField::RETURN_PATH; - break; - - case 'r': - check = "eceipt-to"; - nIdx = InetMessageField::RETURN_RECEIPT_TO; - break; - - default: - eState = HeaderState::JUNK; - break; - } - pData++; - break; - - case HeaderState::TOKEN_XMINUS: - eState = HeaderState::CHECK; - eOkState = HeaderState::OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'm': - check = "ailer"; - nIdx = InetMessageField::X_MAILER; - break; - - default: - eState = HeaderState::JUNK; - break; - } - pData++; - break; - - case HeaderState::LETTER_C: - eState = HeaderState::CHECK; - eOkState = HeaderState::OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'c': - check = ""; - nIdx = InetMessageField::CC; - break; - - case 'o': - check = "mments"; - nIdx = InetMessageField::COMMENTS; - break; - - default: - eState = HeaderState::JUNK; - break; - } - pData++; - break; - - case HeaderState::LETTER_S: - eState = HeaderState::CHECK; - eOkState = HeaderState::OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'e': - check = "nder"; - nIdx = InetMessageField::SENDER; - break; - - case 'u': - check = "bject"; - nIdx = InetMessageField::SUBJECT; - break; - - default: - eState = HeaderState::JUNK; - break; - } - pData++; - break; - - case HeaderState::CHECK: - if (*check) - { - while (*pData && *check && - (ascii_toLowerCase (*pData) == *check)) - { - pData++; - check++; - } - } - else - { - check = pData; - } - eState = (*check == '\0') ? eOkState : HeaderState::JUNK; - break; - - case HeaderState::OK: - pData = pStop; - SetHeaderField_Impl ( - INetMessageHeader( ImplINetRFC822MessageHeaderData.at(nIdx), rHeader.GetValue() ), - m_nRFC822Index[nIdx]); - nNewIndex = m_nRFC822Index[nIdx]; - break; - - default: // INETMSG_RFC822_JUNK - pData = pStop; - SetHeaderField_Impl(rHeader, nNewIndex); - break; - } - } - return nNewIndex; -} - static const std::map<InetMessageMime, const char*> ImplINetMIMEMessageHeaderData = { { InetMessageMime::VERSION, "MIME-Version"}, - { InetMessageMime::CONTENT_DESCRIPTION, "Content-Description"}, { InetMessageMime::CONTENT_DISPOSITION, "Content-Disposition"}, - { InetMessageMime::CONTENT_ID, "Content-ID"}, { InetMessageMime::CONTENT_TYPE, "Content-Type"}, { InetMessageMime::CONTENT_TRANSFER_ENCODING, "Content-Transfer-Encoding"} }; -enum _ImplINetMIMEMessageHeaderState -{ - INETMSG_MIME_BEGIN, - INETMSG_MIME_CHECK, - INETMSG_MIME_OK, - INETMSG_MIME_JUNK, - - INETMSG_MIME_TOKEN_CONTENT, - INETMSG_MIME_TOKEN_CONTENT_D, - INETMSG_MIME_TOKEN_CONTENT_T -}; - INetMIMEMessage::INetMIMEMessage() - : m_nDocSize(0), - pParent(NULL), - bHeaderParsed(false) + : pParent(NULL) { - for (sal_uInt16 i = 0; i < static_cast<int>(InetMessageField::NUMHDR); i++) - m_nRFC822Index[static_cast<InetMessageField>(i)] = CONTAINER_ENTRY_NOTFOUND; for (sal_uInt16 i = 0; i < static_cast<int>(InetMessageMime::NUMHDR); i++) m_nMIMEIndex[static_cast<InetMessageMime>(i)] = CONTAINER_ENTRY_NOTFOUND; } -INetMIMEMessage::INetMIMEMessage (const INetMIMEMessage& rMsg) - : m_nDocSize(rMsg.m_nDocSize), - m_aDocName(rMsg.m_aDocName), - m_xDocLB(rMsg.m_xDocLB), - pParent(NULL) -{ - ListCopy (rMsg); - m_nRFC822Index = rMsg.m_nRFC822Index; - CopyImp (rMsg); -} - -INetMIMEMessage& INetMIMEMessage::operator= ( - const INetMIMEMessage& rMsg) -{ - if (this != &rMsg) - { - m_nDocSize = rMsg.m_nDocSize; - m_aDocName = rMsg.m_aDocName; - m_xDocLB = rMsg.m_xDocLB; - ListCopy (rMsg); - m_nRFC822Index = rMsg.m_nRFC822Index; - CleanupImp(); - CopyImp (rMsg); - } - return *this; -} - INetMIMEMessage::~INetMIMEMessage() { - ListCleanup_Impl(); - CleanupImp(); -} - -void INetMIMEMessage::CleanupImp() -{ - for( size_t i = 0, n = aChildren.size(); i < n; ++i ) { - delete aChildren[ i ]; - } - aChildren.clear(); -} - -void INetMIMEMessage::CopyImp (const INetMIMEMessage& rMsg) -{ - bHeaderParsed = rMsg.bHeaderParsed; - - size_t i; - m_nMIMEIndex = rMsg.m_nMIMEIndex; - m_aBoundary = rMsg.m_aBoundary; - - for (i = 0; i < rMsg.aChildren.size(); i++) - { - INetMIMEMessage *pChild = rMsg.aChildren[ i ]; - - if (pChild->pParent == &rMsg) - { - pChild = INetMIMEMessage::CreateMessage (*pChild); - pChild->pParent = this; - } - aChildren.push_back( pChild ); + for (auto i: m_aHeaderList) { + delete i; } -} - -INetMIMEMessage *INetMIMEMessage::CreateMessage ( - const INetMIMEMessage& rMsg) -{ - return new INetMIMEMessage (rMsg); -} - -// Header Field Parser -sal_uIntPtr INetMIMEMessage::SetHeaderField ( - const INetMessageHeader &rHeader, sal_uIntPtr nNewIndex) -{ - OString aName (rHeader.GetName()); - const sal_Char *pData = aName.getStr(); - const sal_Char *pStop = pData + aName.getLength() + 1; - const sal_Char *check = ""; - - InetMessageMime nIdx = static_cast<InetMessageMime>(CONTAINER_APPEND); - int eState = INETMSG_MIME_BEGIN; - int eOkState = INETMSG_MIME_OK; - - while (pData < pStop) - { - switch (eState) - { - case INETMSG_MIME_BEGIN: - eState = INETMSG_MIME_CHECK; - eOkState = INETMSG_MIME_OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'c': - check = "ontent-"; - eOkState = INETMSG_MIME_TOKEN_CONTENT; - break; - - case 'm': - check = "ime-version"; - nIdx = InetMessageMime::VERSION; - break; - - default: - eState = INETMSG_MIME_JUNK; - break; - } - pData++; - break; - - case INETMSG_MIME_TOKEN_CONTENT: - eState = INETMSG_MIME_CHECK; - eOkState = INETMSG_MIME_OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'd': - eState = INETMSG_MIME_TOKEN_CONTENT_D; - break; - - case 'i': - check = "d"; - nIdx = InetMessageMime::CONTENT_ID; - break; - - case 't': - eState = INETMSG_MIME_TOKEN_CONTENT_T; - break; - - default: - eState = INETMSG_MIME_JUNK; - break; - } - pData++; - break; - - case INETMSG_MIME_TOKEN_CONTENT_D: - eState = INETMSG_MIME_CHECK; - eOkState = INETMSG_MIME_OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'e': - check = "scription"; - nIdx = InetMessageMime::CONTENT_DESCRIPTION; - break; - - case 'i': - check = "sposition"; - nIdx = InetMessageMime::CONTENT_DISPOSITION; - break; - - default: - eState = INETMSG_MIME_JUNK; - break; - } - pData++; - break; - - case INETMSG_MIME_TOKEN_CONTENT_T: - eState = INETMSG_MIME_CHECK; - eOkState = INETMSG_MIME_OK; - - switch (ascii_toLowerCase (*pData)) - { - case 'r': - check = "ansfer-encoding"; - nIdx = InetMessageMime::CONTENT_TRANSFER_ENCODING; - break; - - case 'y': - check = "pe"; - nIdx = InetMessageMime::CONTENT_TYPE; - break; - - default: - eState = INETMSG_MIME_JUNK; - break; - } - pData++; - break; - - case INETMSG_MIME_CHECK: - if (*check) - { - while (*pData && *check && - (ascii_toLowerCase (*pData) == *check)) - { - pData++; - check++; - } - } - else - { - check = pData; - } - eState = (*check == '\0') ? eOkState : INETMSG_MIME_JUNK; - break; - - case INETMSG_MIME_OK: - pData = pStop; - SetHeaderField_Impl ( - INetMessageHeader( ImplINetMIMEMessageHeaderData.at(nIdx), rHeader.GetValue()), - m_nMIMEIndex[nIdx]); - nNewIndex = m_nMIMEIndex[nIdx]; - break; - - default: // INETMSG_MIME_JUNK - pData = pStop; - nNewIndex = SetRFC822HeaderField(rHeader, nNewIndex); - break; - } + for (auto i: aChildren) { + delete i; } - return nNewIndex; } void INetMIMEMessage::SetMIMEVersion (const OUString& rVersion) commit 9371a5f0a03ef1e98e8984edf3bb81cffa14f36f Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 17:36:44 2015 +0200 More INetMIMEMessageStream clean up Change-Id: Ibb2b93261e2d8ef370ac106766e39685a03a6ef3 diff --git a/include/tools/inetstrm.hxx b/include/tools/inetstrm.hxx index 90d3760..7e43b0d 100644 --- a/include/tools/inetstrm.hxx +++ b/include/tools/inetstrm.hxx @@ -27,17 +27,6 @@ class INetMIMEMessage; class SvMemoryStream; class SvStream; -enum INetStreamStatus -{ - INETSTREAM_STATUS_ERROR = -1 -}; - -enum INetMessageStreamState -{ - INETMSG_EOL_BEGIN, - INETMSG_EOL_DONE -}; - class TOOLS_DLLPUBLIC INetMIMEMessageStream { INetMIMEMessage *pSourceMsg; @@ -53,7 +42,7 @@ class TOOLS_DLLPUBLIC INetMIMEMessageStream sal_Char *pMsgRead; sal_Char *pMsgWrite; - int eState; + bool done; sal_uIntPtr nChildIndex; INetMIMEMessageStream *pChildStrm; @@ -61,20 +50,15 @@ class TOOLS_DLLPUBLIC INetMIMEMessageStream INetMIMEMessageStream (const INetMIMEMessageStream& rStrm) SAL_DELETED_FUNCTION; INetMIMEMessageStream& operator= (const INetMIMEMessageStream& rStrm) SAL_DELETED_FUNCTION; - int GetInnerMsgLine(sal_Char *pData, sal_uIntPtr nSize); - int GetOuterMsgLine(sal_Char *pData, sal_uIntPtr nSize); + int GetHeaderLine(sal_Char *pData, sal_uIntPtr nSize); + int GetBodyLine(sal_Char *pData, sal_uIntPtr nSize); + int GetMsgLine(sal_Char *pData, sal_uIntPtr nSize); public: - INetMIMEMessageStream (sal_uIntPtr nBufferSize = 2048); + explicit INetMIMEMessageStream(INetMIMEMessage *pMsg, bool headerGenerated); ~INetMIMEMessageStream(); int Read (sal_Char *pData, sal_uIntPtr nSize); - - INetMIMEMessage *GetSourceMessage() const { return pSourceMsg; } - void SetSourceMessage (INetMIMEMessage *pMsg) { pSourceMsg = pMsg; } - - void SetHeaderGenerated() { bHeaderGenerated = true; } - bool IsHeaderGenerated() const { return bHeaderGenerated; } }; #endif diff --git a/tools/source/inet/inetstrm.cxx b/tools/source/inet/inetstrm.cxx index b984b32..1a2da1b 100644 --- a/tools/source/inet/inetstrm.cxx +++ b/tools/source/inet/inetstrm.cxx @@ -17,6 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <sal/config.h> + +#include <cassert> + #include <comphelper/string.hxx> #include <sal/log.hxx> #include <sal/types.h> @@ -24,147 +28,141 @@ #include <tools/inetmsg.hxx> #include <tools/inetstrm.hxx> -#include <ctype.h> - -int INetMIMEMessageStream::GetInnerMsgLine(sal_Char* pData, sal_uIntPtr nSize) +int INetMIMEMessageStream::GetHeaderLine(sal_Char* pData, sal_uIntPtr nSize) { - if (pSourceMsg == NULL) return INETSTREAM_STATUS_ERROR; - sal_Char* pWBuf = pData; - sal_Char* pWEnd = pData + nSize; - if (!bHeaderGenerated) - { - sal_uIntPtr i, n; + sal_uIntPtr i, n; - if (pMsgBuffer->Tell() == 0) + if (pMsgBuffer->Tell() == 0) + { + // Insert formatted header into buffer. + n = pSourceMsg->GetHeaderCount(); + for (i = 0; i < n; i++) { - // Insert formatted header into buffer. - n = pSourceMsg->GetHeaderCount(); - for (i = 0; i < n; i++) + INetMessageHeader aHeader (pSourceMsg->GetHeaderField(i)); + if (aHeader.GetValue().getLength()) { - INetMessageHeader aHeader (pSourceMsg->GetHeaderField(i)); - if (aHeader.GetValue().getLength()) - { - // NYI: Folding long lines. - pMsgBuffer->WriteCharPtr( aHeader.GetName().getStr() ); - pMsgBuffer->WriteCharPtr( ": " ); - pMsgBuffer->WriteCharPtr( aHeader.GetValue().getStr() ); - pMsgBuffer->WriteCharPtr( "\r\n" ); - } + // NYI: Folding long lines. + pMsgBuffer->WriteCharPtr( aHeader.GetName().getStr() ); + pMsgBuffer->WriteCharPtr( ": " ); + pMsgBuffer->WriteCharPtr( aHeader.GetValue().getStr() ); + pMsgBuffer->WriteCharPtr( "\r\n" ); } - - pMsgWrite = const_cast<char *>(static_cast<sal_Char const *>(pMsgBuffer->GetData())); - pMsgRead = pMsgWrite + pMsgBuffer->Tell(); } - n = pMsgRead - pMsgWrite; - if (n > 0) - { - // Move to caller. - if (nSize < n) n = nSize; - for (i = 0; i < n; i++) *pWBuf++ = *pMsgWrite++; - } - else - { - // Reset buffer. - pMsgBuffer->Seek(STREAM_SEEK_TO_BEGIN); - } + pMsgWrite = const_cast<char *>(static_cast<sal_Char const *>(pMsgBuffer->GetData())); + pMsgRead = pMsgWrite + pMsgBuffer->Tell(); + } + + n = pMsgRead - pMsgWrite; + if (n > 0) + { + // Move to caller. + if (nSize < n) n = nSize; + for (i = 0; i < n; i++) *pWBuf++ = *pMsgWrite++; } else { - if (pSourceMsg->GetDocumentLB()) - { - if (pMsgStrm == NULL) - pMsgStrm = new SvStream (pSourceMsg->GetDocumentLB()); - - sal_uIntPtr nRead = pMsgStrm->Read(pWBuf, (pWEnd - pWBuf)); - pWBuf += nRead; - } + // Reset buffer. + pMsgBuffer->Seek(STREAM_SEEK_TO_BEGIN); } + return (pWBuf - pData); } -int INetMIMEMessageStream::GetOuterMsgLine(sal_Char* pData, sal_uIntPtr nSize) +int INetMIMEMessageStream::GetBodyLine(sal_Char* pData, sal_uIntPtr nSize) { - // Check for message container. - INetMIMEMessage* pMsg = GetSourceMessage(); - if (pMsg == NULL) return INETSTREAM_STATUS_ERROR; + sal_Char* pWBuf = pData; + sal_Char* pWEnd = pData + nSize; + + if (pSourceMsg->GetDocumentLB()) + { + if (pMsgStrm == NULL) + pMsgStrm = new SvStream (pSourceMsg->GetDocumentLB()); + + sal_uIntPtr nRead = pMsgStrm->Read(pWBuf, (pWEnd - pWBuf)); + pWBuf += nRead; + } + return (pWBuf - pData); +} + +int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) +{ // Check for header or body. - if (!IsHeaderGenerated()) + if (!bHeaderGenerated) { - if (eState == INETMSG_EOL_BEGIN) + if (!done) { // Prepare special header fields. - if (pMsg->GetParent()) + if (pSourceMsg->GetParent()) { - OUString aPCT(pMsg->GetParent()->GetContentType()); + OUString aPCT(pSourceMsg->GetParent()->GetContentType()); if (aPCT.startsWithIgnoreAsciiCase("message/rfc822")) - pMsg->SetMIMEVersion("1.0"); + pSourceMsg->SetMIMEVersion("1.0"); else - pMsg->SetMIMEVersion(OUString()); + pSourceMsg->SetMIMEVersion(OUString()); } else { - pMsg->SetMIMEVersion("1.0"); + pSourceMsg->SetMIMEVersion("1.0"); } // Check ContentType. - OUString aContentType(pMsg->GetContentType()); + OUString aContentType(pSourceMsg->GetContentType()); if (!aContentType.isEmpty()) { // Determine default Content-Type. - OUString aDefaultType = pMsg->GetDefaultContentType(); + OUString aDefaultType = pSourceMsg->GetDefaultContentType(); if (aDefaultType.equalsIgnoreAsciiCase(aContentType)) { // No need to specify default. - pMsg->SetContentType(OUString()); + pSourceMsg->SetContentType(OUString()); } } // No need to specify default. - pMsg->SetContentTransferEncoding(OUString()); + pSourceMsg->SetContentTransferEncoding(OUString()); // Mark we're done. - eState = INETMSG_EOL_DONE; + done = true; } // Generate the message header. - int nRead = GetInnerMsgLine(pData, nSize); + int nRead = GetHeaderLine(pData, nSize); if (nRead <= 0) { // Reset state. - eState = INETMSG_EOL_BEGIN; + done = false; } return nRead; } else { // Generate the message body. - if (pMsg->IsContainer()) + if (pSourceMsg->IsContainer()) { // Encapsulated message body. - while (eState == INETMSG_EOL_BEGIN) + while (!done) { if (pChildStrm == NULL) { - INetMIMEMessage *pChild = pMsg->GetChild(nChildIndex); + INetMIMEMessage *pChild = pSourceMsg->GetChild(nChildIndex); if (pChild) { // Increment child index. nChildIndex++; // Create child stream. - pChildStrm = new INetMIMEMessageStream; - pChildStrm->SetSourceMessage(pChild); + pChildStrm = new INetMIMEMessageStream(pChild, false); - if (pMsg->IsMultipart()) + if (pSourceMsg->IsMultipart()) { // Insert multipart delimiter. OStringBuffer aDelim("--"); - aDelim.append(pMsg->GetMultipartBoundary()); + aDelim.append(pSourceMsg->GetMultipartBoundary()); aDelim.append("\r\n"); memcpy(pData, aDelim.getStr(), @@ -175,14 +173,14 @@ int INetMIMEMessageStream::GetOuterMsgLine(sal_Char* pData, sal_uIntPtr nSize) else { // No more parts. Mark we're done. - eState = INETMSG_EOL_DONE; + done = true; nChildIndex = 0; - if (pMsg->IsMultipart()) + if (pSourceMsg->IsMultipart()) { // Insert close delimiter. OStringBuffer aDelim("--"); - aDelim.append(pMsg->GetMultipartBoundary()); + aDelim.append(pSourceMsg->GetMultipartBoundary()); aDelim.append("--\r\n"); memcpy(pData, aDelim.getStr(), @@ -212,30 +210,32 @@ int INetMIMEMessageStream::GetOuterMsgLine(sal_Char* pData, sal_uIntPtr nSize) else { // Single part message body. - if (pMsg->GetDocumentLB() == NULL) + if (pSourceMsg->GetDocumentLB() == NULL) { // Empty message body. return 0; } // No Encoding. - return GetInnerMsgLine(pData, nSize); + return GetBodyLine(pData, nSize); } } } -INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize): - pSourceMsg(NULL), - bHeaderGenerated(false), - nBufSiz(nBufferSize), +INetMIMEMessageStream::INetMIMEMessageStream( + INetMIMEMessage *pMsg, bool headerGenerated): + pSourceMsg(pMsg), + bHeaderGenerated(headerGenerated), + nBufSiz(2048), pMsgStrm(NULL), pMsgBuffer(new SvMemoryStream), pMsgRead(NULL), pMsgWrite(NULL), - eState(INETMSG_EOL_BEGIN), + done(false), nChildIndex(0), pChildStrm(NULL) { + assert(pMsg != nullptr); pMsgBuffer->SetStreamCharSet(RTL_TEXTENCODING_ASCII_US); pBuffer = new sal_Char[nBufSiz]; pRead = pWrite = pBuffer; @@ -251,8 +251,6 @@ INetMIMEMessageStream::~INetMIMEMessageStream() int INetMIMEMessageStream::Read(sal_Char* pData, sal_uIntPtr nSize) { - if (pSourceMsg == NULL) return INETSTREAM_STATUS_ERROR; - sal_Char* pWBuf = pData; sal_Char* pWEnd = pData + nSize; @@ -273,7 +271,7 @@ int INetMIMEMessageStream::Read(sal_Char* pData, sal_uIntPtr nSize) pRead = pWrite = pBuffer; // Read next message line. - int nRead = GetOuterMsgLine(pBuffer, nBufSiz); + int nRead = GetMsgLine(pBuffer, nBufSiz); if (nRead > 0) { // Set read pointer. commit 82285ab5c9778cc16a6976f4036ec7188037c6b9 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 17:08:11 2015 +0200 Merge INetMessageIStream into INetMIMEMessageStream Change-Id: Ic3d9cd117b3f911a7cb1317fc9d1d2e9d8f1ff42 diff --git a/forms/source/component/DatabaseForm.cxx b/forms/source/component/DatabaseForm.cxx index 8f7d916..56dd4a9 100644 --- a/forms/source/component/DatabaseForm.cxx +++ b/forms/source/component/DatabaseForm.cxx @@ -545,9 +545,7 @@ Sequence<sal_Int8> ODatabaseForm::GetDataMultiPartEncoded(const Reference<XContr aSuccObjList.clear(); // Create MessageStream for parent - INetMIMEMessageStream aMessStream; - aMessStream.SetSourceMessage( &aParent ); - aMessStream.SetHeaderGenerated(); + INetMIMEMessageStream aMessStream(&aParent, true); // Copy MessageStream to SvStream SvMemoryStream aMemStream; diff --git a/include/tools/inetstrm.hxx b/include/tools/inetstrm.hxx index 83c5592..90d3760 100644 --- a/include/tools/inetstrm.hxx +++ b/include/tools/inetstrm.hxx @@ -38,8 +38,7 @@ enum INetMessageStreamState INETMSG_EOL_DONE }; -/// Message Generator Interface. -class INetMessageIStream +class TOOLS_DLLPUBLIC INetMIMEMessageStream { INetMIMEMessage *pSourceMsg; bool bHeaderGenerated; @@ -54,44 +53,28 @@ class INetMessageIStream sal_Char *pMsgRead; sal_Char *pMsgWrite; - INetMessageIStream (const INetMessageIStream& rStrm) SAL_DELETED_FUNCTION; - INetMessageIStream& operator= (const INetMessageIStream& rStrm) SAL_DELETED_FUNCTION; - -protected: - virtual int GetMsgLine (sal_Char *pData, sal_uIntPtr nSize); - -public: - INetMessageIStream (sal_uIntPtr nBufferSize = 2048); - virtual ~INetMessageIStream(); - - TOOLS_DLLPUBLIC int Read (sal_Char *pData, sal_uIntPtr nSize); - - INetMIMEMessage *GetSourceMessage() const { return pSourceMsg; } - void SetSourceMessage (INetMIMEMessage *pMsg) { pSourceMsg = pMsg; } - - void SetHeaderGenerated() { bHeaderGenerated = true; } - bool IsHeaderGenerated() const { return bHeaderGenerated; } -}; - -class TOOLS_DLLPUBLIC INetMIMEMessageStream - : public INetMessageIStream -{ int eState; sal_uIntPtr nChildIndex; INetMIMEMessageStream *pChildStrm; - SvMemoryStream *pMsgBuffer; - INetMIMEMessageStream (const INetMIMEMessageStream& rStrm) SAL_DELETED_FUNCTION; INetMIMEMessageStream& operator= (const INetMIMEMessageStream& rStrm) SAL_DELETED_FUNCTION; -protected: - virtual int GetMsgLine (sal_Char *pData, sal_uIntPtr nSize) SAL_OVERRIDE; + int GetInnerMsgLine(sal_Char *pData, sal_uIntPtr nSize); + int GetOuterMsgLine(sal_Char *pData, sal_uIntPtr nSize); public: INetMIMEMessageStream (sal_uIntPtr nBufferSize = 2048); - virtual ~INetMIMEMessageStream(); + ~INetMIMEMessageStream(); + + int Read (sal_Char *pData, sal_uIntPtr nSize); + + INetMIMEMessage *GetSourceMessage() const { return pSourceMsg; } + void SetSourceMessage (INetMIMEMessage *pMsg) { pSourceMsg = pMsg; } + + void SetHeaderGenerated() { bHeaderGenerated = true; } + bool IsHeaderGenerated() const { return bHeaderGenerated; } }; #endif diff --git a/tools/source/inet/inetstrm.cxx b/tools/source/inet/inetstrm.cxx index a3c76e7..b984b32 100644 --- a/tools/source/inet/inetstrm.cxx +++ b/tools/source/inet/inetstrm.cxx @@ -26,80 +26,7 @@ #include <ctype.h> -// INetMessageIStream - -INetMessageIStream::INetMessageIStream(sal_uIntPtr nBufferSize) - : pSourceMsg(NULL) - , bHeaderGenerated(false) - , nBufSiz(nBufferSize) - , pMsgStrm(NULL) - , pMsgBuffer(new SvMemoryStream) - , pMsgRead(NULL) - , pMsgWrite(NULL) -{ - pMsgBuffer->SetStreamCharSet(RTL_TEXTENCODING_ASCII_US); - pBuffer = new sal_Char[nBufSiz]; - pRead = pWrite = pBuffer; -} - -INetMessageIStream::~INetMessageIStream() -{ - delete [] pBuffer; - delete pMsgBuffer; - delete pMsgStrm; -} - -int INetMessageIStream::Read(sal_Char* pData, sal_uIntPtr nSize) -{ - if (pSourceMsg == NULL) return INETSTREAM_STATUS_ERROR; - - sal_Char* pWBuf = pData; - sal_Char* pWEnd = pData + nSize; - - while (pWBuf < pWEnd) - { - // Caller's buffer not yet filled. - sal_uIntPtr n = pRead - pWrite; - if (n > 0) - { - // Bytes still in buffer. - sal_uIntPtr m = pWEnd - pWBuf; - if (m < n) n = m; - for (sal_uIntPtr i = 0; i < n; i++) *pWBuf++ = *pWrite++; - } - else - { - // Buffer empty. Reset to <Begin-of-Buffer>. - pRead = pWrite = pBuffer; - - // Read next message line. - int nRead = GetMsgLine(pBuffer, nBufSiz); - if (nRead > 0) - { - // Set read pointer. - pRead = pBuffer + nRead; - } - else - { - if (!bHeaderGenerated) - { - // Header generated. Insert empty line. - bHeaderGenerated = true; - *pRead++ = '\r'; - *pRead++ = '\n'; - } - else - { - // Body generated. - return (pWBuf - pData); - } - } - } - } - return (pWBuf - pData); -} - -int INetMessageIStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) +int INetMIMEMessageStream::GetInnerMsgLine(sal_Char* pData, sal_uIntPtr nSize) { if (pSourceMsg == NULL) return INETSTREAM_STATUS_ERROR; @@ -158,25 +85,7 @@ int INetMessageIStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) return (pWBuf - pData); } -// INetMIMEMessageStream - -INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize) - : INetMessageIStream(nBufferSize), - eState (INETMSG_EOL_BEGIN), - nChildIndex (0), - pChildStrm (NULL), - pMsgBuffer (NULL) -{ -} - -INetMIMEMessageStream::~INetMIMEMessageStream() -{ - delete pChildStrm; - delete pMsgBuffer; -} - -/// Message Generator -int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) +int INetMIMEMessageStream::GetOuterMsgLine(sal_Char* pData, sal_uIntPtr nSize) { // Check for message container. INetMIMEMessage* pMsg = GetSourceMessage(); @@ -223,7 +132,7 @@ int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) } // Generate the message header. - int nRead = INetMessageIStream::GetMsgLine(pData, nSize); + int nRead = GetInnerMsgLine(pData, nSize); if (nRead <= 0) { // Reset state. @@ -310,9 +219,84 @@ int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) } // No Encoding. - return INetMessageIStream::GetMsgLine(pData, nSize); + return GetInnerMsgLine(pData, nSize); + } + } +} + +INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize): + pSourceMsg(NULL), + bHeaderGenerated(false), + nBufSiz(nBufferSize), + pMsgStrm(NULL), + pMsgBuffer(new SvMemoryStream), + pMsgRead(NULL), + pMsgWrite(NULL), + eState(INETMSG_EOL_BEGIN), + nChildIndex(0), + pChildStrm(NULL) +{ + pMsgBuffer->SetStreamCharSet(RTL_TEXTENCODING_ASCII_US); + pBuffer = new sal_Char[nBufSiz]; + pRead = pWrite = pBuffer; +} + +INetMIMEMessageStream::~INetMIMEMessageStream() +{ + delete pChildStrm; + delete [] pBuffer; + delete pMsgBuffer; + delete pMsgStrm; +} + +int INetMIMEMessageStream::Read(sal_Char* pData, sal_uIntPtr nSize) +{ + if (pSourceMsg == NULL) return INETSTREAM_STATUS_ERROR; + + sal_Char* pWBuf = pData; + sal_Char* pWEnd = pData + nSize; + + while (pWBuf < pWEnd) + { + // Caller's buffer not yet filled. + sal_uIntPtr n = pRead - pWrite; + if (n > 0) + { + // Bytes still in buffer. + sal_uIntPtr m = pWEnd - pWBuf; + if (m < n) n = m; + for (sal_uIntPtr i = 0; i < n; i++) *pWBuf++ = *pWrite++; + } + else + { + // Buffer empty. Reset to <Begin-of-Buffer>. + pRead = pWrite = pBuffer; + + // Read next message line. + int nRead = GetOuterMsgLine(pBuffer, nBufSiz); + if (nRead > 0) + { + // Set read pointer. + pRead = pBuffer + nRead; + } + else + { + if (!bHeaderGenerated) + { + // Header generated. Insert empty line. + bHeaderGenerated = true; + *pRead++ = '\r'; + *pRead++ = '\n'; + } + else + { + // Body generated. + return (pWBuf - pData); + } + } } } + return (pWBuf - pData); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 4464e5dbca7cab6ec91d19914eddd934cb354aa7 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 15:08:21 2015 +0200 No need for INetMIMEMessageStream encoding ...in the only use case in ODatabaseForm Change-Id: I0282a9f60b05f279a11dcf1990e68b7e017ea3aa diff --git a/include/tools/inetstrm.hxx b/include/tools/inetstrm.hxx index 9793732..83c5592 100644 --- a/include/tools/inetstrm.hxx +++ b/include/tools/inetstrm.hxx @@ -35,10 +35,7 @@ enum INetStreamStatus enum INetMessageStreamState { INETMSG_EOL_BEGIN, - INETMSG_EOL_DONE, - INETMSG_EOL_SCR, - INETMSG_EOL_FCR, - INETMSG_EOL_FSP + INETMSG_EOL_DONE }; /// Message Generator Interface. @@ -76,14 +73,6 @@ public: bool IsHeaderGenerated() const { return bHeaderGenerated; } }; -enum INetMessageEncoding -{ - INETMSG_ENCODING_7BIT, - INETMSG_ENCODING_BINARY, - INETMSG_ENCODING_QUOTED, - INETMSG_ENCODING_BASE64 -}; - class TOOLS_DLLPUBLIC INetMIMEMessageStream : public INetMessageIStream { @@ -92,14 +81,8 @@ class TOOLS_DLLPUBLIC INetMIMEMessageStream sal_uIntPtr nChildIndex; INetMIMEMessageStream *pChildStrm; - INetMessageEncoding eEncoding; - INetMessageIStream *pEncodeStrm; - SvMemoryStream *pMsgBuffer; - static INetMessageEncoding GetMsgEncoding ( - const OUString& rContentType); - INetMIMEMessageStream (const INetMIMEMessageStream& rStrm) SAL_DELETED_FUNCTION; INetMIMEMessageStream& operator= (const INetMIMEMessageStream& rStrm) SAL_DELETED_FUNCTION; diff --git a/tools/source/inet/inetstrm.cxx b/tools/source/inet/inetstrm.cxx index 053b649..a3c76e7 100644 --- a/tools/source/inet/inetstrm.cxx +++ b/tools/source/inet/inetstrm.cxx @@ -26,55 +26,6 @@ #include <ctype.h> -/** Quoted-Printable Encoding */ -class INetMessageEncodeQPStream_Impl : public INetMessageIStream -{ - SvStream* pMsgStrm; - - sal_uIntPtr nMsgBufSiz; - sal_Char* pMsgBuffer; - sal_Char* pMsgRead; - sal_Char* pMsgWrite; - - sal_uIntPtr nTokBufSiz; - sal_Char* pTokBuffer; - sal_Char* pTokRead; - sal_Char* pTokWrite; - - INetMessageStreamState eState; - bool bDone; - - virtual int GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) SAL_OVERRIDE; - -public: - explicit INetMessageEncodeQPStream_Impl(sal_uIntPtr nMsgBufferSize = 1024); - virtual ~INetMessageEncodeQPStream_Impl(); -}; - -/** Base64 Encoding */ -class INetMessageEncode64Stream_Impl : public INetMessageIStream -{ - SvStream* pMsgStrm; - - sal_uIntPtr nMsgBufSiz; - sal_uInt8* pMsgBuffer; - sal_uInt8* pMsgRead; - sal_uInt8* pMsgWrite; - - sal_uIntPtr nTokBufSiz; - sal_Char* pTokBuffer; - sal_Char* pTokRead; - sal_Char* pTokWrite; - - bool bDone; - - virtual int GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) SAL_OVERRIDE; - -public: - explicit INetMessageEncode64Stream_Impl(sal_uIntPtr nMsgBufferSize = 2048); - virtual ~INetMessageEncode64Stream_Impl(); -}; - // INetMessageIStream INetMessageIStream::INetMessageIStream(sal_uIntPtr nBufferSize) @@ -207,364 +158,6 @@ int INetMessageIStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) return (pWBuf - pData); } -// INetMessageEncodeQPStream_Impl - -static const sal_Char hex2pr[16] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F' -}; - -INetMessageEncodeQPStream_Impl::INetMessageEncodeQPStream_Impl( sal_uIntPtr nMsgBufferSize) - : INetMessageIStream (), - pMsgStrm (NULL), - nMsgBufSiz (nMsgBufferSize), - nTokBufSiz (80), - eState (INETMSG_EOL_SCR), - bDone (false) -{ - SetHeaderGenerated(); - - pMsgBuffer = new sal_Char[nMsgBufSiz]; - pMsgRead = pMsgWrite = pMsgBuffer; - - pTokBuffer = new sal_Char[nTokBufSiz]; - pTokRead = pTokWrite = pTokBuffer; -} - -INetMessageEncodeQPStream_Impl::~INetMessageEncodeQPStream_Impl() -{ - delete pMsgStrm; - delete [] pMsgBuffer; - delete [] pTokBuffer; -} - -int INetMessageEncodeQPStream_Impl::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) -{ - INetMIMEMessage* pMsg = GetSourceMessage(); - if (pMsg == NULL) return INETSTREAM_STATUS_ERROR; - - if (pMsg->GetDocumentLB() == NULL) return 0; - if (pMsgStrm == NULL) pMsgStrm = new SvStream(pMsg->GetDocumentLB()); - - sal_Char* pWBuf = pData; - while (pWBuf < (pData + nSize)) - { - // Caller's buffer not yet filled. - if ((pMsgRead - pMsgWrite) > 0) - { - // Bytes still in message buffer. - if ((eState != INETMSG_EOL_BEGIN) && - ((pTokRead - pTokBuffer) < 72)) - { - // Token buffer not yet filled. - if (eState == INETMSG_EOL_FCR) - { - eState = INETMSG_EOL_BEGIN; - if (*pMsgWrite != '\n') - { - // Convert orphant <CR> into <CR><LF> sequence. - *pTokRead++ = '\n'; - } - *pTokRead++ = *pMsgWrite++; - } - else if ((*pMsgWrite == ' ') || (*pMsgWrite == '\t')) - { - eState = INETMSG_EOL_FSP; - *pTokRead++ = *pMsgWrite++; - } - else if (*pMsgWrite == '\r') - { - // Found <CR>. - if (eState == INETMSG_EOL_FSP) - { - // Encode last (trailing space) character. - sal_uInt8 c = (sal_uInt8)(*(--pTokRead)); - *pTokRead++ = '='; - *pTokRead++ = hex2pr[((c & 0xf0) >> 4)]; - *pTokRead++ = hex2pr[((c & 0x0f) )]; - } - eState = INETMSG_EOL_FCR; - *pTokRead++ = *pMsgWrite++; - } - else if (*pMsgWrite == '\n') - { - // Found <LF> only. - if (eState == INETMSG_EOL_FSP) - { - // Encode last (trailing space) character. - sal_uInt8 c = (sal_uInt8)(*(--pTokRead)); - *pTokRead++ = '='; - *pTokRead++ = hex2pr[((c & 0xf0) >> 4)]; - *pTokRead++ = hex2pr[((c & 0x0f) )]; - } - eState = INETMSG_EOL_BEGIN; - - // Convert orphant <LF> into <CR><LF> sequence. - *pTokRead++ = '\r'; - *pTokRead++ = *pMsgWrite++; - } - else if (*pMsgWrite == '=') - { - // Escape character itself MUST be encoded, of course. - sal_uInt8 c = (sal_uInt8)(*pMsgWrite++); - *pTokRead++ = '='; - *pTokRead++ = hex2pr[((c & 0xf0) >> 4)]; - *pTokRead++ = hex2pr[((c & 0x0f) )]; - - eState = INETMSG_EOL_SCR; - } - else if (((sal_uInt8)(*pMsgWrite) > 0x20) && - ((sal_uInt8)(*pMsgWrite) < 0x7f) ) - { - /* - * Some printable ASCII character. - * (Encode EBCDIC special characters (NYI)). - */ - *pTokRead++ = *pMsgWrite++; - eState = INETMSG_EOL_SCR; - } - else - { - // Encode any other character. - sal_uInt8 c = (sal_uInt8)(*pMsgWrite++); - *pTokRead++ = '='; - *pTokRead++ = hex2pr[((c & 0xf0) >> 4)]; - *pTokRead++ = hex2pr[((c & 0x0f) )]; - - eState = INETMSG_EOL_SCR; - } - } - else - { - // Check for maximum line length. - if (eState != INETMSG_EOL_BEGIN) - { - // Insert soft line break. - *pTokRead++ = '='; - *pTokRead++ = '\r'; - *pTokRead++ = '\n'; - - eState = INETMSG_EOL_BEGIN; - } - - // Copy to caller's buffer. - if ((pTokRead - pTokWrite) > 0) - { - // Bytes still in token buffer. - *pWBuf++ = *pTokWrite++; - } - else - { - // Token buffer empty. Reset to <Begin-of-Buffer>. - pTokRead = pTokWrite = pTokBuffer; - eState = INETMSG_EOL_SCR; - } - } - } - else - { - // Message buffer empty. Reset to <Begin-of-Buffer>. - pMsgRead = pMsgWrite = pMsgBuffer; - - // Read next message block. - sal_uIntPtr nRead = pMsgStrm->Read(pMsgBuffer, nMsgBufSiz); - if (nRead > 0) - { - // Set read pointer. - pMsgRead = (pMsgBuffer + nRead); - } - else - { - // Nothing more ro read. - if (!bDone) - { - // Append final <CR><LF> and mark we're done. - *pTokRead++ = '\r'; - *pTokRead++ = '\n'; - - bDone = true; - } - else - { - // Already done all encoding. - if ((pTokRead - pTokWrite) > 0) - { - // Bytes still in token buffer. - *pWBuf++ = *pTokWrite++; - } - else - { - // Token buffer empty. Reset to <Begin-of-Buffer>. - pTokRead = pTokWrite = pTokBuffer; - - // Return. - return (pWBuf - pData); - } - } - } - } - } - return (pWBuf - pData); -} - -// INetMessageEncode64Stream_Impl - -static const sal_Char six2pr[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' -}; - -INetMessageEncode64Stream_Impl::INetMessageEncode64Stream_Impl( - sal_uIntPtr nMsgBufferSize) - : INetMessageIStream(), - pMsgStrm (NULL), - nMsgBufSiz (nMsgBufferSize), - nTokBufSiz (80), - bDone (false) -{ - SetHeaderGenerated(); - - pMsgBuffer = new sal_uInt8[nMsgBufSiz]; - pMsgRead = pMsgWrite = pMsgBuffer; - - pTokBuffer = new sal_Char[nTokBufSiz]; - pTokRead = pTokWrite = pTokBuffer; -} - -INetMessageEncode64Stream_Impl::~INetMessageEncode64Stream_Impl() -{ - delete pMsgStrm; - delete [] pMsgBuffer; - delete [] pTokBuffer; -} - -int INetMessageEncode64Stream_Impl::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) -{ - INetMIMEMessage* pMsg = GetSourceMessage(); - if (pMsg == NULL) return INETSTREAM_STATUS_ERROR; - - if (pMsg->GetDocumentLB() == NULL) return 0; - if (pMsgStrm == NULL) pMsgStrm = new SvStream(pMsg->GetDocumentLB()); - - sal_Char* pWBuf = pData; - while (pWBuf < (pData + nSize)) - { - // Caller's buffer not yet filled. - if ((pMsgRead - pMsgWrite) > 0) - { - // Bytes still in message buffer. - if ((pTokRead - pTokBuffer) < 72) - { - // Token buffer not yet filled. - switch ((pTokRead - pTokBuffer) % 4) - { - case 0: - *pTokRead++ = six2pr[(int)(*pMsgWrite >> 2)]; - break; - - case 1: - *pTokRead++ = six2pr[ (int)(((*pMsgWrite << 4) & 060) | - (((*(pMsgWrite + 1)) >> 4) & 017))]; - pMsgWrite++; - break; - - case 2: - *pTokRead++ = six2pr[ (int)(((*pMsgWrite << 2) & 074) | - (((*(pMsgWrite + 1)) >> 6) & 003))]; - pMsgWrite++; - break; - - default: // == case 3 - *pTokRead++ = six2pr[(int)(*pMsgWrite & 077)]; - pMsgWrite++; - break; - } - } - else if ((pTokRead - pTokBuffer) == 72) - { - // Maximum line length. Append <CR><LF>. - *pTokRead++ = '\r'; - *pTokRead++ = '\n'; - } - else - { - if ((pTokRead - pTokWrite) > 0) - { - // Bytes still in token buffer. - *pWBuf++ = *pTokWrite++; - } - else - { - // Token buffer empty. Reset to <Begin-of-Buffer>. - pTokRead = pTokWrite = pTokBuffer; - } - } - } - else - { - // Message buffer empty. Reset to <Begin-of-Buffer>. - pMsgRead = pMsgWrite = pMsgBuffer; - - // Read next message block. - sal_uIntPtr nRead = pMsgStrm->Read(pMsgBuffer, nMsgBufSiz); - if (nRead > 0) - { - // Set read pointer. - pMsgRead = (pMsgBuffer + nRead); - } - else - { - // Nothing more to read. - if (!bDone) - { - // Append pad character(s) and final <CR><LF>. - switch ((pTokRead - pTokBuffer) % 4) - { - case 2: - *pTokRead++ = '='; - // Fall through for 2nd pad character. - case 3: - *pTokRead++ = '='; - break; - - default: - break; - } - *pTokRead++ = '\r'; - *pTokRead++ = '\n'; - - // Mark we're done. - bDone = true; - } - else - { - // Already done all encoding. - if ((pTokRead - pTokWrite) > 0) - { - // Bytes still in token buffer. - *pWBuf++ = *pTokWrite++; - } - else - { - // Token buffer empty. Reset to <Begin-of-Buffer>. - pTokRead = pTokWrite = pTokBuffer; - - // Reset done flag, if everything has been done. - // if (pWBuf == pData) bDone = false; - - // Return. - return (pWBuf - pData); - } - } - } - } - } // while (pWBuf < (pData + nSize)) - return (pWBuf - pData); -} - // INetMIMEMessageStream INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize) @@ -572,8 +165,6 @@ INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize) eState (INETMSG_EOL_BEGIN), nChildIndex (0), pChildStrm (NULL), - eEncoding (INETMSG_ENCODING_BINARY), - pEncodeStrm (NULL), pMsgBuffer (NULL) { } @@ -581,43 +172,9 @@ INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize) INetMIMEMessageStream::~INetMIMEMessageStream() { delete pChildStrm; - delete pEncodeStrm; delete pMsgBuffer; } -INetMessageEncoding -INetMIMEMessageStream::GetMsgEncoding(const OUString& rContentType) -{ - if (rContentType.startsWithIgnoreAsciiCase("message") || - rContentType.startsWithIgnoreAsciiCase("multipart")) - { - return INETMSG_ENCODING_7BIT; - } - if (rContentType.startsWithIgnoreAsciiCase("text")) - { - if (rContentType.startsWithIgnoreAsciiCase("text/plain")) - { - if (comphelper::string::getTokenCount(rContentType, '=') > 1) - { - OUString aCharset(rContentType.getToken(1, '=')); - aCharset = comphelper::string::stripStart(aCharset, ' '); - aCharset = comphelper::string::stripStart(aCharset, '"'); - - if (aCharset.startsWithIgnoreAsciiCase("us-ascii")) - return INETMSG_ENCODING_7BIT; - else - return INETMSG_ENCODING_QUOTED; - } - else - return INETMSG_ENCODING_7BIT; - } - else - return INETMSG_ENCODING_QUOTED; - } - - return INETMSG_ENCODING_BASE64; -} - /// Message Generator int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) { @@ -658,51 +215,8 @@ int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) } } - // Check Encoding. - OUString aEncoding(pMsg->GetContentTransferEncoding()); - if (!aEncoding.isEmpty()) - { - // Use given Encoding. - if (aEncoding.startsWithIgnoreAsciiCase("base64")) - { - eEncoding = INETMSG_ENCODING_BASE64; - } - else if (aEncoding.startsWithIgnoreAsciiCase("quoted-printable")) - { - eEncoding = INETMSG_ENCODING_QUOTED; - } - else - { - eEncoding = INETMSG_ENCODING_7BIT; - } - } - else - { - // Use default Encoding for (given|default) Content-Type. - if (aContentType.isEmpty()) - { - // Determine default Content-Type. - aContentType = pMsg->GetDefaultContentType(); - } - eEncoding = GetMsgEncoding(aContentType); - } - - // Set Content-Transfer-Encoding header. - if (eEncoding == INETMSG_ENCODING_BASE64) - { - // Base64. - pMsg->SetContentTransferEncoding("base64"); - } - else if (eEncoding == INETMSG_ENCODING_QUOTED) - { - // Quoted-Printable. - pMsg->SetContentTransferEncoding("quoted-printable"); - } - else - { - // No need to specify default. - pMsg->SetContentTransferEncoding(OUString()); - } + // No need to specify default. + pMsg->SetContentTransferEncoding(OUString()); // Mark we're done. eState = INETMSG_EOL_DONE; @@ -795,49 +309,8 @@ int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) return 0; } - // Check whether message body needs to be encoded. - if (eEncoding == INETMSG_ENCODING_7BIT) - { - // No Encoding. - return INetMessageIStream::GetMsgLine(pData, nSize); - } - - // Apply appropriate Encoding. - while (eState == INETMSG_EOL_BEGIN) - { - if (pEncodeStrm == NULL) - { - // Create encoder stream. - if (eEncoding == INETMSG_ENCODING_QUOTED) - { - // Quoted-Printable Encoding. - pEncodeStrm = new INetMessageEncodeQPStream_Impl; - } - else - { - // Base64 Encoding. - pEncodeStrm = new INetMessageEncode64Stream_Impl; - } - pEncodeStrm->SetSourceMessage(pMsg); - } - - // Read encoded message. - int nRead = pEncodeStrm->Read(pData, nSize); - if (nRead > 0) - { - return nRead; - } - else - { - // Cleanup exhausted encoder stream. - delete pEncodeStrm; - pEncodeStrm = NULL; - - // Mark we're done. - eState = INETMSG_EOL_DONE; - } - } - return 0; + // No Encoding. + return INetMessageIStream::GetMsgLine(pData, nSize); } } } commit 8cb1f9ac1ce90b324307711f752591a1acc9a6df Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 14:58:26 2015 +0200 A charset is not a content transfer encoding ...the code was in this odd shape ever since bf4154eb5307ec8c35f000fd1df39ef3abb2eb6d "initial import" Change-Id: Ic931b99267bb6501f15119636f13391f1d065ed4 diff --git a/forms/source/component/DatabaseForm.cxx b/forms/source/component/DatabaseForm.cxx index 2c0e67c..8f7d916 100644 --- a/forms/source/component/DatabaseForm.cxx +++ b/forms/source/component/DatabaseForm.cxx @@ -997,12 +997,13 @@ void ODatabaseForm::InsertTextPart( INetMIMEMessage& rParent, const OUString& rN aContentDisp.append(rName); aContentDisp.append('\"'); pChild->SetContentDisposition(aContentDisp.makeStringAndClear()); - pChild->SetContentType(OUString("text/plain")); rtl_TextEncoding eSystemEncoding = osl_getThreadTextEncoding(); const sal_Char* pBestMatchingEncoding = rtl_getBestMimeCharsetFromTextEncoding( eSystemEncoding ); OUString aBestMatchingEncoding = OUString::createFromAscii(pBestMatchingEncoding); - pChild->SetContentTransferEncoding(aBestMatchingEncoding); + pChild->SetContentType( + "text/plain; charset=\"" + aBestMatchingEncoding + "\""); + pChild->SetContentTransferEncoding("8bit"); // Body SvMemoryStream* pStream = new SvMemoryStream; commit 40bcf53b5d663010efa8360c0d7dd0fe222bacfb Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Sep 10 13:49:11 2015 +0200 Remove unused INetMessageOStream functionality Change-Id: I34ee4750f30635809b8e23cbf1bd0e16f269f549 diff --git a/include/tools/inetstrm.hxx b/include/tools/inetstrm.hxx index ea6be1f..9793732 100644 --- a/include/tools/inetstrm.hxx +++ b/include/tools/inetstrm.hxx @@ -29,9 +29,6 @@ class SvStream; enum INetStreamStatus { - INETSTREAM_STATUS_LOADED = -4, - INETSTREAM_STATUS_WOULDBLOCK = -3, - INETSTREAM_STATUS_OK = -2, INETSTREAM_STATUS_ERROR = -1 }; @@ -41,9 +38,7 @@ enum INetMessageStreamState INETMSG_EOL_DONE, INETMSG_EOL_SCR, INETMSG_EOL_FCR, - INETMSG_EOL_FLF, - INETMSG_EOL_FSP, - INETMSG_EOL_FESC + INETMSG_EOL_FSP }; /// Message Generator Interface. @@ -81,35 +76,6 @@ public: bool IsHeaderGenerated() const { return bHeaderGenerated; } }; -/// Message Parser Interface. -class INetMessageOStream -{ - INetMIMEMessage *pTargetMsg; - bool bHeaderParsed; - - INetMessageStreamState eOState; - - SvMemoryStream *pMsgBuffer; - - INetMessageOStream (const INetMessageOStream& rStrm) SAL_DELETED_FUNCTION; - INetMessageOStream& operator= (const INetMessageOStream& rStrm) SAL_DELETED_FUNCTION; - -protected: - virtual int PutMsgLine (const sal_Char *pData, sal_uIntPtr nSize); - -public: - INetMessageOStream(); - virtual ~INetMessageOStream(); - - int Write (const sal_Char *pData, sal_uIntPtr nSize); - - INetMIMEMessage *GetTargetMessage() const { return pTargetMsg; } - void SetTargetMessage (INetMIMEMessage *pMsg) { pTargetMsg = pMsg; } - - void ParseHeader (bool bParse = true) { bHeaderParsed = !bParse; } - bool IsHeaderParsed() const { return bHeaderParsed; } -}; - enum INetMessageEncoding { INETMSG_ENCODING_7BIT, @@ -119,8 +85,7 @@ enum INetMessageEncoding }; class TOOLS_DLLPUBLIC INetMIMEMessageStream - : public INetMessageIStream, - public INetMessageOStream + : public INetMessageIStream { int eState; @@ -129,7 +94,6 @@ class TOOLS_DLLPUBLIC INetMIMEMessageStream INetMessageEncoding eEncoding; INetMessageIStream *pEncodeStrm; - INetMessageOStream *pDecodeStrm; SvMemoryStream *pMsgBuffer; @@ -141,7 +105,6 @@ class TOOLS_DLLPUBLIC INetMIMEMessageStream protected: virtual int GetMsgLine (sal_Char *pData, sal_uIntPtr nSize) SAL_OVERRIDE; - virtual int PutMsgLine (const sal_Char *pData, sal_uIntPtr nSize) SAL_OVERRIDE; public: INetMIMEMessageStream (sal_uIntPtr nBufferSize = 2048); diff --git a/tools/source/inet/inetstrm.cxx b/tools/source/inet/inetstrm.cxx index 9836f39..053b649 100644 --- a/tools/source/inet/inetstrm.cxx +++ b/tools/source/inet/inetstrm.cxx @@ -26,11 +26,6 @@ #include <ctype.h> -inline bool SAL_CALL ascii_isWhitespace( sal_Unicode ch ) -{ - return ((ch <= 0x20) && ch); -} - /** Quoted-Printable Encoding */ class INetMessageEncodeQPStream_Impl : public INetMessageIStream { @@ -56,22 +51,6 @@ public: virtual ~INetMessageEncodeQPStream_Impl(); }; -/** Quoted-Printable Decoding */ -class INetMessageDecodeQPStream_Impl : public INetMessageOStream -{ - INetMessageStreamState eState; - SvMemoryStream *pMsgBuffer; - - sal_uIntPtr nTokBufLen; - sal_Char pTokBuffer[4]; - - virtual int PutMsgLine(const sal_Char* pData, sal_uIntPtr nSize) SAL_OVERRIDE; - -public: - INetMessageDecodeQPStream_Impl(); - virtual ~INetMessageDecodeQPStream_Impl(); -}; - /** Base64 Encoding */ class INetMessageEncode64Stream_Impl : public INetMessageIStream { @@ -96,23 +75,6 @@ public: virtual ~INetMessageEncode64Stream_Impl(); }; -/** Base64 Decoding */ -class INetMessageDecode64Stream_Impl : public INetMessageOStream -{ - INetMessageStreamState eState; - - sal_uIntPtr nMsgBufSiz; - sal_Char* pMsgBuffer; - sal_Char* pMsgRead; - sal_Char* pMsgWrite; - - virtual int PutMsgLine(const sal_Char* pData, sal_uIntPtr nSize) SAL_OVERRIDE; - -public: - explicit INetMessageDecode64Stream_Impl(sal_uIntPtr nMsgBufferSize = 128); - virtual ~INetMessageDecode64Stream_Impl(); -}; - // INetMessageIStream INetMessageIStream::INetMessageIStream(sal_uIntPtr nBufferSize) @@ -245,172 +207,6 @@ int INetMessageIStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) return (pWBuf - pData); } -// INetMessageOStream - -INetMessageOStream::INetMessageOStream() - : pTargetMsg (NULL), - bHeaderParsed (false), - eOState (INETMSG_EOL_BEGIN), - pMsgBuffer (new SvMemoryStream) -{ -} - -INetMessageOStream::~INetMessageOStream() -{ - if (pMsgBuffer->Tell() > 0) - PutMsgLine(static_cast<const sal_Char*>(pMsgBuffer->GetData()), pMsgBuffer->Tell()); - delete pMsgBuffer; - - if (pTargetMsg) - { - SvOpenLockBytes* pLB = PTR_CAST(SvOpenLockBytes, pTargetMsg->GetDocumentLB()); - if (pLB) - { - pLB->Flush(); - pLB->Terminate(); - } - } -} - -/// Simple Field Parsing (RFC822, Appendix B) -int INetMessageOStream::Write(const sal_Char* pData, sal_uIntPtr nSize) -{ - if (pTargetMsg == NULL) return INETSTREAM_STATUS_ERROR; - - const sal_Char* pStop = (pData + nSize); - - while (!bHeaderParsed && (pData < pStop)) - { - if (eOState == INETMSG_EOL_BEGIN) - { - if ((*pData == '\r') || (*pData == '\n')) - { - /* - * Empty Line. Separates header fields from message body. - * Skip this and any 2nd line break character (if any). - */ - pData++; - if ((pData < pStop) && ((*pData == '\r') || (*pData == '\n'))) - pData++; - - // Emit any buffered last header field. - if (pMsgBuffer->Tell() > 0) - { - pMsgBuffer->WriteChar( '\0' ); - int status = PutMsgLine( static_cast<const sal_Char*>(pMsgBuffer->GetData()), - pMsgBuffer->Tell()); - if (status != INETSTREAM_STATUS_OK) return status; - } - - // Reset to begin. - eOState = INETMSG_EOL_BEGIN; - pMsgBuffer->Seek(STREAM_SEEK_TO_BEGIN); - - // Mark header parsed. - bHeaderParsed = true; - } - else if ((*pData == ' ') || (*pData == '\t')) - { - // Continuation line. Unfold multi-line field-body. - pMsgBuffer->WriteChar( ' ' ); - pData++; - } - else - { - // Begin of new header field. - if (pMsgBuffer->Tell() > 0) - { - // Emit buffered header field now. - pMsgBuffer->WriteChar( '\0' ); - int status = PutMsgLine(static_cast<const sal_Char*>(pMsgBuffer->GetData()), - pMsgBuffer->Tell()); - if (status != INETSTREAM_STATUS_OK) return status; - } - - // Reset to begin of buffer. - pMsgBuffer->Seek(STREAM_SEEK_TO_BEGIN); - - // Insert current character into buffer. - pMsgBuffer->WriteChar( *pData++ ); - } - - // Search for next line break character. - if (!bHeaderParsed) eOState = INETMSG_EOL_SCR; - } - else if (eOState == INETMSG_EOL_FCR) - { - // Skip line break character. - pData++; - - // Mark begin of line. - eOState = INETMSG_EOL_BEGIN; - } - else if ((*pData == '\r') || (*pData == '\n')) - { - if (*pData == '\r') pData++; - eOState = INETMSG_EOL_FCR; - } - else if (ascii_isWhitespace(*pData & 0x7f)) - { - // Any <LWS> is folded into a single <SP> character. - sal_Char c = *(static_cast<const sal_Char*>(pMsgBuffer->GetData()) + pMsgBuffer->Tell() - 1); - if (!ascii_isWhitespace(c & 0x7f)) pMsgBuffer->WriteChar( ' ' ); - - // Skip over this <LWS> character. - pData++; - } - else - { - // Any other character is inserted into line buffer. - pMsgBuffer->WriteChar( *pData++ ); - } - } - - if (bHeaderParsed && (pData < pStop)) - { - // Put message body down-stream. - return PutMsgLine(pData, (pStop - pData)); - } - - return INETSTREAM_STATUS_OK; -} - -int INetMessageOStream::PutMsgLine(const sal_Char* pData, sal_uIntPtr nSize) -{ - // Check for message container. - if (pTargetMsg == NULL) return INETSTREAM_STATUS_ERROR; - - // Check for header or body. - if (!IsHeaderParsed()) - { - OString aField(pData); - sal_Int32 nPos = aField.indexOf(':'); - if (nPos != -1) - { - OString aName( aField.copy(0, nPos)); - OString aValue( aField.copy(nPos + 1, aField.getLength() - nPos + 1)); - aValue = comphelper::string::stripStart(aValue, ' '); - - pTargetMsg->SetHeaderField( INetMessageHeader (aName, aValue)); - } - } - else - { - SvOpenLockBytes *pLB = PTR_CAST(SvOpenLockBytes, pTargetMsg->GetDocumentLB()); - if (pLB == NULL) - return INETSTREAM_STATUS_WOULDBLOCK; - - sal_Size nDocSiz = pTargetMsg->GetDocumentSize(); - sal_Size nWrite = 0; - - pLB->FillAppend(pData, nSize, &nWrite); - pTargetMsg->SetDocumentSize(nDocSiz + nWrite); - - if (nWrite < nSize) return INETSTREAM_STATUS_ERROR; - } - return INETSTREAM_STATUS_OK; -} - // INetMessageEncodeQPStream_Impl static const sal_Char hex2pr[16] = { @@ -611,125 +407,6 @@ int INetMessageEncodeQPStream_Impl::GetMsgLine(sal_Char* pData, sal_uIntPtr nSiz return (pWBuf - pData); } -// INetMessageDecodeQPStream_Impl - -static const sal_uInt8 pr2hex[128] = { - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - - 0x10, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 -}; - -INetMessageDecodeQPStream_Impl::INetMessageDecodeQPStream_Impl() - : INetMessageOStream(), - eState (INETMSG_EOL_BEGIN), - pMsgBuffer (new SvMemoryStream), - nTokBufLen (0) -{ - ParseHeader(false); -} - -INetMessageDecodeQPStream_Impl::~INetMessageDecodeQPStream_Impl() -{ - delete pMsgBuffer; -} - -int INetMessageDecodeQPStream_Impl::PutMsgLine( const sal_Char* pData, - sal_uIntPtr nSize) -{ - INetMIMEMessage* pMsg = GetTargetMessage(); - if (pMsg == NULL) return INETSTREAM_STATUS_ERROR; - - SvOpenLockBytes* pLB = PTR_CAST(SvOpenLockBytes, pMsg->GetDocumentLB()); - if (pLB == NULL) return INETSTREAM_STATUS_WOULDBLOCK; - - const sal_Char* pStop = pData + nSize; - while (pData < pStop) - { - if (eState == INETMSG_EOL_FESC) - { - *(pTokBuffer + nTokBufLen++) = static_cast< char >(toupper(*pData)); - pData++; - if (nTokBufLen == 2) - { - if ((*pTokBuffer == '\r') || (*pTokBuffer == '\n')) - { - // Soft line break (=<CR><LF>). Emit buffer now. - eState = INETMSG_EOL_BEGIN; - } - else - { - // Decode token. - pMsgBuffer->WriteUChar( sal_uInt8 ( - (pr2hex[(int)(pTokBuffer[0] & 0x7f)] << 4) | - (pr2hex[(int)(pTokBuffer[1] & 0x7f)] & 15) ) ); - - // Search for next <CR>. - eState = INETMSG_EOL_SCR; - } - - // Reset token buffer. - nTokBufLen = 0; - } - } - else if (*pData == '=') - { - // Found escape character. - pData++; - eState = INETMSG_EOL_FESC; - } - else if (eState == INETMSG_EOL_FCR) - { - pMsgBuffer->WriteChar( *pData++ ); - eState = INETMSG_EOL_BEGIN; - } - else if (*pData == '\r') - { - pMsgBuffer->WriteChar( *pData++ ); - eState = INETMSG_EOL_FCR; - } - else - { - pMsgBuffer->WriteChar( *pData++ ); - } - - if (eState == INETMSG_EOL_BEGIN) - { - sal_Size nRead = pMsgBuffer->Tell(); - if (nRead > 0) - { - // Emit buffer. - sal_Size nDocSiz = pMsg->GetDocumentSize(); - sal_Size nWrite = 0; - - pLB->FillAppend(pMsgBuffer->GetData(), nRead, &nWrite); - pMsg->SetDocumentSize(nDocSiz + nWrite); - - if (nWrite < nRead) return INETSTREAM_STATUS_ERROR; - - pMsgBuffer->Seek(STREAM_SEEK_TO_BEGIN); - } - eState = INETMSG_EOL_SCR; - } - } - return INETSTREAM_STATUS_OK; -} - // INetMessageEncode64Stream_Impl static const sal_Char six2pr[64] = { @@ -888,163 +565,6 @@ int INetMessageEncode64Stream_Impl::GetMsgLine(sal_Char* pData, sal_uIntPtr nSiz return (pWBuf - pData); } -// INetMessageDecode64Stream_Impl - -static const sal_uInt8 pr2six[256] = { - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x3E, 0x40, 0x40, 0x40, 0x3F, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, - 0x3C, 0x3D, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, - 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x18, 0x19, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, - 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, - 0x31, 0x32, 0x33, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 -}; - -INetMessageDecode64Stream_Impl::INetMessageDecode64Stream_Impl( - sal_uIntPtr nMsgBufferSize) - : INetMessageOStream(), - eState (INETMSG_EOL_SCR), - nMsgBufSiz (nMsgBufferSize) -{ - ParseHeader(false); - - pMsgBuffer = new sal_Char[nMsgBufSiz]; - pMsgRead = pMsgWrite = pMsgBuffer; -} - -INetMessageDecode64Stream_Impl::~INetMessageDecode64Stream_Impl() -{ - delete [] pMsgBuffer; -} - -int INetMessageDecode64Stream_Impl::PutMsgLine(const sal_Char* pData, - sal_uIntPtr nSize) -{ - INetMIMEMessage* pMsg = GetTargetMessage(); - if (pMsg == NULL) return INETSTREAM_STATUS_ERROR; - - SvOpenLockBytes* pLB = PTR_CAST(SvOpenLockBytes, pMsg->GetDocumentLB()); - if (pLB == NULL) return INETSTREAM_STATUS_WOULDBLOCK; - - const sal_Char* pStop = (pData + nSize); - while (pData < pStop) - { - if (pr2six[(int)(*pData)] > 63) - { - /* - * Character not in base64 alphabet. - * Check for <End-of-Stream> or Junk. - */ - if (*pData == '=') - { - // Final pad character -> Done. - sal_Size nDocSiz = pMsg->GetDocumentSize(); - sal_Size nRead = pMsgWrite - pMsgBuffer; - sal_Size nWrite = 0; - - pLB->FillAppend(pMsgBuffer, nRead, &nWrite); - pMsg->SetDocumentSize(nDocSiz + nWrite); - - if (nWrite < nRead) - return INETSTREAM_STATUS_ERROR; - else - return INETSTREAM_STATUS_LOADED; - } - else if (eState == INETMSG_EOL_FCR) - { - // Skip any line break character. - if ((*pData == '\r') || (*pData == '\n')) pData++; - - // Store decoded message buffer contents. - sal_Size nDocSiz = pMsg->GetDocumentSize(); - sal_Size nRead = pMsgWrite - pMsgBuffer; - sal_Size nWrite = 0; - - pLB->FillAppend(pMsgBuffer, nRead, &nWrite); - pMsg->SetDocumentSize(nDocSiz + nWrite); - - if (nWrite < nRead) return INETSTREAM_STATUS_ERROR; - - // Reset to <Begin-of-Buffer>. - pMsgWrite = pMsgBuffer; - eState = INETMSG_EOL_SCR; - } - else if ((*pData == '\r') || (*pData == '\n')) - { - // Skip any line break character. - pData++; - eState = INETMSG_EOL_FCR; - } - else - { - // Skip any junk character (may be transmission error). - pData++; - } - } - else - { - // Decode any other character into message buffer. - switch ((pMsgRead - pMsgBuffer) % 4) - { - case 0: - *pMsgWrite = (pr2six[(int)(*pData++)] << 2); - pMsgRead++; - break; - - case 1: - *pMsgWrite++ |= (pr2six[(int)(*pData )] >> 4); - *pMsgWrite = (pr2six[(int)(*pData++)] << 4); - pMsgRead++; - break; - - case 2: - *pMsgWrite++ |= (pr2six[(int)(*pData )] >> 2); - *pMsgWrite = (pr2six[(int)(*pData++)] << 6); - pMsgRead++; - break; - - default: // == case 3 - *pMsgWrite++ |= (pr2six[(int)(*pData++)]); - pMsgRead = pMsgBuffer; - break; - } // switch ((pMsgRead - pMsgBuffer) % 4) - } - } // while (pData < pStop) - return INETSTREAM_STATUS_OK; -} - // INetMIMEMessageStream INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize) @@ -1054,7 +574,6 @@ INetMIMEMessageStream::INetMIMEMessageStream(sal_uIntPtr nBufferSize) pChildStrm (NULL), eEncoding (INETMSG_ENCODING_BINARY), pEncodeStrm (NULL), - pDecodeStrm (NULL), pMsgBuffer (NULL) { } @@ -1063,7 +582,6 @@ INetMIMEMessageStream::~INetMIMEMessageStream() { delete pChildStrm; delete pEncodeStrm; - delete pDecodeStrm; delete pMsgBuffer; } @@ -1324,232 +842,4 @@ int INetMIMEMessageStream::GetMsgLine(sal_Char* pData, sal_uIntPtr nSize) } } -/// Message Parser -int INetMIMEMessageStream::PutMsgLine(const sal_Char* pData, sal_uIntPtr nSize) -{ - // Check for message container. - INetMIMEMessage* pMsg = GetTargetMessage(); - if (pMsg == NULL) return INETSTREAM_STATUS_ERROR; - - // Check for header or body. - if (!IsHeaderParsed()) - { - // Parse the message header. - int nRet = INetMessageOStream::PutMsgLine(pData, nSize); - return nRet; - } - else - { - pMsg->SetHeaderParsed(); - // Parse the message body. - if (pMsg->IsContainer()) - { - - // Content-Transfer-Encoding MUST be "7bit" (RFC1521). - if (pMsg->IsMessage()) - { - if( !pChildStrm ) - { - // Encapsulated message. - INetMIMEMessage* pNewMessage = new INetMIMEMessage; - pNewMessage->SetDocumentLB( new SvAsyncLockBytes(new SvMemoryStream(), false)); - pMsg->AttachChild( *pNewMessage ); - - // Encapsulated message body. Create message parser stream. - pChildStrm = new INetMIMEMessageStream; - pChildStrm->SetTargetMessage( pNewMessage ); - - // Initialize control variables. - eState = INETMSG_EOL_BEGIN; - } - if ( nSize > 0) - { - // Bytes still in buffer. Put message down-stream. - int status = pChildStrm->Write( pData, nSize ); - if (status != INETSTREAM_STATUS_OK) - return status; - } - - return INetMessageOStream::PutMsgLine(pData, nSize); - } - else - { - - // Multipart message body. Initialize multipart delimiters. - // Multipart message. - if (pMsg->GetMultipartBoundary().getLength() == 0) - { - // Determine boundary. - OString aType(OUStringToOString( - pMsg->GetContentType(), RTL_TEXTENCODING_ASCII_US)); - OString aLowerType(aType.toAsciiLowerCase()); - - sal_Int32 nPos = aLowerType.indexOf("boundary="); - OString aBoundary(aType.copy(nPos + 9)); - - aBoundary = comphelper::string::strip(aBoundary, ' '); - aBoundary = comphelper::string::strip(aBoundary, '"'); - - // Save boundary. - pMsg->SetMultipartBoundary(aBoundary); - } - - OString aPlainDelim(pMsg->GetMultipartBoundary()); - OString aDelim = OStringBuffer("--"). - append(aPlainDelim). - makeStringAndClear(); - OString aPlainClose = OStringBuffer( - aPlainDelim). - append("--"). - makeStringAndClear(); - OString aClose = OStringBuffer( - aDelim). - append("--"). - makeStringAndClear(); - - if (pMsgBuffer == NULL) pMsgBuffer = new SvMemoryStream; - pMsgBuffer->Write(pData, nSize); - sal_uIntPtr nBufSize = pMsgBuffer->Tell(); - - const sal_Char* pChar; - const sal_Char* pOldPos; - int status; - for( pOldPos = pChar = static_cast<const sal_Char*>(pMsgBuffer->GetData()); nBufSize--; - pChar++ ) - { - if( *pChar == '\r' || *pChar == '\n' ) - { - if( aDelim.compareTo(pOldPos, aDelim.getLength()) - != -1 && - aClose.compareTo(pOldPos, aClose.getLength()) - != -1 && - aPlainDelim.compareTo(pOldPos, aPlainDelim.getLength()) - != -1 && - aPlainClose.compareTo(pOldPos, aPlainClose.getLength()) - != -1 ) - { - if( nBufSize && - ( pChar[1] == '\r' || pChar[1] == '\n' ) ) - nBufSize--, pChar++; - if( pChildStrm ) - { - status = pChildStrm->Write( - pOldPos, pChar - pOldPos + 1 ); - if( status != INETSTREAM_STATUS_OK ) - return status; - } - else { - SAL_WARN( "tools.stream", "Boundary not found." ); - } - status = INetMessageOStream::PutMsgLine( - pOldPos, pChar - pOldPos + 1 ); - if( status != INETSTREAM_STATUS_OK ) - return status; - pOldPos = pChar + 1; - } - else - { - if( nBufSize && - ( pChar[1] == '\r' || pChar[1] == '\n' ) ) - nBufSize--, pChar++; - pOldPos = pChar + 1; - DELETEZ( pChildStrm ); - - if (aClose.compareTo(pOldPos, aClose.getLength()) - != -1 && - aPlainClose.compareTo(pOldPos, aClose.getLength()) - != -1 ) - { - // Encapsulated message. - INetMIMEMessage* pNewMessage = - new INetMIMEMessage; - pNewMessage->SetDocumentLB( - new SvAsyncLockBytes( - new SvMemoryStream(), false)); - - pMsg->AttachChild( *pNewMessage ); - - // Encapsulated message body. Create message parser stream. - pChildStrm = new INetMIMEMessageStream; - pChildStrm->SetTargetMessage( pNewMessage ); - - // Initialize control variables. - } - eState = INETMSG_EOL_BEGIN; - status = INetMessageOStream::PutMsgLine( - pOldPos, pChar - pOldPos + 1 ); - if( status != INETSTREAM_STATUS_OK ) - return status; - } - } - } - if( pOldPos < pChar ) - { - SvMemoryStream* pNewStream = new SvMemoryStream; - pNewStream->Write( pOldPos, pChar - pOldPos ); - SvMemoryStream* pTmp = pMsgBuffer; - pMsgBuffer = pNewStream; - delete pTmp; - } - else - { - pMsgBuffer->Seek( 0L ); - pMsgBuffer->SetStreamSize( 0 ); - } - return INETSTREAM_STATUS_OK; - } - } - else - { - /* - * Single part message. - * Remove any ContentTransferEncoding. - */ - if (pMsg->GetContentType().isEmpty()) - { - pMsg->SetContentType(pMsg->GetDefaultContentType()); - } - - if (eEncoding == INETMSG_ENCODING_BINARY) - { - OUString aEncoding(pMsg->GetContentTransferEncoding()); - if (aEncoding.startsWithIgnoreAsciiCase("base64")) - { - eEncoding = INETMSG_ENCODING_BASE64; - } - else if (aEncoding.startsWithIgnoreAsciiCase("quoted-printable")) - { - eEncoding = INETMSG_ENCODING_QUOTED; - } - else - { - eEncoding = INETMSG_ENCODING_7BIT; - } - } - - if (eEncoding == INETMSG_ENCODING_7BIT) - { - // No decoding necessary. ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits