More #937 (presence):
 - added protection to not resubscribe immediately if initial SUBSCRIBE is responded with 481 for some reason


git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2960 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 9316778..4727448 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -3037,9 +3037,12 @@
 
 
 /**
- * This specifies how long the library should retry resending SUBSCRIBE
- * if the previous SUBSCRIBE failed. This also controls the duration 
- * before failed PUBLISH request will be retried.
+ * This specifies how long the library should wait before retrying failed
+ * SUBSCRIBE request, and there is no rule to automatically resubscribe 
+ * (for example, no "retry-after" parameter in Subscription-State header).
+ *
+ * This also controls the duration  before failed PUBLISH request will be
+ * retried.
  *
  * Default: 300 seconds
  */
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c
index 1c8fc61..e786637 100644
--- a/pjsip/src/pjsua-lib/pjsua_pres.c
+++ b/pjsip/src/pjsua-lib/pjsua_pres.c
@@ -1467,7 +1467,14 @@
 			/* 481: we refreshed too late? resubscribe
 			 * immediately.
 			 */
-			resub_delay = 500;
+			/* But this must only happen when the 481 is received
+			 * on subscription refresh request. We MUST NOT try to
+			 * resubscribe automatically if the 481 is received
+			 * on the initial SUBSCRIBE (if server returns this
+			 * response for some reason).
+			 */
+			if (buddy->dlg->remote.contact)
+			    resub_delay = 500;
 			break;
 		    }
 		} else if (pjsip_method_cmp(&tsx->method,
@@ -1530,8 +1537,9 @@
 	    }
 
 	    buddy_resubscribe(buddy, PJ_TRUE, resub_delay);
-				  
+
 	} else {
+	    /* This will clear the last termination code/reason */
 	    buddy->term_code = 0;
 	    buddy->term_reason.slen = 0;
 	}