rlc: Do not raise_v_q in receive_bsn

Currently gprs_rlc_ul_window::receive_bsn calls raise_v_q and returns
the number of RLC data blocks that can be taken from the queue. This
does not fit the EGPRS feature to put 2 independant data blocks in a
single RLC block.

This commit removes raise_v_q from receive_bsn, hence it must be
called explicitely to get the number of processable data blocks.

Sponsored-by: On-Waves ehf
diff --git a/src/rlc.cpp b/src/rlc.cpp
index 9f5c61d..bafc56e 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -220,10 +220,9 @@
 	return count;
 }
 
-uint16_t gprs_rlc_ul_window::receive_bsn(const uint16_t bsn)
+void gprs_rlc_ul_window::receive_bsn(const uint16_t bsn)
 {
 	m_v_n.mark_received(bsn);
 	raise_v_r(bsn);
 
-	return raise_v_q();
 }
diff --git a/src/rlc.h b/src/rlc.h
index bafe6a8..081ba40 100644
--- a/src/rlc.h
+++ b/src/rlc.h
@@ -202,7 +202,7 @@
 
 	void raise_v_q(int);
 
-	uint16_t receive_bsn(const uint16_t bsn);
+	void receive_bsn(const uint16_t bsn);
 
 	uint16_t m_v_r;	/* receive state */
 	uint16_t m_v_q;	/* receive window state */
diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp
index aa81b53..4a5f21f 100644
--- a/src/tbf_ul.cpp
+++ b/src/tbf_ul.cpp
@@ -332,7 +332,8 @@
 	 * the window is empty.*/
 	const uint16_t v_q_beg = m_window.v_q();
 
-	const uint16_t count = m_window.receive_bsn(rh->bsn);
+	m_window.receive_bsn(rh->bsn);
+	const uint16_t count = m_window.raise_v_q();
 
 	/* Retrieve LLC frames from blocks that are ready */
 	for (uint16_t i = 0; i < count; ++i) {
diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp
index be99147..776e051 100644
--- a/tests/types/TypesTest.cpp
+++ b/tests/types/TypesTest.cpp
@@ -218,7 +218,8 @@
 
 		/* simulate to have received 0, 1 and 5 */
 		OSMO_ASSERT(ul_win.is_in_window(0));
-		count = ul_win.receive_bsn(0);
+		ul_win.receive_bsn(0);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(ul_win.m_v_n.is_received(0));
 		OSMO_ASSERT(ul_win.v_q() == 1);
 		OSMO_ASSERT(ul_win.v_r() == 1);
@@ -234,7 +235,8 @@
 		OSMO_ASSERT_STR_EQ(win_rbb, rbb);
 
 		OSMO_ASSERT(ul_win.is_in_window(1));
-		count = ul_win.receive_bsn(1);
+		ul_win.receive_bsn(1);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(ul_win.m_v_n.is_received(0));
 		OSMO_ASSERT(ul_win.v_q() == 2);
 		OSMO_ASSERT(ul_win.v_r() == 2);
@@ -250,7 +252,8 @@
 		OSMO_ASSERT_STR_EQ(win_rbb, rbb);
 
 		OSMO_ASSERT(ul_win.is_in_window(5));
-		count = ul_win.receive_bsn(5);
+		ul_win.receive_bsn(5);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(ul_win.m_v_n.is_received(0));
 		OSMO_ASSERT(ul_win.v_q() == 2);
 		OSMO_ASSERT(ul_win.v_r() == 6);
@@ -268,7 +271,8 @@
 		OSMO_ASSERT(ul_win.is_in_window(65));
 		OSMO_ASSERT(ul_win.is_in_window(2));
 		OSMO_ASSERT(ul_win.m_v_n.is_received(5));
-		count = ul_win.receive_bsn(65);
+		ul_win.receive_bsn(65);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(count == 0);
 		OSMO_ASSERT(ul_win.m_v_n.is_received(5));
 		OSMO_ASSERT(ul_win.v_q() == 2);
@@ -285,25 +289,29 @@
 
 		OSMO_ASSERT(ul_win.is_in_window(2));
 		OSMO_ASSERT(!ul_win.is_in_window(66));
-		count = ul_win.receive_bsn(2);
+		ul_win.receive_bsn(2);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(count == 1);
 		OSMO_ASSERT(ul_win.v_q() == 3);
 		OSMO_ASSERT(ul_win.v_r() == 66);
 
 		OSMO_ASSERT(ul_win.is_in_window(66));
-		count = ul_win.receive_bsn(66);
+		ul_win.receive_bsn(66);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(count == 0);
 		OSMO_ASSERT(ul_win.v_q() == 3);
 		OSMO_ASSERT(ul_win.v_r() == 67);
 
 		for (int i = 3; i <= 67; ++i) {
 			ul_win.receive_bsn(i);
+			ul_win.raise_v_q();
 		}
 
 		OSMO_ASSERT(ul_win.v_q() == 68);
 		OSMO_ASSERT(ul_win.v_r() == 68);
 
-		count = ul_win.receive_bsn(68);
+		ul_win.receive_bsn(68);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(ul_win.v_q() == 69);
 		OSMO_ASSERT(ul_win.v_r() == 69);
 		OSMO_ASSERT(count == 1);
@@ -311,7 +319,8 @@
 		/* now test the wrapping */
 		OSMO_ASSERT(ul_win.is_in_window(4));
 		OSMO_ASSERT(!ul_win.is_in_window(5));
-		count = ul_win.receive_bsn(4);
+		ul_win.receive_bsn(4);
+		count = ul_win.raise_v_q();
 		OSMO_ASSERT(count == 0);
 	}