Skip to content

Commit 07e9246

Browse files
author
Michiel De Witte
committed
add Hostname to TelnetAppender
1 parent df63471 commit 07e9246

File tree

8 files changed

+46
-11
lines changed

8 files changed

+46
-11
lines changed

src/main/cpp/aprserversocket.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <log4cxx/private/aprserversocket.h>
1919
#include <log4cxx/private/serversocket_priv.h>
2020
#include <log4cxx/private/aprsocket.h>
21+
#include <log4cxx/helpers/transcoder.h>
2122
#include "apr_network_io.h"
2223
#include "apr_pools.h"
2324
#include "apr_poll.h"
@@ -37,10 +38,10 @@ struct APRServerSocket::APRServerSocketPriv : public ServerSocketPrivate {
3738

3839
#if LOG4CXX_ABI_VERSION <= 15
3940
APRServerSocket::APRServerSocket(int port) :
40-
APRServerSocket(port, false) {}
41+
APRServerSocket(port, false, {}) {}
4142
#endif
4243

43-
APRServerSocket::APRServerSocket(int port, bool reuseAddress) :
44+
APRServerSocket::APRServerSocket(int port, bool reuseAddress, const LogString& hostname) :
4445
ServerSocket(std::make_unique<APRServerSocketPriv>()){
4546
apr_status_t status =
4647
apr_socket_create(&_priv->socket, APR_INET, SOCK_STREAM,
@@ -68,9 +69,16 @@ APRServerSocket::APRServerSocket(int port, bool reuseAddress) :
6869
}
6970

7071
// Create server socket address (including port number)
72+
std::string hostname_str;
73+
const char* hostname_ptr = NULL;
74+
if (!hostname.empty()) {
75+
Transcoder::encode(hostname, hostname_str);
76+
hostname_ptr = hostname_str.c_str();
77+
}
78+
7179
apr_sockaddr_t* server_addr;
7280
status =
73-
apr_sockaddr_info_get(&server_addr, NULL, APR_INET,
81+
apr_sockaddr_info_get(&server_addr, hostname_ptr, APR_INET,
7482
port, 0, _priv->pool.getAPRPool());
7583

7684
if (status != APR_SUCCESS)

src/main/cpp/serversocket.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,6 @@ ServerSocketUniquePtr ServerSocket::create(int port){
5757
}
5858
#endif
5959

60-
ServerSocketUniquePtr ServerSocket::create(int port, bool reuseAddress){
61-
return std::make_unique<APRServerSocket>(port, reuseAddress);
60+
ServerSocketUniquePtr ServerSocket::create(int port, bool reuseAddress, const LogString& hostname){
61+
return std::make_unique<APRServerSocket>(port, reuseAddress, hostname);
6262
}

src/main/cpp/telnetappender.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ struct TelnetAppender::TelnetAppenderPriv : public AppenderSkeletonPrivate
5858
{ stopAcceptingConnections(); }
5959

6060
int port;
61+
LogString hostname;
6162
bool reuseAddress = false;
6263
ConnectionList connections;
6364
LogString encoding;
@@ -113,7 +114,7 @@ void TelnetAppender::activateOptions(Pool& /* p */)
113114
{
114115
if (_priv->serverSocket == NULL)
115116
{
116-
_priv->serverSocket = ServerSocket::create(_priv->port, _priv->reuseAddress);
117+
_priv->serverSocket = ServerSocket::create(_priv->port, _priv->reuseAddress, _priv->hostname);
117118
_priv->serverSocket->setSoTimeout(1000);
118119
}
119120

@@ -140,6 +141,10 @@ void TelnetAppender::setOption(const LogString& option,
140141
{
141142
setReuseAddress(OptionConverter::toBoolean(value, true));
142143
}
144+
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("HOSTNAME"), LOG4CXX_STR("hostname")))
145+
{
146+
setHostname(value);
147+
}
143148
else
144149
{
145150
AppenderSkeleton::setOption(option, value);
@@ -341,6 +346,16 @@ void TelnetAppender::setPort(int port1)
341346
_priv->port = port1;
342347
}
343348

349+
LogString TelnetAppender::getHostname() const
350+
{
351+
return _priv->hostname;
352+
}
353+
354+
void TelnetAppender::setHostname(const LogString& hostname)
355+
{
356+
_priv->hostname = hostname;
357+
}
358+
344359
int TelnetAppender::getMaxConnections() const
345360
{
346361
return static_cast<int>(_priv->connections.size());

src/main/include/log4cxx/helpers/serversocket.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ class LOG4CXX_EXPORT ServerSocket
5959

6060
#if LOG4CXX_ABI_VERSION <= 15
6161
static ServerSocketUniquePtr create(int port);
62-
static ServerSocketUniquePtr create(int port, bool reuseAddress);
62+
static ServerSocketUniquePtr create(int port, bool reuseAddress, const LogString& hostname);
6363
#else
64-
static ServerSocketUniquePtr create(int port, bool reuseAddress = false);
64+
static ServerSocketUniquePtr create(int port, bool reuseAddress = false, const LogString& hostname = {});
6565
#endif
6666

6767
};

src/main/include/log4cxx/net/telnetappender.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,17 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
116116
*/
117117
void setPort(int newValue);
118118

119+
/**
120+
The <b>Hostname</b> on which to accept connections.
121+
*/
122+
LogString getHostname() const;
123+
124+
/**
125+
Use \c newValue as the Hostname on which to accept connections.
126+
By default connections are accepted on any network interface device.
127+
*/
128+
void setHostname(const LogString& newValue);
129+
119130
/**
120131
The number of allowed concurrent connections.
121132

src/main/include/log4cxx/private/aprserversocket.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class LOG4CXX_EXPORT APRServerSocket : public helpers::ServerSocket
3333
public:
3434
#if LOG4CXX_ABI_VERSION <= 15
3535
APRServerSocket(int port);
36-
APRServerSocket(int port, bool reuseAddress);
36+
APRServerSocket(int port, bool reuseAddress, const LogString& hostname);
3737
#else
38-
APRServerSocket(int port, bool reuseAddress = false);
38+
APRServerSocket(int port, bool reuseAddress = false, const LogString& hostname = {});
3939
#endif
4040

4141
void close() override;

src/test/cpp/net/socketappendertestcase.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class SocketAppenderTestCase : public AppenderSkeletonTestCase
8080
helpers::ServerSocketUniquePtr serverSocket;
8181
try
8282
{
83-
serverSocket = helpers::ServerSocket::create(tcpPort, true);
83+
serverSocket = helpers::ServerSocket::create(tcpPort, true, {});
8484
}
8585
catch (std::exception& ex)
8686
{

src/test/cpp/net/telnetappendertestcase.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
106106
appender->setPort(TEST_PORT);
107107
appender->setMaxConnections(1);
108108
appender->setReuseAddress(true);
109+
appender->setHostname("127.0.0.1");
109110
Pool p;
110111
appender->activateOptions(p);
111112
LoggerPtr root(Logger::getRootLogger());

0 commit comments

Comments
 (0)