Skip to content

Commit 9fb0b8a

Browse files
committed
Enhance Diameter class error handling and username processing. Added fallback response for unhandled errors in generateDiameterResponse method. Improved username parsing to handle cases without domain separator, logging warnings as necessary.
1 parent 307e797 commit 9fb0b8a

1 file changed

Lines changed: 23 additions & 5 deletions

File tree

lib/diameter.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,13 @@ def generateDiameterResponse(self, binaryData: str) -> str:
12811281
self.logTool.log(service='HSS', level='debug', message=f"[diameter.py] [generateDiameterResponse] [{diameterApplication.get('requestAcronym', '')}] Successfully generated response: {response}", redisClient=self.redisMessaging)
12821282
except Exception as e:
12831283
self.logTool.log(service='HSS', level='error', message=f"[diameter.py] [generateDiameterResponse] [{diameterApplication.get('requestAcronym', '')}] Error generating response: {traceback.format_exc()}", redisClient=self.redisMessaging)
1284-
return ''
1284+
try:
1285+
response = self.Respond_ResultCode(packet_vars, avps, 5012)
1286+
self.logTool.log(service='HSS', level='warning', message=f"[diameter.py] [generateDiameterResponse] [{diameterApplication.get('requestAcronym', '')}] Returning DIAMETER_UNABLE_TO_COMPLY (5012) due to unhandled error", redisClient=self.redisMessaging)
1287+
return response
1288+
except Exception as fallbackError:
1289+
self.logTool.log(service='HSS', level='error', message=f"[diameter.py] [generateDiameterResponse] [{diameterApplication.get('requestAcronym', '')}] Failed to generate fallback error response: {traceback.format_exc()}", redisClient=self.redisMessaging)
1290+
return ''
12851291
break
12861292
except Exception as e:
12871293
continue
@@ -3034,8 +3040,13 @@ def Answer_16777216_300(self, packet_vars, avps):
30343040
username = self.get_avp_data(avps, 1)[0]
30353041
username = binascii.unhexlify(username).decode('utf-8')
30363042
self.logTool.log(service='HSS', level='debug', message="Username AVP is present, value is " + str(username), redisClient=self.redisMessaging)
3037-
imsi = username.split('@')[0] #Strip Domain
3038-
domain = username.split('@')[1] #Get Domain Part
3043+
if '@' in username:
3044+
imsi = username.split('@')[0]
3045+
domain = username.split('@')[1]
3046+
else:
3047+
self.logTool.log(service='HSS', level='warning', message=f"[diameter.py] [Answer_16777216_300] [UAR] Username '{username}' missing '@' domain separator, using username as IMSI", redisClient=self.redisMessaging)
3048+
imsi = username
3049+
domain = binascii.unhexlify(self.OriginRealm).decode('utf-8')
30393050
self.logTool.log(service='HSS', level='debug', message="Extracted imsi: " + str(imsi) + " now checking backend for this IMSI", redisClient=self.redisMessaging)
30403051
ims_subscriber_details = self.database.Get_IMS_Subscriber(imsi=imsi)
30413052
except Exception as E:
@@ -3291,9 +3302,16 @@ def Answer_16777216_303(self, packet_vars, avps):
32913302
self.logTool.log(service='HSS', level='debug', message="Got MAR for public_identity : " + str(public_identity), redisClient=self.redisMessaging)
32923303
username = self.get_avp_data(avps, 1)[0]
32933304
username = binascii.unhexlify(username).decode('utf-8')
3294-
imsi = username.split('@')[0] #Strip Domain
3295-
domain = username.split('@')[1] #Get Domain Part
32963305
self.logTool.log(service='HSS', level='debug', message="Got MAR username: " + str(username), redisClient=self.redisMessaging)
3306+
3307+
if '@' in username:
3308+
imsi = username.split('@')[0]
3309+
domain = username.split('@')[1]
3310+
else:
3311+
self.logTool.log(service='HSS', level='warning', message=f"[diameter.py] [Answer_16777216_303] [MAR] Username '{username}' missing '@' domain separator, using OriginRealm as domain fallback", redisClient=self.redisMessaging)
3312+
imsi = username
3313+
domain = binascii.unhexlify(self.OriginRealm).decode('utf-8')
3314+
32973315
auth_scheme = ''
32983316

32993317
avp = '' #Initiate empty var AVP

0 commit comments

Comments
 (0)