public void sendBuilder(DataBuilder b, InetAddress destination){
        PacketBuilder pb = new PacketBuilder();
        pb.setSourceAddress(this.iface_addr);
        pb.setDestinationAddress(destination);
        pb.setDataType(b.getDataType());
        pb.setData(b);

        if(Datatype.getDataTypeAsInt(b.getDataType()) == Datatype.INT_GENERIC_FILE){
            FileBuilder fb = (FileBuilder) b;
            ByteBuffer ts = ByteBuffer.allocate(8).putLong(Timestamp.getCurrentTimeAsLong()+fb.getSeqNr());
            pb.setTimestamp(ts.array());
        }

        byte[] packet = pb.getPacket();

        // Add packet to logging.
        PacketParser pp = new PacketParser(packet);
        // Check if this is an ACK or broadcast message. There is no need to log or ACK an ACK or broadcast message.
        if(Datatype.getDataTypeAsInt(pp.getDataType()) != Datatype.INT_GENERIC_ACK && Datatype.getDataTypeAsInt(pp.getDataType()) != Datatype.INT_BROADCAST_MESSAGE){
            if(this.ackLog.getElement(pp.getTimestamp()) == null){
                // This packet is new to us.
                AckLogElement ackLogElement = new AckLogElement();
                ackLogElement.setIndex(pp.getTimestamp());
                ackLogElement.setData(pp);
                if(Datatype.getDataTypeAsInt(pp.getDataType()) != Datatype.INT_PRIVATE_MESSAGE){
                    for(User u : this.getUsers()){
                        if(u.getIP().equals(pp.getDestinationAddress())) {
                            ackLogElement.setAck(u.getIP(), false);
                        }
                    }
                }else{
                    for(User u : this.getUsers()){
                        if(!u.getIP().equals(this.getMulticastAddress())) {
                            ackLogElement.setAck(u.getIP(), false);
                        }
                    }
                }
                this.ackLog.addElement(ackLogElement);
            }
            // Else, this is a retransmission.
        }

        // Send it.
        this.sender.sendPacket(packet);
    }