Jelajahi Sumber

modules/sca: Clear stale line-seize appearances via timer.

Some badly behaved/buggy UAs don't know when to say when.
Andrew Mortensen 12 tahun lalu
induk
melakukan
a6f80374c4
2 mengubah file dengan 22 tambahan dan 6 penghapusan
  1. 15 5
      modules/sca/sca_appearance.c
  2. 7 1
      modules/sca/sca_appearance.h

+ 15 - 5
modules/sca/sca_appearance.c

@@ -1283,7 +1283,7 @@ sca_appearance_purge_stale( unsigned int ticks, void *param )
     struct notify_list	*notify_list = NULL, *tmp_nl;
     int			i;
     int			unlinked;
-    time_t		now;
+    time_t		now, ttl;
 
     LM_INFO( "SCA: purging stale appearances" );
 
@@ -1308,11 +1308,21 @@ sca_appearance_purge_stale( unsigned int ticks, void *param )
 			cur_app = tmp_app ) {
 		tmp_app = &(*cur_app)->next;
 
-		if ((*cur_app)->state != SCA_APPEARANCE_STATE_ACTIVE_PENDING ) {
-		    continue;
+		switch ((*cur_app)->state ) {
+		case SCA_APPEARANCE_STATE_ACTIVE_PENDING:
+		    ttl = SCA_APPEARANCE_STATE_PENDING_TTL;
+		    break;
+
+		case SCA_APPEARANCE_STATE_SEIZED:
+		    ttl = SCA_APPEARANCE_STATE_SEIZED_TTL;
+		    break;
+
+		default:
+		    /* XXX for now just skip other appearances */
+		    ttl = now + 60;
+		    break;
 		}
-		if (( now - (*cur_app)->times.mtime ) <
-			SCA_APPEARANCE_STATE_PENDING_TTL ) {
+		if (( now - (*cur_app)->times.mtime ) < ttl ) {
 		    continue;
 		}
 

+ 7 - 1
modules/sca/sca_appearance.h

@@ -65,7 +65,13 @@ enum {
  * ACK. on receipt of the caller's ACK, we promote
  * the SCA callee's state to active.
  */
-#define SCA_APPEARANCE_STATE_PENDING_TTL	30
+enum {
+    /* Polycoms aggressively resubscribe line-seizes, give them time */
+    SCA_APPEARANCE_STATE_SEIZED_TTL	= 120,
+
+    /* enough time to allow retransmissions (~32s) */
+    SCA_APPEARANCE_STATE_PENDING_TTL	= 35,
+};
 
 extern const str SCA_APPEARANCE_INDEX_STR;
 extern const str SCA_APPEARANCE_STATE_STR;