You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by af...@apache.org on 2006/05/13 18:05:51 UTC
svn commit: r406123 - in /logging/log4cxx/trunk: include/log4cxx/helpers/
include/log4cxx/net/ simplesocketserver/ src/ tests/src/ tests/src/helpers/
Author: afester
Date: Sat May 13 09:05:49 2006
New Revision: 406123
URL: http://svn.apache.org/viewcvs?rev=406123&view=rev
Log:
LOGCXX-64: ported InetAddress to the APR
Added:
logging/log4cxx/trunk/tests/src/helpers/inetaddresstestcase.cpp
Modified:
logging/log4cxx/trunk/include/log4cxx/helpers/datagrampacket.h
logging/log4cxx/trunk/include/log4cxx/helpers/datagramsocket.h
logging/log4cxx/trunk/include/log4cxx/helpers/inetaddress.h
logging/log4cxx/trunk/include/log4cxx/helpers/serversocket.h
logging/log4cxx/trunk/include/log4cxx/helpers/socket.h
logging/log4cxx/trunk/include/log4cxx/helpers/socketimpl.h
logging/log4cxx/trunk/include/log4cxx/helpers/syslogwriter.h
logging/log4cxx/trunk/include/log4cxx/net/socketappender.h
logging/log4cxx/trunk/include/log4cxx/net/socketappenderskeleton.h
logging/log4cxx/trunk/include/log4cxx/net/xmlsocketappender.h
logging/log4cxx/trunk/simplesocketserver/simplesocketserver.cpp
logging/log4cxx/trunk/src/datagrampacket.cpp
logging/log4cxx/trunk/src/datagramsocket.cpp
logging/log4cxx/trunk/src/inetaddress.cpp
logging/log4cxx/trunk/src/serversocket.cpp
logging/log4cxx/trunk/src/socket.cpp
logging/log4cxx/trunk/src/socketappender.cpp
logging/log4cxx/trunk/src/socketappenderskeleton.cpp
logging/log4cxx/trunk/src/sockethubappender.cpp
logging/log4cxx/trunk/src/socketimpl.cpp
logging/log4cxx/trunk/src/xmlsocketappender.cpp
logging/log4cxx/trunk/tests/src/Makefile.am
logging/log4cxx/trunk/tests/src/shortsocketserver.cpp
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/datagrampacket.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/datagrampacket.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/datagrampacket.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/datagrampacket.h Sat May 13 09:05:49 2006
@@ -48,7 +48,7 @@
int length;
/** The IP address for this packet. */
- InetAddress address;
+ InetAddressPtr address;
/** The UDP port number of the remote host. */
int port;
@@ -66,7 +66,7 @@
/** Constructs a datagram packet for sending packets of length
<code>length</code> to the specified port number on the specified
host. */
- DatagramPacket(void * buf, int length, InetAddress address, int port);
+ DatagramPacket(void * buf, int length, InetAddressPtr address, int port);
/** Constructs a DatagramPacket for receiving packets of length
<code>length</code>, specifying an offset into the buffer. */
@@ -75,14 +75,14 @@
/** Constructs a datagram packet for sending packets of length
<code>length</code> with offset <code>offset</code> to the
specified port number on the specified host. */
- DatagramPacket(void * buf, int offset, int length, InetAddress address,
+ DatagramPacket(void * buf, int offset, int length, InetAddressPtr address,
int port);
~DatagramPacket();
/** Returns the IP address of the machine to which this datagram
is being sent or from which the datagram was received. */
- inline InetAddress getAddress() const
+ inline InetAddressPtr getAddress() const
{ return address; }
/** Returns the data received or the data to be sent. */
@@ -104,7 +104,7 @@
inline int getPort() const
{ return port; }
- inline void setAddress(InetAddress address)
+ inline void setAddress(InetAddressPtr address)
{ this->address = address; }
/** Set the data buffer for this packet. */
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/datagramsocket.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/datagramsocket.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/datagramsocket.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/datagramsocket.h Sat May 13 09:05:49 2006
@@ -55,13 +55,13 @@
/** Creates a datagram socket, bound to the specified local
address. */
- DatagramSocket(int port, InetAddress laddr);
+ DatagramSocket(int port, InetAddressPtr laddr);
/** ensure the socket is closed. */
~DatagramSocket();
/** Binds a datagram socket to a local port and address.*/
- void bind(int lport, InetAddress laddress);
+ void bind(int lport, InetAddressPtr laddress);
/** Creates a datagram socket.*/
void create();
@@ -70,14 +70,14 @@
void close();
/** Connects the socket to a remote address for this socket. */
- void connect(InetAddress address, int port);
+ void connect(InetAddressPtr address, int port);
/** Returns the address to which this socket is connected. */
- inline InetAddress getInetAddress() const
+ inline InetAddressPtr getInetAddress() const
{ return address; }
/** Gets the local address to which the socket is bound. */
- inline InetAddress getLocalAddress() const
+ inline InetAddressPtr getLocalAddress() const
{ return localAddress; }
/** Returns the port number on the local host to which this
@@ -114,9 +114,9 @@
/** The memory pool for the socket */
Pool socketPool;
- InetAddress address;
+ InetAddressPtr address;
- InetAddress localAddress;
+ InetAddressPtr localAddress;
int port;
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/inetaddress.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/inetaddress.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/inetaddress.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/inetaddress.h Sat May 13 09:05:49 2006
@@ -17,6 +17,8 @@
#ifndef _LOG4CXX_HELPER_INETADDRESS_H
#define _LOG4CXX_HELPER_INETADDRESS_H
+#include <log4cxx/helpers/objectimpl.h>
+#include <log4cxx/helpers/objectptr.h>
#include <log4cxx/logstring.h>
#include <vector>
#include <log4cxx/helpers/exception.h>
@@ -33,22 +35,27 @@
UnknownHostException& operator=(const UnknownHostException& src);
};
- class LOG4CXX_EXPORT InetAddress
+
+ class InetAddress;
+ typedef ObjectPtrT<InetAddress> InetAddressPtr;
+
+ class LOG4CXX_EXPORT InetAddress : public ObjectImpl
{
public:
- InetAddress();
+ DECLARE_ABSTRACT_LOG4CXX_OBJECT(InetAddress)
+ BEGIN_LOG4CXX_CAST_MAP()
+ LOG4CXX_CAST_ENTRY(InetAddress)
+ END_LOG4CXX_CAST_MAP()
- /** Returns the raw IP address of this InetAddress object.
- */
- int getAddress() const;
+ InetAddress(const LogString& hostName, const LogString& hostAddr);
/** Determines all the IP addresses of a host, given the host's name.
*/
- static std::vector<InetAddress> getAllByName(const LogString& host);
+ static std::vector<InetAddressPtr> getAllByName(const LogString& host);
/** Determines the IP address of a host, given the host's name.
*/
- static InetAddress getByName(const LogString& host);
+ static InetAddressPtr getByName(const LogString& host);
/** Returns the IP address string "%d.%d.%d.%d".
*/
@@ -60,19 +67,26 @@
/** Returns the local host.
*/
- static InetAddress getLocalHost();
+ static InetAddressPtr getLocalHost();
- /** Utility routine to check if the InetAddress is an IP multicast address.
- */
- bool isMulticastAddress() const;
+ /** Returns an InetAddress which can be used as any
+ * address, for example when listening on a port from any
+ * remote addresss.
+ */
+ static InetAddressPtr anyAddress();
/** Converts this IP address to a String.
*/
LogString toString() const;
- int address;
+ private:
+ LogString ipAddrString;
+
+ LogString hostNameString;
+
}; // class InetAddress
} // namespace helpers
} // namespace log4cxx
#endif // _LOG4CXX_HELPER_INETADDRESS_H
+
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/serversocket.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/serversocket.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/serversocket.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/serversocket.h Sat May 13 09:05:49 2006
@@ -40,7 +40,7 @@
and local IP address to bind to.
*/
- ServerSocket(int port, int backlog, InetAddress bindAddr);
+ ServerSocket(int port, int backlog, InetAddressPtr bindAddr);
~ServerSocket();
@@ -56,7 +56,7 @@
/** Returns the local address of this server socket.
*/
- inline InetAddress getInetAddress() const
+ inline InetAddressPtr getInetAddress() const
{ return socketImpl->getInetAddress(); }
/** Returns the port on which this socket is listening.
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/socket.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/socket.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/socket.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/socket.h Sat May 13 09:05:49 2006
@@ -62,13 +62,13 @@
/** Creates a stream socket and connects it to the specified port
number at the specified IP address.
*/
- Socket(InetAddress address, int port);
+ Socket(InetAddressPtr address, int port);
/** Creates a socket and connects it to the specified remote
address on the specified remote port.
*/
- Socket(InetAddress address, int port,
- InetAddress localAddr, int localPort);
+ Socket(InetAddressPtr address, int port,
+ InetAddressPtr localAddr, int localPort);
protected:
/** Creates an unconnected Socket
@@ -86,7 +86,7 @@
host on the specified remote port.
*/
Socket(const LogString& host, int port,
- InetAddress localAddr, int localPort);
+ InetAddressPtr localAddr, int localPort);
size_t read(void * buf, size_t len) const
{ return socketImpl->read(buf, len); }
@@ -99,7 +99,7 @@
{ socketImpl->close(); }
/** Returns the value of this socket's address field. */
- inline InetAddress getInetAddress() const
+ inline InetAddressPtr getInetAddress() const
{ return socketImpl->getInetAddress(); }
/** Returns the value of this socket's localport field. */
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/socketimpl.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/socketimpl.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/socketimpl.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/socketimpl.h Sat May 13 09:05:49 2006
@@ -170,7 +170,7 @@
{
protected:
/** The IP address of the remote end of this socket. */
- InetAddress address;
+ InetAddressPtr address;
/** The APR memory pool to use for this socket */
Pool memoryPool;
@@ -216,7 +216,7 @@
@param port the port number.
@exception BindException if an I/O error occurs when binding this socket.
*/
- void bind(InetAddress host, int port);
+ void bind(InetAddressPtr host, int port);
/** Closes this socket. */
void close();
@@ -224,7 +224,7 @@
/** Connects this socket to the specified port number
on the specified host.
*/
- void connect(InetAddress address, int port);
+ void connect(InetAddressPtr address, int port);
/** Connects this socket to the specified port on the named host. */
void connect(const LogString& host, int port);
@@ -233,7 +233,7 @@
void create(bool stream);
/** Returns the value of this socket's address field. */
- inline InetAddress getInetAddress() const
+ inline InetAddressPtr getInetAddress() const
{ return address; }
/** Returns the value of this socket's localport field. */
Modified: logging/log4cxx/trunk/include/log4cxx/helpers/syslogwriter.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/helpers/syslogwriter.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/helpers/syslogwriter.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/helpers/syslogwriter.h Sat May 13 09:05:49 2006
@@ -40,7 +40,7 @@
private:
LogString syslogHost;
- InetAddress address;
+ InetAddressPtr address;
DatagramSocketPtr ds;
};
} // namespace helpers
Modified: logging/log4cxx/trunk/include/log4cxx/net/socketappender.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/net/socketappender.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/net/socketappender.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/net/socketappender.h Sat May 13 09:05:49 2006
@@ -110,7 +110,7 @@
/**
Connects to remote server at <code>address</code> and <code>port</code>.
*/
- SocketAppender(unsigned long address, int port);
+ SocketAppender(helpers::InetAddressPtr& address, int port);
/**
Connects to remote server at <code>host</code> and <code>port</code>.
Modified: logging/log4cxx/trunk/include/log4cxx/net/socketappenderskeleton.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/net/socketappenderskeleton.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/net/socketappenderskeleton.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/net/socketappenderskeleton.h Sat May 13 09:05:49 2006
@@ -48,7 +48,7 @@
/**
IP address
*/
- helpers::InetAddress address;
+ helpers::InetAddressPtr address;
int port;
helpers::SocketOutputStreamPtr os;
@@ -62,7 +62,7 @@
/**
Connects to remote server at <code>address</code> and <code>port</code>.
*/
- SocketAppenderSkeleton(unsigned long address, int port, int reconnectionDelay);
+ SocketAppenderSkeleton(helpers::InetAddressPtr address, int port, int reconnectionDelay);
/**
Connects to remote server at <code>host</code> and <code>port</code>.
Modified: logging/log4cxx/trunk/include/log4cxx/net/xmlsocketappender.h
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/include/log4cxx/net/xmlsocketappender.h?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/include/log4cxx/net/xmlsocketappender.h (original)
+++ logging/log4cxx/trunk/include/log4cxx/net/xmlsocketappender.h Sat May 13 09:05:49 2006
@@ -118,7 +118,7 @@
/**
Connects to remote server at <code>address</code> and <code>port</code>.
*/
- XMLSocketAppender(unsigned long address, int port);
+ XMLSocketAppender(helpers::InetAddressPtr address, int port);
/**
Connects to remote server at <code>host</code> and <code>port</code>.
Modified: logging/log4cxx/trunk/simplesocketserver/simplesocketserver.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/simplesocketserver/simplesocketserver.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/simplesocketserver/simplesocketserver.cpp (original)
+++ logging/log4cxx/trunk/simplesocketserver/simplesocketserver.cpp Sat May 13 09:05:49 2006
@@ -97,7 +97,7 @@
SocketPtr socket = serverSocket.accept();
logstream << "Connected to client at "
- << socket->getInetAddress().toString();
+ << socket->getInetAddress()->toString();
logstream << "Starting new socket node.";
Thread * thread = new Thread();
Modified: logging/log4cxx/trunk/src/datagrampacket.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/datagrampacket.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/datagrampacket.cpp (original)
+++ logging/log4cxx/trunk/src/datagrampacket.cpp Sat May 13 09:05:49 2006
@@ -30,7 +30,7 @@
/** Constructs a datagram packet for sending packets of length
<code>length/<code> to the specified port number on the specified
host. */
-DatagramPacket::DatagramPacket(void * buf, int length, InetAddress address,
+DatagramPacket::DatagramPacket(void * buf, int length, InetAddressPtr address,
int port)
: buf(buf), offset(0), length(length), address(address), port(port)
{
@@ -46,7 +46,7 @@
<code>length</code> with offset <code>offset</code> to the
specified port number on the specified host. */
DatagramPacket::DatagramPacket(void * buf, int offset, int length,
-InetAddress address, int port)
+InetAddressPtr address, int port)
: buf(buf), offset(offset), length(length), address(address), port(port)
{
}
Modified: logging/log4cxx/trunk/src/datagramsocket.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/datagramsocket.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/datagramsocket.cpp (original)
+++ logging/log4cxx/trunk/src/datagramsocket.cpp Sat May 13 09:05:49 2006
@@ -36,14 +36,13 @@
DatagramSocket::DatagramSocket(int localPort)
: socket(0), address(), localAddress(), port(0), localPort(0)
{
- InetAddress bindAddr;
- bindAddr.address = INADDR_ANY;
+ InetAddressPtr bindAddr = InetAddress::anyAddress();
create();
bind(localPort, bindAddr);
}
-DatagramSocket::DatagramSocket(int localPort, InetAddress localAddress)
+DatagramSocket::DatagramSocket(int localPort, InetAddressPtr localAddress)
: socket(0), address(), localAddress(), port(0), localPort(0)
{
create();
@@ -62,12 +61,12 @@
}
/** Binds a datagram socket to a local port and address.*/
-void DatagramSocket::bind(int localPort, InetAddress localAddress)
+void DatagramSocket::bind(int localPort, InetAddressPtr localAddress)
{
Pool addrPool;
- // Create server socket address
- LOG4CXX_ENCODE_CHAR(hostAddr, localAddress.getHostAddress());
+ // Create server socket address (including port number)
+ LOG4CXX_ENCODE_CHAR(hostAddr, localAddress->getHostAddress());
apr_sockaddr_t *server_addr;
apr_status_t status =
apr_sockaddr_info_get(&server_addr, hostAddr.c_str(), APR_INET,
@@ -101,7 +100,7 @@
}
}
-void DatagramSocket::connect(InetAddress address, int port)
+void DatagramSocket::connect(InetAddressPtr address, int port)
{
this->address = address;
@@ -110,7 +109,7 @@
Pool addrPool;
// create socket address
- LOG4CXX_ENCODE_CHAR(hostAddr, address.getHostAddress());
+ LOG4CXX_ENCODE_CHAR(hostAddr, address->getHostAddress());
apr_sockaddr_t *client_addr;
apr_status_t status =
apr_sockaddr_info_get(&client_addr, hostAddr.c_str(), APR_INET,
@@ -145,7 +144,7 @@
Pool addrPool;
// Create the address from which to receive the datagram packet
- LOG4CXX_ENCODE_CHAR(hostAddr, p->getAddress().getHostAddress());
+ LOG4CXX_ENCODE_CHAR(hostAddr, p->getAddress()->getHostAddress());
apr_sockaddr_t *addr;
apr_status_t status =
apr_sockaddr_info_get(&addr, hostAddr.c_str(), APR_INET,
@@ -169,7 +168,7 @@
Pool addrPool;
// create the adress to which to send the datagram packet
- LOG4CXX_ENCODE_CHAR(hostAddr, p->getAddress().getHostAddress());
+ LOG4CXX_ENCODE_CHAR(hostAddr, p->getAddress()->getHostAddress());
apr_sockaddr_t *addr;
apr_status_t status =
apr_sockaddr_info_get(&addr, hostAddr.c_str(), APR_INET, p->getPort(),
Modified: logging/log4cxx/trunk/src/inetaddress.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/inetaddress.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/inetaddress.cpp (original)
+++ logging/log4cxx/trunk/src/inetaddress.cpp Sat May 13 09:05:49 2006
@@ -14,26 +14,18 @@
* limitations under the License.
*/
-#if defined(WIN32) || defined(_WIN32)
-#include <windows.h>
-#include <winsock.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <string.h>
-#endif
-
#include <log4cxx/helpers/inetaddress.h>
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/helpers/pool.h>
+
+#include "apr_network_io.h"
using namespace log4cxx;
using namespace log4cxx::helpers;
+IMPLEMENT_LOG4CXX_OBJECT(InetAddress)
+
UnknownHostException::UnknownHostException(const std::string& msg)
: Exception(msg) {
}
@@ -48,134 +40,89 @@
}
-InetAddress::InetAddress() : address(0)
-{
+InetAddress::InetAddress(const LogString& hostName, const LogString& hostAddr)
+ : hostNameString(hostName), ipAddrString(hostAddr) {
}
-/** Returns the raw IP address of this InetAddress object.
-*/
-int InetAddress::getAddress() const
-{
- return address;
-}
/** Determines all the IP addresses of a host, given the host's name.
*/
-std::vector<InetAddress> InetAddress::getAllByName(const LogString& host)
-{
- struct hostent * hostinfo;
+std::vector<InetAddressPtr> InetAddress::getAllByName(const LogString& host) {
+ LOG4CXX_ENCODE_CHAR(encodedHost, host);
- std::string hostname;
- Transcoder::encode(host, hostname);
- hostinfo = ::gethostbyname(hostname.c_str());
-
- if (hostinfo == 0)
- {
- LogLog::error(
- ((LogString) LOG4CXX_STR("Cannot get information about host :"))
- + host);
- return std::vector<InetAddress>();
- }
- else
- {
- std::vector<InetAddress> addresses;
- InetAddress address;
- char ** addrs = hostinfo->h_addr_list;
-
- while(*addrs != 0)
- {
- address.address = ntohl(((in_addr *)*addrs)->s_addr);
- addresses.push_back(address);
- }
+ // retrieve information about the given host
+ Pool addrPool;
- return addresses;
- }
+ apr_sockaddr_t *address;
+ apr_status_t status =
+ apr_sockaddr_info_get(&address, encodedHost.c_str(),
+ APR_INET, 0, 0, (apr_pool_t*) addrPool.getAPRPool());
+ if (status != APR_SUCCESS) {
+ LogString msg(LOG4CXX_STR("Cannot get information about host: "));
+ msg.append(host);
+ LogLog::error(msg);
+ std::string s;
+ Transcoder::encode(msg, s);
+ throw UnknownHostException(s);
+ }
+
+ std::vector<InetAddressPtr> result;
+ apr_sockaddr_t *currentAddr = address;
+ while(currentAddr != NULL) {
+ // retrieve the IP address of this InetAddress.
+ LogString ipAddrString;
+ char *ipAddr;
+ apr_sockaddr_ip_get(&ipAddr, currentAddr);
+ Transcoder::decode(ipAddr, strlen(ipAddr), ipAddrString);
+
+ // retrieve the host name of this InetAddress.
+ LogString hostNameString;
+ char *hostName;
+ apr_getnameinfo(&hostName, currentAddr, 0);
+ Transcoder::decode(hostName, strlen(hostName), hostNameString);
+
+ result.push_back(new InetAddress(hostNameString, ipAddrString));
+ currentAddr = currentAddr->next;
+ }
+ return result;
}
+
/** Determines the IP address of a host, given the host's name.
*/
-InetAddress InetAddress::getByName(const LogString& host)
-{
- struct hostent * hostinfo;
- InetAddress address;
-
- std::string hostname;
- Transcoder::encode(host, hostname);
- hostinfo = ::gethostbyname(hostname.c_str());
-
- if (hostinfo == 0)
- {
- LogString msg(LOG4CXX_STR("Cannot get information about host: "));
- msg.append(host);
- LogLog::error(msg);
- std::string s;
- Transcoder::encode(msg, s);
- throw UnknownHostException(s);
- }
- else
- {
- address.address = ntohl(((in_addr *)*hostinfo->h_addr_list)->s_addr);
- }
-
- return address;
+InetAddressPtr InetAddress::getByName(const LogString& host) {
+ return getAllByName(host)[0];
}
/** Returns the IP address string "%d.%d.%d.%d".
*/
LogString InetAddress::getHostAddress() const
{
- in_addr addr;
- addr.s_addr = htonl(address);
- const char* rv = ::inet_ntoa(addr);
- LOG4CXX_DECODE_CHAR(wrv, rv);
- return wrv;
+ return ipAddrString;
}
/** Gets the host name for this IP address.
*/
LogString InetAddress::getHostName() const
{
- LogString hostName;
- struct hostent * hostinfo;
-
- in_addr addr;
- addr.s_addr = htonl(address);
- hostinfo = ::gethostbyaddr((const char *)&addr, sizeof(addr), AF_INET);
-
- if (hostinfo != 0)
- {
- Transcoder::decode(hostinfo->h_name, strlen(hostinfo->h_name), hostName);
- }
- else
- {
- LogString msg(LOG4CXX_STR("Cannot get host name: "));
-// TODO:
-// msg += address->toString();
- LogLog::error(msg);
- }
-
- return hostName;
+ return hostNameString;
}
/** Returns the local host.
*/
-InetAddress InetAddress::getLocalHost()
+InetAddressPtr InetAddress::getLocalHost()
{
- InetAddress address;
- address.address = ntohl(inet_addr("127.0.0.1"));
- return address;
+ return getByName(LOG4CXX_STR("127.0.0.1"));
}
-/** Utility routine to check if the InetAddress is an IP multicast address.
-IP multicast address is a Class D address
-i.e first four bits of the address are 1110.
-*/
-bool InetAddress::isMulticastAddress() const
-{
- return (address & 0xF000) == 0xE000;
+
+InetAddressPtr InetAddress::anyAddress() {
+ // APR_ANYADDR does not work with the LOG4CXX_STR macro
+ return getByName(LOG4CXX_STR("0.0.0.0"));
}
+
/** Converts this IP address to a String.
*/
LogString InetAddress::toString() const
@@ -185,3 +132,4 @@
rv.append(getHostAddress());
return rv;
}
+
Modified: logging/log4cxx/trunk/src/serversocket.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/serversocket.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/serversocket.cpp (original)
+++ logging/log4cxx/trunk/src/serversocket.cpp Sat May 13 09:05:49 2006
@@ -14,14 +14,6 @@
* limitations under the License.
*/
-#if defined(_WIN32)
-#include <windows.h>
-#include <winsock.h>
-#else
-#include <sys/types.h>
-#include <netinet/in.h>
-#endif
-
#include <log4cxx/helpers/serversocket.h>
#include <log4cxx/helpers/socket.h>
@@ -33,8 +25,7 @@
*/
ServerSocket::ServerSocket(int port)
{
- InetAddress bindAddr;
- bindAddr.address = INADDR_ANY;
+ InetAddressPtr bindAddr = InetAddress::anyAddress();
socketImpl = new SocketImpl();
socketImpl->create(true);
@@ -47,8 +38,7 @@
*/
ServerSocket::ServerSocket(int port, int backlog)
{
- InetAddress bindAddr;
- bindAddr.address = INADDR_ANY;
+ InetAddressPtr bindAddr = InetAddress::anyAddress();
socketImpl = new SocketImpl();
socketImpl->create(true);
@@ -59,7 +49,7 @@
/** Create a server with the specified port, listen backlog,
and local IP address to bind to.
*/
-ServerSocket::ServerSocket(int port, int backlog, InetAddress bindAddr)
+ServerSocket::ServerSocket(int port, int backlog, InetAddressPtr bindAddr)
{
socketImpl = new SocketImpl();
socketImpl->create(true);
Modified: logging/log4cxx/trunk/src/socket.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/socket.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/socket.cpp (original)
+++ logging/log4cxx/trunk/src/socket.cpp Sat May 13 09:05:49 2006
@@ -14,25 +14,11 @@
* limitations under the License.
*/
-#if defined(_WIN32)
-#include <windows.h>
-#include <winsock.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <netdb.h>
-#endif
-
#include <log4cxx/helpers/socket.h>
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/helpers/socketoutputstream.h>
#include <log4cxx/helpers/socketinputstream.h>
-#include <string.h>
-
using namespace log4cxx;
using namespace log4cxx::helpers;
@@ -47,7 +33,7 @@
/** Creates a stream socket and connects it to the specified port
number at the specified IP address.
*/
-Socket::Socket(InetAddress address, int port) : socketImpl(new SocketImpl())
+Socket::Socket(InetAddressPtr address, int port) : socketImpl(new SocketImpl())
{
socketImpl->create(true);
socketImpl->connect(address, port);
@@ -56,8 +42,8 @@
/** Creates a socket and connects it to the specified remote
address on the specified remote port.
*/
-Socket::Socket(InetAddress address, int port,
- InetAddress localAddr, int localPort) : socketImpl(new SocketImpl())
+Socket::Socket(InetAddressPtr address, int port,
+ InetAddressPtr localAddr, int localPort) : socketImpl(new SocketImpl())
{
socketImpl->create(true);
socketImpl->connect(address, port);
@@ -86,7 +72,7 @@
host on the specified remote port.
*/
Socket::Socket(const LogString& host, int port,
- InetAddress localAddr, int localPort)
+ InetAddressPtr localAddr, int localPort)
: socketImpl(new SocketImpl())
{
socketImpl->create(true);
Modified: logging/log4cxx/trunk/src/socketappender.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/socketappender.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/socketappender.cpp (original)
+++ logging/log4cxx/trunk/src/socketappender.cpp Sat May 13 09:05:49 2006
@@ -46,7 +46,7 @@
: SocketAppenderSkeleton(DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY) {
}
-SocketAppender::SocketAppender(unsigned long address, int port)
+SocketAppender::SocketAppender(InetAddressPtr& address, int port)
: SocketAppenderSkeleton(address, port, DEFAULT_RECONNECTION_DELAY) {
connect();
}
Modified: logging/log4cxx/trunk/src/socketappenderskeleton.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/socketappenderskeleton.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/socketappenderskeleton.cpp (original)
+++ logging/log4cxx/trunk/src/socketappenderskeleton.cpp Sat May 13 09:05:49 2006
@@ -45,18 +45,17 @@
thread() {
}
-SocketAppenderSkeleton::SocketAppenderSkeleton(unsigned long address, int port, int delay)
+SocketAppenderSkeleton::SocketAppenderSkeleton(InetAddressPtr address, int port, int delay)
:
pool(),
remoteHost(),
- address(),
+ address(address),
port(port),
os(),
reconnectionDelay(delay),
locationInfo(false),
thread() {
- this->address.address = address;
- remoteHost = this->address.getHostName();
+ remoteHost = this->address->getHostName();
}
SocketAppenderSkeleton::SocketAppenderSkeleton(const LogString& host, int port, int delay)
@@ -107,7 +106,7 @@
void SocketAppenderSkeleton::append(const spi::LoggingEventPtr& event, Pool& p)
{
- if(address.address == 0)
+ if(address == 0)
{
errorHandler->error(
LOG4CXX_STR("No remote host is set for appender named \"") +
@@ -165,7 +164,7 @@
void SocketAppenderSkeleton::connect()
{
- if(address.address == 0)
+ if(address == 0)
{
return;
}
@@ -182,7 +181,7 @@
{
LogString msg = LOG4CXX_STR("Could not connect to remote log4cxx server at [")
- +address.getHostName()+LOG4CXX_STR("].");
+ +address->getHostName()+LOG4CXX_STR("].");
if(reconnectionDelay > 0)
{
@@ -214,7 +213,7 @@
{
apr_sleep(APR_INT64_C(1000) * socketAppender->reconnectionDelay);
LogLog::debug(LOG4CXX_STR("Attempting connection to ")
- +socketAppender->address.getHostName());
+ +socketAppender->address->getHostName());
socket = new Socket(socketAppender->address, socketAppender->port);
synchronized sync(socketAppender->mutex);
@@ -228,7 +227,7 @@
catch(ConnectException&)
{
LogLog::debug(LOG4CXX_STR("Remote host ")
- +socketAppender->address.getHostName()
+ +socketAppender->address->getHostName()
+LOG4CXX_STR(" refused connection."));
}
catch(IOException& e)
@@ -237,7 +236,7 @@
log4cxx::helpers::Transcoder::decode(e.what(), exmsg);
LogLog::debug(((LogString) LOG4CXX_STR("Could not connect to "))
- + socketAppender->address.getHostName()
+ + socketAppender->address->getHostName()
+ LOG4CXX_STR(". Exception is ")
+ exmsg);
}
Modified: logging/log4cxx/trunk/src/sockethubappender.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/sockethubappender.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/sockethubappender.cpp (original)
+++ logging/log4cxx/trunk/src/sockethubappender.cpp Sat May 13 09:05:49 2006
@@ -194,11 +194,11 @@
{
try
{
- InetAddress remoteAddress = socket->getInetAddress();
+ InetAddressPtr remoteAddress = socket->getInetAddress();
LogLog::debug(LOG4CXX_STR("accepting connection from ")
- + remoteAddress.getHostName()
+ + remoteAddress->getHostName()
+ LOG4CXX_STR(" (")
- + remoteAddress.getHostAddress()
+ + remoteAddress->getHostAddress()
+ LOG4CXX_STR(")"));
// create an ObjectOutputStream
Modified: logging/log4cxx/trunk/src/socketimpl.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/socketimpl.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/socketimpl.cpp (original)
+++ logging/log4cxx/trunk/src/socketimpl.cpp Sat May 13 09:05:49 2006
@@ -177,7 +177,7 @@
// Accept new connection
apr_socket_t *clientSocket = 0;
apr_status_t status =
- apr_socket_accept(&clientSocket, (apr_socket_t*) socket, (apr_pool_t*) memoryPool.getAPRPool());
+ apr_socket_accept(&clientSocket, (apr_socket_t*) socket, (apr_pool_t*) s->memoryPool.getAPRPool());
if (status != APR_SUCCESS) {
throw SocketException(status);
}
@@ -189,7 +189,19 @@
throw SocketException(status);
}
- s->address.address = *((int*) client_addr->ipaddr_ptr);
+ // retrieve the IP address from the client socket's apr_sockaddr_t
+ LogString ipAddrString;
+ char *ipAddr;
+ apr_sockaddr_ip_get(&ipAddr, client_addr);
+ Transcoder::decode(ipAddr, strlen(ipAddr), ipAddrString);
+
+ // retrieve the host name from the client socket's apr_sockaddr_t
+ LogString hostNameString;
+ char *hostName;
+ apr_getnameinfo(&hostName, client_addr, 0);
+ Transcoder::decode(hostName, strlen(hostName), hostNameString);
+
+ s->address = new InetAddress(hostNameString, ipAddrString);
s->socket = clientSocket;
s->port = client_addr->port;
}
@@ -206,11 +218,11 @@
/** Binds this socket to the specified port number
on the specified host.
*/
-void SocketImpl::bind(InetAddress address, int port)
+void SocketImpl::bind(InetAddressPtr address, int port)
{
- LOG4CXX_ENCODE_CHAR(host, address.getHostAddress());
+ LOG4CXX_ENCODE_CHAR(host, address->getHostAddress());
- // Create server socket address
+ // Create server socket address (including port number)
apr_sockaddr_t *server_addr;
apr_status_t status =
apr_sockaddr_info_get(&server_addr, host.c_str(), APR_INET,
@@ -238,7 +250,7 @@
throw SocketException(status);
}
- address.address = 0;
+ address = 0;
socket = 0;
port = 0;
localport = -1;
@@ -248,11 +260,11 @@
/** Connects this socket to the specified port number
on the specified host.
*/
-void SocketImpl::connect(InetAddress address, int port)
+void SocketImpl::connect(InetAddressPtr address, int port)
{
- LOG4CXX_ENCODE_CHAR(host, address.getHostAddress());
+ LOG4CXX_ENCODE_CHAR(host, address->getHostAddress());
- // create socket address
+ // create socket address (including port)
apr_sockaddr_t *client_addr;
apr_status_t status =
apr_sockaddr_info_get(&client_addr, host.c_str(), APR_INET,
@@ -306,7 +318,7 @@
*/
LogString SocketImpl::toString() const
{
- LogString oss(address.getHostAddress());
+ LogString oss(address->getHostAddress());
oss.append(1, LOG4CXX_STR(':'));
Pool p;
oss.append(StringHelper::toString(port, p));
Modified: logging/log4cxx/trunk/src/xmlsocketappender.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/src/xmlsocketappender.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/xmlsocketappender.cpp (original)
+++ logging/log4cxx/trunk/src/xmlsocketappender.cpp Sat May 13 09:05:49 2006
@@ -50,7 +50,7 @@
memset(zeroBuffer, 0, MAX_EVENT_LEN);
}
-XMLSocketAppender::XMLSocketAppender(unsigned long address, int port)
+XMLSocketAppender::XMLSocketAppender(InetAddressPtr address, int port)
: SocketAppenderSkeleton(address, port, DEFAULT_RECONNECTION_DELAY)
{
layout = new XMLLayout();
Modified: logging/log4cxx/trunk/tests/src/Makefile.am
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/tests/src/Makefile.am?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/tests/src/Makefile.am (original)
+++ logging/log4cxx/trunk/tests/src/Makefile.am Sat May 13 09:05:49 2006
@@ -30,6 +30,7 @@
helpers/charsetencodertestcase.cpp \
helpers/cyclicbuffertestcase.cpp\
helpers/datetimedateformattestcase.cpp \
+ helpers/inetaddresstestcase.cpp \
helpers/iso8601dateformattestcase.cpp \
helpers/localechanger.cpp\
helpers/optionconvertertestcase.cpp \
Added: logging/log4cxx/trunk/tests/src/helpers/inetaddresstestcase.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/tests/src/helpers/inetaddresstestcase.cpp?rev=406123&view=auto
==============================================================================
--- logging/log4cxx/trunk/tests/src/helpers/inetaddresstestcase.cpp (added)
+++ logging/log4cxx/trunk/tests/src/helpers/inetaddresstestcase.cpp Sat May 13 09:05:49 2006
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <log4cxx/helpers/inetaddress.h>
+
+using namespace log4cxx;
+using namespace log4cxx::helpers;
+
+
+class InetAddressTestCase : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(InetAddressTestCase);
+ CPPUNIT_TEST(testGetLocalHost);
+ CPPUNIT_TEST(testByNameLocal);
+ CPPUNIT_TEST(testAllByNameLocal);
+ CPPUNIT_TEST_EXCEPTION(testUnknownHost, UnknownHostException);
+// CPPUNIT_TEST(testByNameRemote);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ /**
+ * Tests the InetAddress::getLocalHost() method.
+ */
+ void testGetLocalHost() {
+ InetAddressPtr addr = InetAddress::getLocalHost();
+
+ CPPUNIT_ASSERT(addr->getHostAddress() == LOG4CXX_STR("127.0.0.1"));
+ CPPUNIT_ASSERT(addr->getHostName().find(LOG4CXX_STR("localhost")) == 0);
+ }
+
+ /**
+ * Tests the InetAddress::getByName() method with the
+ * "localhost" host name.
+ */
+ void testByNameLocal() {
+ InetAddressPtr addr = InetAddress::getByName(LOG4CXX_STR("localhost"));
+
+ CPPUNIT_ASSERT(addr->getHostAddress() == LOG4CXX_STR("127.0.0.1"));
+ CPPUNIT_ASSERT(addr->getHostName().find(LOG4CXX_STR("localhost")) == 0);
+ }
+
+ /**
+ * Tests the InetAddress::getAllByName() method with the
+ * "localhost" host name.
+ */
+ void testAllByNameLocal() {
+ std::vector<InetAddressPtr> addr = InetAddress::getAllByName(LOG4CXX_STR("localhost"));
+
+ CPPUNIT_ASSERT(addr.size() > 0);
+ }
+
+ /**
+ * Tests the UnknownHostException.
+ */
+ void testUnknownHost() {
+ InetAddressPtr addr = InetAddress::getByName(LOG4CXX_STR("unknown.host.local"));
+ }
+
+ /**
+ * Tests resolving a remote host name.
+ * This test is usually disabled in the test suite because it
+ * probably produces volatile data.
+ */
+ void testByNameRemote() {
+ InetAddressPtr addr = InetAddress::getByName(LOG4CXX_STR("www.apache.org"));
+
+ CPPUNIT_ASSERT(addr->getHostAddress() == LOG4CXX_STR("209.237.227.195"));
+ CPPUNIT_ASSERT(addr->getHostName() == LOG4CXX_STR("minotaur-2.apache.org"));
+ }
+};
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION(InetAddressTestCase);
+
Modified: logging/log4cxx/trunk/tests/src/shortsocketserver.cpp
URL: http://svn.apache.org/viewcvs/logging/log4cxx/trunk/tests/src/shortsocketserver.cpp?rev=406123&r1=406122&r2=406123&view=diff
==============================================================================
--- logging/log4cxx/trunk/tests/src/shortsocketserver.cpp (original)
+++ logging/log4cxx/trunk/tests/src/shortsocketserver.cpp Sat May 13 09:05:49 2006
@@ -77,7 +77,7 @@
PropertyConfigurator::configure(sbuf.str());
LOG4CXX_INFO(logger, "Waiting to accept a new client.");
SocketPtr socket = serverSocket.accept();
- LogString msg(socket->getInetAddress().toString());
+ LogString msg(socket->getInetAddress()->toString());
msg.insert(0, LOG4CXX_STR("Connected to client at "));
LOG4CXX_INFO(logger, msg);
LOG4CXX_INFO(logger, "Starting new socket node.");