diff --git a/components/demo/democomponent.cpp b/components/demo/democomponent.cpp index 7d326c6f5..053cd3b24 100644 --- a/components/demo/democomponent.cpp +++ b/components/demo/democomponent.cpp @@ -15,7 +15,7 @@ string DemoComponent::GetName(void) const void DemoComponent::Start(void) { m_DemoEndpoint = make_shared(); - m_DemoEndpoint->RegisterMethodSink("demo::HelloWorld"); + m_DemoEndpoint->RegisterMethodHandler("demo::HelloWorld", bind_weak(&DemoComponent::HelloWorldRequestHAndler, shared_from_this())); m_DemoEndpoint->RegisterMethodSource("demo::HelloWorld"); EndpointManager::Ptr endpointManager = GetIcingaApplication()->GetEndpointManager(); @@ -32,14 +32,18 @@ void DemoComponent::Start(void) void DemoComponent::Stop(void) { - EndpointManager::Ptr endpointManager = GetIcingaApplication()->GetEndpointManager(); - endpointManager->UnregisterEndpoint(m_DemoEndpoint); + IcingaApplication::Ptr app = GetIcingaApplication(); + + if (app) { + EndpointManager::Ptr endpointManager = app->GetEndpointManager(); + endpointManager->UnregisterEndpoint(m_DemoEndpoint); + } } -int AuthenticationComponent::NewEndpointHandler(const NewEndpointEventArgs& neea) +int DemoComponent::NewEndpointHandler(const NewEndpointEventArgs& neea) { - neea.Endpoint->AddAllowedMethodSinkPrefix("demo"); - neea.Endpoint->AddAllowedMethodSourcePrefix("demo"); + neea.Endpoint->AddAllowedMethodSinkPrefix("demo::"); + neea.Endpoint->AddAllowedMethodSourcePrefix("demo::"); return 0; } @@ -49,19 +53,17 @@ int DemoComponent::DemoTimerHandler(const TimerEventArgs& tea) cout << "Sending multicast 'hello world' message." << endl; JsonRpcRequest request; - request.SetMethod("test"); + request.SetMethod("demo::HelloWorld"); EndpointManager::Ptr endpointManager = GetIcingaApplication()->GetEndpointManager(); - - for (int i = 0; i < 5; i++) - endpointManager->SendMulticastRequest(m_DemoEndpoint, request); + endpointManager->SendMulticastRequest(m_DemoEndpoint, request); return 0; } int DemoComponent::HelloWorldRequestHAndler(const NewRequestEventArgs& nrea) { - cout << "Got Hello World from " << nrea.Sender->GetAddress(); + cout << "Got Hello World from " << nrea.Sender->GetAddress() << endl; return 0; } diff --git a/icinga.sln b/icinga.sln index b8ac15f90..b108cc3bc 100644 --- a/icinga.sln +++ b/icinga.sln @@ -19,6 +19,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icinga", "icinga\icinga.vcx EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icinga-app", "icinga-app\icinga-app.vcxproj", "{BE412865-FEBA-4259-AD41-58950D1F5432}" ProjectSection(ProjectDependencies) = postProject + {2E6C1133-730F-4875-A72C-B455B1DD4C5C} = {2E6C1133-730F-4875-A72C-B455B1DD4C5C} + {697C6D7E-3109-484C-A7AF-384D28711610} = {697C6D7E-3109-484C-A7AF-384D28711610} + {E58F1DA7-B723-412B-B2B7-7FF58E2A944E} = {E58F1DA7-B723-412B-B2B7-7FF58E2A944E} {C1FC77E1-04A4-481B-A78B-2F7AF489C2F8} = {C1FC77E1-04A4-481B-A78B-2F7AF489C2F8} EndProjectSection EndProject diff --git a/icinga/jsonrpcendpoint.cpp b/icinga/jsonrpcendpoint.cpp index 88597372a..fcff316a4 100644 --- a/icinga/jsonrpcendpoint.cpp +++ b/icinga/jsonrpcendpoint.cpp @@ -29,7 +29,13 @@ void JsonRpcEndpoint::RemoveAllowedMethodSinkPrefix(string method) bool JsonRpcEndpoint::IsAllowedMethodSink(string method) const { - return (m_AllowedMethodSinkPrefixes.find(method) != m_AllowedMethodSinkPrefixes.end()); + set::iterator i; + for (i = m_AllowedMethodSinkPrefixes.begin(); i != m_AllowedMethodSinkPrefixes.end(); i++) { + if (method.compare(0, method.length(), method) == 0) + return true; + } + + return false; } void JsonRpcEndpoint::AddAllowedMethodSourcePrefix(string method) @@ -44,7 +50,13 @@ void JsonRpcEndpoint::RemoveAllowedMethodSourcePrefix(string method) bool JsonRpcEndpoint::IsAllowedMethodSource(string method) const { - return (m_AllowedMethodSourcePrefixes.find(method) != m_AllowedMethodSourcePrefixes.end()); + set::iterator i; + for (i = m_AllowedMethodSourcePrefixes.begin(); i != m_AllowedMethodSourcePrefixes.end(); i++) { + if (method.compare(0, method.length(), method) == 0) + return true; + } + + return false; } void JsonRpcEndpoint::Connect(string host, unsigned short port)