/// main method for manual testing void test(const char* logname) { hostaddresslist_t& ntlpv4addr= gconf.getparref< hostaddresslist_t >(gistconf_localaddrv4); hostaddresslist_t& ntlpv6addr= gconf.getparref< hostaddresslist_t >(gistconf_localaddrv6); // check whether all addresses are really pure IPv4 if (ntlpv4addr.empty() == false) { hostaddresslist_t::iterator it= ntlpv4addr.begin(); while (it != ntlpv4addr.end()) { if ( !it->is_ipv4() ) { WLog("main", "Detected non IPv4 address, removing " << *it ); it= ntlpv4addr.erase(it); } else it++; } // end while } // check whether all addresses are really pure IPv6 if (ntlpv6addr.empty() == false) { hostaddresslist_t::iterator it= ntlpv6addr.begin(); while (it != ntlpv6addr.end()) { if ( !it->is_ipv6() ) { WLog("main", "Detected non-IPv6 address, removing " << *it ); it= ntlpv6addr.erase(it); } else it++; } // end while } // this will set default values NTLPStarterParam ntlppar; AddressList *addresses = new AddressList(); if (ntlpv4addr.size() == 0 && ntlpv6addr.size() == 0) { addresses->add_host_prop(NULL, AddressList::ConfiguredAddr_P); } if (!ntlpv4addr.empty()) { hostaddresslist_t::iterator it= ntlpv4addr.begin(); while (it != ntlpv4addr.end()) { netaddress na(*it); na.set_pref_len(32); addresses->add_property(na, AddressList::ConfiguredAddr_P); it++; } // end while } if (!ntlpv6addr.empty()) { hostaddresslist_t::iterator it= ntlpv6addr.begin(); while (it != ntlpv6addr.end()) { netaddress na(*it); na.set_pref_len(128); addresses->add_property(na, AddressList::ConfiguredAddr_P); it++; } // end while } // set specified IP addresses ntlppar.addresses = addresses; // fill the parameters from configfile or command line // (parameters given by command line will override these) if (config[gconf.parname(gistconf_udpport)].empty() == false) gconf.setpar(gistconf_udpport, (uint16) StringToInt(config[gconf.parname(gistconf_udpport)])); if (config[gconf.parname(gistconf_tcpport)].empty() == false) gconf.setpar(gistconf_tcpport, (uint16) StringToInt(config[gconf.parname(gistconf_tcpport)])); if (config[gconf.parname(gistconf_sctpport)].empty() == false) gconf.setpar(gistconf_sctpport, (uint16) StringToInt(config[gconf.parname(gistconf_sctpport)])); if (config[gconf.parname(gistconf_tlsport)].empty() == false) gconf.setpar(gistconf_tlsport, (uint16) StringToInt(config[gconf.parname(gistconf_tlsport)])); if (config[gconf.parname(gistconf_retrylimit)].empty() == false) gconf.setpar(gistconf_retrylimit, (uint32) StringToInt(config[ gconf.parname(gistconf_retrylimit)])); if (config[gconf.parname(gistconf_retryperiod)].empty() == false) gconf.setpar(gistconf_retryperiod, (uint32) StringToInt(config[ gconf.parname(gistconf_retryperiod)])); if (config[gconf.parname(gistconf_retryfactor)].empty() == false) gconf.setpar(gistconf_retryfactor, StringToDouble(config[ gconf.parname(gistconf_retryfactor)])); if (config[gconf.parname(gistconf_rs_validity_time)].empty() == false) gconf.setpar(gistconf_rs_validity_time, (uint32) StringToInt(config[ gconf.parname(gistconf_rs_validity_time)])); if (config[gconf.parname(gistconf_refresh_limit)].empty() == false) gconf.setpar(gistconf_refresh_limit, (uint32) StringToInt(config[ gconf.parname(gistconf_refresh_limit)])); if (config[gconf.parname(gistconf_ma_hold_time)].empty() == false) gconf.setpar(gistconf_ma_hold_time, (uint32) StringToInt(config[ gconf.parname(gistconf_ma_hold_time)])); if (config[gconf.parname(gistconf_secrets_refreshtime)].empty() == false) gconf.setpar(gistconf_secrets_refreshtime, (uint32) StringToInt(config[ gconf.parname(gistconf_secrets_refreshtime)])); if (config[gconf.parname(gistconf_secrets_count)].empty() == false) gconf.setpar(gistconf_secrets_count, (uint32) StringToInt(config[ gconf.parname(gistconf_secrets_count)])); if (config[gconf.parname(gistconf_secrets_length)].empty() == false) gconf.setpar(gistconf_secrets_length, (uint16) StringToInt(config[ gconf.parname(gistconf_secrets_length)])); if (config[gconf.parname(gistconf_delayedstate)].empty() == false) gconf.setpar(gistconf_delayedstate, StringToBool(config[ gconf.parname(gistconf_delayedstate)])); if (config[gconf.parname(gistconf_senddatainquery)].empty() == false) gconf.setpar(gistconf_senddatainquery, StringToBool(config[ gconf.parname(gistconf_senddatainquery)])); if (config[gconf.parname(gistconf_confirmrequired)].empty() == false) gconf.setpar(gistconf_confirmrequired, StringToBool(config[ gconf.parname(gistconf_confirmrequired)])); if (config[gconf.parname(gistconf_reqhelloecho)].empty() == false) gconf.setpar(gistconf_reqhelloecho, StringToBool(config[ gconf.parname(gistconf_reqhelloecho)])); if (config[gconf.parname(gistconf_advertise_sctp)].empty() == false) gconf.setpar(gistconf_advertise_sctp, StringToBool(config[ gconf.parname(gistconf_advertise_sctp)])); if (config[gconf.parname(gistconf_verbose_error_responses)].empty() == false) gconf.setpar(gistconf_verbose_error_responses, StringToBool(config[ gconf.parname(gistconf_verbose_error_responses)])); if (config[gconf.parname(gistconf_debug_tp)].empty() == false) gconf.setpar(gistconf_debug_tp, StringToBool(config[ gconf.parname(gistconf_debug_tp)])); #ifdef USE_FLOWINFO // Create a flowinfoservice thread FlowinfoParam fiparam; ThreadStarter<Flowinfo, FlowinfoParam> fithread(1, fiparam); fithread.start_processing(); // record the flowinfoservice thread in the ntlp_param ntlppar.fi_service = fithread.get_thread_object(); #endif // give the parameters to NTLP Starter ThreadStarter<NTLPStarter,NTLPStarterParam> ntlpthread(1,ntlppar); global_ntlpthread_p= ntlpthread.get_thread_object(); // NTLP Starter will start all the remaining modules/threads init_signals(); ntlpthread.start_processing(); sleep(2); if (startapimsgchecker) { FastQueue* apimsgrecv_fq= new FastQueue("apimsgchecker",true); QueueManager::instance()->register_queue(apimsgrecv_fq, message::qaddr_api_1); pthread_create(&apimsgreceivethread,NULL,apimsgchecker,NULL); } DLog("ntlp", "Starting GISTConsole"); GISTConsoleParam gistcon_par(getpid(), message::qaddr_api_2); ThreadStarter<GISTConsole, GISTConsoleParam> GISTconsole_thread(1, gistcon_par); GISTconsole_thread.start_processing(); while(!stopped) { sleep(2); } // stop TPchecker Log(EVENT_LOG, LOG_NORMAL, "ntlp", "Stopping apimsgchecker thread"); done = true; while (running) { sleep(1); } // end while not done GISTconsole_thread.stop_processing(); GISTconsole_thread.wait_until_stopped(); if (startapimsgchecker) { QueueManager::instance()->unregister_queue(message::qaddr_api_1); } // stop threads Log(EVENT_LOG, LOG_NORMAL, "ntlp", "Stopping GIST instance"); ntlpthread.stop_processing(); restore_signals(); } // end test