vmime/src/base.cpp

162 lines
3.8 KiB
C++
Raw Normal View History

2004-10-05 10:28:21 +00:00
//
2005-03-18 21:33:11 +00:00
// VMime library (http://www.vmime.org)
// Copyright (C) 2002-2013 Vincent Richard <vincent@vmime.org>
2004-10-05 10:28:21 +00:00
//
// 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
2004-10-05 10:28:21 +00:00
// 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.
//
2005-09-17 10:10:29 +00:00
// 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.
2004-10-05 10:28:21 +00:00
//
#include "vmime/config.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/charset.hpp"
#include "vmime/base.hpp"
2004-10-05 10:28:21 +00:00
2008-10-12 13:59:09 +00:00
#include "vmime/utility/encoder/encoder.hpp"
#include "vmime/utility/encoder/b64Encoder.hpp"
#include "vmime/utility/encoder/qpEncoder.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/text.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/parserHelpers.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/utility/stringUtils.hpp"
2004-10-21 15:05:47 +00:00
2004-10-05 10:28:21 +00:00
// For initializing
2008-10-12 13:59:09 +00:00
#include "vmime/utility/encoder/encoderFactory.hpp"
#include "vmime/headerFieldFactory.hpp"
#include "vmime/textPartFactory.hpp"
#include "vmime/generationContext.hpp"
#include "vmime/parsingContext.hpp"
2004-10-05 10:28:21 +00:00
#if VMIME_HAVE_MESSAGING_FEATURES
#include "vmime/net/serviceFactory.hpp"
2004-10-05 10:28:21 +00:00
#endif
namespace vmime
{
/** "Null" (empty) string.
*/
const string NULL_STRING;
/** "Null" (empty) text.
*/
const text NULL_TEXT;
/** "Null" (empty) word.
*/
const word NULL_WORD("", vmime::charset(vmime::charsets::US_ASCII));
2004-10-05 10:28:21 +00:00
2005-11-05 09:47:08 +00:00
/** Return the library name (eg: "libvmime").
2004-10-05 10:28:21 +00:00
*
* @return library name
*/
const string libname() { return (VMIME_PACKAGE); }
2005-11-05 09:47:08 +00:00
/** Return the library version (eg: "0.5.2").
2004-10-05 10:28:21 +00:00
*
* @return library version
*/
const string libversion() { return (VMIME_VERSION " (" __DATE__ " " __TIME__ ")"); }
2005-11-05 09:47:08 +00:00
/** Return the library API version (eg: "6:1:6").
2004-12-30 09:32:32 +00:00
*
* @return library API version
*/
const string libapi() { return (VMIME_API); }
2004-10-05 10:28:21 +00:00
// New line sequence to be used when folding header fields.
2004-10-21 15:05:47 +00:00
const string NEW_LINE_SEQUENCE = "\r\n ";
const size_t NEW_LINE_SEQUENCE_LENGTH = 1; // space
2004-10-05 10:28:21 +00:00
/** The CR-LF sequence.
*/
2004-10-21 15:05:47 +00:00
const string CRLF = "\r\n";
2004-10-05 10:28:21 +00:00
/** The current MIME version supported by VMime.
*/
const string SUPPORTED_MIME_VERSION = "1.0";
2004-10-05 10:28:21 +00:00
2013-11-21 21:16:57 +00:00
#ifndef VMIME_BUILDING_DOC
/** Null shared pointer.
2005-07-12 22:28:02 +00:00
*/
2013-11-21 21:16:57 +00:00
nullPtrType null;
#endif // VMIME_BUILDING_DOC
2005-07-12 22:28:02 +00:00
2004-10-05 10:28:21 +00:00
// Line length limits
namespace lineLengthLimits
{
const size_t infinite = std::numeric_limits <size_t>::max();
2004-10-05 10:28:21 +00:00
}
const size_t npos = std::numeric_limits <size_t>::max();
2004-10-05 10:28:21 +00:00
2004-12-22 14:55:43 +00:00
#ifndef VMIME_BUILDING_DOC
2004-10-05 10:28:21 +00:00
//
// V-Mime Initializer
// ====================
//
// Force instanciation of singletons. This is to prevent problems that might
// happen in multithreaded applications...
//
// WARNING: we put the initializer at the end of this compilation unit. This
// ensures this object is initialized _after_ all other global variables in
// the same compilation unit (in particular "lineLengthLimits::infinite",
// which is used by the generate() function (called from "textPartFactory"
// constructor, for example).
//
class initializer
{
public:
initializer()
{
parsingContext::getDefaultContext();
generationContext::getDefaultContext();
2004-10-05 10:28:21 +00:00
2008-10-12 13:59:09 +00:00
utility::encoder::encoderFactory::getInstance();
2004-10-05 10:28:21 +00:00
headerFieldFactory::getInstance();
textPartFactory::getInstance();
#if VMIME_HAVE_MESSAGING_FEATURES
net::serviceFactory::getInstance();
2004-10-05 10:28:21 +00:00
#endif
}
};
initializer theInitializer;
2004-12-22 14:55:43 +00:00
#endif // VMIME_BUILDING_DOC
2004-10-05 10:28:21 +00:00
} // vmime