/* Copyright 2010 sss * This file is part of evil_core. * * evil_core is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * evil_core is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with evil_core. If not, see .*/ #include "commonheaders.h" extern std::list services; extern boost::mutex service_list_mutex; int ServiceExists(const char *name); int CreateServiceFunction(const char* name, SERVICE svc) { if(!ServiceExists(name)) { logger.log(LM_DEBUG, "Succesfuly registered service %s.\n", name); services.push_back(new service(name, svc)); return 0; } logger.log(LM_DEBUG, "Failed to register service %s.\n", name); return 1; } void* CallService(const char *name,void* data) { if(!services.empty()) { service_list_mutex.lock(); std::list::iterator end = services.end(); for(std::list::iterator i = services.begin(); i != end; ++i) { if(!ACE_OS::strcmp((*i)->getName(), name)) { service_list_mutex.unlock(); return (*i)->getService()(data); } } service_list_mutex.unlock(); } return 0; } int ServiceExists(const char *name) { service_list_mutex.lock(); if(!services.empty()) { std::list::iterator end = services.end(); for(std::list::iterator i = services.begin(); i != end; ++i) if(!ACE_OS::strcmp((*i)->getName(), name)) { service_list_mutex.unlock(); return true; } } service_list_mutex.unlock(); return false; } service::service(const char* name, SERVICE svc) { pService = svc; szName = ACE_OS::strdup(name); } const char* service::getName() { return szName; } const SERVICE service::getService() { return pService; } service::~service() { ACE_OS::free(szName); }