Esempio n. 1
0
PEGASUS_THREAD_RETURN 
PEGASUS_THREAD_CDECL slp_service_agent::service_listener(void *parm)
{
   Thread *myself = (Thread *)parm;
   if(myself == 0)
      throw NullPointer();
   
   slp_service_agent *agent = 
      (slp_service_agent *)myself->get_parm();


   
   lslpMsg msg_list;
   
   while(agent->_should_listen.value())
   {
      Uint32 now, msec;
      System::getCurrentTime(now, msec);
	 // now register everything
      
      for(slp_reg_table::Iterator i = agent->_internal_regs.start(); i ; i++)
      {
	 sa_reg_params *rp = i.value();

	 if(rp->expire == 0 || rp->expire < now - 1)
	 {
	    rp->expire = now + rp->lifetime;
	    
	    if(agent->_using_das.value())
	    { 
	       agent->_rep->srv_reg_all(
		  agent->_rep, 
		  rp->url, 
		  rp->attrs, 
		  rp->type, 
		  rp->scopes, 
		  rp->lifetime);
	    }
	    else
	    {
	       agent->_rep->srv_reg_local(
		  agent->_rep, 
		  rp->url, 
		  rp->attrs, 
		  rp->type, 
		  rp->scopes, 
		  rp->lifetime);
	    }
	 }
      }
      agent->_rep->service_listener(agent->_rep, 0, &msg_list);
      _LSLP_SLEEP(1);
   }
   myself->exit_self((PEGASUS_THREAD_RETURN) 0) ;
   return(0);
}
Esempio n. 2
0
int main(int argc, char **argv)
{
  struct slp_client *client;
  int count = 0;
  time_t now, last;
  lslpMsg msg_list;
  
  
  if(FALSE == get_options(argc, argv)) {
    usage();
  } else {
    if(scopes == NULL)
      scopes = strdup("DEFAULT");
    if(test == TRUE) {
      return test_srv_reg(type, url, attrs, scopes);
    }
    
    if(NULL != (client = create_slp_client(addr, 
					   iface, 
					   port, 
					   "DSA", 
					   scopes, 
					   should_listen,
					   dir_agent))) {
      now = (last = time(NULL));
      if( addr != NULL && inet_addr(addr) == inet_addr("127.0.0.1") )
	count = client->srv_reg_local(client, url, attrs, type, scopes, life);
      else
	count = client->srv_reg_all(client, url, attrs, type, scopes, life);
      while(should_listen == TRUE) {
	_LSLP_SLEEP(10);
	client->service_listener(client, 0, &msg_list);
	now = time(NULL);
	if((now - last) > (life - 1)) {
	  count = client->srv_reg_local(client, url, attrs, type, scopes, life);
	  last = time(NULL);
	}
      }
      destroy_slp_client(client);
    }
    printf("srvreg: registered %s with %d SLP agents.\n", type, count);
  }
  free_globals();
  return(1);
}