diff options
author | Gordon Sim <gsim@apache.org> | 2007-10-15 11:56:09 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2007-10-15 11:56:09 +0000 |
commit | 5ecbb4b604221f2667d98e15bde87fa0102c79b7 (patch) | |
tree | 2a43c3b9bf3e1e88b711f3840dfec94a0b8bf11e /cpp/src | |
parent | 857ab44c7b5b477874bd25fa396623b6c908b61c (diff) | |
download | qpid-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.cpp | 6 | ||||
-rw-r--r-- | cpp/src/qpid/sys/Socket.h | 11 | ||||
-rw-r--r-- | cpp/src/qpid/sys/posix/Socket.cpp | 61 |
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) |