Ver código fonte

*** empty log message ***

Bogdan-Andrei Iancu 23 anos atrás
pai
commit
774cfbc9a2
4 arquivos alterados com 16 adições e 3 exclusões
  1. 1 1
      Makefile.defs
  2. 2 1
      modules/tm/t_funcs.h
  3. 9 1
      modules/tm/t_lookup.c
  4. 4 0
      modules/tm/tm.c

+ 1 - 1
Makefile.defs

@@ -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 \

+ 2 - 1
modules/tm/t_funcs.h

@@ -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();

+ 9 - 1
modules/tm/t_lookup.c

@@ -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;
 		}
 	} else {
 		if (T)

+ 4 - 0
modules/tm/tm.c

@@ -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();