Encapsulate handling of UL ACK timeout

Use helper methods instead checking and manipulating flag directly.

Change-Id: Ia3f009c52118db95b38a077e08eecda844e7f8d1
Related: OS#1539
diff --git a/src/bts.cpp b/src/bts.cpp
index 2bafd63..e00bd76 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -998,6 +998,7 @@
 	struct gprs_rlcmac_tbf *tbf, *new_tbf;
 	uint32_t tlli = packet->TLLI;
 	GprsMs *ms = bts()->ms_by_tlli(tlli);
+	gprs_rlcmac_ul_tbf *ul_tbf;
 
 	tbf = bts()->ul_tbf_by_poll_fn(fn, trx_no(), ts_no);
 	if (!tbf)
@@ -1024,16 +1025,12 @@
 	tbf->poll_state = GPRS_RLCMAC_POLL_NONE;
 
 	/* check if this control ack belongs to packet uplink ack */
-	if (tbf->ul_ack_state == GPRS_RLCMAC_UL_ACK_WAIT_ACK) {
+	ul_tbf = as_ul_tbf(tbf);
+	if (ul_tbf && ul_tbf->handle_ctrl_ack()) {
 		LOGP(DRLCMAC, LOGL_DEBUG, "TBF: [UPLINK] END %s\n", tbf_name(tbf));
-		tbf->ul_ack_state = GPRS_RLCMAC_UL_ACK_NONE;
-		if ((tbf->state_flags &
-			(1 << GPRS_RLCMAC_FLAG_TO_UL_ACK))) {
-			tbf->state_flags &=
-				~(1 << GPRS_RLCMAC_FLAG_TO_UL_ACK);
-				LOGP(DRLCMAC, LOGL_NOTICE, "Recovered uplink "
-					"ack for UL %s\n", tbf_name(tbf));
-		}
+		if (ul_tbf->ctrl_ack_to_toggle())
+			LOGP(DRLCMAC, LOGL_NOTICE, "Recovered uplink ack for UL %s\n", tbf_name(tbf));
+
 		tbf_free(tbf);
 		return;
 	}