#ifndef JSONRPCENDPOINT_H #define JSONRPCENDPOINT_H namespace icinga { class I2_ICINGA_API JsonRpcEndpoint : public Endpoint { private: shared_ptr m_SSLContext; string m_Address; JsonRpcClient::Ptr m_Client; map m_PendingCalls; Timer::Ptr m_ReconnectTimer; set m_AllowedMethodSinkPrefixes; set m_AllowedMethodSourcePrefixes; string m_PeerHostname; unsigned short m_PeerPort; bool IsConnected(void) const; int NewMessageHandler(const NewMessageEventArgs& nmea); int ClientClosedHandler(const EventArgs& ea); int ClientErrorHandler(const SocketErrorEventArgs& ea); int ClientReconnectHandler(const TimerEventArgs& ea); int VerifyCertificateHandler(const VerifyCertificateEventArgs& ea); public: typedef shared_ptr Ptr; typedef weak_ptr WeakPtr; void Connect(string host, unsigned short port, shared_ptr sslContext); JsonRpcClient::Ptr GetClient(void); void SetClient(JsonRpcClient::Ptr client); void SetAddress(string address); virtual string GetAddress(void) const; virtual void AddAllowedMethodSinkPrefix(string method); virtual void RemoveAllowedMethodSinkPrefix(string method); virtual bool IsAllowedMethodSink(string method) const; virtual void AddAllowedMethodSourcePrefix(string method); virtual void RemoveAllowedMethodSourcePrefix(string method); virtual bool IsAllowedMethodSource(string method) const; virtual bool IsLocal(void) const; virtual void ProcessRequest(Endpoint::Ptr sender, const JsonRpcRequest& message); virtual void ProcessResponse(Endpoint::Ptr sender, const JsonRpcResponse& message); }; } #endif /* JSONRPCENDPOINT_H */