tbf: Move the timer routine into the class

The timer is used for various timeouts and there is still external
client code that is calling it. In a perfect world the client code
would indicate that an event has happened and the internal timer
will be stopped. The best compromise is the "stop_t3191" method. It
allows to add semantic verification that the timer has been running.
diff --git a/src/bts.cpp b/src/bts.cpp
index 3c7ce40..089ef28 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -637,7 +637,7 @@
 			}
 			tbf_new_state(tbf, GPRS_RLCMAC_FLOW);
 			/* stop pending assignment timer */
-			tbf_timer_stop(tbf);
+			tbf->stop_timer();
 			if ((tbf->state_flags &
 				(1 << GPRS_RLCMAC_FLAG_TO_DL_ASS))) {
 				tbf->state_flags &=
@@ -698,8 +698,7 @@
 		}
 		/* reset N3105 */
 		tbf->n3105 = 0;
-		/* stop timer T3191 */
-		tbf_timer_stop(tbf);
+		tbf->stop_t3191();
 		tlli = tbf->tlli;
 		LOGP(DRLCMAC, LOGL_DEBUG, "RX: [PCU <- BTS] TFI: %u TLLI: 0x%08x Packet Downlink Ack/Nack\n", tbf->tfi, tbf->tlli);
 		tbf->poll_state = GPRS_RLCMAC_POLL_NONE;
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp
index 035c203..d5bebff 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -928,7 +928,7 @@
 		tbf_new_state(new_tbf, GPRS_RLCMAC_FLOW);
 		tbf_assign_control_ts(new_tbf);
 		/* stop pending assignment timer */
-		tbf_timer_stop(new_tbf);
+		new_tbf->stop_timer();
 
 	}
 	debug_diagram(bts->bts, tbf->diag, "send DL-ASS");
@@ -968,7 +968,7 @@
 #endif
 
 	/* stop pending timer */
-	tbf_timer_stop(tbf);
+	tbf->stop_timer();
 
 	/* check for downlink tbf:  */
 	if (old_tbf) {
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 91db27a..21cd4ee 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -299,7 +299,7 @@
 			"assignment. This may not happen, because the "
 			"assignment message never gets transmitted. Please "
 			"be shure not to free in this state. PLEASE FIX!\n");
-	tbf_timer_stop(tbf);
+	tbf->stop_timer();
 	while ((msg = msgb_dequeue(&tbf->llc_queue)))
 		msgb_free(msg);
 	tbf_unlink_pdch(tbf);
@@ -392,13 +392,17 @@
 	osmo_timer_schedule(&tbf->timer, seconds, microseconds);
 }
 
-void tbf_timer_stop(struct gprs_rlcmac_tbf *tbf)
+void gprs_rlcmac_tbf::stop_t3191()
 {
-	if (osmo_timer_pending(&tbf->timer)) {
+	return stop_timer();
+}
+
+void gprs_rlcmac_tbf::stop_timer()
+{
+	if (osmo_timer_pending(&timer)) {
 		LOGP(DRLCMAC, LOGL_DEBUG, "Stopping %s TBF=%d timer %u.\n",
-			(tbf->direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL",
-			tbf->tfi, tbf->T);
-		osmo_timer_del(&tbf->timer);
+			(direction == GPRS_RLCMAC_UL_TBF) ? "UL" : "DL", tfi, T);
+		osmo_timer_del(&timer);
 	}
 }
 
diff --git a/src/tbf.h b/src/tbf.h
index 5742032..3e8346c 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -103,6 +103,8 @@
 
 	int update();
 	void handle_timeout();
+	void stop_timer();
+	void stop_t3191();
 
 	struct llist_head list;
 	uint32_t state_flags;
@@ -239,8 +241,6 @@
 void tbf_timer_start(struct gprs_rlcmac_tbf *tbf, unsigned int T,
                         unsigned int seconds, unsigned int microseconds);
 
-void tbf_timer_stop(struct gprs_rlcmac_tbf *tbf);
-
 inline bool gprs_rlcmac_tbf::state_is(enum gprs_rlcmac_tbf_state rhs) const
 {
 	return state == rhs;