Ejemplo n.º 1
0
/* check all routing tables for compatiblity between
 * route types and called module functions;
 * returns 0 if ok , <0 on error */
int check_rls(void)
{
	int i,ret;

	rcheck_status = 0;

	if(rlist[0]){
		if ((ret=check_actions(rlist[0],REQUEST_ROUTE))!=0){
			LM_ERR("check failed for main request route\n");
			return ret;
		}
	}
	for(i=0;i<ONREPLY_RT_NO;i++){
		if(onreply_rlist[i]){
			if ((ret=check_actions(onreply_rlist[i],ONREPLY_ROUTE))!=0){
				LM_ERR("check failed for onreply_route[%d]\n",i);
				return ret;
			}
		}
	}
	for(i=0;i<FAILURE_RT_NO;i++){
		if(failure_rlist[i]){
			if ((ret=check_actions(failure_rlist[i],FAILURE_ROUTE))!=0){
				LM_ERR("check failed for failure_route[%d]\n",i);
				return ret;
			}
		}
	}
	for(i=0;i<BRANCH_RT_NO;i++){
		if(branch_rlist[i]){
			if ((ret=check_actions(branch_rlist[i],BRANCH_ROUTE))!=0){
				LM_ERR("check failed for branch_route[%d]\n",i);
				return ret;
			}
		}
	}
	if(error_rlist){
		if ((ret=check_actions(error_rlist,ERROR_ROUTE))!=0){
			LM_ERR("check failed for error_route\n");
			return ret;
		}
	}
	return rcheck_status;
}
Ejemplo n.º 2
0
/* check all routing tables for compatiblity between
 * route types and called module functions;
 * returns 0 if ok , <0 on error */
int check_rls()
{
	int i,ret;

	rcheck_status = 0;

	if(rlist[0]){
		if ((ret=check_actions(rlist[0],REQUEST_ROUTE))!=0){
			LOG(L_ERR,"ERROR:check_rls: check failed for main "
				"request route\n");
			return ret;
		}
	}
	for(i=0;i<ONREPLY_RT_NO;i++){
		if(onreply_rlist[i]){
			if ((ret=check_actions(onreply_rlist[i],ONREPLY_ROUTE))!=0){
				LOG(L_ERR,"ERROR:check_rls: check failed for "
					"onreply_route[%d]\n",i);
				return ret;
			}
		}
	}
	for(i=0;i<FAILURE_RT_NO;i++){
		if(failure_rlist[i]){
			if ((ret=check_actions(failure_rlist[i],FAILURE_ROUTE))!=0){
				LOG(L_ERR,"ERROR:check_rls: check failed for "
					"failure_route[%d]\n",i);
				return ret;
			}
		}
	}
	for(i=0;i<BRANCH_RT_NO;i++){
		if(branch_rlist[i]){
			if ((ret=check_actions(branch_rlist[i],BRANCH_ROUTE))!=0){
				LOG(L_ERR,"ERROR:check_rls: check failed for "
					"branch_route[%d]\n",i);
				return ret;
			}
		}
	}
	return rcheck_status;
}
Ejemplo n.º 3
0
uint8_t check_events(event_ref * e_ptr) {
	event_ref e_cur = *e_ptr;
	event_ref e_prev = 0;
	uint8_t triggered_events = 0;

	while(e_cur) { // For each event
		if (check_actions(e_cur->check_list)) { //Check the event
			do_actions(e_cur->actions_list);
			triggered_events++;
			if(e_cur->repeat_mode == REPEAT_FOREVER) {
				e_prev = e_cur;
				e_cur = e_cur->next_event;
				continue;
			}
			if(e_cur->repeat_mode == REPEAT_LIMITED) {
				e_cur->repeat_count++;
				if (e_cur->repeat_count >= e_cur->max_repetitions) {
					//repeated too many times, have to delete it
					e_cur = e_cur->next_event; //first move to the next
					if (e_prev) {
						//It was not the first event, go back one to get the pointer
						event_delete(&e_prev->next_event);
					} else {
						//This was the first event, so just use the pointer we were given.
						event_delete(e_ptr);
					}
					continue;
				}
			}
			if(e_cur->repeat_mode == NO_REPEAT) {
				//have to delete it
				e_cur = e_cur->next_event; //first move to the next
				if (e_prev) {
					//It was not the first event, go back one to get the pointer
					event_delete(&e_prev->next_event);
				} else {
					//This was the first event, so just use the pointer we were given.
					event_delete(e_ptr);
				}
				continue;
			}
		}
		e_prev = e_cur;
		e_cur = e_cur->next_event;
	}
	return triggered_events;
}
Ejemplo n.º 4
0
void	run_clt(char **av)
{
	t_env	e;

	if ((e.my_sock = create_clt(av[1], ft_atoi(av[2]))) != -1)
	{
		init_clt(&e);
		while (my_exit(1, NULL) != 1)
		{
			FD_COPY(&e.fd_read, &e.fd_read_cpy);
			FD_COPY(&e.fd_write, &e.fd_write_cpy);
			do_select(&e);
			check_actions(&e);
			FD_ZERO(&e.fd_read_cpy);
			FD_ZERO(&e.fd_write_cpy);
		}
		close(e.my_sock);
	}
}
Ejemplo n.º 5
0
void	init_fd(t_env *e)
{
	int		i;

	i = 0;
	FD_ZERO(&e->srv.fd_read);
	FD_ZERO(&e->srv.fd_write);
	e->srv.max = 3;
	while (i < (e->srv.max_fd))
	{
		if (e->users[i]->type != FD_FREE)
		{
			if (e->users[i]->type == FD_CLT && e->users[i]->ig == 1
				&& !e->users[i]->gfx.gfx)
				check_actions(e, i);
			FD_SET(i, &e->srv.fd_read);
			if (verify_bsn(&e->users[i]->buf_write) == 1)
				FD_SET(i, &e->srv.fd_write);
			if (e->srv.max < i)
				e->srv.max = i;
		}
		i++;
	}
}
Ejemplo n.º 6
0
static int check_actions(struct action *a, int r_type)
{
	struct action *aitem;
	cmd_export_t  *fct;
	int n;

	for( ; a ; a=a->next ) {
		switch (a->type) {
			case ROUTE_T:
				/* this route is already on the current path ? */
				for( n=0 ; n<rcheck_stack_p ; n++ ) {
					if (rcheck_stack[n]==(int)a->p1.number)
						break;
				}
				if (n!=rcheck_stack_p)
					break;
				if (++rcheck_stack_p==RT_NO) {
					LOG(L_CRIT,"BUG:check_actions: stack overflow (%d)\n",
						rcheck_stack_p);
					goto error;
				}
				rcheck_stack[rcheck_stack_p] = a->p1.number;
				if (check_actions( rlist[a->p1.number], r_type)!=0)
					goto error;
				rcheck_stack_p--;
				break;
			case IF_T:
				if (check_actions((struct action*)a->p2.data, r_type)!=0)
					goto error;
				if (check_actions((struct action*)a->p3.data, r_type)!=0)
					goto error;
				break;
			case SWITCH_T:
				aitem = (struct action*)a->p2.data;
				for( ; aitem ; aitem=aitem->next ) {
					n = check_actions((struct action*)aitem->p2.data, r_type);
					if (n!=0) goto error;
				}
				break;
			case MODULE_T:
				/* do check :D */
				fct = find_exportp((cmd_function)(a->p1.data));
				if (fct==0) {
					LOG(L_CRIT,"BUG:check_actions: script function not found"
						" in exports\n");
					goto error;
				}
				if ( (fct->flags&r_type)!=r_type ) {
					rcheck_status = -1;
					LOG(L_ERR,"ERROR:check_actions: script function "
						"\"%s\" (types=%d) does not support route type "
						"(%d)\n",fct->name, fct->flags, r_type);
					for( n=rcheck_stack_p-1; n>=0 ; n-- ) {
						LOG(L_ERR,"ERROR:check_actions: route "
							"stack[%d]=%d\n",n,rcheck_stack[n]);
					}
				}
				break;
			default:
				break;
		}
	}

	return 0;
error:
	return -1;
}