TBF: cleanup state flag handling

 * introduce generic function to check whether particular flag was set
   for'a TBF and clear it if necessary. Use this instead of
   clear_poll_timeout_flag()
 * add function to explicitly set assignment and appropriate state flags

Overall this makes the code easier to read and debug.

Related: OS#1759
Change-Id: Ic4560280c72f91700f2e19c6c7f6658dc29625c2
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index b871bc3..e3b0a9d 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -493,9 +493,7 @@
 		old_tbf->was_releasing = old_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE);
 
 		/* change state */
-		set_state(GPRS_RLCMAC_ASSIGN);
-		if (!(state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH)))
-			state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+		set_assigned_on(GPRS_RLCMAC_FLAG_PACCH, true);
 
 		/* start timer */
 		T_START(this, T0, T_ASS_PACCH_SEC, 0, "assignment (PACCH)", true);
@@ -505,8 +503,7 @@
 		was_releasing = state_is(GPRS_RLCMAC_WAIT_RELEASE);
 
 		/* change state */
-		set_state(GPRS_RLCMAC_ASSIGN);
-		state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
+		set_assigned_on(GPRS_RLCMAC_FLAG_CCCH, false);
 
 		/* send immediate assignment */
 		bts->snd_dl_ass(this, 0, imsi());
@@ -634,18 +631,12 @@
 	return bsn;
 }
 
-void gprs_rlcmac_dl_tbf::clear_poll_timeout_flag()
-{
-	state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
-}
-
 bool gprs_rlcmac_dl_tbf::handle_ack_nack()
 {
 	bool ack_recovered = false;
 
 	state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK);
-	if ((state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
-		clear_poll_timeout_flag();
+	if (check_n_clear(GPRS_RLCMAC_FLAG_TO_DL_ACK)) {
 		ack_recovered = true;
 	}
 
@@ -856,7 +847,7 @@
 			if (is_final)
 				T_START(this, T3191, bts_data()->t3191, 0, "final block (DL-TBF)", true);
 
-			clear_poll_timeout_flag();
+			state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); /* clear poll timeout flag */
 
 			/* Clear request flag */
 			m_dl_ack_requested = false;