mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-12 10:13:51 +01:00
enh: #4216: use std::string literals
This commit is contained in:
parent
d3525945bd
commit
33638df51e
@ -32,6 +32,9 @@
|
|||||||
#include "Poco/PatternFormatter.h"
|
#include "Poco/PatternFormatter.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
|
|
||||||
@ -84,37 +87,37 @@ LoggingFactory& LoggingFactory::defaultFactory()
|
|||||||
|
|
||||||
void LoggingFactory::registerBuiltins()
|
void LoggingFactory::registerBuiltins()
|
||||||
{
|
{
|
||||||
_channelFactory.registerClass("AsyncChannel", new Instantiator<AsyncChannel, Channel>);
|
_channelFactory.registerClass("AsyncChannel"s, new Instantiator<AsyncChannel, Channel>);
|
||||||
#if defined(POCO_OS_FAMILY_WINDOWS)
|
#if defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
_channelFactory.registerClass("ConsoleChannel", new Instantiator<WindowsConsoleChannel, Channel>);
|
_channelFactory.registerClass("ConsoleChannel"s, new Instantiator<WindowsConsoleChannel, Channel>);
|
||||||
_channelFactory.registerClass("ColorConsoleChannel", new Instantiator<WindowsColorConsoleChannel, Channel>);
|
_channelFactory.registerClass("ColorConsoleChannel"s, new Instantiator<WindowsColorConsoleChannel, Channel>);
|
||||||
#else
|
#else
|
||||||
_channelFactory.registerClass("ConsoleChannel", new Instantiator<ConsoleChannel, Channel>);
|
_channelFactory.registerClass("ConsoleChannel"s, new Instantiator<ConsoleChannel, Channel>);
|
||||||
_channelFactory.registerClass("ColorConsoleChannel", new Instantiator<ColorConsoleChannel, Channel>);
|
_channelFactory.registerClass("ColorConsoleChannel"s, new Instantiator<ColorConsoleChannel, Channel>);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef POCO_NO_FILECHANNEL
|
#ifndef POCO_NO_FILECHANNEL
|
||||||
_channelFactory.registerClass("FileChannel", new Instantiator<FileChannel, Channel>);
|
_channelFactory.registerClass("FileChannel"s, new Instantiator<FileChannel, Channel>);
|
||||||
_channelFactory.registerClass("SimpleFileChannel", new Instantiator<SimpleFileChannel, Channel>);
|
_channelFactory.registerClass("SimpleFileChannel"s, new Instantiator<SimpleFileChannel, Channel>);
|
||||||
#endif
|
#endif
|
||||||
_channelFactory.registerClass("FormattingChannel", new Instantiator<FormattingChannel, Channel>);
|
_channelFactory.registerClass("FormattingChannel"s, new Instantiator<FormattingChannel, Channel>);
|
||||||
#ifndef POCO_NO_SPLITTERCHANNEL
|
#ifndef POCO_NO_SPLITTERCHANNEL
|
||||||
_channelFactory.registerClass("SplitterChannel", new Instantiator<SplitterChannel, Channel>);
|
_channelFactory.registerClass("SplitterChannel"s, new Instantiator<SplitterChannel, Channel>);
|
||||||
#endif
|
#endif
|
||||||
_channelFactory.registerClass("NullChannel", new Instantiator<NullChannel, Channel>);
|
_channelFactory.registerClass("NullChannel"s, new Instantiator<NullChannel, Channel>);
|
||||||
_channelFactory.registerClass("EventChannel", new Instantiator<EventChannel, Channel>);
|
_channelFactory.registerClass("EventChannel"s, new Instantiator<EventChannel, Channel>);
|
||||||
|
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX)
|
||||||
#ifndef POCO_NO_SYSLOGCHANNEL
|
#ifndef POCO_NO_SYSLOGCHANNEL
|
||||||
_channelFactory.registerClass("SyslogChannel", new Instantiator<SyslogChannel, Channel>);
|
_channelFactory.registerClass("SyslogChannel"s, new Instantiator<SyslogChannel, Channel>);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(POCO_OS_FAMILY_WINDOWS)
|
#if defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
_channelFactory.registerClass("EventLogChannel", new Instantiator<EventLogChannel, Channel>);
|
_channelFactory.registerClass("EventLogChannel"s, new Instantiator<EventLogChannel, Channel>);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_formatterFactory.registerClass("PatternFormatter", new Instantiator<PatternFormatter, Formatter>);
|
_formatterFactory.registerClass("PatternFormatter"s, new Instantiator<PatternFormatter, Formatter>);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,10 +21,12 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <climits>
|
#include <climits>
|
||||||
|
|
||||||
|
|
||||||
#if !defined(POCO_VXWORKS)
|
#if !defined(POCO_VXWORKS)
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if POCO_OS == POCO_OS_MAC_OS_X
|
#if POCO_OS == POCO_OS_MAC_OS_X
|
||||||
#include <mach-o/dyld.h>
|
#include <mach-o/dyld.h>
|
||||||
#elif POCO_OS == POCO_OS_FREE_BSD
|
#elif POCO_OS == POCO_OS_FREE_BSD
|
||||||
@ -38,8 +40,13 @@
|
|||||||
#define PATH_MAX 4096 // fallback
|
#define PATH_MAX 4096 // fallback
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
|
|
||||||
std::string PathImpl::selfImpl()
|
std::string PathImpl::selfImpl()
|
||||||
{
|
{
|
||||||
std::string path;
|
std::string path;
|
||||||
@ -115,9 +122,9 @@ std::string PathImpl::homeImpl()
|
|||||||
else return "/";
|
else return "/";
|
||||||
#else
|
#else
|
||||||
std::string path;
|
std::string path;
|
||||||
if (EnvironmentImpl::hasImpl("HOME"))
|
if (EnvironmentImpl::hasImpl("HOME"s))
|
||||||
{
|
{
|
||||||
path = EnvironmentImpl::getImpl("HOME");
|
path = EnvironmentImpl::getImpl("HOME"s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -154,8 +161,8 @@ std::string PathImpl::configHomeImpl()
|
|||||||
return path;
|
return path;
|
||||||
#else
|
#else
|
||||||
std::string path;
|
std::string path;
|
||||||
if (EnvironmentImpl::hasImpl("XDG_CONFIG_HOME"))
|
if (EnvironmentImpl::hasImpl("XDG_CONFIG_HOME"s))
|
||||||
path = EnvironmentImpl::getImpl("XDG_CONFIG_HOME");
|
path = EnvironmentImpl::getImpl("XDG_CONFIG_HOME"s);
|
||||||
if (!path.empty())
|
if (!path.empty())
|
||||||
return path;
|
return path;
|
||||||
|
|
||||||
@ -181,8 +188,8 @@ std::string PathImpl::dataHomeImpl()
|
|||||||
return path;
|
return path;
|
||||||
#else
|
#else
|
||||||
std::string path;
|
std::string path;
|
||||||
if (EnvironmentImpl::hasImpl("XDG_DATA_HOME"))
|
if (EnvironmentImpl::hasImpl("XDG_DATA_HOME"s))
|
||||||
path = EnvironmentImpl::getImpl("XDG_DATA_HOME");
|
path = EnvironmentImpl::getImpl("XDG_DATA_HOME"s);
|
||||||
if (!path.empty())
|
if (!path.empty())
|
||||||
return path;
|
return path;
|
||||||
|
|
||||||
@ -208,8 +215,8 @@ std::string PathImpl::cacheHomeImpl()
|
|||||||
return path;
|
return path;
|
||||||
#else
|
#else
|
||||||
std::string path;
|
std::string path;
|
||||||
if (EnvironmentImpl::hasImpl("XDG_CACHE_HOME"))
|
if (EnvironmentImpl::hasImpl("XDG_CACHE_HOME"s))
|
||||||
path = EnvironmentImpl::getImpl("XDG_CACHE_HOME");
|
path = EnvironmentImpl::getImpl("XDG_CACHE_HOME"s);
|
||||||
if (!path.empty())
|
if (!path.empty())
|
||||||
return path;
|
return path;
|
||||||
|
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace Net {
|
namespace Net {
|
||||||
|
|
||||||
@ -73,7 +76,7 @@ void HTTPServerConnection::run()
|
|||||||
response.setVersion(request.getVersion());
|
response.setVersion(request.getVersion());
|
||||||
response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive());
|
response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive());
|
||||||
if (!server.empty())
|
if (!server.empty())
|
||||||
response.set("Server", server);
|
response.set("Server"s, server);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
session.requestTrailer().clear();
|
session.requestTrailer().clear();
|
||||||
|
@ -37,6 +37,7 @@ using Poco::StreamCopier;
|
|||||||
using Poco::OpenFileException;
|
using Poco::OpenFileException;
|
||||||
using Poco::DateTimeFormatter;
|
using Poco::DateTimeFormatter;
|
||||||
using Poco::DateTimeFormat;
|
using Poco::DateTimeFormat;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -112,7 +113,7 @@ void HTTPServerResponseImpl::sendFile(const std::string& path, const std::string
|
|||||||
File f(path);
|
File f(path);
|
||||||
Timestamp dateTime = f.getLastModified();
|
Timestamp dateTime = f.getLastModified();
|
||||||
File::FileSize length = f.getSize();
|
File::FileSize length = f.getSize();
|
||||||
set("Last-Modified", DateTimeFormatter::format(dateTime, DateTimeFormat::HTTP_FORMAT));
|
set("Last-Modified"s, DateTimeFormatter::format(dateTime, DateTimeFormat::HTTP_FORMAT));
|
||||||
#if defined(POCO_HAVE_INT64)
|
#if defined(POCO_HAVE_INT64)
|
||||||
setContentLength64(length);
|
setContentLength64(length);
|
||||||
#else
|
#else
|
||||||
@ -159,7 +160,7 @@ void HTTPServerResponseImpl::redirect(const std::string& uri, HTTPStatus status)
|
|||||||
setChunkedTransferEncoding(false);
|
setChunkedTransferEncoding(false);
|
||||||
|
|
||||||
setStatusAndReason(status);
|
setStatusAndReason(status);
|
||||||
set("Location", uri);
|
set("Location"s, uri);
|
||||||
|
|
||||||
_pStream = new HTTPHeaderOutputStream(_session);
|
_pStream = new HTTPHeaderOutputStream(_session);
|
||||||
write(*_pStream);
|
write(*_pStream);
|
||||||
@ -174,7 +175,7 @@ void HTTPServerResponseImpl::requireAuthentication(const std::string& realm)
|
|||||||
std::string auth("Basic realm=\"");
|
std::string auth("Basic realm=\"");
|
||||||
auth.append(realm);
|
auth.append(realm);
|
||||||
auth.append("\"");
|
auth.append("\"");
|
||||||
set("WWW-Authenticate", auth);
|
set("WWW-Authenticate"s, auth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ using Poco::URIStreamFactory;
|
|||||||
using Poco::URI;
|
using Poco::URI;
|
||||||
using Poco::URIStreamOpener;
|
using Poco::URIStreamOpener;
|
||||||
using Poco::UnbufferedStreamBuf;
|
using Poco::UnbufferedStreamBuf;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -115,11 +116,11 @@ std::istream* HTTPStreamFactory::open(const URI& uri)
|
|||||||
cred.authenticate(req, res);
|
cred.authenticate(req, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
req.set("User-Agent", Poco::format("poco/%d.%d.%d",
|
req.set("User-Agent"s, Poco::format("poco/%d.%d.%d"s,
|
||||||
(POCO_VERSION >> 24) & 0xFF,
|
(POCO_VERSION >> 24) & 0xFF,
|
||||||
(POCO_VERSION >> 16) & 0xFF,
|
(POCO_VERSION >> 16) & 0xFF,
|
||||||
(POCO_VERSION >> 8) & 0xFF));
|
(POCO_VERSION >> 8) & 0xFF));
|
||||||
req.set("Accept", "*/*");
|
req.set("Accept"s, "*/*"s);
|
||||||
|
|
||||||
pSession->sendRequest(req);
|
pSession->sendRequest(req);
|
||||||
std::istream& rs = pSession->receiveResponse(res);
|
std::istream& rs = pSession->receiveResponse(res);
|
||||||
@ -129,7 +130,7 @@ std::istream* HTTPStreamFactory::open(const URI& uri)
|
|||||||
res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT);
|
res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT);
|
||||||
if (moved)
|
if (moved)
|
||||||
{
|
{
|
||||||
resolvedURI.resolve(res.get("Location"));
|
resolvedURI.resolve(res.get("Location"s));
|
||||||
if (!username.empty())
|
if (!username.empty())
|
||||||
{
|
{
|
||||||
resolvedURI.setUserInfo(username + ":" + password);
|
resolvedURI.setUserInfo(username + ":" + password);
|
||||||
@ -147,7 +148,7 @@ std::istream* HTTPStreamFactory::open(const URI& uri)
|
|||||||
// URI of the proxy. The recipient is expected to repeat this
|
// URI of the proxy. The recipient is expected to repeat this
|
||||||
// single request via the proxy. 305 responses MUST only be generated by origin servers.
|
// single request via the proxy. 305 responses MUST only be generated by origin servers.
|
||||||
// only use for one single request!
|
// only use for one single request!
|
||||||
proxyUri.resolve(res.get("Location"));
|
proxyUri.resolve(res.get("Location"s));
|
||||||
delete pSession;
|
delete pSession;
|
||||||
pSession = 0;
|
pSession = 0;
|
||||||
retry = true; // only allow useproxy once
|
retry = true; // only allow useproxy once
|
||||||
@ -174,13 +175,13 @@ std::istream* HTTPStreamFactory::open(const URI& uri)
|
|||||||
|
|
||||||
void HTTPStreamFactory::registerFactory()
|
void HTTPStreamFactory::registerFactory()
|
||||||
{
|
{
|
||||||
URIStreamOpener::defaultOpener().registerStreamFactory("http", new HTTPStreamFactory);
|
URIStreamOpener::defaultOpener().registerStreamFactory("http"s, new HTTPStreamFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HTTPStreamFactory::unregisterFactory()
|
void HTTPStreamFactory::unregisterFactory()
|
||||||
{
|
{
|
||||||
URIStreamOpener::defaultOpener().unregisterStreamFactory("http");
|
URIStreamOpener::defaultOpener().unregisterStreamFactory("http"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,9 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace Net {
|
namespace Net {
|
||||||
|
|
||||||
@ -192,19 +195,19 @@ int WebSocket::getMaxPayloadSize() const
|
|||||||
|
|
||||||
WebSocketImpl* WebSocket::accept(HTTPServerRequest& request, HTTPServerResponse& response)
|
WebSocketImpl* WebSocket::accept(HTTPServerRequest& request, HTTPServerResponse& response)
|
||||||
{
|
{
|
||||||
if (request.hasToken("Connection", "upgrade") && icompare(request.get("Upgrade", ""), "websocket") == 0)
|
if (request.hasToken("Connection"s, "upgrade"s) && icompare(request.get("Upgrade"s, ""s), "websocket"s) == 0)
|
||||||
{
|
{
|
||||||
std::string version = request.get("Sec-WebSocket-Version", "");
|
std::string version = request.get("Sec-WebSocket-Version"s, ""s);
|
||||||
if (version.empty()) throw WebSocketException("Missing Sec-WebSocket-Version in handshake request", WS_ERR_HANDSHAKE_NO_VERSION);
|
if (version.empty()) throw WebSocketException("Missing Sec-WebSocket-Version in handshake request", WS_ERR_HANDSHAKE_NO_VERSION);
|
||||||
if (version != WEBSOCKET_VERSION) throw WebSocketException("Unsupported WebSocket version requested", version, WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION);
|
if (version != WEBSOCKET_VERSION) throw WebSocketException("Unsupported WebSocket version requested", version, WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION);
|
||||||
std::string key = request.get("Sec-WebSocket-Key", "");
|
std::string key = request.get("Sec-WebSocket-Key"s, ""s);
|
||||||
Poco::trimInPlace(key);
|
Poco::trimInPlace(key);
|
||||||
if (key.empty()) throw WebSocketException("Missing Sec-WebSocket-Key in handshake request", WS_ERR_HANDSHAKE_NO_KEY);
|
if (key.empty()) throw WebSocketException("Missing Sec-WebSocket-Key in handshake request", WS_ERR_HANDSHAKE_NO_KEY);
|
||||||
|
|
||||||
response.setStatusAndReason(HTTPResponse::HTTP_SWITCHING_PROTOCOLS);
|
response.setStatusAndReason(HTTPResponse::HTTP_SWITCHING_PROTOCOLS);
|
||||||
response.set("Upgrade", "websocket");
|
response.set("Upgrade"s, "websocket"s);
|
||||||
response.set("Connection", "Upgrade");
|
response.set("Connection"s, "Upgrade"s);
|
||||||
response.set("Sec-WebSocket-Accept", computeAccept(key));
|
response.set("Sec-WebSocket-Accept"s, computeAccept(key));
|
||||||
response.setContentLength(HTTPResponse::UNKNOWN_CONTENT_LENGTH);
|
response.setContentLength(HTTPResponse::UNKNOWN_CONTENT_LENGTH);
|
||||||
response.send().flush();
|
response.send().flush();
|
||||||
|
|
||||||
@ -222,10 +225,10 @@ WebSocketImpl* WebSocket::connect(HTTPClientSession& cs, HTTPRequest& request, H
|
|||||||
cs.proxyTunnel();
|
cs.proxyTunnel();
|
||||||
}
|
}
|
||||||
std::string key = createKey();
|
std::string key = createKey();
|
||||||
request.set("Connection", "Upgrade");
|
request.set("Connection"s, "Upgrade"s);
|
||||||
request.set("Upgrade", "websocket");
|
request.set("Upgrade"s, "websocket"s);
|
||||||
request.set("Sec-WebSocket-Version", WEBSOCKET_VERSION);
|
request.set("Sec-WebSocket-Version"s, WEBSOCKET_VERSION);
|
||||||
request.set("Sec-WebSocket-Key", key);
|
request.set("Sec-WebSocket-Key"s, key);
|
||||||
request.setChunkedTransferEncoding(false);
|
request.setChunkedTransferEncoding(false);
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
@ -272,13 +275,13 @@ WebSocketImpl* WebSocket::connect(HTTPClientSession& cs, HTTPRequest& request, H
|
|||||||
|
|
||||||
WebSocketImpl* WebSocket::completeHandshake(HTTPClientSession& cs, HTTPResponse& response, const std::string& key)
|
WebSocketImpl* WebSocket::completeHandshake(HTTPClientSession& cs, HTTPResponse& response, const std::string& key)
|
||||||
{
|
{
|
||||||
std::string connection = response.get("Connection", "");
|
std::string connection = response.get("Connection"s, ""s);
|
||||||
if (Poco::icompare(connection, "Upgrade") != 0)
|
if (Poco::icompare(connection, "Upgrade"s) != 0)
|
||||||
throw WebSocketException("No Connection: Upgrade header in handshake response", WS_ERR_NO_HANDSHAKE);
|
throw WebSocketException("No Connection: Upgrade header in handshake response", WS_ERR_NO_HANDSHAKE);
|
||||||
std::string upgrade = response.get("Upgrade", "");
|
std::string upgrade = response.get("Upgrade"s, ""s);
|
||||||
if (Poco::icompare(upgrade, "websocket") != 0)
|
if (Poco::icompare(upgrade, "websocket"s) != 0)
|
||||||
throw WebSocketException("No Upgrade: websocket header in handshake response", WS_ERR_NO_HANDSHAKE);
|
throw WebSocketException("No Upgrade: websocket header in handshake response", WS_ERR_NO_HANDSHAKE);
|
||||||
std::string accept = response.get("Sec-WebSocket-Accept", "");
|
std::string accept = response.get("Sec-WebSocket-Accept"s, ""s);
|
||||||
if (accept != computeAccept(key))
|
if (accept != computeAccept(key))
|
||||||
throw WebSocketException("Invalid or missing Sec-WebSocket-Accept header in handshake response", WS_ERR_HANDSHAKE_ACCEPT);
|
throw WebSocketException("Invalid or missing Sec-WebSocket-Accept header in handshake response", WS_ERR_HANDSHAKE_ACCEPT);
|
||||||
return new WebSocketImpl(static_cast<StreamSocketImpl*>(cs.detachSocket().impl()), cs, true);
|
return new WebSocketImpl(static_cast<StreamSocketImpl*>(cs.detachSocket().impl()), cs, true);
|
||||||
|
@ -61,6 +61,9 @@ using Poco::AutoPtr;
|
|||||||
using Poco::icompare;
|
using Poco::icompare;
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace Util {
|
namespace Util {
|
||||||
|
|
||||||
@ -72,7 +75,7 @@ Application::Application():
|
|||||||
_pConfig(new LayeredConfiguration),
|
_pConfig(new LayeredConfiguration),
|
||||||
_initialized(false),
|
_initialized(false),
|
||||||
_unixOptions(true),
|
_unixOptions(true),
|
||||||
_pLogger(&Logger::get("ApplicationStartup")),
|
_pLogger(&Logger::get("ApplicationStartup"s)),
|
||||||
_stopOptionsProcessing(false)
|
_stopOptionsProcessing(false)
|
||||||
{
|
{
|
||||||
setup();
|
setup();
|
||||||
@ -83,7 +86,7 @@ Application::Application(int argc, char* argv[]):
|
|||||||
_pConfig(new LayeredConfiguration),
|
_pConfig(new LayeredConfiguration),
|
||||||
_initialized(false),
|
_initialized(false),
|
||||||
_unixOptions(true),
|
_unixOptions(true),
|
||||||
_pLogger(&Logger::get("ApplicationStartup")),
|
_pLogger(&Logger::get("ApplicationStartup"s)),
|
||||||
_stopOptionsProcessing(false)
|
_stopOptionsProcessing(false)
|
||||||
{
|
{
|
||||||
setup();
|
setup();
|
||||||
@ -119,7 +122,7 @@ void Application::setup()
|
|||||||
_pInstance = this;
|
_pInstance = this;
|
||||||
|
|
||||||
AutoPtr<ConsoleChannel> pCC = new ConsoleChannel;
|
AutoPtr<ConsoleChannel> pCC = new ConsoleChannel;
|
||||||
Logger::setChannel("", pCC);
|
Logger::setChannel(""s, pCC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -164,14 +167,14 @@ void Application::init()
|
|||||||
{
|
{
|
||||||
Path appPath;
|
Path appPath;
|
||||||
getApplicationPath(appPath);
|
getApplicationPath(appPath);
|
||||||
_pConfig->setString("application.path", appPath.toString());
|
_pConfig->setString("application.path"s, appPath.toString());
|
||||||
_pConfig->setString("application.name", appPath.getFileName());
|
_pConfig->setString("application.name"s, appPath.getFileName());
|
||||||
_pConfig->setString("application.baseName", appPath.getBaseName());
|
_pConfig->setString("application.baseName"s, appPath.getBaseName());
|
||||||
_pConfig->setString("application.dir", appPath.parent().toString());
|
_pConfig->setString("application.dir"s, appPath.parent().toString());
|
||||||
_pConfig->setString("application.configDir", Path::configHome() + appPath.getBaseName() + Path::separator());
|
_pConfig->setString("application.configDir"s, Path::configHome() + appPath.getBaseName() + Path::separator());
|
||||||
_pConfig->setString("application.cacheDir", Path::cacheHome() + appPath.getBaseName() + Path::separator());
|
_pConfig->setString("application.cacheDir"s, Path::cacheHome() + appPath.getBaseName() + Path::separator());
|
||||||
_pConfig->setString("application.tempDir", Path::tempHome() + appPath.getBaseName() + Path::separator());
|
_pConfig->setString("application.tempDir"s, Path::tempHome() + appPath.getBaseName() + Path::separator());
|
||||||
_pConfig->setString("application.dataDir", Path::dataHome() + appPath.getBaseName() + Path::separator());
|
_pConfig->setString("application.dataDir"s, Path::dataHome() + appPath.getBaseName() + Path::separator());
|
||||||
processOptions();
|
processOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,7 +189,7 @@ void Application::initialize(Application& self)
|
|||||||
{
|
{
|
||||||
for (auto& pSub: _subsystems)
|
for (auto& pSub: _subsystems)
|
||||||
{
|
{
|
||||||
_pLogger->debug(std::string("Initializing subsystem: ") + pSub->name());
|
_pLogger->debug("Initializing subsystem: "s + pSub->name());
|
||||||
pSub->initialize(self);
|
pSub->initialize(self);
|
||||||
}
|
}
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
@ -199,7 +202,7 @@ void Application::uninitialize()
|
|||||||
{
|
{
|
||||||
for (SubsystemVec::reverse_iterator it = _subsystems.rbegin(); it != _subsystems.rend(); ++it)
|
for (SubsystemVec::reverse_iterator it = _subsystems.rbegin(); it != _subsystems.rend(); ++it)
|
||||||
{
|
{
|
||||||
_pLogger->debug(std::string("Uninitializing subsystem: ") + (*it)->name());
|
_pLogger->debug("Uninitializing subsystem: "s + (*it)->name());
|
||||||
(*it)->uninitialize();
|
(*it)->uninitialize();
|
||||||
}
|
}
|
||||||
_initialized = false;
|
_initialized = false;
|
||||||
@ -211,7 +214,7 @@ void Application::reinitialize(Application& self)
|
|||||||
{
|
{
|
||||||
for (auto& pSub: _subsystems)
|
for (auto& pSub: _subsystems)
|
||||||
{
|
{
|
||||||
_pLogger->debug(std::string("Re-initializing subsystem: ") + pSub->name());
|
_pLogger->debug("Re-initializing subsystem: "s + pSub->name());
|
||||||
pSub->reinitialize(self);
|
pSub->reinitialize(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -229,27 +232,27 @@ int Application::loadConfiguration(int priority)
|
|||||||
Path appPath;
|
Path appPath;
|
||||||
getApplicationPath(appPath);
|
getApplicationPath(appPath);
|
||||||
Path confPath;
|
Path confPath;
|
||||||
if (findAppConfigFile(appPath.getBaseName(), "properties", confPath))
|
if (findAppConfigFile(appPath.getBaseName(), "properties"s, confPath))
|
||||||
{
|
{
|
||||||
_pConfig->add(new PropertyFileConfiguration(confPath.toString()), priority, false);
|
_pConfig->add(new PropertyFileConfiguration(confPath.toString()), priority, false);
|
||||||
++n;
|
++n;
|
||||||
}
|
}
|
||||||
#ifndef POCO_UTIL_NO_INIFILECONFIGURATION
|
#ifndef POCO_UTIL_NO_INIFILECONFIGURATION
|
||||||
if (findAppConfigFile(appPath.getBaseName(), "ini", confPath))
|
if (findAppConfigFile(appPath.getBaseName(), "ini"s, confPath))
|
||||||
{
|
{
|
||||||
_pConfig->add(new IniFileConfiguration(confPath.toString()), priority, false);
|
_pConfig->add(new IniFileConfiguration(confPath.toString()), priority, false);
|
||||||
++n;
|
++n;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef POCO_UTIL_NO_JSONCONFIGURATION
|
#ifndef POCO_UTIL_NO_JSONCONFIGURATION
|
||||||
if (findAppConfigFile(appPath.getBaseName(), "json", confPath))
|
if (findAppConfigFile(appPath.getBaseName(), "json"s, confPath))
|
||||||
{
|
{
|
||||||
_pConfig->add(new JSONConfiguration(confPath.toString()), priority, false);
|
_pConfig->add(new JSONConfiguration(confPath.toString()), priority, false);
|
||||||
++n;
|
++n;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef POCO_UTIL_NO_XMLCONFIGURATION
|
#ifndef POCO_UTIL_NO_XMLCONFIGURATION
|
||||||
if (findAppConfigFile(appPath.getBaseName(), "xml", confPath))
|
if (findAppConfigFile(appPath.getBaseName(), "xml"s, confPath))
|
||||||
{
|
{
|
||||||
_pConfig->add(new XMLConfiguration(confPath.toString()), priority, false);
|
_pConfig->add(new XMLConfiguration(confPath.toString()), priority, false);
|
||||||
++n;
|
++n;
|
||||||
@ -258,9 +261,9 @@ int Application::loadConfiguration(int priority)
|
|||||||
if (n > 0)
|
if (n > 0)
|
||||||
{
|
{
|
||||||
if (!confPath.isAbsolute())
|
if (!confPath.isAbsolute())
|
||||||
_pConfig->setString("application.configDir", confPath.absolute().parent().toString());
|
_pConfig->setString("application.configDir"s, confPath.absolute().parent().toString());
|
||||||
else
|
else
|
||||||
_pConfig->setString("application.configDir", confPath.parent().toString());
|
_pConfig->setString("application.configDir"s, confPath.parent().toString());
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -299,25 +302,25 @@ void Application::loadConfiguration(const std::string& path, int priority)
|
|||||||
#endif
|
#endif
|
||||||
else throw Poco::InvalidArgumentException("Unsupported configuration file type", ext);
|
else throw Poco::InvalidArgumentException("Unsupported configuration file type", ext);
|
||||||
|
|
||||||
if (n > 0 && !_pConfig->has("application.configDir"))
|
if (n > 0 && !_pConfig->has("application.configDir"s))
|
||||||
{
|
{
|
||||||
if (!confPath.isAbsolute())
|
if (!confPath.isAbsolute())
|
||||||
_pConfig->setString("application.configDir", confPath.absolute().parent().toString());
|
_pConfig->setString("application.configDir"s, confPath.absolute().parent().toString());
|
||||||
else
|
else
|
||||||
_pConfig->setString("application.configDir", confPath.parent().toString());
|
_pConfig->setString("application.configDir"s, confPath.parent().toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string Application::commandName() const
|
std::string Application::commandName() const
|
||||||
{
|
{
|
||||||
return _pConfig->getString("application.baseName");
|
return _pConfig->getString("application.baseName"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string Application::commandPath() const
|
std::string Application::commandPath() const
|
||||||
{
|
{
|
||||||
return _pConfig->getString("application.path");
|
return _pConfig->getString("application.path"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -371,7 +374,7 @@ int Application::run()
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
logger().fatal("system exception");
|
logger().fatal("system exception"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
uninitialize();
|
uninitialize();
|
||||||
@ -388,7 +391,7 @@ int Application::main(const ArgVec& args)
|
|||||||
void Application::setArgs(int argc, char* argv[])
|
void Application::setArgs(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
_command = argv[0];
|
_command = argv[0];
|
||||||
_pConfig->setInt("application.argc", argc);
|
_pConfig->setInt("application.argc"s, argc);
|
||||||
_unprocessedArgs.reserve(argc);
|
_unprocessedArgs.reserve(argc);
|
||||||
std::string argvKey = "application.argv[";
|
std::string argvKey = "application.argv[";
|
||||||
for (int i = 0; i < argc; ++i)
|
for (int i = 0; i < argc; ++i)
|
||||||
@ -405,7 +408,7 @@ void Application::setArgs(const ArgVec& args)
|
|||||||
poco_assert (!args.empty());
|
poco_assert (!args.empty());
|
||||||
|
|
||||||
_command = args[0];
|
_command = args[0];
|
||||||
_pConfig->setInt("application.argc", (int) args.size());
|
_pConfig->setInt("application.argc"s, (int) args.size());
|
||||||
_unprocessedArgs = args;
|
_unprocessedArgs = args;
|
||||||
std::string argvKey = "application.argv[";
|
std::string argvKey = "application.argv[";
|
||||||
for (int i = 0; i < args.size(); ++i)
|
for (int i = 0; i < args.size(); ++i)
|
||||||
@ -460,7 +463,7 @@ void Application::getApplicationPath(Poco::Path& appPath) const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!Path::find(Environment::get("PATH"), _command, appPath))
|
if (!Path::find(Environment::get("PATH"s), _command, appPath))
|
||||||
appPath = Path(_workingDirAtLaunch, _command);
|
appPath = Path(_workingDirAtLaunch, _command);
|
||||||
appPath.makeAbsolute();
|
appPath.makeAbsolute();
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ using Poco::Path;
|
|||||||
using Poco::File;
|
using Poco::File;
|
||||||
using Poco::DirectoryIterator;
|
using Poco::DirectoryIterator;
|
||||||
using Poco::StringTokenizer;
|
using Poco::StringTokenizer;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -52,7 +53,7 @@ void FilesystemConfiguration::clear()
|
|||||||
bool FilesystemConfiguration::getRaw(const std::string& key, std::string& value) const
|
bool FilesystemConfiguration::getRaw(const std::string& key, std::string& value) const
|
||||||
{
|
{
|
||||||
Path p(keyToPath(key));
|
Path p(keyToPath(key));
|
||||||
p.setFileName("data");
|
p.setFileName("data"s);
|
||||||
File f(p);
|
File f(p);
|
||||||
if (f.exists())
|
if (f.exists())
|
||||||
{
|
{
|
||||||
@ -75,7 +76,7 @@ void FilesystemConfiguration::setRaw(const std::string& key, const std::string&
|
|||||||
Path p(keyToPath(key));
|
Path p(keyToPath(key));
|
||||||
File dir(p);
|
File dir(p);
|
||||||
dir.createDirectories();
|
dir.createDirectories();
|
||||||
p.setFileName("data");
|
p.setFileName("data"s);
|
||||||
Poco::FileOutputStream ostr(p.toString());
|
Poco::FileOutputStream ostr(p.toString());
|
||||||
ostr.write(value.data(), (std::streamsize) value.length());
|
ostr.write(value.data(), (std::streamsize) value.length());
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,9 @@
|
|||||||
#include "Poco/NumberParser.h"
|
#include "Poco/NumberParser.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace Util {
|
namespace Util {
|
||||||
|
|
||||||
@ -109,7 +112,7 @@ void JSONConfiguration::getIndexes(std::string& name, std::vector<int>& indexes)
|
|||||||
RegularExpression::MatchVec matches;
|
RegularExpression::MatchVec matches;
|
||||||
int firstOffset = -1;
|
int firstOffset = -1;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
RegularExpression regex("\\[([0-9]+)\\]");
|
RegularExpression regex("\\[([0-9]+)\\]"s);
|
||||||
while (regex.match(name, offset, matches) > 0)
|
while (regex.match(name, offset, matches) > 0)
|
||||||
{
|
{
|
||||||
if (firstOffset == -1)
|
if (firstOffset == -1)
|
||||||
|
@ -32,6 +32,7 @@ using Poco::FormattingChannel;
|
|||||||
using Poco::Logger;
|
using Poco::Logger;
|
||||||
using Poco::LoggingRegistry;
|
using Poco::LoggingRegistry;
|
||||||
using Poco::LoggingFactory;
|
using Poco::LoggingFactory;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -52,13 +53,13 @@ void LoggingConfigurator::configure(AbstractConfiguration::Ptr pConfig)
|
|||||||
{
|
{
|
||||||
poco_check_ptr (pConfig);
|
poco_check_ptr (pConfig);
|
||||||
|
|
||||||
AbstractConfiguration::Ptr pFormattersConfig(pConfig->createView("logging.formatters"));
|
AbstractConfiguration::Ptr pFormattersConfig(pConfig->createView("logging.formatters"s));
|
||||||
configureFormatters(pFormattersConfig);
|
configureFormatters(pFormattersConfig);
|
||||||
|
|
||||||
AbstractConfiguration::Ptr pChannelsConfig(pConfig->createView("logging.channels"));
|
AbstractConfiguration::Ptr pChannelsConfig(pConfig->createView("logging.channels"s));
|
||||||
configureChannels(pChannelsConfig);
|
configureChannels(pChannelsConfig);
|
||||||
|
|
||||||
AbstractConfiguration::Ptr pLoggersConfig(pConfig->createView("logging.loggers"));
|
AbstractConfiguration::Ptr pLoggersConfig(pConfig->createView("logging.loggers"s));
|
||||||
configureLoggers(pLoggersConfig);
|
configureLoggers(pLoggersConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ void LoggingConfigurator::configureLoggers(AbstractConfiguration::Ptr pConfig)
|
|||||||
for (const auto& l: loggers)
|
for (const auto& l: loggers)
|
||||||
{
|
{
|
||||||
AutoPtr<AbstractConfiguration> pLoggerConfig(pConfig->createView(l));
|
AutoPtr<AbstractConfiguration> pLoggerConfig(pConfig->createView(l));
|
||||||
loggerMap[pLoggerConfig->getString("name", "")] = pLoggerConfig;
|
loggerMap[pLoggerConfig->getString("name"s, ""s)] = pLoggerConfig;
|
||||||
}
|
}
|
||||||
for (const auto& p: loggerMap)
|
for (const auto& p: loggerMap)
|
||||||
{
|
{
|
||||||
@ -117,12 +118,12 @@ void LoggingConfigurator::configureLoggers(AbstractConfiguration::Ptr pConfig)
|
|||||||
|
|
||||||
Formatter::Ptr LoggingConfigurator::createFormatter(AbstractConfiguration::Ptr pConfig)
|
Formatter::Ptr LoggingConfigurator::createFormatter(AbstractConfiguration::Ptr pConfig)
|
||||||
{
|
{
|
||||||
Formatter::Ptr pFormatter(LoggingFactory::defaultFactory().createFormatter(pConfig->getString("class")));
|
Formatter::Ptr pFormatter(LoggingFactory::defaultFactory().createFormatter(pConfig->getString("class"s)));
|
||||||
AbstractConfiguration::Keys props;
|
AbstractConfiguration::Keys props;
|
||||||
pConfig->keys(props);
|
pConfig->keys(props);
|
||||||
for (const auto& p: props)
|
for (const auto& p: props)
|
||||||
{
|
{
|
||||||
if (p != "class")
|
if (p != "class"s)
|
||||||
pFormatter->setProperty(p, pConfig->getString(p));
|
pFormatter->setProperty(p, pConfig->getString(p));
|
||||||
}
|
}
|
||||||
return pFormatter;
|
return pFormatter;
|
||||||
@ -131,21 +132,21 @@ Formatter::Ptr LoggingConfigurator::createFormatter(AbstractConfiguration::Ptr p
|
|||||||
|
|
||||||
Channel::Ptr LoggingConfigurator::createChannel(AbstractConfiguration::Ptr pConfig)
|
Channel::Ptr LoggingConfigurator::createChannel(AbstractConfiguration::Ptr pConfig)
|
||||||
{
|
{
|
||||||
Channel::Ptr pChannel(LoggingFactory::defaultFactory().createChannel(pConfig->getString("class")));
|
Channel::Ptr pChannel(LoggingFactory::defaultFactory().createChannel(pConfig->getString("class"s)));
|
||||||
Channel::Ptr pWrapper(pChannel);
|
Channel::Ptr pWrapper(pChannel);
|
||||||
AbstractConfiguration::Keys props;
|
AbstractConfiguration::Keys props;
|
||||||
pConfig->keys(props);
|
pConfig->keys(props);
|
||||||
for (const auto& p: props)
|
for (const auto& p: props)
|
||||||
{
|
{
|
||||||
if (p == "pattern")
|
if (p == "pattern"s)
|
||||||
{
|
{
|
||||||
AutoPtr<Formatter> pPatternFormatter(new PatternFormatter(pConfig->getString(p)));
|
AutoPtr<Formatter> pPatternFormatter(new PatternFormatter(pConfig->getString(p)));
|
||||||
pWrapper = new FormattingChannel(pPatternFormatter, pChannel);
|
pWrapper = new FormattingChannel(pPatternFormatter, pChannel);
|
||||||
}
|
}
|
||||||
else if (p == "formatter")
|
else if (p == "formatter"s)
|
||||||
{
|
{
|
||||||
AutoPtr<FormattingChannel> pFormattingChannel(new FormattingChannel(0, pChannel));
|
AutoPtr<FormattingChannel> pFormattingChannel(new FormattingChannel(0, pChannel));
|
||||||
if (pConfig->hasProperty("formatter.class"))
|
if (pConfig->hasProperty("formatter.class"s))
|
||||||
{
|
{
|
||||||
AutoPtr<AbstractConfiguration> pFormatterConfig(pConfig->createView(p));
|
AutoPtr<AbstractConfiguration> pFormatterConfig(pConfig->createView(p));
|
||||||
AutoPtr<Formatter> pFormatter(createFormatter(pFormatterConfig));
|
AutoPtr<Formatter> pFormatter(createFormatter(pFormatterConfig));
|
||||||
@ -165,7 +166,7 @@ void LoggingConfigurator::configureChannel(Channel::Ptr pChannel, AbstractConfig
|
|||||||
pConfig->keys(props);
|
pConfig->keys(props);
|
||||||
for (const auto& p: props)
|
for (const auto& p: props)
|
||||||
{
|
{
|
||||||
if (p != "pattern" && p != "formatter" && p != "class")
|
if (p != "pattern"s && p != "formatter"s && p != "class"s)
|
||||||
{
|
{
|
||||||
pChannel->setProperty(p, pConfig->getString(p));
|
pChannel->setProperty(p, pConfig->getString(p));
|
||||||
}
|
}
|
||||||
@ -175,19 +176,19 @@ void LoggingConfigurator::configureChannel(Channel::Ptr pChannel, AbstractConfig
|
|||||||
|
|
||||||
void LoggingConfigurator::configureLogger(AbstractConfiguration::Ptr pConfig)
|
void LoggingConfigurator::configureLogger(AbstractConfiguration::Ptr pConfig)
|
||||||
{
|
{
|
||||||
Logger& logger = Logger::get(pConfig->getString("name", ""));
|
Logger& logger = Logger::get(pConfig->getString("name"s, ""s));
|
||||||
AbstractConfiguration::Keys props;
|
AbstractConfiguration::Keys props;
|
||||||
pConfig->keys(props);
|
pConfig->keys(props);
|
||||||
for (const auto& p: props)
|
for (const auto& p: props)
|
||||||
{
|
{
|
||||||
if (p == "channel" && pConfig->hasProperty("channel.class"))
|
if (p == "channel"s && pConfig->hasProperty("channel.class"s))
|
||||||
{
|
{
|
||||||
AutoPtr<AbstractConfiguration> pChannelConfig(pConfig->createView(p));
|
AutoPtr<AbstractConfiguration> pChannelConfig(pConfig->createView(p));
|
||||||
AutoPtr<Channel> pChannel(createChannel(pChannelConfig));
|
AutoPtr<Channel> pChannel(createChannel(pChannelConfig));
|
||||||
configureChannel(pChannel, pChannelConfig);
|
configureChannel(pChannel, pChannelConfig);
|
||||||
Logger::setChannel(logger.name(), pChannel);
|
Logger::setChannel(logger.name(), pChannel);
|
||||||
}
|
}
|
||||||
else if (p != "name")
|
else if (p != "name"s)
|
||||||
{
|
{
|
||||||
Logger::setProperty(logger.name(), p, pConfig->getString(p));
|
Logger::setProperty(logger.name(), p, pConfig->getString(p));
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
|
|
||||||
using Poco::Logger;
|
using Poco::Logger;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -45,7 +46,7 @@ void LoggingSubsystem::initialize(Application& app)
|
|||||||
{
|
{
|
||||||
LoggingConfigurator configurator;
|
LoggingConfigurator configurator;
|
||||||
configurator.configure(app.configPtr());
|
configurator.configure(app.configPtr());
|
||||||
std::string logger = app.config().getString("application.logger", "Application");
|
std::string logger = app.config().getString("application.logger"s, "Application"s);
|
||||||
app.setLogger(Logger::get(logger));
|
app.setLogger(Logger::get(logger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
using Poco::NumberFormatter;
|
using Poco::NumberFormatter;
|
||||||
using Poco::Exception;
|
using Poco::Exception;
|
||||||
using Poco::SystemException;
|
using Poco::SystemException;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -79,7 +80,7 @@ ServerApplication::~ServerApplication()
|
|||||||
|
|
||||||
bool ServerApplication::isInteractive() const
|
bool ServerApplication::isInteractive() const
|
||||||
{
|
{
|
||||||
bool runsInBackground = config().getBool("application.runAsDaemon", false) || config().getBool("application.runAsService", false);
|
bool runsInBackground = config().getBool("application.runAsDaemon"s, false) || config().getBool("application.runAsService"s, false);
|
||||||
return !runsInBackground;
|
return !runsInBackground;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +144,7 @@ void ServerApplication::ServiceMain(DWORD argc, LPWSTR* argv)
|
|||||||
{
|
{
|
||||||
ServerApplication& app = static_cast<ServerApplication&>(Application::instance());
|
ServerApplication& app = static_cast<ServerApplication&>(Application::instance());
|
||||||
|
|
||||||
app.config().setBool("application.runAsService", true);
|
app.config().setBool("application.runAsService"s, true);
|
||||||
|
|
||||||
_serviceStatusHandle = RegisterServiceCtrlHandlerW(L"", ServiceControlHandler);
|
_serviceStatusHandle = RegisterServiceCtrlHandlerW(L"", ServiceControlHandler);
|
||||||
if (!_serviceStatusHandle)
|
if (!_serviceStatusHandle)
|
||||||
@ -182,7 +183,7 @@ void ServerApplication::ServiceMain(DWORD argc, LPWSTR* argv)
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
app.logger().error("fatal error - aborting");
|
app.logger().error("fatal error - aborting"s);
|
||||||
_serviceStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
|
_serviceStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
|
||||||
_serviceStatus.dwServiceSpecificExitCode = EXIT_SOFTWARE;
|
_serviceStatus.dwServiceSpecificExitCode = EXIT_SOFTWARE;
|
||||||
}
|
}
|
||||||
@ -327,8 +328,8 @@ bool ServerApplication::hasConsole()
|
|||||||
|
|
||||||
void ServerApplication::registerService()
|
void ServerApplication::registerService()
|
||||||
{
|
{
|
||||||
std::string name = config().getString("application.baseName");
|
std::string name = config().getString("application.baseName"s);
|
||||||
std::string path = Poco::format("\"%s\"", config().getString("application.path"));
|
std::string path = Poco::format("\"%s\""s, config().getString("application.path"s));
|
||||||
|
|
||||||
WinService service(name);
|
WinService service(name);
|
||||||
if (_displayName.empty())
|
if (_displayName.empty())
|
||||||
@ -347,11 +348,11 @@ void ServerApplication::registerService()
|
|||||||
|
|
||||||
void ServerApplication::unregisterService()
|
void ServerApplication::unregisterService()
|
||||||
{
|
{
|
||||||
std::string name = config().getString("application.baseName");
|
std::string name = config().getString("application.baseName"s);
|
||||||
|
|
||||||
WinService service(name);
|
WinService service(name);
|
||||||
service.unregisterService();
|
service.unregisterService();
|
||||||
logger().information("The service has been successfully unregistered.");
|
logger().information("The service has been successfully unregistered."s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -360,36 +361,36 @@ void ServerApplication::defineOptions(OptionSet& options)
|
|||||||
Application::defineOptions(options);
|
Application::defineOptions(options);
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("registerService", "", "Register the application as a service.")
|
Option("registerService"s, ""s, "Register the application as a service."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleRegisterService)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleRegisterService)));
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("unregisterService", "", "Unregister the application as a service.")
|
Option("unregisterService"s, ""s, "Unregister the application as a service."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleUnregisterService)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleUnregisterService)));
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("displayName", "", "Specify a display name for the service (only with /registerService).")
|
Option("displayName"s, ""s, "Specify a display name for the service (only with /registerService)."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("name")
|
.argument("name"s)
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleDisplayName)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleDisplayName)));
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("description", "", "Specify a description for the service (only with /registerService).")
|
Option("description"s, ""s, "Specify a description for the service (only with /registerService)."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("text")
|
.argument("text"s)
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleDescription)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleDescription)));
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("startup", "", "Specify the startup mode for the service (only with /registerService).")
|
Option("startup"s, ""s, "Specify the startup mode for the service (only with /registerService)."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("automatic|manual")
|
.argument("automatic|manual"s)
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleStartup)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleStartup)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,9 +421,9 @@ void ServerApplication::handleDescription(const std::string& name, const std::st
|
|||||||
|
|
||||||
void ServerApplication::handleStartup(const std::string& name, const std::string& value)
|
void ServerApplication::handleStartup(const std::string& name, const std::string& value)
|
||||||
{
|
{
|
||||||
if (Poco::icompare(value, 4, std::string("auto")) == 0)
|
if (Poco::icompare(value, 4, "auto"s) == 0)
|
||||||
_startup = "auto";
|
_startup = "auto";
|
||||||
else if (Poco::icompare(value, std::string("manual")) == 0)
|
else if (Poco::icompare(value, "manual"s) == 0)
|
||||||
_startup = "manual";
|
_startup = "manual";
|
||||||
else
|
else
|
||||||
throw InvalidArgumentException("argument to startup option must be 'auto[matic]' or 'manual'");
|
throw InvalidArgumentException("argument to startup option must be 'auto[matic]' or 'manual'");
|
||||||
@ -561,7 +562,7 @@ int ServerApplication::run(const std::vector<std::string>& args)
|
|||||||
|
|
||||||
bool ServerApplication::isDaemon(int argc, char** argv)
|
bool ServerApplication::isDaemon(int argc, char** argv)
|
||||||
{
|
{
|
||||||
std::string option("--daemon");
|
std::string option("--daemon"s);
|
||||||
for (int i = 1; i < argc; ++i)
|
for (int i = 1; i < argc; ++i)
|
||||||
{
|
{
|
||||||
if (option == argv[i])
|
if (option == argv[i])
|
||||||
@ -604,20 +605,20 @@ void ServerApplication::defineOptions(OptionSet& options)
|
|||||||
Application::defineOptions(options);
|
Application::defineOptions(options);
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("daemon", "", "Run application as a daemon.")
|
Option("daemon"s, ""s, "Run application as a daemon."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleDaemon)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleDaemon)));
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("umask", "", "Set the daemon's umask (octal, e.g. 027).")
|
Option("umask"s, ""s, "Set the daemon's umask (octal, e.g. 027)."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("mask")
|
.argument("mask")
|
||||||
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleUMask)));
|
.callback(OptionCallback<ServerApplication>(this, &ServerApplication::handleUMask)));
|
||||||
|
|
||||||
options.addOption(
|
options.addOption(
|
||||||
Option("pidfile", "", "Write the process ID of the application to given file.")
|
Option("pidfile"s, ""s, "Write the process ID of the application to given file."s)
|
||||||
.required(false)
|
.required(false)
|
||||||
.repeatable(false)
|
.repeatable(false)
|
||||||
.argument("path")
|
.argument("path")
|
||||||
@ -627,7 +628,7 @@ void ServerApplication::defineOptions(OptionSet& options)
|
|||||||
|
|
||||||
void ServerApplication::handleDaemon(const std::string& name, const std::string& value)
|
void ServerApplication::handleDaemon(const std::string& name, const std::string& value)
|
||||||
{
|
{
|
||||||
config().setBool("application.runAsDaemon", true);
|
config().setBool("application.runAsDaemon"s, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
using Poco::Environment;
|
using Poco::Environment;
|
||||||
using Poco::Path;
|
using Poco::Path;
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -170,28 +171,28 @@ void SystemConfiguration::enumerate(const std::string& key, Keys& range) const
|
|||||||
{
|
{
|
||||||
if (key.empty())
|
if (key.empty())
|
||||||
{
|
{
|
||||||
range.push_back("system");
|
range.push_back("system"s);
|
||||||
}
|
}
|
||||||
else if (key == "system")
|
else if (key == "system")
|
||||||
{
|
{
|
||||||
range.push_back("osName");
|
range.push_back("osName"s);
|
||||||
range.push_back("osVersion");
|
range.push_back("osVersion"s);
|
||||||
range.push_back("osArchitecture");
|
range.push_back("osArchitecture"s);
|
||||||
range.push_back("nodeName");
|
range.push_back("nodeName"s);
|
||||||
range.push_back("nodeId");
|
range.push_back("nodeId"s);
|
||||||
range.push_back("currentDir");
|
range.push_back("currentDir"s);
|
||||||
range.push_back("homeDir");
|
range.push_back("homeDir"s);
|
||||||
range.push_back("configHomeDir");
|
range.push_back("configHomeDir"s);
|
||||||
range.push_back("cacheHomeDir");
|
range.push_back("cacheHomeDir"s);
|
||||||
range.push_back("dataHomeDir");
|
range.push_back("dataHomeDir"s);
|
||||||
range.push_back("tempHomeDir");
|
range.push_back("tempHomeDir"s);
|
||||||
range.push_back("tempDir");
|
range.push_back("tempDir"s);
|
||||||
range.push_back("configDir");
|
range.push_back("configDir"s);
|
||||||
range.push_back("dateTime");
|
range.push_back("dateTime"s);
|
||||||
#if !defined(POCO_VXWORKS)
|
#if !defined(POCO_VXWORKS)
|
||||||
range.push_back("pid");
|
range.push_back("pid"s);
|
||||||
#endif
|
#endif
|
||||||
range.push_back("env");
|
range.push_back("env"s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,9 @@
|
|||||||
#include "Poco/Exception.h"
|
#include "Poco/Exception.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace Util {
|
namespace Util {
|
||||||
|
|
||||||
@ -95,12 +98,12 @@ void WinRegistryConfiguration::enumerate(const std::string& key, Keys& range) co
|
|||||||
if (fullPath.empty())
|
if (fullPath.empty())
|
||||||
{
|
{
|
||||||
// return all root level keys
|
// return all root level keys
|
||||||
range.push_back("HKEY_CLASSES_ROOT");
|
range.push_back("HKEY_CLASSES_ROOT"s);
|
||||||
range.push_back("HKEY_CURRENT_CONFIG");
|
range.push_back("HKEY_CURRENT_CONFIG"s);
|
||||||
range.push_back("HKEY_CURRENT_USER");
|
range.push_back("HKEY_CURRENT_USER"s);
|
||||||
range.push_back("HKEY_LOCAL_MACHINE");
|
range.push_back("HKEY_LOCAL_MACHINE"s);
|
||||||
range.push_back("HKEY_PERFORMANCE_DATA");
|
range.push_back("HKEY_PERFORMANCE_DATA"s);
|
||||||
range.push_back("HKEY_USERS");
|
range.push_back("HKEY_USERS"s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -30,6 +30,9 @@
|
|||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace Util {
|
namespace Util {
|
||||||
|
|
||||||
@ -37,14 +40,14 @@ namespace Util {
|
|||||||
XMLConfiguration::XMLConfiguration():
|
XMLConfiguration::XMLConfiguration():
|
||||||
_delim('.')
|
_delim('.')
|
||||||
{
|
{
|
||||||
loadEmpty("config");
|
loadEmpty("config"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
XMLConfiguration::XMLConfiguration(char delim):
|
XMLConfiguration::XMLConfiguration(char delim):
|
||||||
_delim(delim)
|
_delim(delim)
|
||||||
{
|
{
|
||||||
loadEmpty("config");
|
loadEmpty("config"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -199,7 +202,7 @@ void XMLConfiguration::save(const std::string& path) const
|
|||||||
AbstractConfiguration::ScopedLock lock(*this);
|
AbstractConfiguration::ScopedLock lock(*this);
|
||||||
|
|
||||||
Poco::XML::DOMWriter writer;
|
Poco::XML::DOMWriter writer;
|
||||||
writer.setNewLine("\n");
|
writer.setNewLine("\n"s);
|
||||||
writer.setOptions(Poco::XML::XMLWriter::PRETTY_PRINT);
|
writer.setOptions(Poco::XML::XMLWriter::PRETTY_PRINT);
|
||||||
writer.writeNode(path, _pDocument);
|
writer.writeNode(path, _pDocument);
|
||||||
}
|
}
|
||||||
@ -210,7 +213,7 @@ void XMLConfiguration::save(std::ostream& ostr) const
|
|||||||
AbstractConfiguration::ScopedLock lock(*this);
|
AbstractConfiguration::ScopedLock lock(*this);
|
||||||
|
|
||||||
Poco::XML::DOMWriter writer;
|
Poco::XML::DOMWriter writer;
|
||||||
writer.setNewLine("\n");
|
writer.setNewLine("\n"s);
|
||||||
writer.setOptions(Poco::XML::XMLWriter::PRETTY_PRINT);
|
writer.setOptions(Poco::XML::XMLWriter::PRETTY_PRINT);
|
||||||
writer.writeNode(ostr, _pDocument);
|
writer.writeNode(ostr, _pDocument);
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
namespace XML {
|
namespace XML {
|
||||||
|
|
||||||
@ -61,7 +64,7 @@ XMLWriter::XMLWriter(XMLByteOutputStream& str, int options):
|
|||||||
_pInEncoding(new NATIVE_ENCODING),
|
_pInEncoding(new NATIVE_ENCODING),
|
||||||
_pOutEncoding(new Poco::UTF8Encoding),
|
_pOutEncoding(new Poco::UTF8Encoding),
|
||||||
_options(options),
|
_options(options),
|
||||||
_encoding("UTF-8"),
|
_encoding("UTF-8"s),
|
||||||
_depth(-1),
|
_depth(-1),
|
||||||
_elementCount(0),
|
_elementCount(0),
|
||||||
_inFragment(false),
|
_inFragment(false),
|
||||||
@ -302,7 +305,7 @@ void XMLWriter::emptyElement(const XMLString& namespaceURI, const XMLString& loc
|
|||||||
else
|
else
|
||||||
writeStartElement(namespaceURI, localName, qname, attributes);
|
writeStartElement(namespaceURI, localName, qname, attributes);
|
||||||
_contentWritten = false;
|
_contentWritten = false;
|
||||||
writeMarkup("/");
|
writeMarkup("/"s);
|
||||||
closeStartTag();
|
closeStartTag();
|
||||||
_namespaces.popContext();
|
_namespaces.popContext();
|
||||||
}
|
}
|
||||||
@ -368,14 +371,14 @@ void XMLWriter::processingInstruction(const XMLString& target, const XMLString&
|
|||||||
{
|
{
|
||||||
if (_unclosedStartTag) closeStartTag();
|
if (_unclosedStartTag) closeStartTag();
|
||||||
prettyPrint();
|
prettyPrint();
|
||||||
writeMarkup("<?");
|
writeMarkup("<?"s);
|
||||||
writeXML(target);
|
writeXML(target);
|
||||||
if (!data.empty())
|
if (!data.empty())
|
||||||
{
|
{
|
||||||
writeMarkup(MARKUP_SPACE);
|
writeMarkup(MARKUP_SPACE);
|
||||||
writeXML(data);
|
writeXML(data);
|
||||||
}
|
}
|
||||||
writeMarkup("?>");
|
writeMarkup("?>"s);
|
||||||
if (_depth == 0)
|
if (_depth == 0)
|
||||||
writeNewLine();
|
writeNewLine();
|
||||||
}
|
}
|
||||||
@ -383,7 +386,7 @@ void XMLWriter::processingInstruction(const XMLString& target, const XMLString&
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
static const XMLString CDATA = toXMLString("CDATA");
|
static const XMLString CDATA = toXMLString("CDATA"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -456,32 +459,32 @@ void XMLWriter::comment(const XMLChar ch[], int start, int length)
|
|||||||
{
|
{
|
||||||
if (_unclosedStartTag) closeStartTag();
|
if (_unclosedStartTag) closeStartTag();
|
||||||
prettyPrint();
|
prettyPrint();
|
||||||
writeMarkup("<!--");
|
writeMarkup("<!--"s);
|
||||||
while (length-- > 0) writeXML(ch[start++]);
|
while (length-- > 0) writeXML(ch[start++]);
|
||||||
writeMarkup("-->");
|
writeMarkup("-->"s);
|
||||||
_contentWritten = false;
|
_contentWritten = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void XMLWriter::startDTD(const XMLString& name, const XMLString& publicId, const XMLString& systemId)
|
void XMLWriter::startDTD(const XMLString& name, const XMLString& publicId, const XMLString& systemId)
|
||||||
{
|
{
|
||||||
writeMarkup("<!DOCTYPE ");
|
writeMarkup("<!DOCTYPE "s);
|
||||||
writeXML(name);
|
writeXML(name);
|
||||||
if (!publicId.empty())
|
if (!publicId.empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" PUBLIC \"");
|
writeMarkup(" PUBLIC \""s);
|
||||||
writeXML(publicId);
|
writeXML(publicId);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
if (!systemId.empty())
|
if (!systemId.empty())
|
||||||
{
|
{
|
||||||
if (publicId.empty())
|
if (publicId.empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" SYSTEM");
|
writeMarkup(" SYSTEM"s);
|
||||||
}
|
}
|
||||||
writeMarkup(" \"");
|
writeMarkup(" \""s);
|
||||||
writeXML(systemId);
|
writeXML(systemId);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
_inDTD = true;
|
_inDTD = true;
|
||||||
}
|
}
|
||||||
@ -493,10 +496,10 @@ void XMLWriter::endDTD()
|
|||||||
if (_inInternalDTD)
|
if (_inInternalDTD)
|
||||||
{
|
{
|
||||||
writeNewLine();
|
writeNewLine();
|
||||||
writeMarkup("]");
|
writeMarkup("]"s);
|
||||||
_inInternalDTD = false;
|
_inInternalDTD = false;
|
||||||
}
|
}
|
||||||
writeMarkup(">");
|
writeMarkup(">"s);
|
||||||
writeNewLine();
|
writeNewLine();
|
||||||
_inDTD = false;
|
_inDTD = false;
|
||||||
}
|
}
|
||||||
@ -517,7 +520,7 @@ void XMLWriter::notationDecl(const XMLString& name, const XMLString* publicId, c
|
|||||||
if (!_inDTD) throw XMLException("Notation declaration not within DTD");
|
if (!_inDTD) throw XMLException("Notation declaration not within DTD");
|
||||||
if (!_inInternalDTD)
|
if (!_inInternalDTD)
|
||||||
{
|
{
|
||||||
writeMarkup(" [");
|
writeMarkup(" ["s);
|
||||||
_inInternalDTD = true;
|
_inInternalDTD = true;
|
||||||
}
|
}
|
||||||
if (_options & PRETTY_PRINT)
|
if (_options & PRETTY_PRINT)
|
||||||
@ -525,21 +528,21 @@ void XMLWriter::notationDecl(const XMLString& name, const XMLString* publicId, c
|
|||||||
writeNewLine();
|
writeNewLine();
|
||||||
writeMarkup(_indent);
|
writeMarkup(_indent);
|
||||||
}
|
}
|
||||||
writeMarkup("<!NOTATION ");
|
writeMarkup("<!NOTATION "s);
|
||||||
writeXML(name);
|
writeXML(name);
|
||||||
if (systemId && !systemId->empty())
|
if (systemId && !systemId->empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" SYSTEM \"");
|
writeMarkup(" SYSTEM \""s);
|
||||||
writeXML(*systemId);
|
writeXML(*systemId);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
if (publicId && !publicId->empty())
|
if (publicId && !publicId->empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" PUBLIC \"");
|
writeMarkup(" PUBLIC \""s);
|
||||||
writeXML(*publicId);
|
writeXML(*publicId);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
writeMarkup(">");
|
writeMarkup(">"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -548,7 +551,7 @@ void XMLWriter::unparsedEntityDecl(const XMLString& name, const XMLString* publi
|
|||||||
if (!_inDTD) throw XMLException("Entity declaration not within DTD");
|
if (!_inDTD) throw XMLException("Entity declaration not within DTD");
|
||||||
if (!_inInternalDTD)
|
if (!_inInternalDTD)
|
||||||
{
|
{
|
||||||
writeMarkup(" [");
|
writeMarkup(" ["s);
|
||||||
_inInternalDTD = true;
|
_inInternalDTD = true;
|
||||||
}
|
}
|
||||||
if (_options & PRETTY_PRINT)
|
if (_options & PRETTY_PRINT)
|
||||||
@ -556,26 +559,26 @@ void XMLWriter::unparsedEntityDecl(const XMLString& name, const XMLString* publi
|
|||||||
writeNewLine();
|
writeNewLine();
|
||||||
writeMarkup(_indent);
|
writeMarkup(_indent);
|
||||||
}
|
}
|
||||||
writeMarkup("<!ENTITY ");
|
writeMarkup("<!ENTITY "s);
|
||||||
writeXML(name);
|
writeXML(name);
|
||||||
if (!systemId.empty())
|
if (!systemId.empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" SYSTEM \"");
|
writeMarkup(" SYSTEM \""s);
|
||||||
writeXML(systemId);
|
writeXML(systemId);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
if (publicId && !publicId->empty())
|
if (publicId && !publicId->empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" PUBLIC \"");
|
writeMarkup(" PUBLIC \""s);
|
||||||
writeXML(*publicId);
|
writeXML(*publicId);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
if (!notationName.empty())
|
if (!notationName.empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" NDATA ");
|
writeMarkup(" NDATA "s);
|
||||||
writeXML(notationName);
|
writeXML(notationName);
|
||||||
}
|
}
|
||||||
writeMarkup(">");
|
writeMarkup(">"s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1029,14 +1032,14 @@ void XMLWriter::writeIndent(int depth) const
|
|||||||
|
|
||||||
void XMLWriter::writeXMLDeclaration()
|
void XMLWriter::writeXMLDeclaration()
|
||||||
{
|
{
|
||||||
writeMarkup("<?xml version=\"1.0\"");
|
writeMarkup("<?xml version=\"1.0\""s);
|
||||||
if (!_encoding.empty())
|
if (!_encoding.empty())
|
||||||
{
|
{
|
||||||
writeMarkup(" encoding=\"");
|
writeMarkup(" encoding=\""s);
|
||||||
writeMarkup(_encoding);
|
writeMarkup(_encoding);
|
||||||
writeMarkup("\"");
|
writeMarkup("\""s);
|
||||||
}
|
}
|
||||||
writeMarkup("?>");
|
writeMarkup("?>"s);
|
||||||
writeNewLine();
|
writeNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user