diameter.Utils

 

A mishmash of handy methods

Functions
       
checkABNF(msg, abnf)
Check that a message conforms to an ABNF.
The message is checked if it conforms to the ABNF specification.
You can use it like this:
 
abnf_my_message = [
    (True,   1,  1, ProtocolConstants.DI_SESSION_ID),
    (False,  1,  1, ProtocolConstants.DI_ORIGIN_HOST),
    (False,  1,  1, ProtocolConstants.DI_ORIGIN_REALM),
    (False,  1,  1, ProtocolConstants.DI_USER_NAME),
    ...
    (False,  0, None, None),  #special marker for arbitrary AVPs
]
caf = Utils.checkABNF(msg,abnf_my_message)
if caf:
    #The message did not conform to the ABNF
    response = Message()
    response.prepareResponse(msg)
    ...
    if caf[0]:
        msg.add(caf[0])
    msg.add(AVP_Unsigned32(ProtocolConstants.DI_RESULT_CODE,caf[1]))
    if caf.[2]:
        msg.add(AVP_UTF8String(ProtocolConstants.DI_ERROR_MESSAGE,caf[2]))
    ...
 
Parameters:
  msg  The message to be checked.
  abnf  An list of ABNFComponents. You can use on of the predefined ones or your own. It is supposed to be a list of tuples (fixed_position,min_count,max_count,code)
Returns:
  None on success. A tuple (failed_avp,result_code,error_message) on failure. The failed_avp can be None. The error_message item can be None.
copyProxyInfo(source, destination)
Copies any Proxy-Info AVPs from one message to another.
from  The source message.
to   The destination message.
setMandatory(avps, codes)
Sets the M-bit on the avps with the specified codes.
Vendor-specific AVPs are not modified.
AVPs not listed are not modified.
  avps   The AVPs to examine and possibly set the M-bit on.
  codes  Array of codes
setMandatory_RFC3588(avps)
Sets the M-bit on the AVPs that should have the M bit set according to RFC3588
setMandatory_RFC4006(avps)
Sets the M-bit on the AVPs that must have the M bit set according to RFCC4006

Data
        __package__ = 'diameter'
abnf_asa = [(True, 1, 1, 263), (False, 1, 1, 268), (False, 1, 1, 264), (False, 1, 1, 296), (False, 0, 1, 1), (False, 0, 1, 278), (False, 0, 1, 281), (False, 0, 1, 294), (False, 0, None, 279), (False, 0, None, 292), (False, 0, 1, 261), (False, 0, 1, 262), (False, 0, None, 284), (False, 0, None, None)]
abnf_asr = [(True, 1, 1, 263), (False, 1, 1, 264), (False, 1, 1, 296), (False, 1, 1, 283), (False, 1, 1, 293), (False, 1, 1, 258), (False, 0, 1, 1), (False, 0, 1, 278), (False, 0, None, 284), (False, 0, None, 282), (False, 0, None, None)]
abnf_cea = [(False, 1, 1, 268), (False, 1, 1, 264), (False, 1, 1, 296), (False, 1, None, 257), (False, 1, 1, 266), (False, 1, 1, 269), (False, 0, 1, 278), (False, 0, 1, 281), (False, 0, 1, 279), (False, 0, None, 265), (False, 0, None, 258), (False, 0, None, 299), (False, 0, None, 259), (False, 0, None, 260), (False, 0, 1, 267), (False, 0, None, None)]
abnf_cer = [(False, 1, 1, 264), (False, 1, 1, 296), (False, 1, None, 257), (False, 1, 1, 266), (False, 1, 1, 269), (False, 0, 1, 278), (False, 0, None, 265), (False, 0, None, 258), (False, 0, None, 299), (False, 0, None, 259), (False, 0, None, 260), (False, 0, 1, 267), (False, 0, None, None)]
abnf_dpa = [(False, 1, 1, 268), (False, 1, 1, 264), (False, 1, 1, 296), (False, 0, 1, 281), (False, 0, 1, 279)]
abnf_dpr = [(False, 1, 1, 264), (False, 1, 1, 296), (False, 1, 1, 273)]
abnf_dwa = [(False, 1, 1, 268), (False, 1, 1, 264), (False, 1, 1, 296), (False, 0, 1, 281), (False, 0, 1, 279), (False, 0, 1, 278)]
abnf_dwr = [(False, 1, 1, 264), (False, 1, 1, 296), (False, 0, 1, 278)]
abnf_raa = [(True, 1, 1, 263), (False, 1, 1, 268), (False, 1, 1, 264), (False, 1, 1, 296), (False, 0, None, None)]
abnf_rar = [(True, 1, 1, 263), (False, 1, 1, 264), (False, 1, 1, 296), (False, 1, 1, 283), (False, 1, 1, 293), (False, 0, 1, 258), (False, 0, 1, 285), (False, 0, None, None)]
abnf_sta = [(True, 1, 1, 263), (False, 1, 1, 268), (False, 1, 1, 264), (False, 1, 1, 296), (False, 0, 1, 1), (False, 0, None, 25), (False, 0, 1, 281), (False, 0, 1, 294), (False, 0, None, 279), (False, 0, 1, 278), (False, 0, None, 292), (False, 0, 1, 261), (False, 0, 1, 262), (False, 0, None, 284), (False, 0, None, None)]
abnf_str = [(True, 1, 1, 263), (False, 1, 1, 264), (False, 1, 1, 296), (False, 1, 1, 283), (False, 1, 1, 258), (False, 1, 1, 295), (False, 0, 1, 1), (False, 0, 1, 293), (False, 0, None, 25), (False, 0, 1, 278), (False, 0, None, 284), (False, 0, None, 282), (False, 0, None, None)]
rfc3588_mandatory_codes = frozenset([1, 25, 27, 33, 44, 50, ...])
rfc4006_mandatory_codes = frozenset([412, 413, 414, 415, 416, 417, ...])