Pass paging group instead of imsi where later is not needed
Change-Id: Id0663a81f439f2d0b893b0d34f85a6db1927ef8e
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index bac0e56..1f23c25 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -60,6 +60,28 @@
extern void *tall_pcu_ctx;
+#define PAGING_GROUP_LEN 3
+
+/* returns [0,999] on success, > 999 on error */
+uint16_t imsi2paging_group(const char* imsi)
+{
+ uint16_t pgroup = 0;
+ size_t len = strlen(imsi);
+
+ if (!imsi || len < PAGING_GROUP_LEN)
+ return 0xFFFF;
+ imsi += len - PAGING_GROUP_LEN;
+
+ while (*imsi != '\0') {
+ if (!isdigit(*imsi))
+ return 0xFFFF;
+ pgroup *= 10;
+ pgroup += *imsi - '0';
+ imsi++;
+ }
+ return pgroup;
+}
+
/*
* PCU messages
*/
@@ -218,19 +240,18 @@
pcu_tx_data_req(0, 0, PCU_IF_SAPI_AGCH, 0, 0, 0, data, GSM_MACBLOCK_LEN);
}
-#define PAGING_GROUP_LEN 3
-void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi)
+void pcu_l1if_tx_pch(bitvec * block, int plen, uint16_t pgroup)
{
struct gprs_rlcmac_bts *bts = bts_main_data();
uint8_t data[PAGING_GROUP_LEN + GSM_MACBLOCK_LEN];
+ int i;
/* prepend paging group */
- if (!imsi || strlen(imsi) < PAGING_GROUP_LEN)
- return;
- imsi += strlen(imsi) - PAGING_GROUP_LEN;
- data[0] = imsi[0];
- data[1] = imsi[1];
- data[2] = imsi[2];
+ for (i = 0; i < PAGING_GROUP_LEN; i++) {
+ data[PAGING_GROUP_LEN - 1 - i] = '0' + (char)(pgroup % 10);
+ pgroup = pgroup / 10;
+ }
+ OSMO_ASSERT(pgroup == 0);
/* block provided by upper layer comes without first byte (plen),
* prepend it manually: