@Override
    public void decode(final ByteBuffer buf, final int available, final StringBuilder log) throws Exception
    {
    	final int iface = buf.getInt();
    	if (iface != 0)
    		throw new Exception("Received interface " + iface + " instead of 0");
    	final short timeout = buf.getShort();
    	final short count = buf.getShort();
    	if (count != 2)
    		throw new Exception("Received count " + count + " instead of 2");
    	final short addr_type = buf.getShort();
    	final short addr_length = buf.getShort();
    	final short data_type = buf.getShort();
    	final short received_data_length = buf.getShort();
    	
    	//  Followed by data...
    	if (log != null)
        {
        	log.append("Received RR Data\n");
        	log.append("UDINT interface handle  : ").append(iface).append("\n");
        	log.append("UINT timeout            : ").append(timeout).append("\n");
        	log.append("UINT count (addr., data): ").append(count).append("\n");
        	log.append(String.format("UINT address type       : 0x%X (%s)\n", addr_type, decodeCPT(addr_type)));
        	log.append("UINT address length     : ").append(addr_length).append("\n");
        	log.append(String.format("UINT data type          : 0x%X (%s)\n", data_type, decodeCPT(data_type)));
        	log.append("UINT data length        : ").append(received_data_length).append("\n");
        }
    	
    	body.decode(buf, received_data_length, log);
    }