tbf: Low prio for BSSPG values for GPRS/EGPRS MS class

Currently the values in the BSSGP RA Cap IE are eventually use
overwrite the 'good' values obtained from the MS earlier.

Use the 'good' values when the are present, which is assumed if
at least one of ms->ms_class() or ms->egprs_ms_class() is set.

Sponsored-by: On-Waves ehf
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 1827469..a55f179 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -181,7 +181,7 @@
  */
 int gprs_rlcmac_dl_tbf::handle(struct gprs_rlcmac_bts *bts,
 		const uint32_t tlli, const uint32_t tlli_old, const char *imsi,
-		const uint8_t ms_class, uint8_t egprs_ms_class,
+		uint8_t ms_class, uint8_t egprs_ms_class,
 		const uint16_t delay_csec,
 		const uint8_t *data, const uint16_t len)
 {
@@ -191,12 +191,15 @@
 
 	/* check for existing TBF */
 	ms = bts->bts->ms_store().get_ms(tlli, tlli_old, imsi);
-	if (ms)
+	if (ms) {
 		dl_tbf = ms->dl_tbf();
 
-	/* Work-around to get EGPRS MS class */
-	if (ms && !egprs_ms_class)
-		egprs_ms_class = ms->egprs_ms_class();
+		/* If we known the GPRS/EGPRS MS class, use it */
+		if (ms->ms_class() || ms->egprs_ms_class()) {
+			ms_class = ms->ms_class();
+			egprs_ms_class = ms->egprs_ms_class();
+		}
+	}
 
 	if (ms && strlen(ms->imsi()) == 0) {
 		ms_old = bts->bts->ms_store().get_ms(0, 0, imsi);
diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err
index a93d959..3641014 100644
--- a/tests/tbf/TbfTest.err
+++ b/tests/tbf/TbfTest.err
@@ -1532,8 +1532,8 @@
 Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW)', TA=7
 Got MS: TLLI = 0xf1223344, TA = 7
 ********** TBF starts here **********
-Allocating DL TBF: MS_CLASS=0/0
-Slot Allocation (Algorithm A) for class 0
+Allocating DL TBF: MS_CLASS=1/0
+Slot Allocation (Algorithm A) for class 1
 - Skipping TS 0, because not enabled
 - Skipping TS 1, because not enabled
 - Skipping TS 2, because not enabled
@@ -1614,8 +1614,8 @@
 - No gaps in received block, last block: BSN=0 CV=15
 Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW)', TA=7
 ********** TBF starts here **********
-Allocating DL TBF: MS_CLASS=0/0
-Slot Allocation (Algorithm A) for class 0
+Allocating DL TBF: MS_CLASS=1/0
+Slot Allocation (Algorithm A) for class 1
 - Skipping TS 0, because not enabled
 - Skipping TS 1, because not enabled
 - Skipping TS 2, because not enabled
@@ -1814,8 +1814,8 @@
 - No gaps in received block, last block: BSN=0 CV=15
 Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW)', TA=7
 ********** TBF starts here **********
-Allocating DL TBF: MS_CLASS=0/0
-Slot Allocation (Algorithm A) for class 0
+Allocating DL TBF: MS_CLASS=1/0
+Slot Allocation (Algorithm A) for class 1
 - Skipping TS 0, because not enabled
 - Skipping TS 1, because not enabled
 - Skipping TS 2, because not enabled
@@ -1983,8 +1983,8 @@
 - No gaps in received block, last block: BSN=0 CV=15
 Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW)', TA=7
 ********** TBF starts here **********
-Allocating DL TBF: MS_CLASS=0/0
-Slot Allocation (Algorithm A) for class 0
+Allocating DL TBF: MS_CLASS=1/0
+Slot Allocation (Algorithm A) for class 1
 - Skipping TS 0, because not enabled
 - Skipping TS 1, because not enabled
 - Skipping TS 2, because not enabled
@@ -2129,8 +2129,8 @@
 - No gaps in received block, last block: BSN=0 CV=15
 Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW)', TA=7
 ********** TBF starts here **********
-Allocating DL TBF: MS_CLASS=0/0
-Slot Allocation (Algorithm A) for class 0
+Allocating DL TBF: MS_CLASS=1/0
+Slot Allocation (Algorithm A) for class 1
 - Skipping TS 0, because not enabled
 - Skipping TS 1, because not enabled
 - Skipping TS 2, because not enabled