]> granicus.if.org Git - icinga2/commitdiff
Cleaned up reconnection code.
authorGunnar Beutner <gunnar.beutner@netways.de>
Thu, 26 Apr 2012 19:33:23 +0000 (21:33 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 26 Apr 2012 19:33:23 +0000 (21:33 +0200)
base/tcpclient.cpp
base/tcpclient.h
base/tcpsocket.cpp
base/tcpsocket.h
icinga/endpointmanager.cpp
icinga/jsonrpcendpoint.cpp
icinga/jsonrpcendpoint.h

index 7b13db5ce323123ee6b837ae1eb70bfa90547782..e609e5116894fc0c8bd64aa49322687303509cde 100644 (file)
@@ -8,8 +8,6 @@ TCPClient::TCPClient(TCPClientRole role)
 
        m_SendQueue = make_shared<FIFO>();
        m_RecvQueue = make_shared<FIFO>();
-
-       m_PeerPort = 0;
 }
 
 TCPClientRole TCPClient::GetRole(void) const
@@ -52,8 +50,6 @@ void TCPClient::Connect(const string& hostname, unsigned short port)
        }
 
        m_Role = RoleOutbound;
-       m_PeerHost = hostname;
-       m_PeerPort = port;
 }
 
 FIFO::Ptr TCPClient::GetSendQueue(void)
@@ -66,17 +62,6 @@ FIFO::Ptr TCPClient::GetRecvQueue(void)
        return m_RecvQueue;
 }
 
-
-string TCPClient::GetPeerHost(void)
-{
-       return m_PeerHost;
-}
-
-int TCPClient::GetPeerPort(void)
-{
-       return m_PeerPort;
-}
-
 int TCPClient::ReadableEventHandler(const EventArgs& ea)
 {
        int rc;
index 7395e5f3e4f5c9505e2021c9cb4f416c959da94f..d2b383251430130d4d462883fc5e580032314cc8 100644 (file)
@@ -15,9 +15,6 @@ class I2_BASE_API TCPClient : public TCPSocket
 private:
        TCPClientRole m_Role;
 
-       string m_PeerHost;
-       int m_PeerPort;
-
        FIFO::Ptr m_SendQueue;
        FIFO::Ptr m_RecvQueue;
 
@@ -39,9 +36,6 @@ public:
        FIFO::Ptr GetSendQueue(void);
        FIFO::Ptr GetRecvQueue(void);
 
-       string GetPeerHost(void);
-       int GetPeerPort(void);
-
        virtual bool WantsToRead(void) const;
        virtual bool WantsToWrite(void) const;
 
index 9172106c6b1ea133c8ddb82f3cc6614aaa05a060..82239ef58b5ca4473754c143252fe707d123baed 100644 (file)
@@ -67,7 +67,7 @@ string TCPSocket::GetAddressFromSockaddr(sockaddr *address)
        else
                IpAddress = &(((sockaddr_in6 *)address)->sin6_addr);
 
-       if (inet_ntop(address->sa_family, address, buffer, sizeof(buffer)) == NULL)
+       if (inet_ntop(address->sa_family, IpAddress, buffer, sizeof(buffer)) == NULL)
                return string();
 #endif /* _WIN32 */
 
@@ -87,27 +87,38 @@ unsigned short TCPSocket::GetPortFromSockaddr(sockaddr *address)
        }
 }
 
-void TCPSocket::GetClientSockaddr(sockaddr_storage *address)
+bool TCPSocket::GetClientSockaddr(sockaddr_storage *address)
 {
        socklen_t len = sizeof(*address);
        
-       if (getsockname(GetFD(), (sockaddr *)address, &len) < 0)
+       if (getsockname(GetFD(), (sockaddr *)address, &len) < 0) {
                HandleSocketError();
+
+               return false;
+       }
+
+       return true;
 }
 
-void TCPSocket::GetPeerSockaddr(sockaddr_storage *address)
+bool TCPSocket::GetPeerSockaddr(sockaddr_storage *address)
 {
        socklen_t len = sizeof(*address);
        
-       if (getpeername(GetFD(), (sockaddr *)address, &len) < 0)
+       if (getpeername(GetFD(), (sockaddr *)address, &len) < 0) {
                HandleSocketError();
+
+               return false;
+       }
+
+       return true;
 }
 
 string TCPSocket::GetClientAddress(void)
 {
        sockaddr_storage sin;
 
-       GetClientSockaddr(&sin);
+       if (!GetClientSockaddr(&sin))
+               return "";
 
        return GetAddressFromSockaddr((sockaddr *)&sin);
 }
@@ -116,7 +127,8 @@ string TCPSocket::GetPeerAddress(void)
 {
        sockaddr_storage sin;
 
-       GetPeerSockaddr(&sin);
+       if (!GetPeerSockaddr(&sin))
+               return "";
 
        return GetAddressFromSockaddr((sockaddr *)&sin);
 }
index e661b2da68f9ac59af2c51e90722e64972ea9b28..2373d2e1fb1617470c3814271a71bba1bcd9df9a 100644 (file)
@@ -19,8 +19,8 @@ public:
        void Bind(unsigned short port);
        void Bind(const char *hostname, unsigned short port);
 
-       void GetClientSockaddr(sockaddr_storage *address);
-       void GetPeerSockaddr(sockaddr_storage *address);
+       bool GetClientSockaddr(sockaddr_storage *address);
+       bool GetPeerSockaddr(sockaddr_storage *address);
 
        string GetClientAddress(void);
        string GetPeerAddress(void);
index c6b028068dca46f727e5eeb5cec4d7738365832c..b9adab381cfaf958228581c942cab06c2820c57e 100644 (file)
@@ -9,7 +9,9 @@ EndpointManager::EndpointManager(shared_ptr<SSL_CTX> sslContext)
 
 void EndpointManager::AddListener(unsigned short port)
 {
-       Application::Log("Adding new listener: port " + port);
+       stringstream s;
+       s << "Adding new listener: port " << port;
+       Application::Log(s.str());
 
        JsonRpcServer::Ptr server = make_shared<JsonRpcServer>(m_SSLContext);
        RegisterServer(server);
index 2b3dacaea646190e4da4bb2c2543f82352c6f14d..2ec80924e3f0b5dbb819aa37d1007fce62d5e142 100644 (file)
@@ -59,6 +59,9 @@ bool JsonRpcEndpoint::IsAllowedMethodSource(string method) const
 
 void JsonRpcEndpoint::Connect(string host, unsigned short port, shared_ptr<SSL_CTX> sslContext)
 {
+       m_PeerHostname = host;
+       m_PeerPort = port;
+
        JsonRpcClient::Ptr client = make_shared<JsonRpcClient>(RoleOutbound, sslContext);
        client->MakeSocket();
        client->Connect(host, port);
@@ -140,7 +143,7 @@ int JsonRpcEndpoint::ClientClosedHandler(const EventArgs& ea)
 
        m_PendingCalls.clear();
 
-       if (m_Client->GetPeerHost() != string()) {
+       if (m_PeerHostname != string()) {
                Timer::Ptr timer = make_shared<Timer>();
                timer->SetInterval(30);
                timer->SetUserArgs(ea);
@@ -178,7 +181,7 @@ int JsonRpcEndpoint::ClientReconnectHandler(const TimerEventArgs& ea)
        JsonRpcClient::Ptr client = static_pointer_cast<JsonRpcClient>(ea.UserArgs.Source);
        Timer::Ptr timer = static_pointer_cast<Timer>(ea.Source);
 
-       GetEndpointManager()->AddConnection(client->GetPeerHost(), client->GetPeerPort());
+       GetEndpointManager()->AddConnection(m_PeerHostname, m_PeerPort);
 
        timer->Stop();
        m_ReconnectTimer.reset();
index 234ccfb0e06cfc1b5f4508190bef88dab97c01e2..b2340386a11d9629f899eed5db2e80841250f10c 100644 (file)
@@ -15,6 +15,9 @@ private:
        set<string> m_AllowedMethodSinkPrefixes;
        set<string> m_AllowedMethodSourcePrefixes;
 
+       string m_PeerHostname;
+       unsigned short m_PeerPort;
+
        bool IsConnected(void) const;
        
        int NewMessageHandler(const NewMessageEventArgs& nmea);