Exemple #1
0
 def getAVPs(self):
     """Returns a copy of the embedded AVPs in a list"""
     avps = []
     u = Unpacker(self.payload)
     bytes_left = len(self.payload)
     while bytes_left != 0:
         sz = AVP.decodeSize(u, bytes_left)
         if sz == 0:
             raise InvalidAVPLengthError(self)
         a = AVP(1, "")
         a.decode(u, sz)
         avps.append(a)
         bytes_left -= sz
     return avps
def _unittest():
    a = AVP_Float32(1, 17.5)

    assert a.queryValue() == 17.5

    a.setValue(42.75)
    assert a.queryValue() == 42.75

    a = AVP_Float32.narrow(AVP(1, "\102\053\000\000"))
    assert a.queryValue() == 42.75
    try:
        a = AVP_Float32.narrow(AVP(1, "     "))
        assert False
    except InvalidAVPLengthError:
        pass
Exemple #3
0
def _unittest():
    a = AVP_Unsigned64(1, 17)

    assert a.queryValue() == 17

    a.setValue(42)
    assert a.queryValue() == 42

    a = AVP_Unsigned64.narrow(AVP(1, "        "))
    assert a.queryValue() == 0x2020202020202020
    try:
        a = AVP_Unsigned64.narrow(AVP(1, "     "))
        assert False
    except InvalidAVPLengthError:
        pass
Exemple #4
0
def _unittest():
    a = AVP_Integer32(1, 17)

    assert a.queryValue() == 17

    a.setValue(42)
    assert a.queryValue() == 42

    a = AVP_Integer32.narrow(AVP(1, "    "))
    assert a.queryValue() == 0x20202020
    try:
        a = AVP_Integer32.narrow(AVP(1, "12345"))
        assert False
    except InvalidAVPLengthError:
        pass
Exemple #5
0
def copyProxyInfo(source,destination):
    """Copies any Proxy-Info AVPs from one message to another.
         from  The source message.
         to   The destination message.
    """
    for a in source.subset(ProtocolConstants.DI_PROXY_INFO):
        destination.append(AVP(a.code,a.payload,a.vendor_id))
Exemple #6
0
 def __str__(self):
     if len(self.payload) == 2 + 4:
         return self.str_prefix__() + " " + socket.inet_ntop(
             socket.AF_INET, self.payload[2:])
     elif len(self.payload) == 2 + 16:
         return self.str_prefix__() + " " + socket.inet_ntop(
             socket.AF_INET6, self.payload[2:])
     else:
         return AVP.__str__(self)
Exemple #7
0
 def decode(self,unpacker,bytes):
     """Decode a message from on-the-wire format.
     The message is checked to be in valid format and the VPs to be of
     the correct length etc. Invalid/reserved bits are not checked.
       unpacker  a xdrlib.Unpacker possibly containing a Diameter message
       bytes  the bytes to try to decode
     Return the result for the decode operation.
     """
     start = unpacker.get_position()
     if bytes < 4:
         return Message.decode_status_not_enough
     v_ml = unpacker.unpack_uint()
     version = v_ml>>24
     sz = v_ml&0x00FFFFFF
     if version!=1:
         return Message.decode_status_garbage
     if sz<20:
         return Message.decode_status_garbage
     if (sz%4)!=0:
         return Message.decode_status_garbage
     
     unpacker.set_position(start)
     
     # header looks ok
     if bytes<sz:
         return Message.decode_status_not_enough
     
     self.hdr.decode(unpacker)
     self.avp = []
     bytes_left = bytes - 20
     while bytes_left>0:
         if bytes_left<8:
             return Message.decode_status_garbage
         avp_sz = AVP.decodeSize(unpacker,bytes_left)
         if avp_sz==0:
             return Message.decode_status_garbage
         if avp_sz > bytes_left:
             return Message.decode_status_garbage
         a = AVP(0,[])
         a.decode(unpacker,avp_sz)
         self.avp.append(a)
         bytes_left -= avp_sz
         
     return Message.decode_status_decoded
def _unittest():
    when = 1139658264
    a = AVP_Time(1,when)
    assert a.querySecondsSince1970()==when

    a.setSecondsSince1970(when+1)
    assert a.querySecondsSince1970()==when+1

    a = AVP_Time.narrow(AVP(1,"\307\230\114\230"))
    assert a.querySecondsSince1970()==1139658264
Exemple #9
0
def _unittest():
    a = AVP_Grouped(1)
    assert a.code == 1
    assert len(a.getAVPs()) == 0

    a1 = AVP_Grouped(1, [AVP(2, "u1"), AVP(2, "u2")])
    assert len(a1.getAVPs()) == 2

    a = AVP(
        1,
        "\000\000\000\002\000\000\000\012\165\061\000\000\000\000\000\002\000\000\000\012\165\062\000\000"
    )
    a1 = AVP_Grouped.narrow(a)
    assert len(a1.getAVPs()) == 2

    a = AVP(1, "\000\000\000\002\000\000\000\012\165\061\000\000\000")
    try:
        a1 = AVP_Grouped.narrow(a)
        assert False
    except InvalidAVPLengthError:
        pass
Exemple #10
0
 def narrow(avp):
     """Convert generic AVP to AVP_Float64
     Raises: InvalidAVPLengthError
     """
     avps = []
     u = Unpacker(avp.payload)
     bytes_left = len(avp.payload)
     while bytes_left != 0:
         sz = AVP.decodeSize(u, bytes_left)
         if sz == 0:
             raise InvalidAVPLengthError(avp)
         a = AVP(1, "")
         a.decode(u, sz)
         avps.append(a)
         bytes_left -= sz
     a = AVP_Grouped(avp.code, avps, avp.vendor_id)
     a.flags = avp.flags
     return a
Exemple #11
0
 def __init__(self, code, value, vendor_id=0):
     AVP.__init__(self, code, struct.pack("!I", value), vendor_id)
Exemple #12
0
 def __init__(self, code, address, vendor_id=0):
     """Constructs an AVP_Address. The address is expected to tuple (family,address)"""
     AVP.__init__(self, code, _pack_address(address), vendor_id)
Exemple #13
0
 def __str__(self):
     return AVP.str_prefix__(self) + " " + str(
         datetime.fromtimestamp(self.querySecondsSince1970()))
Exemple #14
0
 def __init__(self, code=0, payload="", vendor_id=0):
     AVP.__init__(self, code, payload, vendor_id)
 def __init__(self, code, value="", vendor_id=0):
     AVP.__init__(self, code, utf8encoder(value)[0], vendor_id)
Exemple #16
0
 def __init__(self, code, avps=[], vendor_id=0):
     AVP.__init__(self, code, _pack(avps), vendor_id)
Exemple #17
0
 def __str__(self):
     return AVP.str_prefix__(self) + " " + self.queryValue()