| 275 | |
| 276 | |
| 277 | inline static void retransmission_handler( struct timer_link *retr_tl ) |
| 278 | { |
| 279 | struct retr_buf* r_buf ; |
| 280 | enum lists id; |
| 281 | |
| 282 | r_buf = get_retr_timer_payload(retr_tl); |
| 283 | #ifdef EXTRA_DEBUG |
| 284 | if (r_buf->my_T->damocles) { |
| 285 | LM_ERR("transaction %p scheduled for deletion and" |
| 286 | " called from RETR timer\n",r_buf->my_T); |
| 287 | abort(); |
| 288 | } |
| 289 | #endif |
| 290 | |
| 291 | /* the transaction is already removed from RETRANSMISSION_LIST by timer*/ |
| 292 | /* re-transmission */ |
| 293 | if ( r_buf->activ_type==TYPE_LOCAL_CANCEL |
| 294 | || r_buf->activ_type==TYPE_REQUEST ) { |
| 295 | LM_DBG("retransmission_handler : request resending" |
| 296 | " (t=%p, %.9s ... )\n", r_buf->my_T, r_buf->buffer.s); |
| 297 | set_t(r_buf->my_T); |
| 298 | if (SEND_BUFFER( r_buf )==0) { |
| 299 | if ( has_tran_tmcbs( r_buf->my_T, TMCB_MSG_SENT_OUT) ) { |
| 300 | set_extra_tmcb_params( &r_buf->buffer, &r_buf->dst); |
| 301 | run_trans_callbacks( TMCB_MSG_SENT_OUT, r_buf->my_T, |
| 302 | r_buf->my_T->uas.request, 0, 0); |
| 303 | } |
| 304 | /*} else { |
| 305 | reset_timer( &r_buf->fr_timer ); |
| 306 | fake_reply(r_buf->my_T, r_buf->branch, 503 ); |
| 307 | return; |
| 308 | } */ |
| 309 | } |
| 310 | |
| 311 | set_t(T_UNDEFINED); |
| 312 | switch(r_buf->retr_list) { |
| 313 | case RT_T1_TO_1: |
| 314 | if_update_stat(tm_enable_stats, tm_retran_req_T11, 1); break; |
| 315 | case RT_T1_TO_2: |
| 316 | if_update_stat(tm_enable_stats, tm_retran_req_T12, 1); break; |
| 317 | case RT_T1_TO_3: |
| 318 | if_update_stat(tm_enable_stats, tm_retran_req_T13, 1); break; |
| 319 | case RT_T2: |
| 320 | if_update_stat(tm_enable_stats, tm_retran_req_T2, 1);break; |
| 321 | default:; |
| 322 | } |
| 323 | } else { |
| 324 | LM_DBG("retransmission_handler : reply resending " |
| 325 | "(t=%p, %.9s ... )\n", r_buf->my_T, r_buf->buffer.s); |
| 326 | set_t(r_buf->my_T); |
| 327 | t_retransmit_reply(r_buf->my_T); |
| 328 | set_t(T_UNDEFINED); |
| 329 | if_update_stat(tm_enable_stats, tm_retran_rpl_T2, 1); |
| 330 | } |
| 331 | |
| 332 | id = r_buf->retr_list; |
| 333 | r_buf->retr_list = id < RT_T2 ? id + 1 : RT_T2; |
| 334 |
nothing calls this directly
no test coverage detected