Esempio n. 1
0
/// 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