| 554 | |
| 555 | |
| 556 | struct timer_table *tm_init_timers( unsigned int sets ) |
| 557 | { |
| 558 | enum lists i; |
| 559 | unsigned int set; |
| 560 | |
| 561 | LM_DBG("creating %d parallel timer structures\n", timer_sets); |
| 562 | |
| 563 | timertable = (struct timer_table *)shm_malloc |
| 564 | ( sets * sizeof(struct timer_table)); |
| 565 | if (!timertable) { |
| 566 | LM_ERR("no more share memory\n"); |
| 567 | goto error0; |
| 568 | } |
| 569 | memset(timertable, 0, sets * sizeof(struct timer_table)); |
| 570 | timer_sets = sets; |
| 571 | |
| 572 | /* check the timeout values */ |
| 573 | if ( timer_id2timeout[FR_TIMER_LIST]<MIN_TIMER_VALUE ) { |
| 574 | LM_ERR("FR_TIMER must be at least %d\n", |
| 575 | MIN_TIMER_VALUE); |
| 576 | goto error0; |
| 577 | } |
| 578 | |
| 579 | if ( timer_id2timeout[FR_INV_TIMER_LIST]<MIN_TIMER_VALUE ) { |
| 580 | LM_ERR("FR_INV_TIMER must be at least %d\n", |
| 581 | MIN_TIMER_VALUE); |
| 582 | goto error0; |
| 583 | } |
| 584 | |
| 585 | if ( timer_id2timeout[WT_TIMER_LIST]<MIN_TIMER_VALUE ) { |
| 586 | LM_ERR("WT_TIMER must be at least %d\n", |
| 587 | MIN_TIMER_VALUE); |
| 588 | goto error0; |
| 589 | } |
| 590 | |
| 591 | if ( timer_id2timeout[DELETE_LIST]<MIN_TIMER_VALUE ) { |
| 592 | LM_ERR("DELETE_TIMER must be at least %d\n", |
| 593 | MIN_TIMER_VALUE); |
| 594 | goto error0; |
| 595 | } |
| 596 | |
| 597 | if ( timer_id2timeout[RT_T2]<=timer_id2timeout[RT_T1_TO_1] ) { |
| 598 | LM_ERR("T2 must be greater than T1\n"); |
| 599 | goto error0; |
| 600 | } |
| 601 | |
| 602 | /* generate timeouts for retransmissions */ |
| 603 | timer_id2timeout[RT_T1_TO_1] *=1000; |
| 604 | timer_id2timeout[RT_T2] *=1000; |
| 605 | |
| 606 | if ( (timer_id2timeout[RT_T1_TO_1]<<1) < timer_id2timeout[RT_T2] ) |
| 607 | timer_id2timeout[RT_T1_TO_2] = timer_id2timeout[RT_T1_TO_1]<<1; |
| 608 | else |
| 609 | timer_id2timeout[RT_T1_TO_2] = timer_id2timeout[RT_T2]; |
| 610 | |
| 611 | if ( (timer_id2timeout[RT_T1_TO_1]<<2) < timer_id2timeout[RT_T2] ) |
| 612 | timer_id2timeout[RT_T1_TO_3] = timer_id2timeout[RT_T1_TO_1]<<2; |
| 613 | else |
no test coverage detected