diff --git a/lib/diameter.py b/lib/diameter.py index 9fb89b3e..0b46c4f9 100755 --- a/lib/diameter.py +++ b/lib/diameter.py @@ -3538,9 +3538,18 @@ def Answer_16777236_265(self, packet_vars, avps): avp += self.generate_avp(296, 40, self.OriginRealm) #Origin Realm avp += self.generate_vendor_avp(628, 80, 10415, "0000010a4000000c000028af0000027580000010000028af000000010000027680000010000028af00000001") #Supported Features - subscriptionId = bytes.fromhex(self.get_avp_data(avps, 444)[0]).decode('ascii') - self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Received subscription ID: {subscriptionId}", redisClient=self.redisMessaging) - subscriptionId = subscriptionId.replace('sip:', '') + subscription_id_avp = self.get_avp_data(avps, 444) + if subscription_id_avp and len(subscription_id_avp) > 0: + subscriptionId = bytes.fromhex(subscription_id_avp[0]).decode('ascii') + + self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Received subscription ID: {subscriptionId}", redisClient=self.redisMessaging) + + subscriptionId = subscriptionId.replace('sip:', '') + else: + subscriptionId = None + + self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Received without subscription ID", redisClient=self.redisMessaging) + imsi = None msisdn = None identifier = None @@ -3611,7 +3620,7 @@ def Answer_16777236_265(self, packet_vars, avps): self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] IP APN Name: {ipApnName}", redisClient=self.redisMessaging) - if '@' in subscriptionId: + if subscriptionId is not None and '@' in subscriptionId: subscriberIdentifier = subscriptionId.split('@')[0] # Subscriber Identifier can be either an IMSI or an MSISDN try: @@ -3630,24 +3639,22 @@ def Answer_16777236_265(self, packet_vars, avps): pass if identifier == None: try: - ueIP = subscriptionId.split('@')[1].split(':')[0] - ue = self.database.Get_UE_by_IP(ueIP) + ue = self.database.Get_UE_by_IP(ueIp) subscriberId = ue.get('subscriber_id', None) subscriberDetails = self.database.Get_Subscriber(subscriber_id=subscriberId) imsi = subscriberDetails.get('imsi', None) - self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Found IMSI {imsi} by IP: {ueIP}", redisClient=self.redisMessaging) + self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Found IMSI {imsi} by IP: {ueIp}", redisClient=self.redisMessaging) except Exception as e: pass else: imsi = None msisdn = None try: - ueIP = subscriptionId.split(':')[0] - ue = self.database.Get_UE_by_IP(ueIP) + ue = self.database.Get_UE_by_IP(ueIp) subscriberId = ue.get('subscriber_id', None) subscriberDetails = self.database.Get_Subscriber(subscriber_id=subscriberId) imsi = subscriberDetails.get('imsi', None) - self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Found IMSI {imsi} by IP: {ueIP}", redisClient=self.redisMessaging) + self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [Answer_16777236_265] [AAA] Found IMSI {imsi} by IP: {ueIp}", redisClient=self.redisMessaging) except Exception as e: pass