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); }
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); }