summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-10-15 11:56:09 +0000
committerGordon Sim <gsim@apache.org>2007-10-15 11:56:09 +0000
commit5ecbb4b604221f2667d98e15bde87fa0102c79b7 (patch)
tree2a43c3b9bf3e1e88b711f3840dfec94a0b8bf11e /cpp/src
parent857ab44c7b5b477874bd25fa396623b6c908b61c (diff)
downloadqpid-python-5ecbb4b604221f2667d98e15bde87fa0102c79b7.tar.gz
Include information on the client connection in io traces.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@584755 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/sys/AsynchIOAcceptor.cpp6
-rw-r--r--cpp/src/qpid/sys/Socket.h11
-rw-r--r--cpp/src/qpid/sys/posix/Socket.cpp61
3 files changed, 61 insertions, 17 deletions
diff --git a/cpp/src/qpid/sys/AsynchIOAcceptor.cpp b/cpp/src/qpid/sys/AsynchIOAcceptor.cpp
index 42272a4ac9..78b156877a 100644
--- a/cpp/src/qpid/sys/AsynchIOAcceptor.cpp
+++ b/cpp/src/qpid/sys/AsynchIOAcceptor.cpp
@@ -211,7 +211,7 @@ void AsynchIOHandler::readbuff(AsynchIO& , AsynchIO::BufferBase* buff) {
framing::AMQFrame frame;
try{
while(frame.decode(in)) {
- QPID_LOG(debug, "RECV: " << frame);
+ QPID_LOG(debug, "RECV [" << aio->getSocket().getPeerAddress() << "]: " << frame);
inputHandler->received(frame);
}
}catch(const std::exception& e){
@@ -222,7 +222,7 @@ void AsynchIOHandler::readbuff(AsynchIO& , AsynchIO::BufferBase* buff) {
}else{
framing::ProtocolInitiation protocolInit;
if(protocolInit.decode(in)){
- QPID_LOG(debug, "INIT [" << aio << "]");
+ QPID_LOG(debug, "INIT [" << aio->getSocket().getPeerAddress() << "]");
inputHandler->initiated(protocolInit);
initiated = true;
}
@@ -285,7 +285,7 @@ void AsynchIOHandler::idle(AsynchIO&){
// Encode output frame
frame.encode(out);
buffUsed += frameSize;
- QPID_LOG(debug, "SENT: " << frame);
+ QPID_LOG(debug, "SENT [" << aio->getSocket().getPeerAddress() << "]: " << frame);
if (frameQueue.empty())
break;
diff --git a/cpp/src/qpid/sys/Socket.h b/cpp/src/qpid/sys/Socket.h
index 56b6195b65..a7bb7745c9 100644
--- a/cpp/src/qpid/sys/Socket.h
+++ b/cpp/src/qpid/sys/Socket.h
@@ -77,6 +77,17 @@ public:
*/
std::string getSockname() const;
+ /** Returns the "peer name" ie the address bound to
+ * the remote end of the socket
+ */
+ std::string getPeername() const;
+
+ /**
+ * Returns an address (host and port) for the remote end of the
+ * socket
+ */
+ std::string getPeerAddress() const;
+
/** Accept a connection from a socket that is already listening
* and has an incoming connection
*/
diff --git a/cpp/src/qpid/sys/posix/Socket.cpp b/cpp/src/qpid/sys/posix/Socket.cpp
index 062564d8ed..c7a83df581 100644
--- a/cpp/src/qpid/sys/posix/Socket.cpp
+++ b/cpp/src/qpid/sys/posix/Socket.cpp
@@ -39,13 +39,46 @@ namespace sys {
class SocketPrivate {
public:
- SocketPrivate(int f = -1) :
- fd(f)
- {}
+ SocketPrivate(int f = -1) :
+ fd(f)
+ {}
+
+ int fd;
- int fd;
+ std::string getName(bool local, bool includeService = false) const;
};
+std::string SocketPrivate::getName(bool local, bool includeService) const
+{
+ ::sockaddr_storage name; // big enough for any socket address
+ ::socklen_t namelen = sizeof(name);
+
+ int result = -1;
+ if (local) {
+ result = ::getsockname(fd, (::sockaddr*)&name, &namelen);
+ } else {
+ result = ::getpeername(fd, (::sockaddr*)&name, &namelen);
+ }
+
+ if (result < 0)
+ throw QPID_POSIX_ERROR(errno);
+
+ char servName[NI_MAXSERV];
+ char dispName[NI_MAXHOST];
+ if (includeService) {
+ if (int rc=::getnameinfo((::sockaddr*)&name, namelen, dispName, sizeof(dispName),
+ servName, sizeof(servName),
+ NI_NUMERICHOST | NI_NUMERICSERV) != 0)
+ throw QPID_POSIX_ERROR(rc);
+ return std::string(dispName) + ":" + std::string(servName);
+
+ } else {
+ if (int rc=::getnameinfo((::sockaddr*)&name, namelen, dispName, sizeof(dispName), 0, 0, NI_NUMERICHOST) != 0)
+ throw QPID_POSIX_ERROR(rc);
+ return dispName;
+ }
+}
+
Socket::Socket() :
impl(new SocketPrivate)
{
@@ -175,17 +208,17 @@ int Socket::write(const void *buf, size_t count) const
std::string Socket::getSockname() const
{
- ::sockaddr_storage name; // big enough for any socket address
- ::socklen_t namelen = sizeof(name);
+ return impl->getName(true);
+}
- const int& socket = impl->fd;
- if (::getsockname(socket, (::sockaddr*)&name, &namelen) < 0)
- throw QPID_POSIX_ERROR(errno);
-
- char dispName[NI_MAXHOST];
- if (int rc=::getnameinfo((::sockaddr*)&name, namelen, dispName, sizeof(dispName), 0, 0, NI_NUMERICHOST) != 0)
- throw QPID_POSIX_ERROR(rc);
- return dispName;
+std::string Socket::getPeername() const
+{
+ return impl->getName(false);
+}
+
+std::string Socket::getPeerAddress() const
+{
+ return impl->getName(false, true);
}
int toFd(const SocketPrivate* s)