/* 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; }
/* 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; }
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; }
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); } }
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++; } }
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; }