xmlrpc_thread.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "xmlrpc_thread.h"
00024 #include "xmlrpc_processor.h"
00025 #include "methods/plugin.h"
00026 #include "methods/log.h"
00027
00028 #include <core/version.h>
00029 #include <webview/server.h>
00030 #include <webview/request_dispatcher.h>
00031
00032 using namespace fawkes;
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 XmlRpcThread::XmlRpcThread()
00044 : Thread("XmlRpcThread", Thread::OPMODE_CONTINUOUS),
00045 LoggerAspect(&__cache_logger)
00046 {
00047 set_prepfin_conc_loop(true);
00048
00049 }
00050
00051
00052 XmlRpcThread::~XmlRpcThread()
00053 {
00054 }
00055
00056 void
00057 XmlRpcThread::init()
00058 {
00059 __cfg_port = config->get_uint("/xmlrpc/port");
00060
00061 __cache_logger.clear();
00062
00063 __dispatcher = new WebRequestDispatcher();
00064 __webserver = new WebServer(__cfg_port, __dispatcher);
00065
00066 __processor = new XmlRpcRequestProcessor(logger);
00067
00068 xmlrpc_c::registry *registry = __processor->registry();
00069 __plugin_methods = new XmlRpcPluginMethods(registry, plugin_manager, logger);
00070 __log_methods = new XmlRpcLogMethods(registry, &__cache_logger, logger);
00071
00072 __dispatcher->add_processor("/", __processor);
00073
00074 logger->log_info("XmlRpcThread", "Listening for HTTP connections on port %u", __cfg_port);
00075
00076
00077 __xmlrpc_service = new NetworkService(nnresolver, "Fawkes XML-RPC on %h",
00078 "_http._tcp", __cfg_port);
00079 __xmlrpc_service->add_txt("fawkesver=%u.%u.%u", FAWKES_VERSION_MAJOR,
00080 FAWKES_VERSION_MINOR, FAWKES_VERSION_MICRO);
00081 service_publisher->publish_service(__xmlrpc_service);
00082
00083
00084 }
00085
00086 void
00087 XmlRpcThread::finalize()
00088 {
00089 service_publisher->unpublish_service(__xmlrpc_service);
00090 delete __xmlrpc_service;
00091
00092 delete __webserver;
00093 delete __plugin_methods;
00094 delete __dispatcher;
00095 delete __processor;
00096 }
00097
00098
00099 void
00100 XmlRpcThread::loop()
00101 {
00102 __webserver->process();
00103 }