diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-09-10 17:08:11 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-09-10 23:04:35 +0200 |
commit | 82285ab5c9778cc16a6976f4036ec7188037c6b9 (patch) | |
tree | fcd25e7e97588e2c8075e38d0ce3357de64ffd58 /tools | |
parent | 4464e5dbca7cab6ec91d19914eddd934cb354aa7 (diff) |
Merge INetMessageIStream into INetMIMEMessageStream
Change-Id: Ic3d9cd117b3f911a7cb1317fc9d1d2e9d8f1ff42
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/inet/inetstrm.cxx | 174 |
1 files changed, 79 insertions, 95 deletions
diff --git a/tools/source/inet/inetstrm.cxx b/tools/source/inet/inetstrm.cxx index a3c76e754559..b984b3222b76 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: */ |