@@ -84,7 +84,7 @@ DEFS+= -DNAME='"$(NAME)"' -DVERSION='"$(RELEASE)"' -DARCH='"$(ARCH)"' \
-DF_MALLOC -DUSE_SYNONIM\
-DSHM_MEM -DSHM_MMAP \
-DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=1024 \
- -DWAIT -DNEW_HNAME\ #-DNOISY_REPLIES -DBOGDAN_TRIFLE \
+ -DWAIT -DNEW_HNAME -DNOISY_REPLIES -DBOGDAN_TRIFLE \
-DSILENT_FR \
-DNO_DEBUG \
#-DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=0 \
@@ -143,7 +143,8 @@ extern struct s_table* hash_table;
DBG_REF("ref", (_T_cell)); })
#endif
-enum addifnew_status { AIN_ERROR, AIN_RETR, AIN_NEW, AIN_NEWACK, AIN_OLDACK } ;
+enum addifnew_status { AIN_ERROR, AIN_RETR, AIN_NEW, AIN_NEWACK,
+ AIN_OLDACK, AIN_RTRACK } ;
int tm_startup();
@@ -501,7 +501,15 @@ enum addifnew_status t_addifnew( struct sip_msg* p_msg )
return ret;
} else {
/* tramsaction found, it's a retransmission or ACK */
- return p_msg->REQ_METHOD==METHOD_ACK ? AIN_OLDACK : AIN_RETR;
+ if (p_msg->REQ_METHOD!=METHOD_ACK)
+ return AIN_RETR;
+ else {
+ if (T->inbound_request_isACKed)
+ return AIN_RTRACK;
+ else
+ return AIN_OLDACK;
+ }
+ //return p_msg->REQ_METHOD==METHOD_ACK ? AIN_OLDACK : AIN_RETR;
}
if (T)
@@ -359,6 +359,10 @@ static int t_relay_to( struct sip_msg *p_msg , char *str_ip , char *str_port)
DBG( "SER: WARNING: bad ACK forward\n");
ret = 1;
break;
+ case AIN_RTRACK:
+ DBG("SER: ACK retransmission detected: drop ACK!\n");
+ ret = 1;
+ break;
default:
LOG(L_CRIT, "ERROR: unexpected addifnew return value: %d\n", ret);
abort();