package org.mobicents.servers.diameter.utils; import org.apache.log4j.Logger; import org.jdiameter.api.Avp; import org.jdiameter.api.AvpDataException; import org.jdiameter.api.AvpSet; import org.jdiameter.api.Message; import org.jdiameter.api.validation.AvpRepresentation; import org.jdiameter.api.validation.Dictionary; import org.jdiameter.common.impl.validation.DictionaryImpl; public class DiameterUtilities { private static Logger logger = Logger.getLogger(DiameterUtilities.class); public static Dictionary AVP_DICTIONARY = DictionaryImpl.INSTANCE; public static void printMessage(Message message) { String reqFlag = message.isRequest() ? "R" : "A"; String flags = reqFlag += message.isError() ? " | E" : ""; if (logger.isInfoEnabled()) { logger.info("Message [" + flags + "] Command-Code: " + message.getCommandCode() + " / E2E(" + message.getEndToEndIdentifier() + ") / HbH(" + message.getHopByHopIdentifier() + ")"); logger.info("- - - - - - - - - - - - - - - - AVPs - - - - - - - - - - - - - - - -"); printAvps(message.getAvps()); } } public static void printAvps(AvpSet avps) { printAvps(avps, ""); } public static void printAvps(AvpSet avps, String indentation) { for (Avp avp : avps) { AvpRepresentation avpRep = AVP_DICTIONARY.getAvp(avp.getCode(), avp.getVendorId()); Object avpValue = null; boolean isGrouped = false; try { String avpType = AVP_DICTIONARY.getAvp(avp.getCode(), avp.getVendorId()).getType(); if ("Integer32".equals(avpType) || "AppId".equals(avpType)) { avpValue = avp.getInteger32(); } else if ("Unsigned32".equals(avpType) || "VendorId".equals(avpType)) { avpValue = avp.getUnsigned32(); } else if ("Float64".equals(avpType)) { avpValue = avp.getFloat64(); } else if ("Integer64".equals(avpType)) { avpValue = avp.getInteger64(); } else if ("Time".equals(avpType)) { avpValue = avp.getTime(); } else if ("Unsigned64".equals(avpType)) { avpValue = avp.getUnsigned64(); } else if ("Grouped".equals(avpType)) { avpValue = "<Grouped>"; isGrouped = true; } else { avpValue = avp.getUTF8String().replaceAll("\r", "").replaceAll("\n", ""); } } catch (Exception ignore) { try { avpValue = avp.getUTF8String().replaceAll("\r", "").replaceAll("\n", ""); } catch (AvpDataException e) { avpValue = avp.toString(); } } String avpLine = indentation + avp.getCode() + ": " + avpRep.getName(); while (avpLine.length() < 50) { avpLine += avpLine.length() % 2 == 0 ? "." : " "; } avpLine += avpValue; logger.info(avpLine); if (isGrouped) { try { printAvps(avp.getGrouped(), indentation + " "); } catch (AvpDataException e) { // Failed to ungroup... ignore then... } } } } }