MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / retransmission_handler

Function retransmission_handler

modules/tm/timer.c:277–339  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

275
276
277inline 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

Callers

nothing calls this directly

Calls 5

set_tFunction · 0.85
set_extra_tmcb_paramsFunction · 0.85
run_trans_callbacksFunction · 0.85
t_retransmit_replyFunction · 0.85
set_timerFunction · 0.85

Tested by

no test coverage detected