Fawkes API
Fawkes Development Version
|
00001 00002 /*************************************************************************** 00003 * network_manager.cpp - Fawkes network manager 00004 * 00005 * Created: Wed Nov 16 00:05:18 2006 00006 * Copyright 2006-2011 Tim Niemueller [www.niemueller.de] 00007 * 00008 ****************************************************************************/ 00009 00010 /* This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. A runtime exception applies to 00014 * this software (see LICENSE.GPL_WRE file mentioned below for details). 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Library General Public License for more details. 00020 * 00021 * Read the full text in the LICENSE.GPL_WRE file in the doc directory. 00022 */ 00023 00024 #include <netcomm/fawkes/network_manager.h> 00025 #include <core/threading/thread_collector.h> 00026 00027 #include <core/exceptions/system.h> 00028 #include <netcomm/fawkes/server_thread.h> 00029 #include <netcomm/fawkes/handler.h> 00030 #include <netcomm/utils/resolver.h> 00031 #ifdef HAVE_AVAHI 00032 #include <netcomm/dns-sd/avahi_thread.h> 00033 #include <netcomm/service_discovery/service.h> 00034 #else 00035 #include <netcomm/service_discovery/dummy_service_publisher.h> 00036 #include <netcomm/service_discovery/dummy_service_browser.h> 00037 #endif 00038 00039 #include <cstdlib> 00040 00041 namespace fawkes { 00042 #if 0 /* just to make Emacs auto-indent happy */ 00043 } 00044 #endif 00045 00046 /** @class FawkesNetworkManager <netcomm/fawkes/network_manager.h> 00047 * Fawkes Network Manager. 00048 * This class provides a manager for network connections used in Fawkes. 00049 * 00050 * @author Tim Niemueller 00051 */ 00052 00053 /** Constructor. 00054 * @param thread_collector thread collector that threads shall be registered to 00055 * @param fawkes_port port to listen on for Fawkes network connections 00056 * @param service_name Avahi service name for Fawkes network service 00057 */ 00058 FawkesNetworkManager::FawkesNetworkManager(ThreadCollector *thread_collector, 00059 unsigned short int fawkes_port, 00060 const char *service_name) 00061 { 00062 __fawkes_port = fawkes_port; 00063 __thread_collector = thread_collector; 00064 __fawkes_network_thread = new FawkesNetworkServerThread(__fawkes_port, 00065 __thread_collector); 00066 __thread_collector->add(__fawkes_network_thread); 00067 #ifdef HAVE_AVAHI 00068 __avahi_thread = new AvahiThread(); 00069 __service_publisher = __avahi_thread; 00070 __service_browser = __avahi_thread; 00071 __thread_collector->add(__avahi_thread); 00072 __nnresolver = new NetworkNameResolver(__avahi_thread); 00073 NetworkService *fawkes_service = new NetworkService(__nnresolver, service_name, 00074 "_fawkes._tcp", 00075 __fawkes_port); 00076 __avahi_thread->publish_service(fawkes_service); 00077 delete fawkes_service; 00078 #else 00079 __service_publisher = new DummyServicePublisher(); 00080 __service_browser = new DummyServiceBrowser(); 00081 __nnresolver = new NetworkNameResolver(); 00082 #endif 00083 } 00084 00085 00086 /** Destructor. */ 00087 FawkesNetworkManager::~FawkesNetworkManager() 00088 { 00089 __thread_collector->remove(__fawkes_network_thread); 00090 delete __fawkes_network_thread; 00091 #ifdef HAVE_AVAHI 00092 __thread_collector->remove(__avahi_thread); 00093 delete __avahi_thread; 00094 #else 00095 delete __service_publisher; 00096 delete __service_browser; 00097 #endif 00098 delete __nnresolver; 00099 } 00100 00101 00102 /** Get Fawkes network hub. 00103 * @return Fawkes network hub 00104 */ 00105 FawkesNetworkHub * 00106 FawkesNetworkManager::hub() 00107 { 00108 return __fawkes_network_thread; 00109 } 00110 00111 00112 /** Get network name resolver. 00113 * @return network name resolver 00114 */ 00115 NetworkNameResolver * 00116 FawkesNetworkManager::nnresolver() 00117 { 00118 return __nnresolver; 00119 } 00120 00121 00122 /** Get service publisher 00123 * @return service publisher 00124 */ 00125 ServicePublisher * 00126 FawkesNetworkManager::service_publisher() 00127 { 00128 return __service_publisher; 00129 } 00130 00131 00132 /** Get service browser. 00133 * @return service browser 00134 */ 00135 ServiceBrowser * 00136 FawkesNetworkManager::service_browser() 00137 { 00138 return __service_browser; 00139 } 00140 00141 } // end namespace fawkes