aboutsummaryrefslogtreecommitdiffstats
path: root/src/gprs_ms_storage.cpp
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-05-21 11:07:53 +0200
committerJacob Erlbeck <jerlbeck@sysmocom.de>2015-05-28 12:29:40 +0200
commit7b9f825ae8f8a39c072413820a1a0557f420499d (patch)
tree7f989065bba29d68101ea0f1242830eff0ddf0d5 /src/gprs_ms_storage.cpp
parentb0e5eaf59adbefc44e01850a6784c9da0c3abbf9 (diff)
ms: Use the IMSI to retrieve the MS object
This commit extends get_ms() to really compare the IMSI if it has been given. Matching by TLLI has a higher precedence than matching by IMSI. Ticket: #1674 Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/gprs_ms_storage.cpp')
-rw-r--r--src/gprs_ms_storage.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/gprs_ms_storage.cpp b/src/gprs_ms_storage.cpp
index 1cdb7537..a0a32081 100644
--- a/src/gprs_ms_storage.cpp
+++ b/src/gprs_ms_storage.cpp
@@ -53,22 +53,30 @@ void GprsMsStorage::ms_active(class GprsMs *ms)
GprsMs *GprsMsStorage::get_ms(uint32_t tlli, uint32_t old_tlli, const char *imsi) const
{
- GprsMs *ms = NULL;
+ GprsMs *ms;
LListHead<GprsMs> *pos;
- llist_for_each(pos, &m_list) {
- ms = pos->entry();
- if (ms->check_tlli(tlli))
- break;
- if (ms->check_tlli(old_tlli))
- break;
- /* TODO: Check for IMSI */
+ if (tlli || old_tlli) {
+ llist_for_each(pos, &m_list) {
+ ms = pos->entry();
+ if (ms->check_tlli(tlli))
+ return ms;
+ if (ms->check_tlli(old_tlli))
+ return ms;
+ }
+ }
+
+ /* not found by TLLI */
- /* not found */
- ms = NULL;
+ if (imsi && imsi[0]) {
+ llist_for_each(pos, &m_list) {
+ ms = pos->entry();
+ if (strcmp(imsi, ms->imsi()) == 0)
+ return ms;
+ }
}
- return ms;
+ return NULL;
}
GprsMs *GprsMsStorage::create_ms(uint32_t tlli, enum gprs_rlcmac_tbf_direction dir)