aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2013-12-29 10:02:12 +0100
committerVincent Richard <[email protected]>2013-12-29 10:02:12 +0100
commit152c6bed75598a6ca5efb7914701157270155833 (patch)
tree8faced1d75a45c819630323da256248415992ed0 /src/utility
parentMerge branch 'master' of https://github.com/kisli/vmime (diff)
downloadvmime-152c6bed75598a6ca5efb7914701157270155833.tar.gz
vmime-152c6bed75598a6ca5efb7914701157270155833.zip
Merged source and header files in directory structure. Got rid of SConstruct build.
Diffstat (limited to 'src/utility')
-rw-r--r--src/utility/datetimeUtils.cpp333
-rw-r--r--src/utility/encoder/b64Encoder.cpp330
-rw-r--r--src/utility/encoder/binaryEncoder.cpp39
-rw-r--r--src/utility/encoder/eightBitEncoder.cpp39
-rw-r--r--src/utility/encoder/encoder.cpp76
-rw-r--r--src/utility/encoder/encoderFactory.cpp120
-rw-r--r--src/utility/encoder/noopEncoder.cpp87
-rw-r--r--src/utility/encoder/qpEncoder.cpp558
-rw-r--r--src/utility/encoder/sevenBitEncoder.cpp39
-rw-r--r--src/utility/encoder/uuEncoder.cpp344
-rw-r--r--src/utility/filteredStream.cpp391
-rw-r--r--src/utility/inputStream.cpp33
-rw-r--r--src/utility/inputStreamAdapter.cpp83
-rw-r--r--src/utility/inputStreamByteBufferAdapter.cpp103
-rw-r--r--src/utility/inputStreamPointerAdapter.cpp46
-rw-r--r--src/utility/inputStreamSocketAdapter.cpp82
-rw-r--r--src/utility/inputStreamStringAdapter.cpp107
-rw-r--r--src/utility/inputStreamStringProxyAdapter.cpp102
-rw-r--r--src/utility/outputStream.cpp45
-rw-r--r--src/utility/outputStreamAdapter.cpp54
-rw-r--r--src/utility/outputStreamByteArrayAdapter.cpp52
-rw-r--r--src/utility/outputStreamSocketAdapter.cpp68
-rw-r--r--src/utility/outputStreamStringAdapter.cpp54
-rw-r--r--src/utility/parserInputStreamAdapter.cpp176
-rw-r--r--src/utility/path.cpp266
-rw-r--r--src/utility/progressListener.cpp79
-rw-r--r--src/utility/random.cpp90
-rw-r--r--src/utility/seekableInputStreamRegionAdapter.cpp106
-rw-r--r--src/utility/stream.cpp40
-rw-r--r--src/utility/streamUtils.cpp121
-rw-r--r--src/utility/stringProxy.cpp151
-rw-r--r--src/utility/stringUtils.cpp242
-rw-r--r--src/utility/sync/criticalSection.cpp44
-rw-r--r--src/utility/url.cpp406
-rw-r--r--src/utility/urlUtils.cpp133
35 files changed, 0 insertions, 5039 deletions
diff --git a/src/utility/datetimeUtils.cpp b/src/utility/datetimeUtils.cpp
deleted file mode 100644
index 2b55177e..00000000
--- a/src/utility/datetimeUtils.cpp
+++ /dev/null
@@ -1,333 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/datetimeUtils.hpp"
-
-#include <stdexcept>
-
-
-namespace vmime {
-namespace utility {
-
-
-#ifndef VMIME_BUILDING_DOC
-
-static inline void nextMonth(datetime& d)
-{
- if (d.getMonth() >= 12)
- {
- d.setMonth(1);
- d.setYear(d.getYear() + 1);
- }
- else
- {
- d.setMonth(d.getMonth() + 1);
- }
-}
-
-
-static inline void prevMonth(datetime& d)
-{
- if (d.getMonth() <= 1)
- {
- d.setYear(d.getYear() - 1);
- d.setMonth(12);
- }
- else
- {
- d.setMonth(d.getMonth() - 1);
- }
-}
-
-
-static inline void nextDay(datetime& d)
-{
-
- if (d.getDay() >= datetimeUtils::getDaysInMonth(d.getYear(), d.getMonth()))
- {
- d.setDay(1);
- nextMonth(d);
- }
- else
- {
- d.setDay(d.getDay() + 1);
- }
-}
-
-
-static inline void prevDay(datetime& d)
-{
- if (d.getDay() <= 1)
- {
- prevMonth(d);
- d.setDay(datetimeUtils::getDaysInMonth(d.getYear(), d.getMonth()));
- }
- else
- {
- d.setDay(d.getDay() - 1);
- }
-}
-
-
-static inline void nextHour(datetime& d)
-{
- if (d.getHour() >= 23)
- {
- d.setHour(0);
- nextDay(d);
- }
- else
- {
- d.setHour(d.getHour() + 1);
- }
-}
-
-
-static inline void prevHour(datetime& d)
-{
- if (d.getHour() <= 0)
- {
- d.setHour(23);
- prevDay(d);
- }
- else
- {
- d.setHour(d.getHour() - 1);
- }
-}
-
-
-static inline void addHoursAndMinutes(datetime& d, const int h, const int m)
-{
- d.setMinute(d.getMinute() + m);
-
- if (d.getMinute() >= 60)
- {
- d.setMinute(d.getMinute() - 60);
- nextHour(d);
- }
-
- d.setHour(d.getHour() + h);
-
- if (d.getHour() >= 24)
- {
- d.setHour(d.getHour() - 24);
- nextDay(d);
- }
-}
-
-
-static inline void substractHoursAndMinutes(datetime& d, const int h, const int m)
-{
- if (m > d.getMinute())
- {
- d.setMinute(60 - (m - d.getMinute()));
- prevHour(d);
- }
- else
- {
- d.setMinute(d.getMinute() - m);
- }
-
- if (h > d.getHour())
- {
- d.setHour(24 - (h - d.getHour()));
- prevDay(d);
- }
- else
- {
- d.setHour(d.getHour() - h);
- }
-}
-
-#endif // VMIME_BUILDING_DOC
-
-
-const datetime datetimeUtils::toUniversalTime(const datetime& date)
-{
- if (date.getZone() == datetime::GMT)
- return date; // no conversion needed
-
- datetime nd(date);
- nd.setZone(datetime::GMT);
-
- const int z = date.getZone();
- const int h = (z < 0) ? (-z / 60) : (z / 60);
- const int m = (z < 0) ? (-z - h * 60) : (z - h * 60);
-
- if (z < 0) // GMT-hhmm: add hours and minutes to date
- addHoursAndMinutes(nd, h, m);
- else // GMT+hhmm: substract hours and minutes from date
- substractHoursAndMinutes(nd, h, m);
-
- return (nd);
-}
-
-
-const datetime datetimeUtils::toLocalTime(const datetime& date, const int zone)
-{
- datetime utcDate(date);
-
- if (utcDate.getZone() != datetime::GMT)
- utcDate = toUniversalTime(date); // convert to UT before
-
- datetime nd(utcDate);
- nd.setZone(zone);
-
- const int h = (zone < 0) ? (-zone / 60) : (zone / 60);
- const int m = (zone < 0) ? (-zone - h * 60) : (zone - h * 60);
-
- if (zone < 0) // GMT+hhmm: substract hours and minutes from date
- substractHoursAndMinutes(nd, h, m);
- else // GMT-hhmm: add hours and minutes to date
- addHoursAndMinutes(nd, h, m);
-
- return (nd);
-}
-
-
-bool datetimeUtils::isLeapYear(const int year)
-{
- // From RFC 3339 - Appendix C. Leap Years:
- return ((year % 4) == 0 && (year % 100 != 0 || year % 400 == 0));
-}
-
-
-int datetimeUtils::getDaysInMonth(const int year, const int month)
-{
- static const int daysInMonth[12] =
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- static const int daysInMonthLeapYear[12] =
- { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
- if (month < 1 || month > 12)
- throw std::out_of_range("Invalid month number");
-
- return (isLeapYear(year) ? daysInMonthLeapYear[month - 1] : daysInMonth[month - 1]);
-}
-
-
-int datetimeUtils::getDayOfWeek(const int year, const int month, const int day)
-{
- int y = year;
- int m = month;
-
- if (month < 1 || month > 12)
- throw std::out_of_range("Invalid month number");
- else if (day < 1 || day > getDaysInMonth(year, month))
- throw std::out_of_range("Invalid day number");
-
- // From RFC-3339 - Appendix B. Day of the Week
-
- // Adjust months so February is the last one
- m -= 2;
-
- if (m < 1)
- {
- m += 12;
- --y;
- }
-
- // Split by century
- const int cent = y / 100;
- y %= 100;
-
- return (((26 * m - 2) / 10 + day + y + (y >> 2) + (cent >> 2) + 5 * cent) % 7);
-}
-
-
-int datetimeUtils::getWeekOfYear(const int year, const int month, const int day, const bool iso)
-{
- // Algorithm from http://personal.ecu.edu/mccartyr/ISOwdALG.txt
-
- const bool leapYear = ((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0;
- const bool leapYear_1 = (((year - 1) % 4) == 0 && ((year - 1) % 100) != 0) || ((year - 1) % 400) == 0;
-
- // 4. Find the DayOfYearNumber for Y M D
- static const int DAY_OF_YEAR_NUMBER_MAP[12] =
- { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
-
- int DayOfYearNumber = day + DAY_OF_YEAR_NUMBER_MAP[month - 1];
-
- if (leapYear && month > 2)
- DayOfYearNumber += 1;
-
- // 5. Find the Jan1Weekday for Y (Monday=1, Sunday=7)
- const int YY = (year - 1) % 100;
- const int C = (year - 1) - YY;
- const int G = YY + YY / 4;
- const int Jan1Weekday = 1 + (((((C / 100) % 4) * 5) + G) % 7);
-
- // 6. Find the Weekday for Y M D
- const int H = DayOfYearNumber + (Jan1Weekday - 1);
- const int Weekday = 1 + ((H - 1) % 7);
-
- // 7. Find if Y M D falls in YearNumber Y-1, WeekNumber 52 or 53
- int YearNumber = 0, WeekNumber = 0;
-
- if (DayOfYearNumber <= (8 - Jan1Weekday) && Jan1Weekday > 4)
- {
- YearNumber = year - 1;
-
- if (Jan1Weekday == 5 || (Jan1Weekday == 6 && leapYear_1))
- WeekNumber = 53;
- else
- WeekNumber = 52;
- }
- else
- {
- YearNumber = year;
- }
-
- // 8. Find if Y M D falls in YearNumber Y+1, WeekNumber 1
- if (YearNumber == year)
- {
- const int I = (leapYear ? 366 : 365);
-
- if ((I - DayOfYearNumber) < (4 - Weekday))
- {
- YearNumber = year + 1;
- WeekNumber = 1;
- }
- }
-
- // 9. Find if Y M D falls in YearNumber Y, WeekNumber 1 through 53
- if (YearNumber == year)
- {
- const int J = DayOfYearNumber + (7 - Weekday) + (Jan1Weekday - 1);
-
- WeekNumber = J / 7;
-
- if (Jan1Weekday > 4)
- WeekNumber -= 1;
- }
-
- if (!iso && (WeekNumber == 1 && month == 12))
- WeekNumber = 53;
-
- return WeekNumber;
-}
-
-
-} // utility
-} // vmime
diff --git a/src/utility/encoder/b64Encoder.cpp b/src/utility/encoder/b64Encoder.cpp
deleted file mode 100644
index 274c23c0..00000000
--- a/src/utility/encoder/b64Encoder.cpp
+++ /dev/null
@@ -1,330 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/b64Encoder.hpp"
-#include "vmime/parserHelpers.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-b64Encoder::b64Encoder()
-{
-}
-
-
-const std::vector <string> b64Encoder::getAvailableProperties() const
-{
- std::vector <string> list(encoder::getAvailableProperties());
-
- list.push_back("maxlinelength");
-
- return (list);
-}
-
-
-// 7-bits alphabet used to encode binary data
-const unsigned char b64Encoder::sm_alphabet[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
-const unsigned char b64Encoder::sm_decodeMap[256] =
-{
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0x00 - 0x0f
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0x10 - 0x1f
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3e,0xff,0xff,0xff,0x3f, // 0x20 - 0x2f
- 0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0xff,0xff,0xff,0x3d,0xff,0xff, // 0x30 - 0x3f
- 0xff,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e, // 0x40 - 0x4f
- 0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0xff,0xff,0xff,0xff,0xff, // 0x50 - 0x5f
- 0xff,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28, // 0x60 - 0x6f
- 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0xff,0xff,0xff,0xff,0xff, // 0x70 - 0x7f
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0x80 - 0x8f
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0x90 - 0x9f
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xa0 - 0xaf
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xb0 - 0xbf
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xc0 - 0xcf
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xd0 - 0xdf
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xe0 - 0xef
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xf0 - 0xff
-};
-
-#ifndef VMIME_BUILDING_DOC
- #define B64_WRITE(s, x, l) s.write(reinterpret_cast <byte_t*>(x), l)
-#endif // VMIME_BUILDING_DOC
-
-
-
-size_t b64Encoder::encode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- const size_t propMaxLineLength =
- getProperties().getProperty <size_t>("maxlinelength", static_cast <size_t>(-1));
-
- const bool cutLines = (propMaxLineLength != static_cast <size_t>(-1));
- const size_t maxLineLength = std::min(propMaxLineLength, static_cast <size_t>(76));
-
- // Process data
- byte_t buffer[65536];
- size_t bufferLength = 0;
- size_t bufferPos = 0;
-
- byte_t bytes[3];
- byte_t output[4];
-
- size_t total = 0;
- size_t inTotal = 0;
-
- size_t curCol = 0;
-
- if (progress)
- progress->start(0);
-
- while (bufferPos < bufferLength || !in.eof())
- {
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
-
- if (bufferLength == 0)
- break;
- }
-
- // Get 3 bytes of data
- int count = 0;
-
- while (count < 3 && bufferPos < bufferLength)
- bytes[count++] = buffer[bufferPos++];
-
- while (count < 3)
- {
- // There may be more data in the next chunk...
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
-
- if (bufferLength == 0)
- break;
- }
-
- while (count < 3 && bufferPos < bufferLength)
- bytes[count++] = buffer[bufferPos++];
- }
-
- // Encode data
- switch (count)
- {
- case 1:
-
- output[0] = sm_alphabet[(bytes[0] & 0xFC) >> 2];
- output[1] = sm_alphabet[(bytes[0] & 0x03) << 4];
- output[2] = sm_alphabet[64]; // padding
- output[3] = sm_alphabet[64]; // padding
-
- break;
-
- case 2:
-
- output[0] = sm_alphabet[(bytes[0] & 0xFC) >> 2];
- output[1] = sm_alphabet[((bytes[0] & 0x03) << 4) | ((bytes[1] & 0xF0) >> 4)];
- output[2] = sm_alphabet[(bytes[1] & 0x0F) << 2];
- output[3] = sm_alphabet[64]; // padding
-
- break;
-
- default:
- case 3:
-
- output[0] = sm_alphabet[(bytes[0] & 0xFC) >> 2];
- output[1] = sm_alphabet[((bytes[0] & 0x03) << 4) | ((bytes[1] & 0xF0) >> 4)];
- output[2] = sm_alphabet[((bytes[1] & 0x0F) << 2) | ((bytes[2] & 0xC0) >> 6)];
- output[3] = sm_alphabet[(bytes[2] & 0x3F)];
-
- break;
- }
-
- // Write encoded data to output stream
- B64_WRITE(out, output, 4);
-
- inTotal += count;
- total += 4;
- curCol += 4;
-
- if (cutLines && curCol + 2 /* \r\n */ + 4 /* next bytes */ >= maxLineLength)
- {
- out.write("\r\n", 2);
- curCol = 0;
- }
-
- if (progress)
- progress->progress(inTotal, inTotal);
- }
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
-}
-
-
-size_t b64Encoder::decode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- // Process the data
- byte_t buffer[16384];
- size_t bufferLength = 0;
- size_t bufferPos = 0;
-
- size_t total = 0;
- size_t inTotal = 0;
-
- byte_t bytes[4];
- byte_t output[3];
-
- if (progress)
- progress->start(0);
-
- while (bufferPos < bufferLength || !in.eof())
- {
- bytes[0] = '=';
- bytes[1] = '=';
- bytes[2] = '=';
- bytes[3] = '=';
-
- // Need to get more data?
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
-
- // No more data
- if (bufferLength == 0)
- break;
- }
-
- // 4 bytes of input provide 3 bytes of output, so
- // get the next 4 bytes from the input stream.
- int count = 0;
-
- while (count < 4 && bufferPos < bufferLength)
- {
- const byte_t c = buffer[bufferPos++];
-
- if (!parserHelpers::isSpace(c))
- bytes[count++] = c;
- }
-
- if (count != 4)
- {
- while (count < 4 && !in.eof())
- {
- // Data continues on the next chunk
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
-
- while (count < 4 && bufferPos < bufferLength)
- {
- const byte_t c = buffer[bufferPos++];
-
- if (!parserHelpers::isSpace(c))
- bytes[count++] = c;
- }
- }
- }
-
- // Decode the bytes
- byte_t c1 = bytes[0];
- byte_t c2 = bytes[1];
-
- if (c1 == '=' || c2 == '=') // end
- break;
-
- output[0] = static_cast <byte_t>((sm_decodeMap[c1] << 2) | ((sm_decodeMap[c2] & 0x30) >> 4));
-
- c1 = bytes[2];
-
- if (c1 == '=') // end
- {
- B64_WRITE(out, output, 1);
- total += 1;
- break;
- }
-
- output[1] = static_cast <byte_t>(((sm_decodeMap[c2] & 0xf) << 4) | ((sm_decodeMap[c1] & 0x3c) >> 2));
-
- c2 = bytes[3];
-
- if (c2 == '=') // end
- {
- B64_WRITE(out, output, 2);
- total += 2;
- break;
- }
-
- output[2] = static_cast <byte_t>(((sm_decodeMap[c1] & 0x03) << 6) | sm_decodeMap[c2]);
-
- B64_WRITE(out, output, 3);
- total += 3;
- inTotal += count;
-
- if (progress)
- progress->progress(inTotal, inTotal);
- }
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
-}
-
-
-size_t b64Encoder::getEncodedSize(const size_t n) const
-{
- const size_t propMaxLineLength =
- getProperties().getProperty <size_t>("maxlinelength", static_cast <size_t>(-1));
-
- const bool cutLines = (propMaxLineLength != static_cast <size_t>(-1));
- const size_t maxLineLength = std::min(propMaxLineLength, static_cast <size_t>(76));
-
- return (n * 4) / 3 // 3 bytes of input provide 4 bytes of output
- + (cutLines ? (n / maxLineLength) * 2 : 0) // CRLF (2 bytes) for each line.
- + 4; // padding
-}
-
-
-size_t b64Encoder::getDecodedSize(const size_t n) const
-{
- // 4 bytes of input provide 3 bytes of output
- return (n * 3) / 4;
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/binaryEncoder.cpp b/src/utility/encoder/binaryEncoder.cpp
deleted file mode 100644
index 7d7c40d1..00000000
--- a/src/utility/encoder/binaryEncoder.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/binaryEncoder.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-binaryEncoder::binaryEncoder()
-{
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/eightBitEncoder.cpp b/src/utility/encoder/eightBitEncoder.cpp
deleted file mode 100644
index 4ab07f06..00000000
--- a/src/utility/encoder/eightBitEncoder.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/eightBitEncoder.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-eightBitEncoder::eightBitEncoder()
-{
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/encoder.cpp b/src/utility/encoder/encoder.cpp
deleted file mode 100644
index b4b13249..00000000
--- a/src/utility/encoder/encoder.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/encoder.hpp"
-#include "vmime/exception.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-encoder::encoder()
-{
-}
-
-
-encoder::~encoder()
-{
-}
-
-
-const propertySet& encoder::getProperties() const
-{
- return (m_props);
-}
-
-
-propertySet& encoder::getProperties()
-{
- return (m_props);
-}
-
-
-const propertySet& encoder::getResults() const
-{
- return (m_results);
-}
-
-
-propertySet& encoder::getResults()
-{
- return (m_results);
-}
-
-
-const std::vector <string> encoder::getAvailableProperties() const
-{
- std::vector <string> list;
- return (list);
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/encoderFactory.cpp b/src/utility/encoder/encoderFactory.cpp
deleted file mode 100644
index 098a810a..00000000
--- a/src/utility/encoder/encoderFactory.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/encoderFactory.hpp"
-#include "vmime/exception.hpp"
-
-#include "vmime/utility/encoder/b64Encoder.hpp"
-#include "vmime/utility/encoder/qpEncoder.hpp"
-#include "vmime/utility/encoder/uuEncoder.hpp"
-#include "vmime/utility/encoder/binaryEncoder.hpp"
-#include "vmime/utility/encoder/sevenBitEncoder.hpp"
-#include "vmime/utility/encoder/eightBitEncoder.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-encoderFactory::encoderFactory()
-{
- // Register some default encoders
- registerName <b64Encoder>("base64");
- registerName <qpEncoder>("quoted-printable");
- registerName <uuEncoder>("uuencode");
- registerName <sevenBitEncoder>("7bit");
- registerName <eightBitEncoder>("8bit");
- registerName <binaryEncoder>("binary");
-
- // Also register some non-standard encoding names
- registerName <sevenBitEncoder>("7-bit");
- registerName <eightBitEncoder>("8-bit");
-
- // Finally, register some bogus encoding names, for compatibility
- registerName <qpEncoder>("bmoted-printable");
-}
-
-
-encoderFactory::~encoderFactory()
-{
-}
-
-
-shared_ptr <encoderFactory> encoderFactory::getInstance()
-{
- static encoderFactory instance;
- return shared_ptr <encoderFactory>(&instance, noop_shared_ptr_deleter <encoderFactory>());
-}
-
-
-shared_ptr <encoder> encoderFactory::create(const string& name)
-{
- return (getEncoderByName(name)->create());
-}
-
-
-const shared_ptr <const encoderFactory::registeredEncoder> encoderFactory::getEncoderByName(const string& name) const
-{
- const string lcName(utility::stringUtils::toLower(name));
-
- for (std::vector <shared_ptr <registeredEncoder> >::const_iterator it = m_encoders.begin() ;
- it != m_encoders.end() ; ++it)
- {
- if ((*it)->getName() == lcName)
- return (*it);
- }
-
- throw exceptions::no_encoder_available(name);
-}
-
-
-size_t encoderFactory::getEncoderCount() const
-{
- return (m_encoders.size());
-}
-
-
-const shared_ptr <const encoderFactory::registeredEncoder> encoderFactory::getEncoderAt(const size_t pos) const
-{
- return (m_encoders[pos]);
-}
-
-
-const std::vector <shared_ptr <const encoderFactory::registeredEncoder> > encoderFactory::getEncoderList() const
-{
- std::vector <shared_ptr <const registeredEncoder> > res;
-
- for (std::vector <shared_ptr <registeredEncoder> >::const_iterator it = m_encoders.begin() ;
- it != m_encoders.end() ; ++it)
- {
- res.push_back(*it);
- }
-
- return (res);
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/noopEncoder.cpp b/src/utility/encoder/noopEncoder.cpp
deleted file mode 100644
index 3d991b5d..00000000
--- a/src/utility/encoder/noopEncoder.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/noopEncoder.hpp"
-
-#include "vmime/utility/streamUtils.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-noopEncoder::noopEncoder()
-{
-}
-
-
-size_t noopEncoder::encode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- // No encoding performed
- size_t res = 0;
-
- if (progress)
- res = utility::bufferedStreamCopy(in, out, 0, progress);
- else
- res = utility::bufferedStreamCopy(in, out);
-
- return res;
-}
-
-
-size_t noopEncoder::decode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- // No decoding performed
- size_t res = 0;
-
- if (progress)
- res = utility::bufferedStreamCopy(in, out, 0, progress);
- else
- res = utility::bufferedStreamCopy(in, out);
-
- return res;
-}
-
-
-size_t noopEncoder::getEncodedSize(const size_t n) const
-{
- return n;
-}
-
-
-size_t noopEncoder::getDecodedSize(const size_t n) const
-{
- return n;
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/qpEncoder.cpp b/src/utility/encoder/qpEncoder.cpp
deleted file mode 100644
index c77b5163..00000000
--- a/src/utility/encoder/qpEncoder.cpp
+++ /dev/null
@@ -1,558 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/qpEncoder.hpp"
-#include "vmime/parserHelpers.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-qpEncoder::qpEncoder()
-{
-}
-
-
-const std::vector <string> qpEncoder::getAvailableProperties() const
-{
- std::vector <string> list(encoder::getAvailableProperties());
-
- list.push_back("maxlinelength");
-
- list.push_back("text"); // if set, '\r' and '\n' are not hex-encoded.
- // WARNING! You should not use this for binary data!
-
- list.push_back("rfc2047"); // for header fields encoding (RFC #2047)
-
- return (list);
-}
-
-
-
-// Hex-encoding table
-const unsigned char qpEncoder::sm_hexDigits[] = "0123456789ABCDEF";
-
-
-// RFC-2047 encoding table: we always encode RFC-2047 using the restricted
-// charset, that is the one used for 'phrase' in From/To/Cc/... headers.
-//
-// " The set of characters that may be used in a "Q"-encoded 'encoded-word'
-// is restricted to: <upper and lower case ASCII letters, decimal digits,
-// "!", "*", "+", "-", "/", "=", and "_" (underscore, ASCII 95.)>. "
-//
-// Two special cases:
-// - encode space (32) as underscore (95)
-// - encode underscore as hex (=5F)
-//
-// This is a quick lookup table:
-// '1' means "encode", '0' means "no encoding"
-//
-const vmime_uint8 qpEncoder::sm_RFC2047EncodeTable[] =
-{
- /* 0 NUL */ 1, /* 1 SOH */ 1, /* 2 STX */ 1, /* 3 ETX */ 1, /* 4 EOT */ 1, /* 5 ENQ */ 1,
- /* 6 ACK */ 1, /* 7 BEL */ 1, /* 8 BS */ 1, /* 9 TAB */ 1, /* 10 LF */ 1, /* 11 VT */ 1,
- /* 12 FF */ 1, /* 13 CR */ 1, /* 14 SO */ 1, /* 15 SI */ 1, /* 16 DLE */ 1, /* 17 DC1 */ 1,
- /* 18 DC2 */ 1, /* 19 DC3 */ 1, /* 20 DC4 */ 1, /* 21 NAK */ 1, /* 22 SYN */ 1, /* 23 ETB */ 1,
- /* 24 CAN */ 1, /* 25 EM */ 1, /* 26 SUB */ 1, /* 27 ESC */ 1, /* 28 FS */ 1, /* 29 GS */ 1,
- /* 30 RS */ 1, /* 31 US */ 1, /* 32 SPACE*/ 1, /* 33 ! */ 0, /* 34 " */ 1, /* 35 # */ 1,
- /* 36 $ */ 1, /* 37 % */ 1, /* 38 & */ 1, /* 39 ' */ 1, /* 40 ( */ 1, /* 41 ) */ 1,
- /* 42 * */ 0, /* 43 + */ 0, /* 44 , */ 1, /* 45 - */ 0, /* 46 . */ 1, /* 47 / */ 0,
- /* 48 0 */ 0, /* 49 1 */ 0, /* 50 2 */ 0, /* 51 3 */ 0, /* 52 4 */ 0, /* 53 5 */ 0,
- /* 54 6 */ 0, /* 55 7 */ 0, /* 56 8 */ 0, /* 57 9 */ 0, /* 58 : */ 1, /* 59 ; */ 1,
- /* 60 < */ 1, /* 61 = */ 1, /* 62 > */ 1, /* 63 ? */ 1, /* 64 @ */ 1, /* 65 A */ 0,
- /* 66 B */ 0, /* 67 C */ 0, /* 68 D */ 0, /* 69 E */ 0, /* 70 F */ 0, /* 71 G */ 0,
- /* 72 H */ 0, /* 73 I */ 0, /* 74 J */ 0, /* 75 K */ 0, /* 76 L */ 0, /* 77 M */ 0,
- /* 78 N */ 0, /* 79 O */ 0, /* 80 P */ 0, /* 81 Q */ 0, /* 82 R */ 0, /* 83 S */ 0,
- /* 84 T */ 0, /* 85 U */ 0, /* 86 V */ 0, /* 87 W */ 0, /* 88 X */ 0, /* 89 Y */ 0,
- /* 90 Z */ 0, /* 91 [ */ 1, /* 92 " */ 1, /* 93 ] */ 1, /* 94 ^ */ 1, /* 95 _ */ 1,
- /* 96 ` */ 1, /* 97 a */ 0, /* 98 b */ 0, /* 99 c */ 0, /* 100 d */ 0, /* 101 e */ 0,
- /* 102 f */ 0, /* 103 g */ 0, /* 104 h */ 0, /* 105 i */ 0, /* 106 j */ 0, /* 107 k */ 0,
- /* 108 l */ 0, /* 109 m */ 0, /* 110 n */ 0, /* 111 o */ 0, /* 112 p */ 0, /* 113 q */ 0,
- /* 114 r */ 0, /* 115 s */ 0, /* 116 t */ 0, /* 117 u */ 0, /* 118 v */ 0, /* 119 w */ 0,
- /* 120 x */ 0, /* 121 y */ 0, /* 122 z */ 0, /* 123 { */ 1, /* 124 | */ 1, /* 125 } */ 1,
- /* 126 ~ */ 1, /* 127 DEL */ 1
-};
-
-
-// Hex-decoding table
-const vmime_uint8 qpEncoder::sm_hexDecodeTable[256] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
- 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-// static
-bool qpEncoder::RFC2047_isEncodingNeededForChar(const byte_t c)
-{
- return (c >= 128 || sm_RFC2047EncodeTable[c] != 0);
-}
-
-
-// static
-int qpEncoder::RFC2047_getEncodedLength(const byte_t c)
-{
- if (c >= 128 || sm_RFC2047EncodeTable[c] != 0)
- {
- if (c == 32) // space
- {
- // Encoded as "_"
- return 1;
- }
- else
- {
- // Hex encoding
- return 3;
- }
- }
- else
- {
- return 1; // no encoding
- }
-}
-
-
-#ifndef VMIME_BUILDING_DOC
-
-#define QP_ENCODE_HEX(x) \
- outBuffer[outBufferPos] = '='; \
- outBuffer[outBufferPos + 1] = sm_hexDigits[x >> 4]; \
- outBuffer[outBufferPos + 2] = sm_hexDigits[x & 0xF]; \
- outBufferPos += 3; \
- curCol += 3
-
-#define QP_WRITE(s, x, l) s.write(reinterpret_cast <byte_t*>(x), l)
-
-#endif // VMIME_BUILDING_DOC
-
-
-size_t qpEncoder::encode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- const size_t propMaxLineLength =
- getProperties().getProperty <size_t>("maxlinelength", static_cast <size_t>(-1));
-
- const bool rfc2047 = getProperties().getProperty <bool>("rfc2047", false);
- const bool text = getProperties().getProperty <bool>("text", false); // binary mode by default
-
- const bool cutLines = (propMaxLineLength != static_cast <size_t>(-1));
- const size_t maxLineLength = std::min(propMaxLineLength, static_cast <size_t>(74));
-
- // Process the data
- byte_t buffer[16384];
- size_t bufferLength = 0;
- size_t bufferPos = 0;
-
- size_t curCol = 0;
-
- byte_t outBuffer[16384];
- size_t outBufferPos = 0;
-
- size_t total = 0;
- size_t inTotal = 0;
-
- if (progress)
- progress->start(0);
-
- while (bufferPos < bufferLength || !in.eof())
- {
- // Flush current output buffer
- if (outBufferPos + 6 >= static_cast <int>(sizeof(outBuffer)))
- {
- QP_WRITE(out, outBuffer, outBufferPos);
-
- total += outBufferPos;
- outBufferPos = 0;
- }
-
- // Need to get more data?
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
-
- // No more data
- if (bufferLength == 0)
- break;
- }
-
- // Get the next char and encode it
- const byte_t c = buffer[bufferPos++];
-
- if (rfc2047)
- {
- if (c >= 128 || sm_RFC2047EncodeTable[c] != 0)
- {
- if (c == 32) // space
- {
- // RFC-2047, Page 5, 4.2. The "Q" encoding:
- // << The 8-bit hexadecimal value 20 (e.g., ISO-8859-1 SPACE) may be
- // represented as "_" (underscore, ASCII 95.). >>
- outBuffer[outBufferPos++] = '_';
- ++curCol;
- }
- else
- {
- // Other characters: '=' + hexadecimal encoding
- QP_ENCODE_HEX(c);
- }
- }
- else
- {
- // No encoding
- outBuffer[outBufferPos++] = c;
- ++curCol;
- }
- }
- else
- {
- switch (c)
- {
- case 46: // .
- {
- if (curCol == 0)
- {
- // If a '.' appears at the beginning of a line, we encode it to
- // to avoid problems with SMTP servers... ("\r\n.\r\n" means the
- // end of data transmission).
- QP_ENCODE_HEX('.');
- continue;
- }
-
- outBuffer[outBufferPos++] = '.';
- ++curCol;
- break;
- }
- case 32: // space
- {
- // Need to get more data?
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
- }
-
- // Spaces cannot appear at the end of a line. So, encode the space.
- if (bufferPos >= bufferLength ||
- (buffer[bufferPos] == '\r' || buffer[bufferPos] == '\n'))
- {
- QP_ENCODE_HEX(' ');
- }
- else
- {
- outBuffer[outBufferPos++] = ' ';
- ++curCol;
- }
-
- break;
- }
- case 9: // TAB
- {
- QP_ENCODE_HEX(c);
- break;
- }
- case 13: // CR
- case 10: // LF
- {
- // RFC-2045/6.7(4)
-
- // Text data
- if (text && !rfc2047)
- {
- outBuffer[outBufferPos++] = c;
- ++curCol;
- }
- // Binary data
- else
- {
- QP_ENCODE_HEX(c);
- }
-
- break;
- }
- case 61: // =
- {
- QP_ENCODE_HEX('=');
- break;
- }
- /*
- Rule #2: (Literal representation) Octets with decimal values of 33
- through 60 inclusive, and 62 through 126, inclusive, MAY be
- represented as the ASCII characters which correspond to those
- octets (EXCLAMATION POINT through LESS THAN, and GREATER THAN
- through TILDE, respectively).
- */
- default:
-
- //if ((c >= 33 && c <= 60) || (c >= 62 && c <= 126))
- if (c >= 33 && c <= 126 && c != 61 && c != 63)
- {
- outBuffer[outBufferPos++] = c;
- ++curCol;
- }
- // Other characters: '=' + hexadecimal encoding
- else
- {
- QP_ENCODE_HEX(c);
- }
-
- break;
-
- } // switch (c)
-
- // Soft line break : "=\r\n"
- if (cutLines && curCol >= maxLineLength - 1)
- {
- outBuffer[outBufferPos] = '=';
- outBuffer[outBufferPos + 1] = '\r';
- outBuffer[outBufferPos + 2] = '\n';
-
- outBufferPos += 3;
- curCol = 0;
- }
-
- } // !rfc2047
-
- ++inTotal;
-
- if (progress)
- progress->progress(inTotal, inTotal);
- }
-
- // Flush remaining output buffer
- if (outBufferPos != 0)
- {
- QP_WRITE(out, outBuffer, outBufferPos);
- total += outBufferPos;
- }
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
-}
-
-
-size_t qpEncoder::decode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- // Process the data
- const bool rfc2047 = getProperties().getProperty <bool>("rfc2047", false);
-
- byte_t buffer[16384];
- size_t bufferLength = 0;
- size_t bufferPos = 0;
-
- byte_t outBuffer[16384];
- size_t outBufferPos = 0;
-
- size_t total = 0;
- size_t inTotal = 0;
-
- while (bufferPos < bufferLength || !in.eof())
- {
- // Flush current output buffer
- if (outBufferPos >= sizeof(outBuffer))
- {
- QP_WRITE(out, outBuffer, outBufferPos);
-
- total += outBufferPos;
- outBufferPos = 0;
- }
-
- // Need to get more data?
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
-
- // No more data
- if (bufferLength == 0)
- break;
- }
-
- // Decode the next sequence (hex-encoded byte or printable character)
- byte_t c = buffer[bufferPos++];
-
- ++inTotal;
-
- switch (c)
- {
- case '=':
- {
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
- }
-
- if (bufferPos < bufferLength)
- {
- c = buffer[bufferPos++];
-
- ++inTotal;
-
- switch (c)
- {
- // Ignore soft line break ("=\r\n" or "=\n")
- case '\r':
-
- // Read one byte more
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
- }
-
- if (bufferPos < bufferLength)
- {
- ++bufferPos;
- ++inTotal;
- }
-
- break;
-
- case '\n':
-
- break;
-
- // Hex-encoded char
- default:
- {
- // We need another byte...
- if (bufferPos >= bufferLength)
- {
- bufferLength = in.read(buffer, sizeof(buffer));
- bufferPos = 0;
- }
-
- if (bufferPos < bufferLength)
- {
- const byte_t next = buffer[bufferPos++];
-
- ++inTotal;
-
- const byte_t value = static_cast <byte_t>
- (sm_hexDecodeTable[c] * 16 + sm_hexDecodeTable[next]);
-
- outBuffer[outBufferPos++] = value;
- }
- else
- {
- // Premature end-of-data
- }
-
- break;
- }
-
- }
- }
- else
- {
- // Premature end-of-data
- }
-
- break;
- }
- case '_':
- {
- if (rfc2047)
- {
- // RFC-2047, Page 5, 4.2. The "Q" encoding:
- // << Note that the "_" always represents hexadecimal 20, even if the SPACE
- // character occupies a different code position in the character set in use. >>
- outBuffer[outBufferPos++] = 0x20;
- break;
- }
-
- // no break here...
- }
- default:
- {
- outBuffer[outBufferPos++] = c;
- }
-
- }
-
- if (progress)
- progress->progress(inTotal, inTotal);
- }
-
- // Flush remaining output buffer
- if (outBufferPos != 0)
- {
- QP_WRITE(out, outBuffer, outBufferPos);
- total += outBufferPos;
- }
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
-}
-
-
-size_t qpEncoder::getEncodedSize(const size_t n) const
-{
- const size_t propMaxLineLength =
- getProperties().getProperty <size_t>("maxlinelength", static_cast <size_t>(-1));
-
- const bool cutLines = (propMaxLineLength != static_cast <size_t>(-1));
- const size_t maxLineLength = std::min(propMaxLineLength, static_cast <size_t>(74));
-
- // Worst cast: 1 byte of input provide 3 bytes of output
- // Count CRLF (2 bytes) for each line.
- return n * 3 + (cutLines ? (n / maxLineLength) * 2 : 0);
-}
-
-
-size_t qpEncoder::getDecodedSize(const size_t n) const
-{
- // Worst case: 1 byte of input equals 1 byte of output
- return n;
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/sevenBitEncoder.cpp b/src/utility/encoder/sevenBitEncoder.cpp
deleted file mode 100644
index 7c76d73f..00000000
--- a/src/utility/encoder/sevenBitEncoder.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/sevenBitEncoder.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-sevenBitEncoder::sevenBitEncoder()
-{
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/encoder/uuEncoder.cpp b/src/utility/encoder/uuEncoder.cpp
deleted file mode 100644
index 0375a397..00000000
--- a/src/utility/encoder/uuEncoder.cpp
+++ /dev/null
@@ -1,344 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/encoder/uuEncoder.hpp"
-#include "vmime/parserHelpers.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace encoder {
-
-
-uuEncoder::uuEncoder()
-{
- getProperties()["mode"] = 644;
- getProperties()["filename"] = "no_name";
- getProperties()["maxlinelength"] = 46;
-}
-
-
-const std::vector <string> uuEncoder::getAvailableProperties() const
-{
- std::vector <string> list(encoder::getAvailableProperties());
-
- list.push_back("maxlinelength");
-
- list.push_back("mode");
- list.push_back("filename");
-
- return (list);
-}
-
-
-// This is the character encoding function to make a character printable
-static inline byte_t UUENCODE(const unsigned int c)
-{
- return static_cast <byte_t>((c & 077) + ' ');
-}
-
-// Single character decoding
-static inline unsigned int UUDECODE(const unsigned int c)
-{
- return (c - ' ') & 077;
-}
-
-
-size_t uuEncoder::encode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- const string propFilename = getProperties().getProperty <string>("filename", "");
- const string propMode = getProperties().getProperty <string>("mode", "644");
-
- const size_t maxLineLength =
- std::min(getProperties().getProperty <size_t>("maxlinelength", 46), static_cast <size_t>(46));
-
- size_t total = 0;
- size_t inTotal = 0;
-
- // Output the prelude text ("begin [mode] [filename]")
- out << "begin";
-
- if (!propFilename.empty())
- {
- out << " " << propMode << " " << propFilename;
- total += 2 + propMode.length() + propFilename.length();
- }
-
- out << "\r\n";
- total += 7;
-
- // Process the data
- byte_t inBuffer[64];
- byte_t outBuffer[64];
-
- if (progress)
- progress->start(0);
-
- while (!in.eof())
- {
- // Process up to 45 characters per line
- std::fill(inBuffer, inBuffer + sizeof(inBuffer), 0);
-
- const size_t inLength = in.read(inBuffer, maxLineLength - 1);
-
- outBuffer[0] = UUENCODE(static_cast <unsigned int>(inLength)); // Line length
-
- size_t j = 1;
-
- for (size_t i = 0 ; i < inLength ; i += 3, j += 4)
- {
- const byte_t c1 = inBuffer[i];
- const byte_t c2 = inBuffer[i + 1];
- const byte_t c3 = inBuffer[i + 2];
-
- outBuffer[j] = UUENCODE(c1 >> 2);
- outBuffer[j + 1] = UUENCODE(((c1 << 4) & 060) | ((c2 >> 4) & 017));
- outBuffer[j + 2] = UUENCODE(((c2 << 2) & 074) | ((c3 >> 6) & 03));
- outBuffer[j + 3] = UUENCODE(c3 & 077);
- }
-
- outBuffer[j] = '\r';
- outBuffer[j + 1] = '\n';
-
- out.write(outBuffer, j + 2);
-
- total += j + 2;
- inTotal += inLength;
-
- if (progress)
- progress->progress(inTotal, inTotal);
- }
-
- out << "end\r\n";
- total += 5;
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
-}
-
-
-size_t uuEncoder::decode(utility::inputStream& in,
- utility::outputStream& out, utility::progressListener* progress)
-{
- in.reset(); // may not work...
-
- // Process the data
- byte_t inBuffer[64];
- byte_t outBuffer[64];
-
- size_t total = 0;
- size_t inTotal = 0;
-
- bool stop = false;
-
- std::fill(inBuffer, inBuffer + sizeof(inBuffer), 0);
-
- if (progress)
- progress->start(0);
-
- while (!stop && !in.eof())
- {
- // Get the line length
- byte_t lengthChar;
-
- if (in.read(&lengthChar, 1) == 0)
- break;
-
- const size_t outLength = UUDECODE(lengthChar);
- const size_t inLength = std::min((outLength * 4) / 3, static_cast <size_t>(64));
- size_t inPos = 0;
-
- switch (lengthChar)
- {
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- {
- // Ignore
- continue;
- }
- case 'b':
- {
- // Read 5 characters more to check for begin ("begin ...\r\n" or "begin ...\n")
- inPos = in.read(inBuffer, 5);
-
- if (inPos == 5 &&
- inBuffer[0] == 'e' &&
- inBuffer[1] == 'g' &&
- inBuffer[2] == 'i' &&
- inBuffer[3] == 'n' &&
- parserHelpers::isSpace(inBuffer[4]))
- {
- inTotal += 5;
-
- byte_t c = 0;
-
- size_t count = 0;
- byte_t buffer[512];
-
- while (count < sizeof(buffer) - 1 && in.read(&c, 1) == 1)
- {
- if (c == '\n')
- break;
-
- buffer[count++] = c;
- }
-
- inTotal += count;
-
- if (c != '\n')
- {
- // OOPS! Weird line. Don't try to decode more...
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
- }
-
- // Parse filename and mode
- if (count > 0)
- {
- buffer[count] = '\0';
-
- byte_t* p = buffer;
-
- while (*p && parserHelpers::isSpace(*p)) ++p;
-
- byte_t* modeStart = buffer;
-
- while (*p && !parserHelpers::isSpace(*p)) ++p;
-
- getResults()["mode"] = string(modeStart, p);
-
- while (*p && parserHelpers::isSpace(*p)) ++p;
-
- byte_t* filenameStart = buffer;
-
- while (*p && !(*p == '\r' || *p == '\n')) ++p;
-
- getResults()["filename"] = string(filenameStart, p);
- }
- // No filename or mode specified
- else
- {
- getResults()["filename"] = "untitled";
- getResults()["mode"] = 644;
- }
-
- continue;
- }
-
- break;
- }
- case 'e':
- {
- // Read 3 characters more to check for end ("end\r\n" or "end\n")
- inPos = in.read(inBuffer, 3);
-
- if (inPos == 3 &&
- inBuffer[0] == 'n' &&
- inBuffer[1] == 'd' &&
- (inBuffer[2] == '\r' || inBuffer[2] == '\n'))
- {
- stop = true;
- inTotal += 3;
- continue;
- }
-
- break;
- }
-
- }
-
- // Read encoded data
- if (in.read(inBuffer + inPos, inLength - inPos) != inLength - inPos)
- {
- // Premature end of data
- break;
- }
-
- inTotal += (inLength - inPos);
-
- // Decode data
- for (size_t i = 0, j = 0 ; i < inLength ; i += 4, j += 3)
- {
- const byte_t c1 = inBuffer[i];
- const byte_t c2 = inBuffer[i + 1];
- const byte_t c3 = inBuffer[i + 2];
- const byte_t c4 = inBuffer[i + 3];
-
- const size_t n = std::min(inLength - i, static_cast <size_t>(3));
-
- switch (n)
- {
- default:
- case 3: outBuffer[j + 2] = static_cast <byte_t>(UUDECODE(c3) << 6 | UUDECODE(c4));
- case 2: outBuffer[j + 1] = static_cast <byte_t>(UUDECODE(c2) << 4 | UUDECODE(c3) >> 2);
- case 1: outBuffer[j] = static_cast <byte_t>(UUDECODE(c1) << 2 | UUDECODE(c2) >> 4);
- case 0: break;
- }
-
- total += n;
- }
-
- out.write(outBuffer, outLength);
-
- std::fill(inBuffer, inBuffer + sizeof(inBuffer), 0);
-
- if (progress)
- progress->progress(inTotal, inTotal);
- }
-
- if (progress)
- progress->stop(inTotal);
-
- return (total);
-}
-
-
-size_t uuEncoder::getEncodedSize(const size_t n) const
-{
- // 3 bytes of input provide 4 bytes of output.
- // Count CRLF (2 bytes) for each line of 45 characters.
- // Also reserve some space for header and footer.
- return 200 + n * 3 + (n / 45) * 2;
-}
-
-
-size_t uuEncoder::getDecodedSize(const size_t n) const
-{
- // 4 bytes of input provide 3 bytes of output
- return (n * 3) / 4;
-}
-
-
-} // encoder
-} // utility
-} // vmime
diff --git a/src/utility/filteredStream.cpp b/src/utility/filteredStream.cpp
deleted file mode 100644
index bb705162..00000000
--- a/src/utility/filteredStream.cpp
+++ /dev/null
@@ -1,391 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/filteredStream.hpp"
-
-#include <algorithm>
-
-
-namespace vmime {
-namespace utility {
-
-
-// filteredInputStream
-
-size_t filteredInputStream::getBlockSize()
-{
- return std::min(inputStream::getBlockSize(), getPreviousInputStream().getBlockSize());
-}
-
-
-// filteredOutputStream
-
-size_t filteredOutputStream::getBlockSize()
-{
- return std::min(outputStream::getBlockSize(), getNextOutputStream().getBlockSize());
-}
-
-
-// dotFilteredInputStream
-
-dotFilteredInputStream::dotFilteredInputStream(inputStream& is)
- : m_stream(is), m_previousChar2('\0'), m_previousChar1('\0')
-{
-}
-
-
-inputStream& dotFilteredInputStream::getPreviousInputStream()
-{
- return (m_stream);
-}
-
-
-bool dotFilteredInputStream::eof() const
-{
- return (m_stream.eof());
-}
-
-
-void dotFilteredInputStream::reset()
-{
- m_previousChar2 = '\0';
- m_previousChar1 = '\0';
-
- m_stream.reset();
-}
-
-
-size_t dotFilteredInputStream::read(byte_t* const data, const size_t count)
-{
- const size_t read = m_stream.read(data, count);
-
- const byte_t* readPtr = data;
- byte_t* writePtr = data;
-
- const byte_t* end = data + read;
-
- size_t written = 0;
-
- // Replace "\n.." with "\n."
- while (readPtr < end)
- {
- if (*readPtr == '.')
- {
- const byte_t prevChar2 =
- (readPtr == data + 1 ? m_previousChar1 :
- readPtr == data ? m_previousChar2 : *(readPtr - 2));
- const byte_t prevChar1 =
- (readPtr == data ? m_previousChar1 : *(readPtr - 1));
-
- if (prevChar2 == '\n' && prevChar1 == '.')
- {
- // Ignore last dot
- }
- else
- {
- *writePtr = *readPtr;
-
- ++writePtr;
- ++written;
- }
- }
- else
- {
- *writePtr = *readPtr;
-
- ++writePtr;
- ++written;
- }
-
- ++readPtr;
- }
-
- m_previousChar2 = (read >= 2 ? data[read - 2] : m_previousChar1);
- m_previousChar1 = (read >= 1 ? data[read - 1] : '\0');
-
- return (written);
-}
-
-
-size_t dotFilteredInputStream::skip(const size_t /* count */)
-{
- // Skipping bytes is not supported
- return 0;
-}
-
-
-// dotFilteredOutputStream
-
-dotFilteredOutputStream::dotFilteredOutputStream(outputStream& os)
- : m_stream(os), m_previousChar('\0'), m_start(true)
-{
-}
-
-
-outputStream& dotFilteredOutputStream::getNextOutputStream()
-{
- return (m_stream);
-}
-
-
-void dotFilteredOutputStream::writeImpl
- (const byte_t* const data, const size_t count)
-{
- if (count == 0)
- return;
-
- const byte_t* pos = data;
- const byte_t* end = data + count;
- const byte_t* start = data;
-
- if (m_previousChar == '.')
- {
- if (data[0] == '\n' || data[0] == '\r')
- {
- m_stream.write(".", 1); // extra <DOT>
- m_stream.write(data, 1);
-
- pos = data + 1;
- }
- }
-
- // Replace "\n." with "\n.."
- while ((pos = std::find(pos, end, '.')) != end)
- {
- const byte_t previousChar =
- (pos == data ? m_previousChar : *(pos - 1));
-
- if (previousChar == '\n')
- {
- m_stream.write(start, pos - start);
- m_stream.write("..", 2);
-
- start = pos + 1;
- }
- else if (pos == data && m_start) // <DOT><CR><LF> at the beginning of content
- {
- m_stream.write(start, pos - start);
-
- if (pos + 1 < end && (*(pos + 1) == '\n' || *(pos + 1) == '\r'))
- m_stream.write("..", 2);
- else
- m_stream.write(".", 1);
-
- start = pos + 1;
- }
-
- ++pos;
- }
-
- m_stream.write(start, end - start);
- m_previousChar = data[count - 1];
- m_start = false;
-}
-
-
-void dotFilteredOutputStream::flush()
-{
- // Do nothing
- m_stream.flush();
-}
-
-
-// CRLFToLFFilteredOutputStream
-
-CRLFToLFFilteredOutputStream::CRLFToLFFilteredOutputStream(outputStream& os)
- : m_stream(os), m_previousChar('\0')
-{
-}
-
-
-outputStream& CRLFToLFFilteredOutputStream::getNextOutputStream()
-{
- return (m_stream);
-}
-
-
-void CRLFToLFFilteredOutputStream::writeImpl
- (const byte_t* const data, const size_t count)
-{
- if (count == 0)
- return;
-
- const byte_t* pos = data;
- const byte_t* end = data + count;
- const byte_t* start = data;
-
- // Warning: if the whole buffer finishes with '\r', this
- // last character will not be written back if flush() is
- // not called
- if (m_previousChar == '\r')
- {
- if (*pos != '\n')
- {
- m_stream.write("\r", 1); // write back \r
- m_previousChar = *pos;
- }
- }
-
- // Replace "\r\n" (CRLF) with "\n" (LF)
- while ((pos = std::find(pos, end, '\n')) != end)
- {
- const byte_t previousChar =
- (pos == data ? m_previousChar : *(pos - 1));
-
- if (previousChar == '\r')
- {
- if (pos != start)
- m_stream.write(start, pos - 1 - start); // do not write \r
-
- m_stream.write("\n", 1);
-
- start = pos + 1;
- }
-
- ++pos;
- }
-
- if (data[count - 1] == '\r')
- {
- m_stream.write(start, end - start - 1);
- m_previousChar = '\r';
- }
- else
- {
- m_stream.write(start, end - start);
- m_previousChar = data[count - 1];
- }
-}
-
-
-void CRLFToLFFilteredOutputStream::flush()
-{
- m_stream.flush();
-
- // TODO
-}
-
-
-// LFToCRLFFilteredOutputStream
-
-LFToCRLFFilteredOutputStream::LFToCRLFFilteredOutputStream(outputStream& os)
- : m_stream(os), m_previousChar('\0')
-{
-}
-
-
-outputStream& LFToCRLFFilteredOutputStream::getNextOutputStream()
-{
- return (m_stream);
-}
-
-
-void LFToCRLFFilteredOutputStream::writeImpl
- (const byte_t* const data, const size_t count)
-{
- if (count == 0)
- return;
-
- string buffer;
- buffer.reserve(count);
-
- const byte_t* pos = data;
- const byte_t* end = data + count;
-
- byte_t previousChar = m_previousChar;
-
- while (pos < end)
- {
- switch (*pos)
- {
- case '\r':
-
- buffer.append(1, '\r');
- buffer.append(1, '\n');
-
- break;
-
- case '\n':
-
- if (previousChar != '\r')
- {
- buffer.append(1, '\r');
- buffer.append(1, '\n');
- }
-
- break;
-
- default:
-
- buffer.append(1, *pos);
- break;
- }
-
- previousChar = *pos;
- ++pos;
- }
-
- m_stream.write(&buffer[0], buffer.length());
-
- m_previousChar = previousChar;
-}
-
-
-void LFToCRLFFilteredOutputStream::flush()
-{
- m_stream.flush();
-}
-
-
-// stopSequenceFilteredInputStream <1>
-
-template <>
-size_t stopSequenceFilteredInputStream <1>::read
- (byte_t* const data, const size_t count)
-{
- if (eof() || m_stream.eof())
- {
- m_eof = true;
- return 0;
- }
-
- const size_t read = m_stream.read(data, count);
- byte_t* end = data + read;
-
- byte_t* pos = std::find(data, end, m_sequence[0]);
-
- if (pos == end)
- {
- return (read);
- }
- else
- {
- m_found = 1;
- return (pos - data);
- }
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/inputStream.cpp b/src/utility/inputStream.cpp
deleted file mode 100644
index a7d6bc0f..00000000
--- a/src/utility/inputStream.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStream.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/inputStreamAdapter.cpp b/src/utility/inputStreamAdapter.cpp
deleted file mode 100644
index c0b06be4..00000000
--- a/src/utility/inputStreamAdapter.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStreamAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-inputStreamAdapter::inputStreamAdapter(std::istream& is)
- : m_stream(is)
-{
-}
-
-
-bool inputStreamAdapter::eof() const
-{
- return (m_stream.eof());
-}
-
-
-void inputStreamAdapter::reset()
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.seekg(0, std::ios::beg);
- m_stream.clear();
-}
-
-
-size_t inputStreamAdapter::read
- (byte_t* const data, const size_t count)
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.read(reinterpret_cast <char*>(data), count);
- return (m_stream.gcount());
-}
-
-
-size_t inputStreamAdapter::skip(const size_t count)
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.ignore(count);
- return (m_stream.gcount());
-}
-
-
-size_t inputStreamAdapter::getPosition() const
-{
- return m_stream.tellg();
-}
-
-
-void inputStreamAdapter::seek(const size_t pos)
-{
- m_stream.clear();
- m_stream.seekg(pos, std::ios_base::beg);
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/inputStreamByteBufferAdapter.cpp b/src/utility/inputStreamByteBufferAdapter.cpp
deleted file mode 100644
index c270ea56..00000000
--- a/src/utility/inputStreamByteBufferAdapter.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStreamByteBufferAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-inputStreamByteBufferAdapter::inputStreamByteBufferAdapter(const byte_t* buffer, const size_t length)
- : m_buffer(buffer), m_length(length), m_pos(0)
-{
-}
-
-
-bool inputStreamByteBufferAdapter::eof() const
-{
- return m_pos >= m_length;
-}
-
-
-void inputStreamByteBufferAdapter::reset()
-{
- m_pos = 0;
-}
-
-
-size_t inputStreamByteBufferAdapter::read
- (byte_t* const data, const size_t count)
-{
- const size_t remaining = m_length - m_pos;
-
- if (remaining < count)
- {
- std::copy(m_buffer + m_pos, m_buffer + m_pos + remaining, data);
- m_pos += remaining;
-
- return remaining;
- }
- else
- {
- std::copy(m_buffer + m_pos, m_buffer + m_pos + count, data);
- m_pos += count;
-
- return count;
- }
-}
-
-
-size_t inputStreamByteBufferAdapter::skip(const size_t count)
-{
- const size_t remaining = m_length - m_pos;
-
- if (remaining < count)
- {
- m_pos += remaining;
- return remaining;
- }
- else
- {
- m_pos += count;
- return count;
- }
-}
-
-
-size_t inputStreamByteBufferAdapter::getPosition() const
-{
- return m_pos;
-}
-
-
-void inputStreamByteBufferAdapter::seek(const size_t pos)
-{
- if (pos <= m_length)
- m_pos = pos;
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/inputStreamPointerAdapter.cpp b/src/utility/inputStreamPointerAdapter.cpp
deleted file mode 100644
index 6bf0461a..00000000
--- a/src/utility/inputStreamPointerAdapter.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStreamPointerAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-inputStreamPointerAdapter::inputStreamPointerAdapter(std::istream* is, const bool own)
- : inputStreamAdapter(*is), m_stream(is), m_own(own)
-{
-}
-
-
-inputStreamPointerAdapter::~inputStreamPointerAdapter()
-{
- if (m_own)
- delete (m_stream);
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/inputStreamSocketAdapter.cpp b/src/utility/inputStreamSocketAdapter.cpp
deleted file mode 100644
index d78855eb..00000000
--- a/src/utility/inputStreamSocketAdapter.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStreamSocketAdapter.hpp"
-
-
-#if VMIME_HAVE_MESSAGING_FEATURES
-
-
-#include "vmime/net/socket.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-inputStreamSocketAdapter::inputStreamSocketAdapter(net::socket& sok)
- : m_socket(sok)
-{
-}
-
-
-bool inputStreamSocketAdapter::eof() const
-{
- // Can't know...
- return false;
-}
-
-
-void inputStreamSocketAdapter::reset()
-{
- // Not supported
-}
-
-
-size_t inputStreamSocketAdapter::read
- (byte_t* const data, const size_t count)
-{
- return m_socket.receiveRaw(data, count);
-}
-
-
-size_t inputStreamSocketAdapter::skip
- (const size_t /* count */)
-{
- // Not supported
- return 0;
-}
-
-
-size_t inputStreamSocketAdapter::getBlockSize()
-{
- return m_socket.getBlockSize();
-}
-
-
-} // utility
-} // vmime
-
-
-#endif // VMIME_HAVE_MESSAGING_FEATURES
-
diff --git a/src/utility/inputStreamStringAdapter.cpp b/src/utility/inputStreamStringAdapter.cpp
deleted file mode 100644
index 9b897b97..00000000
--- a/src/utility/inputStreamStringAdapter.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStreamStringAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-inputStreamStringAdapter::inputStreamStringAdapter(const string& buffer)
- : m_buffer(buffer), m_begin(0), m_end(buffer.length()), m_pos(0)
-{
-}
-
-
-inputStreamStringAdapter::inputStreamStringAdapter(const string& buffer,
- const size_t begin, const size_t end)
- : m_buffer(buffer), m_begin(begin), m_end(end), m_pos(begin)
-{
-}
-
-
-bool inputStreamStringAdapter::eof() const
-{
- return (m_pos >= m_end);
-}
-
-
-void inputStreamStringAdapter::reset()
-{
- m_pos = m_begin;
-}
-
-
-size_t inputStreamStringAdapter::read
- (byte_t* const data, const size_t count)
-{
- if (m_pos + count >= m_end)
- {
- const size_t remaining = m_end - m_pos;
-
- std::copy(m_buffer.begin() + m_pos, m_buffer.end(), data);
- m_pos = m_end;
- return (remaining);
- }
- else
- {
- std::copy(m_buffer.begin() + m_pos, m_buffer.begin() + m_pos + count, data);
- m_pos += count;
- return (count);
- }
-}
-
-
-size_t inputStreamStringAdapter::skip(const size_t count)
-{
- if (m_pos + count >= m_end)
- {
- const size_t remaining = m_end - m_pos;
- m_pos = m_end;
- return (remaining);
- }
- else
- {
- m_pos += count;
- return (count);
- }
-}
-
-
-size_t inputStreamStringAdapter::getPosition() const
-{
- return m_pos - m_begin;
-}
-
-
-void inputStreamStringAdapter::seek(const size_t pos)
-{
- if (m_begin + pos <= m_end)
- m_pos = m_begin + pos;
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/inputStreamStringProxyAdapter.cpp b/src/utility/inputStreamStringProxyAdapter.cpp
deleted file mode 100644
index 5513de80..00000000
--- a/src/utility/inputStreamStringProxyAdapter.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/inputStreamStringProxyAdapter.hpp"
-#include "vmime/utility/stringProxy.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-inputStreamStringProxyAdapter::inputStreamStringProxyAdapter(const stringProxy& buffer)
- : m_buffer(buffer), m_pos(0)
-{
-}
-
-
-bool inputStreamStringProxyAdapter::eof() const
-{
- return (m_pos >= m_buffer.length());
-}
-
-
-void inputStreamStringProxyAdapter::reset()
-{
- m_pos = 0;
-}
-
-
-size_t inputStreamStringProxyAdapter::read
- (byte_t* const data, const size_t count)
-{
- const size_t remaining = m_buffer.length() - m_pos;
-
- if (count > remaining)
- {
- std::copy(m_buffer.it_begin() + m_pos, m_buffer.it_end(), data);
- m_pos = m_buffer.length();
- return (remaining);
- }
- else
- {
- std::copy(m_buffer.it_begin() + m_pos, m_buffer.it_begin() + m_pos + count, data);
- m_pos += count;
- return (count);
- }
-}
-
-
-size_t inputStreamStringProxyAdapter::skip(const size_t count)
-{
- const size_t remaining = m_buffer.length() - m_pos;
-
- if (count > remaining)
- {
- m_pos = m_buffer.length();
- return (remaining);
- }
- else
- {
- m_pos += count;
- return (count);
- }
-}
-
-
-size_t inputStreamStringProxyAdapter::getPosition() const
-{
- return m_pos;
-}
-
-
-void inputStreamStringProxyAdapter::seek(const size_t pos)
-{
- if (pos <= m_buffer.length())
- m_pos = pos;
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/outputStream.cpp b/src/utility/outputStream.cpp
deleted file mode 100644
index 070e28c5..00000000
--- a/src/utility/outputStream.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/outputStream.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-void outputStream::write(const byte_t* const data, const size_t count)
-{
- writeImpl(data, count);
-}
-
-
-void outputStream::write(const char* const data, const size_t count)
-{
- writeImpl(reinterpret_cast <const byte_t*>(data), count);
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/outputStreamAdapter.cpp b/src/utility/outputStreamAdapter.cpp
deleted file mode 100644
index ed90c7d3..00000000
--- a/src/utility/outputStreamAdapter.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/outputStreamAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-outputStreamAdapter::outputStreamAdapter(std::ostream& os)
- : m_stream(os)
-{
-}
-
-
-void outputStreamAdapter::writeImpl
- (const byte_t* const data, const size_t count)
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.write(reinterpret_cast <const char*>(data), count);
-}
-
-
-void outputStreamAdapter::flush()
-{
- m_stream.exceptions(std::ios_base::badbit);
- m_stream.flush();
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/outputStreamByteArrayAdapter.cpp b/src/utility/outputStreamByteArrayAdapter.cpp
deleted file mode 100644
index 1bed735b..00000000
--- a/src/utility/outputStreamByteArrayAdapter.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/outputStreamByteArrayAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-outputStreamByteArrayAdapter::outputStreamByteArrayAdapter(byteArray& array)
- : m_array(array)
-{
-}
-
-
-void outputStreamByteArrayAdapter::writeImpl
- (const byte_t* const data, const size_t count)
-{
- m_array.insert(m_array.end(), data, data + count);
-}
-
-
-void outputStreamByteArrayAdapter::flush()
-{
- // Do nothing
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/outputStreamSocketAdapter.cpp b/src/utility/outputStreamSocketAdapter.cpp
deleted file mode 100644
index 03194497..00000000
--- a/src/utility/outputStreamSocketAdapter.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/outputStreamSocketAdapter.hpp"
-
-
-#if VMIME_HAVE_MESSAGING_FEATURES
-
-
-#include "vmime/net/socket.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-outputStreamSocketAdapter::outputStreamSocketAdapter(net::socket& sok)
- : m_socket(sok)
-{
-}
-
-
-void outputStreamSocketAdapter::writeImpl
- (const byte_t* const data, const size_t count)
-{
- m_socket.sendRaw(data, count);
-}
-
-
-void outputStreamSocketAdapter::flush()
-{
- // Do nothing
-}
-
-
-size_t outputStreamSocketAdapter::getBlockSize()
-{
- return m_socket.getBlockSize();
-}
-
-
-
-} // utility
-} // vmime
-
-
-#endif // VMIME_HAVE_MESSAGING_FEATURES
-
diff --git a/src/utility/outputStreamStringAdapter.cpp b/src/utility/outputStreamStringAdapter.cpp
deleted file mode 100644
index 7105480c..00000000
--- a/src/utility/outputStreamStringAdapter.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/outputStreamStringAdapter.hpp"
-
-#include "vmime/utility/stringUtils.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-outputStreamStringAdapter::outputStreamStringAdapter(string& buffer)
- : m_buffer(buffer)
-{
-}
-
-
-void outputStreamStringAdapter::writeImpl
- (const byte_t* const data, const size_t count)
-{
- vmime::utility::stringUtils::appendBytesToString(m_buffer, data, count);
-}
-
-
-void outputStreamStringAdapter::flush()
-{
- // Do nothing
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/parserInputStreamAdapter.cpp b/src/utility/parserInputStreamAdapter.cpp
deleted file mode 100644
index 5ab26ef0..00000000
--- a/src/utility/parserInputStreamAdapter.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/parserInputStreamAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-parserInputStreamAdapter::parserInputStreamAdapter(shared_ptr <seekableInputStream> stream)
- : m_stream(stream)
-{
-}
-
-
-bool parserInputStreamAdapter::eof() const
-{
- return m_stream->eof();
-}
-
-
-void parserInputStreamAdapter::reset()
-{
- m_stream->reset();
-}
-
-
-size_t parserInputStreamAdapter::read
- (byte_t* const data, const size_t count)
-{
- return m_stream->read(data, count);
-}
-
-
-shared_ptr <seekableInputStream> parserInputStreamAdapter::getUnderlyingStream()
-{
- return m_stream;
-}
-
-
-const string parserInputStreamAdapter::extract(const size_t begin, const size_t end) const
-{
- const size_t initialPos = m_stream->getPosition();
-
- byte_t *buffer = NULL;
-
- try
- {
- buffer = new byte_t[end - begin + 1];
-
- m_stream->seek(begin);
-
- const size_t readBytes = m_stream->read(buffer, end - begin);
- buffer[readBytes] = '\0';
-
- m_stream->seek(initialPos);
-
- string str(buffer, buffer + readBytes);
- delete [] buffer;
-
- return str;
- }
- catch (...)
- {
- delete [] buffer;
-
- m_stream->seek(initialPos);
- throw;
- }
-}
-
-
-size_t parserInputStreamAdapter::findNext
- (const string& token, const size_t startPosition)
-{
- static const unsigned int BUFFER_SIZE = 4096;
-
- // Token must not be longer than BUFFER_SIZE/2
- if (token.empty() || token.length() > BUFFER_SIZE / 2)
- return npos;
-
- const size_t initialPos = getPosition();
-
- seek(startPosition);
-
- try
- {
- byte_t findBuffer[BUFFER_SIZE];
- byte_t* findBuffer1 = findBuffer;
- byte_t* findBuffer2 = findBuffer + (BUFFER_SIZE / 2);
-
- size_t findBufferLen = 0;
- size_t findBufferOffset = 0;
-
- bool isEOF = false;
-
- // Fill in initial buffer
- findBufferLen = read(findBuffer, BUFFER_SIZE);
-
- while (findBufferLen != 0)
- {
- // Find token
- for (byte_t *begin = findBuffer, *end = findBuffer + findBufferLen - token.length() ;
- begin <= end ; ++begin)
- {
- if (begin[0] == token[0] &&
- (token.length() == 1 ||
- memcmp(static_cast <const void *>(&begin[1]),
- static_cast <const void *>(token.data() + 1),
- token.length() - 1) == 0))
- {
- seek(initialPos);
- return startPosition + findBufferOffset + (begin - findBuffer);
- }
- }
-
- // Rotate buffer
- memcpy(findBuffer1, findBuffer2, (BUFFER_SIZE / 2));
-
- // Read more bytes
- if (findBufferLen < BUFFER_SIZE && (eof() || isEOF))
- {
- break;
- }
- else
- {
- const size_t bytesRead = read(findBuffer2, BUFFER_SIZE / 2);
-
- if (bytesRead == 0)
- {
- isEOF = true;
- }
- else
- {
- findBufferLen = (BUFFER_SIZE / 2) + bytesRead;
- findBufferOffset += (BUFFER_SIZE / 2);
- }
- }
- }
-
- seek(initialPos);
- }
- catch (...)
- {
- seek(initialPos);
- throw;
- }
-
- return npos;
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/path.cpp b/src/utility/path.cpp
deleted file mode 100644
index 9f746d54..00000000
--- a/src/utility/path.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/path.hpp"
-
-#include <algorithm>
-
-
-namespace vmime {
-namespace utility {
-
-
-path::path()
-{
-}
-
-
-path::path(const component& c)
-{
- m_list.push_back(c);
-}
-
-
-path::path(const path& p)
- : object()
-{
- m_list.resize(p.m_list.size());
- std::copy(p.m_list.begin(), p.m_list.end(), m_list.begin());
-}
-
-
-path::path(const string& s)
-{
- m_list.push_back(component(s));
-}
-
-
-path path::operator/(const path& p) const
-{
- path pr(*this);
- pr /= p;
-
- return (pr);
-}
-
-
-path path::operator/(const component& c) const
-{
- path pr(*this);
- pr /= c;
-
- return (pr);
-}
-
-
-path& path::operator/=(const path& p)
-{
- const list::size_type size = m_list.size();
-
- m_list.resize(size + p.m_list.size());
- std::copy(p.m_list.begin(), p.m_list.end(), m_list.begin() + size);
-
- return (*this);
-}
-
-
-path& path::operator/=(const component& c)
-{
- m_list.push_back(c);
- return (*this);
-}
-
-
-path path::getParent() const
-{
- path p;
-
- if (!isEmpty())
- {
- p.m_list.resize(m_list.size() - 1);
- std::copy(m_list.begin(), m_list.end() - 1, p.m_list.begin());
- }
-
- return (p);
-}
-
-
-path& path::operator=(const path& p)
-{
- m_list.resize(p.m_list.size());
- std::copy(p.m_list.begin(), p.m_list.end(), m_list.begin());
-
- return (*this);
-}
-
-
-path& path::operator=(const component& c)
-{
- m_list.resize(1);
- m_list[0] = c;
-
- return (*this);
-}
-
-
-bool path::operator==(const path& p) const
-{
- if (m_list.size() != p.m_list.size())
- return (false);
-
- list::const_iterator i = m_list.begin();
- list::const_iterator j = p.m_list.begin();
-
- bool equal = true;
-
- for ( ; equal && i != m_list.end() ; ++i, ++j)
- //equal = (*i == *j);
- equal = ((*i).getBuffer() == (*j).getBuffer());
-
- return (equal);
-}
-
-
-bool path::operator!=(const path& p) const
-{
- return (!(*this == p));
-}
-
-
-bool path::isEmpty() const
-{
- return (m_list.empty());
-}
-
-
-bool path::isRoot() const
-{
- return (m_list.empty());
-}
-
-
-const path::component path::getLastComponent() const
-{
- return (m_list[m_list.size() - 1]);
-}
-
-
-path::component& path::getLastComponent()
-{
- return (m_list[m_list.size() - 1]);
-}
-
-
-size_t path::getSize() const
-{
- return (m_list.size());
-}
-
-
-const path::component& path::operator[](const size_t x) const
-{
- return (m_list[x]);
-}
-
-
-path::component& path::operator[](const size_t x)
-{
- return (m_list[x]);
-}
-
-
-bool path::isDirectParentOf(const path& p) const
-{
- if (p.getSize() != getSize() + 1)
- return (false);
-
- bool equal = true;
-
- for (list::size_type i = 0 ; equal && i < m_list.size() ; ++i)
- equal = (m_list[i] == p.m_list[i]);
-
- return (equal);
-}
-
-
-bool path::isParentOf(const path& p) const
-{
- if (p.getSize() < getSize() + 1)
- return (false);
-
- bool equal = true;
-
- for (list::size_type i = 0 ; equal && i < m_list.size() ; ++i)
- equal = (m_list[i] == p.m_list[i]);
-
- return (equal);
-}
-
-
-void path::renameParent(const path& oldPath, const path& newPath)
-{
- if (isEmpty() || oldPath.getSize() > getSize())
- return;
-
- bool equal = true;
- list::size_type i;
-
- for (i = 0 ; equal && i < oldPath.m_list.size() ; ++i)
- equal = (m_list[i] == oldPath.m_list[i]);
-
- if (i != oldPath.m_list.size())
- return;
-
- list newList;
-
- for (list::size_type j = 0 ; j < newPath.m_list.size() ; ++j)
- newList.push_back(newPath.m_list[j]);
-
- for (list::size_type j = i ; j < m_list.size() ; ++j)
- newList.push_back(m_list[j]);
-
- m_list.resize(newList.size());
- std::copy(newList.begin(), newList.end(), m_list.begin());
-}
-
-
-void path::appendComponent(const path::component& c)
-{
- m_list.push_back(c);
-}
-
-
-const path::component& path::getComponentAt(const size_t pos) const
-{
- return (m_list[pos]);
-}
-
-
-path::component& path::getComponentAt(const size_t pos)
-{
- return (m_list[pos]);
-}
-
-
-} // utility
-} // vmime
diff --git a/src/utility/progressListener.cpp b/src/utility/progressListener.cpp
deleted file mode 100644
index cef074e5..00000000
--- a/src/utility/progressListener.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/progressListener.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-// progressListenerSizeAdapter
-
-progressListenerSizeAdapter::progressListenerSizeAdapter
- (progressListener* list, const size_t total)
- : m_wrapped(list), m_total(total)
-{
-}
-
-
-bool progressListenerSizeAdapter::cancel() const
-{
- return (m_wrapped ? m_wrapped->cancel() : false);
-}
-
-
-void progressListenerSizeAdapter::start(const size_t predictedTotal)
-{
- if (m_wrapped)
- m_wrapped->start(predictedTotal);
-}
-
-
-void progressListenerSizeAdapter::progress(const size_t current, const size_t currentTotal)
-{
- if (m_wrapped)
- {
- if (currentTotal > m_total)
- m_total = currentTotal;
-
- m_wrapped->progress(current, m_total);
- }
-}
-
-
-void progressListenerSizeAdapter::stop(const size_t total)
-{
- if (m_wrapped)
- {
- if (total > m_total)
- m_total = total;
-
- m_wrapped->stop(m_total);
- }
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/random.cpp b/src/utility/random.cpp
deleted file mode 100644
index 97d12ddc..00000000
--- a/src/utility/random.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/random.hpp"
-#include "vmime/platform.hpp"
-
-#include <ctime>
-
-
-namespace vmime {
-namespace utility {
-
-
-static unsigned int getRandomSeed()
-{
- unsigned int seed;
-
- platform::getHandler()->generateRandomBytes
- (reinterpret_cast <unsigned char*>(&seed), sizeof(seed));
-
- return seed;
-}
-
-
-unsigned int random::getNext()
-{
- static unsigned int next = getRandomSeed();
-
- // Park and Miller's minimal standard generator:
- // xn+1 = (a * xn + b) mod c
- // xn+1 = (16807 * xn) mod (2^31 - 1)
- next = static_cast<unsigned int>((16807 * next) % 2147483647ul);
- return next;
-}
-
-
-unsigned int random::getTime()
-{
- return static_cast <unsigned int>((platform::getHandler()->getUnixTime()));
-}
-
-
-unsigned int random::getProcess()
-{
- return (platform::getHandler()->getProcessId());
-}
-
-
-const string random::getString(const size_t length, const string& randomChars)
-{
- string res;
- res.resize(length);
-
- const unsigned int x = static_cast <unsigned int>(randomChars.length());
- size_t c = 0;
-
- while (c < length)
- {
- for (unsigned int n = random::getNext() ; n != 0 && c < length ; n /= x)
- {
- res[c++] = randomChars[n % x];
- }
- }
-
- return (res);
-}
-
-
-} // utility
-} // vmime
diff --git a/src/utility/seekableInputStreamRegionAdapter.cpp b/src/utility/seekableInputStreamRegionAdapter.cpp
deleted file mode 100644
index cede1ba9..00000000
--- a/src/utility/seekableInputStreamRegionAdapter.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/seekableInputStreamRegionAdapter.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-seekableInputStreamRegionAdapter::seekableInputStreamRegionAdapter
- (shared_ptr <seekableInputStream> stream, const size_t begin, const size_t length)
- : m_stream(stream), m_begin(begin), m_length(length), m_position(0)
-{
-}
-
-
-bool seekableInputStreamRegionAdapter::eof() const
-{
- return m_position >= m_length;
-}
-
-
-void seekableInputStreamRegionAdapter::reset()
-{
- m_position = 0;
-}
-
-
-size_t seekableInputStreamRegionAdapter::read
- (byte_t* const data, const size_t count)
-{
- m_stream->seek(m_begin + m_position);
-
- size_t readBytes = 0;
-
- if (m_position + count >= m_length)
- {
- const size_t remaining = m_length - m_position;
- readBytes = m_stream->read(data, remaining);
- }
- else
- {
- readBytes = m_stream->read(data, count);
- }
-
- m_position += readBytes;
-
- return readBytes;
-}
-
-
-size_t seekableInputStreamRegionAdapter::skip(const size_t count)
-{
- if (m_position + count >= m_length)
- {
- const size_t remaining = m_length - m_position;
- m_position += remaining;
- return remaining;
- }
- else
- {
- m_position += count;
- return count;
- }
-}
-
-
-size_t seekableInputStreamRegionAdapter::getPosition() const
-{
- return m_position;
-}
-
-
-void seekableInputStreamRegionAdapter::seek(const size_t pos)
-{
- if (pos > m_length)
- m_position = m_length;
- else
- m_position = pos;
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp
deleted file mode 100644
index 232b23c7..00000000
--- a/src/utility/stream.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/stream.hpp"
-
-
-
-namespace vmime {
-namespace utility {
-
-
-size_t stream::getBlockSize()
-{
- return 32768; // 32 KB
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/streamUtils.cpp b/src/utility/streamUtils.cpp
deleted file mode 100644
index f3cc69ef..00000000
--- a/src/utility/streamUtils.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/streamUtils.hpp"
-
-#include <algorithm> // for std::copy
-#include <iterator> // for std::back_inserter
-
-
-
-namespace vmime {
-namespace utility {
-
-
-outputStream& operator<<(outputStream& os, const byte_t c)
-{
- os.write(&c, 1);
- return (os);
-}
-
-
-outputStream& operator<<(outputStream& os, const string& str)
-{
- os.write(str.data(), str.length());
- return (os);
-}
-
-
-size_t bufferedStreamCopy(inputStream& is, outputStream& os)
-{
- return bufferedStreamCopy(is, os, 0, NULL);
-}
-
-
-size_t bufferedStreamCopyRange(inputStream& is, outputStream& os,
- const size_t start, const size_t length)
-{
- const size_t blockSize =
- std::min(is.getBlockSize(), os.getBlockSize());
-
- is.skip(start);
-
- std::vector <byte_t> vbuffer(blockSize);
-
- byte_t* buffer = &vbuffer.front();
- size_t total = 0;
-
- while (!is.eof() && total < length)
- {
- const size_t remaining = std::min(length - total, blockSize);
- const size_t read = is.read(buffer, remaining);
-
- if (read != 0)
- {
- os.write(buffer, read);
- total += read;
- }
- }
-
- return total;
-}
-
-
-size_t bufferedStreamCopy(inputStream& is, outputStream& os,
- const size_t length, progressListener* progress)
-{
- const size_t blockSize =
- std::min(is.getBlockSize(), os.getBlockSize());
-
- std::vector <byte_t> vbuffer(blockSize);
-
- byte_t* buffer = &vbuffer.front();
- size_t total = 0;
-
- if (progress != NULL)
- progress->start(length);
-
- while (!is.eof())
- {
- const size_t read = is.read(buffer, blockSize);
-
- if (read != 0)
- {
- os.write(buffer, read);
- total += read;
-
- if (progress != NULL)
- progress->progress(total, std::max(total, length));
- }
- }
-
- if (progress != NULL)
- progress->stop(total);
-
- return (total);
-}
-
-
-} // utility
-} // vmime
-
diff --git a/src/utility/stringProxy.cpp b/src/utility/stringProxy.cpp
deleted file mode 100644
index 67c96816..00000000
--- a/src/utility/stringProxy.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/stringProxy.hpp"
-
-#include "vmime/utility/outputStreamAdapter.hpp"
-
-#include <iterator>
-#include <algorithm>
-
-
-namespace vmime {
-namespace utility {
-
-
-stringProxy::stringProxy()
- : m_start(0), m_end(0)
-{
-}
-
-
-stringProxy::stringProxy(const stringProxy& s)
- : m_buffer(s.m_buffer), m_start(s.m_start), m_end(s.m_end)
-{
-}
-
-
-stringProxy::stringProxy(const string& s, const size_t start, const size_t end)
- : m_buffer(s), m_start(start),
- m_end(end == std::numeric_limits <size_t>::max() ? s.length() : end)
-{
-}
-
-
-void stringProxy::set(const string& s, const size_t start, const size_t end)
-{
- m_buffer = s;
- m_start = start;
-
- if (end == std::numeric_limits <size_t>::max())
- m_end = s.length();
- else
- m_end = end;
-}
-
-
-void stringProxy::detach()
-{
- m_buffer.clear();
- m_start = m_end = 0;
-}
-
-
-stringProxy& stringProxy::operator=(const stringProxy& s)
-{
- m_buffer = s.m_buffer;
- m_start = s.m_start;
- m_end = s.m_end;
-
- return (*this);
-}
-
-
-stringProxy& stringProxy::operator=(const string& s)
-{
- m_buffer = s;
- m_start = 0;
- m_end = s.length();
-
- return (*this);
-}
-
-
-void stringProxy::extract(outputStream& os, const size_t start, const size_t end,
- utility::progressListener* progress) const
-{
- size_t len = 0;
-
- if (end == std::numeric_limits <size_t>::max())
- len = m_end - start - m_start;
- else if (end > start)
- len = end - start;
-
- if (progress)
- progress->start(len);
-
- os.write(m_buffer.data() + m_start + start, len);
-
- if (progress)
- {
- progress->progress(len, len);
- progress->stop(len);
- }
-}
-
-
-size_t stringProxy::length() const
-{
- return (m_end - m_start);
-}
-
-
-size_t stringProxy::start() const
-{
- return (m_start);
-}
-
-
-size_t stringProxy::end() const
-{
- return (m_end);
-}
-
-
-std::ostream& operator<<(std::ostream& os, const stringProxy& s)
-{
- outputStreamAdapter adapter(os);
- s.extract(adapter);
- return (os);
-}
-
-
-outputStream& operator<<(outputStream& os, const stringProxy& s)
-{
- s.extract(os);
- return (os);
-}
-
-
-} // utility
-} // vmime
diff --git a/src/utility/stringUtils.cpp b/src/utility/stringUtils.cpp
deleted file mode 100644
index dd99d845..00000000
--- a/src/utility/stringUtils.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/stringUtils.hpp"
-#include "vmime/parserHelpers.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-bool stringUtils::isStringEqualNoCase
- (const string& s1, const char* s2, const size_t n)
-{
- // 'n' is the number of characters to compare
- // 's2' must be in lowercase letters only
- if (s1.length() < n)
- return (false);
-
- const std::ctype <char>& fac =
- std::use_facet <std::ctype <char> >(std::locale::classic());
-
- bool equal = true;
-
- for (size_t i = 0 ; equal && i < n ; ++i)
- equal = (fac.tolower(static_cast <unsigned char>(s1[i])) == s2[i]);
-
- return (equal);
-}
-
-
-bool stringUtils::isStringEqualNoCase(const string& s1, const string& s2)
-{
- if (s1.length() != s2.length())
- return (false);
-
- const std::ctype <char>& fac =
- std::use_facet <std::ctype <char> >(std::locale::classic());
-
- bool equal = true;
- const string::const_iterator end = s1.end();
-
- for (string::const_iterator i = s1.begin(), j = s2.begin(); i != end ; ++i, ++j)
- equal = (fac.tolower(static_cast <unsigned char>(*i)) == fac.tolower(static_cast <unsigned char>(*j)));
-
- return (equal);
-}
-
-
-bool stringUtils::isStringEqualNoCase
- (const string::const_iterator begin, const string::const_iterator end,
- const char* s, const size_t n)
-{
- if (static_cast <size_t>(end - begin) < n)
- return (false);
-
- const std::ctype <char>& fac =
- std::use_facet <std::ctype <char> >(std::locale::classic());
-
- bool equal = true;
- char* c = const_cast<char*>(s);
- size_t r = n;
-
- for (string::const_iterator i = begin ; equal && r && *c ; ++i, ++c, --r)
- equal = (fac.tolower(static_cast <unsigned char>(*i)) == static_cast <unsigned char>(*c));
-
- return (r == 0 && equal);
-}
-
-
-const string stringUtils::toLower(const string& str)
-{
- const std::ctype <char>& fac =
- std::use_facet <std::ctype <char> >(std::locale::classic());
-
- string out;
- out.resize(str.size());
-
- for (size_t i = 0, len = str.length() ; i < len ; ++i)
- out[i] = fac.tolower(static_cast <unsigned char>(str[i]));
-
- return out;
-}
-
-
-const string stringUtils::toUpper(const string& str)
-{
- const std::ctype <char>& fac =
- std::use_facet <std::ctype <char> >(std::locale::classic());
-
- string out;
- out.resize(str.size());
-
- for (size_t i = 0, len = str.length() ; i < len ; ++i)
- out[i] = fac.toupper(static_cast <unsigned char>(str[i]));
-
- return out;
-}
-
-
-const string stringUtils::trim(const string& str)
-{
- string::const_iterator b = str.begin();
- string::const_iterator e = str.end();
-
- if (b != e)
- {
- for ( ; b != e && parserHelpers::isSpace(*b) ; ++b) {}
- for ( ; e != b && parserHelpers::isSpace(*(e - 1)) ; --e) {}
- }
-
- return (string(b, e));
-}
-
-
-size_t stringUtils::countASCIIchars
- (const string::const_iterator begin, const string::const_iterator end)
-{
- size_t count = 0;
-
- for (string::const_iterator i = begin ; i != end ; ++i)
- {
- if (parserHelpers::isAscii(*i))
- {
- if (*i != '=' || ((i + 1) != end && *(i + 1) != '?')) // To avoid bad behaviour...
- ++count;
- }
- }
-
- return (count);
-}
-
-
-bool stringUtils::is7bit(const string& str)
-{
- return countASCIIchars(str.begin(), str.end()) == str.length();
-}
-
-
-size_t stringUtils::findFirstNonASCIIchar
- (const string::const_iterator begin, const string::const_iterator end)
-{
- size_t pos = string::npos;
-
- for (string::const_iterator i = begin ; i != end ; ++i)
- {
- if (!parserHelpers::isAscii(*i))
- {
- pos = i - begin;
- break;
- }
- }
-
- return pos;
-}
-
-
-const string stringUtils::unquote(const string& str)
-{
- if (str.length() < 2)
- return str;
-
- if (str[0] != '"' || str[str.length() - 1] != '"')
- return str;
-
- string res;
- res.reserve(str.length());
-
- bool escaped = false;
-
- for (string::const_iterator it = str.begin() + 1, end = str.end() - 1 ; it != end ; ++it)
- {
- const char c = *it;
-
- if (escaped)
- {
- res += c;
- escaped = false;
- }
- else if (!escaped && c == '\\')
- {
- escaped = true;
- }
- else
- {
- res += c;
- }
- }
-
- return res;
-}
-
-
-bool stringUtils::needQuoting(const string& str, const string& specialChars)
-{
- return str.find_first_of(specialChars.c_str()) != string::npos;
-}
-
-
-string stringUtils::quote
- (const string& str, const string& escapeSpecialChars, const string& escapeChar)
-{
- std::ostringstream oss;
- size_t lastPos = 0, pos = 0;
-
- while ((pos = str.find_first_of(escapeSpecialChars, lastPos)) != string::npos)
- {
- oss << str.substr(lastPos, pos - lastPos)
- << escapeChar
- << str[pos];
-
- lastPos = pos + 1;
- }
-
- oss << str.substr(lastPos);
-
- return oss.str();
-}
-
-
-} // utility
-} // vmime
diff --git a/src/utility/sync/criticalSection.cpp b/src/utility/sync/criticalSection.cpp
deleted file mode 100644
index f2512d14..00000000
--- a/src/utility/sync/criticalSection.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/sync/criticalSection.hpp"
-
-
-namespace vmime {
-namespace utility {
-namespace sync {
-
-
-criticalSection::criticalSection()
-{
-}
-
-
-criticalSection::~criticalSection()
-{
-}
-
-
-} // sync
-} // utility
-} // vmime
diff --git a/src/utility/url.cpp b/src/utility/url.cpp
deleted file mode 100644
index ce0dc39a..00000000
--- a/src/utility/url.cpp
+++ /dev/null
@@ -1,406 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/url.hpp"
-
-#include "vmime/parserHelpers.hpp"
-#include "vmime/utility/urlUtils.hpp"
-#include "vmime/exception.hpp"
-
-#include <sstream>
-
-
-namespace vmime {
-namespace utility {
-
-
-// Unspecified port
-const port_t url::UNSPECIFIED_PORT = static_cast <port_t>(-1);
-
-// Known protocols
-const string url::PROTOCOL_FILE = "file";
-const string url::PROTOCOL_HTTP = "http";
-const string url::PROTOCOL_FTP = "ftp";
-
-
-
-url::url(const string& s)
-{
- parse(s);
-}
-
-
-url::url(const url& u)
-{
- operator=(u);
-}
-
-
-url::url(const string& protocol, const string& host, const port_t port,
- const string& path, const string& username, const string& password)
- : m_protocol(protocol), m_username(username), m_password(password),
- m_host(host), m_port(port), m_path(path)
-{
-}
-
-
-url& url::operator=(const url& u)
-{
- m_protocol = u.m_protocol;
-
- m_username = u.m_username;
- m_password = u.m_password;
-
- m_host = u.m_host;
- m_port = u.m_port;
-
- m_path = u.m_path;
-
- m_params = u.m_params;
-
- return (*this);
-}
-
-
-url& url::operator=(const string& s)
-{
- parse(s);
-
- return (*this);
-}
-
-
-url::operator string() const
-{
- return build();
-}
-
-
-const string url::build() const
-{
- std::ostringstream oss;
- oss.imbue(std::locale::classic());
-
- oss << m_protocol << "://";
-
- if (!m_username.empty())
- {
- oss << urlUtils::encode(m_username);
-
- if (!m_password.empty())
- {
- oss << ":";
- oss << urlUtils::encode(m_password);
- }
-
- oss << "@";
- }
-
- oss << urlUtils::encode(m_host);
-
- if (m_port != UNSPECIFIED_PORT)
- {
- oss << ":";
- oss << m_port;
- }
-
- if (!m_path.empty())
- {
- oss << "/";
- oss << urlUtils::encode(m_path);
- }
-
-
- if (!m_params.empty())
- {
- if (m_path.empty())
- oss << "/";
-
- oss << "?";
-
- for (std::map <string, string>::const_iterator it = m_params.begin() ;
- it != m_params.end() ; ++it)
- {
- if (it != m_params.begin())
- oss << "&";
-
- oss << urlUtils::encode((*it).first);
- oss << "=";
- oss << urlUtils::encode((*it).second);
- }
- }
-
- return (oss.str());
-}
-
-
-void url::parse(const string& str)
-{
- // Protocol
- const size_t protoEnd = str.find("://");
- if (protoEnd == string::npos) throw exceptions::malformed_url("No protocol separator");
-
- const string proto =
- utility::stringUtils::toLower(string(str.begin(), str.begin() + protoEnd));
-
- // Username/password
- size_t slashPos = str.find('/', protoEnd + 3);
- if (slashPos == string::npos) slashPos = str.length();
-
- size_t atPos = str.rfind('@', slashPos);
- string hostPart;
-
- string username;
- string password;
-
- if (proto == PROTOCOL_FILE)
- {
- // No user name, password and host part.
- slashPos = protoEnd + 3;
- }
- else
- {
- if (atPos != string::npos && atPos < slashPos)
- {
- const string userPart(str.begin() + protoEnd + 3, str.begin() + atPos);
- const size_t colonPos = userPart.find(':');
-
- if (colonPos == string::npos)
- {
- username = userPart;
- }
- else
- {
- username = string(userPart.begin(), userPart.begin() + colonPos);
- password = string(userPart.begin() + colonPos + 1, userPart.end());
- }
-
- hostPart = string(str.begin() + atPos + 1, str.begin() + slashPos);
- }
- else
- {
- hostPart = string(str.begin() + protoEnd + 3, str.begin() + slashPos);
- }
- }
-
- // Host/port
- const size_t colonPos = hostPart.find(':');
-
- string host;
- string port;
-
- if (colonPos == string::npos)
- {
- host = utility::stringUtils::trim(hostPart);
- }
- else
- {
- host = utility::stringUtils::trim(string(hostPart.begin(), hostPart.begin() + colonPos));
- port = utility::stringUtils::trim(string(hostPart.begin() + colonPos + 1, hostPart.end()));
- }
-
- // Path
- string path = utility::stringUtils::trim(string(str.begin() + slashPos, str.end()));
- string params;
-
- size_t paramSep = path.find_first_of('?');
-
- if (paramSep != string::npos)
- {
- params = string(path.begin() + paramSep + 1, path.end());
- path.erase(path.begin() + paramSep, path.end());
- }
-
- if (path == "/")
- path.clear();
-
- // Some sanity check
- if (proto.empty())
- throw exceptions::malformed_url("No protocol specified");
- else if (host.empty())
- {
- // Accept empty host (eg. "file:///home/vincent/mydoc")
- if (proto != PROTOCOL_FILE)
- throw exceptions::malformed_url("No host specified");
- }
-
- bool onlyDigit = true;
-
- for (string::const_iterator it = port.begin() ;
- onlyDigit && it != port.end() ; ++it)
- {
- onlyDigit = parserHelpers::isDigit(*it);
- }
-
- if (!onlyDigit)
- throw exceptions::malformed_url("Port can only contain digits");
-
- std::istringstream iss(port);
- port_t portNum = 0;
-
- iss >> portNum;
-
- if (portNum == 0)
- portNum = UNSPECIFIED_PORT;
-
- // Extract parameters
- m_params.clear();
-
- if (!params.empty())
- {
- size_t pos = 0;
-
- do
- {
- const size_t start = pos;
-
- pos = params.find_first_of('&', pos);
-
- const size_t equal = params.find_first_of('=', start);
- const size_t end =
- (pos == string::npos ? params.length() : pos);
-
- string name;
- string value;
-
- if (equal == string::npos || equal > pos) // no value
- {
- name = string(params.begin() + start, params.begin() + end);
- value = name;
- }
- else
- {
- name = string(params.begin() + start, params.begin() + equal);
- value = string(params.begin() + equal + 1, params.begin() + end);
- }
-
- name = urlUtils::decode(name);
- value = urlUtils::decode(value);
-
- m_params[name] = value;
-
- if (pos != string::npos)
- ++pos;
- }
- while (pos != string::npos);
- }
-
- // Now, save URL parts
- m_protocol = proto;
-
- m_username = urlUtils::decode(username);
- m_password = urlUtils::decode(password);
-
- m_host = urlUtils::decode(host);
- m_port = portNum;
-
- m_path = urlUtils::decode(path);
-}
-
-
-const string& url::getProtocol() const
-{
- return (m_protocol);
-}
-
-
-void url::setProtocol(const string& protocol)
-{
- m_protocol = protocol;
-}
-
-
-const string& url::getUsername() const
-{
- return (m_username);
-}
-
-
-void url::setUsername(const string& username)
-{
- m_username = username;
-}
-
-
-const string& url::getPassword() const
-{
- return (m_password);
-}
-
-
-void url::setPassword(const string& password)
-{
- m_password = password;
-}
-
-
-const string& url::getHost() const
-{
- return (m_host);
-}
-
-
-void url::setHost(const string& host)
-{
- m_host = host;
-}
-
-
-port_t url::getPort() const
-{
- return (m_port);
-}
-
-
-void url::setPort(const port_t port)
-{
- m_port = port;
-}
-
-
-const string& url::getPath() const
-{
- return (m_path);
-}
-
-
-void url::setPath(const string& path)
-{
- m_path = path;
-}
-
-
-const std::map <string, string>& url::getParams() const
-{
- return (m_params);
-}
-
-
-std::map <string, string>& url::getParams()
-{
- return (m_params);
-}
-
-
-} // utility
-} // vmime
diff --git a/src/utility/urlUtils.cpp b/src/utility/urlUtils.cpp
deleted file mode 100644
index 20818764..00000000
--- a/src/utility/urlUtils.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/utility/urlUtils.hpp"
-#include "vmime/parserHelpers.hpp"
-
-
-namespace vmime {
-namespace utility {
-
-
-const string urlUtils::encode(const string& s)
-{
- static const string RESERVED_CHARS =
- /* reserved */ "$&+,/:;=?@"
- /* unsafe */ "<>#%{}[]|\\^\"~`";
-
- string result;
- result.reserve(s.length());
-
- for (string::const_iterator it = s.begin() ; it != s.end() ; ++it)
- {
- const char c = *it;
-
- if (parserHelpers::isPrint(c) && !parserHelpers::isSpace(c) &&
- static_cast <unsigned char>(c) <= 127 &&
- RESERVED_CHARS.find(c) == string::npos)
- {
- result += c;
- }
- else
- {
- char hex[4];
- const unsigned char k = static_cast <unsigned char>(c);
-
- hex[0] = '%';
- hex[1] = "0123456789ABCDEF"[k / 16];
- hex[2] = "0123456789ABCDEF"[k % 16];
- hex[3] = 0;
-
- result += hex;
- }
- }
-
- return (result);
-}
-
-
-const string urlUtils::decode(const string& s)
-{
- string result;
- result.reserve(s.length());
-
- for (string::const_iterator it = s.begin() ; it != s.end() ; )
- {
- const char c = *it;
-
- switch (c)
- {
- case '%':
- {
- ++it; // skip '%'
-
- const char_t p = (it != s.end() ? *(it++) : 0);
- const char_t q = (it != s.end() ? *(it++) : 0);
-
- unsigned int r = 0;
-
- switch (p)
- {
- case 0: r = '%'; break;
- case 'a': case 'A': r = 10; break;
- case 'b': case 'B': r = 11; break;
- case 'c': case 'C': r = 12; break;
- case 'd': case 'D': r = 13; break;
- case 'e': case 'E': r = 14; break;
- case 'f': case 'F': r = 15; break;
- default: r = p - '0'; break;
- }
-
- if (q != 0)
- {
- r *= 16;
-
- switch (q)
- {
- case 'a': case 'A': r += 10; break;
- case 'b': case 'B': r += 11; break;
- case 'c': case 'C': r += 12; break;
- case 'd': case 'D': r += 13; break;
- case 'e': case 'E': r += 14; break;
- case 'f': case 'F': r += 15; break;
- default: r += q - '0'; break;
- }
- }
-
- result += static_cast <char>(r);
- break;
- }
- default:
-
- result += c;
- ++it;
- break;
- }
- }
-
- return (result);
-}
-
-
-} // utility
-} // vmime