package net.minecraft.network.rcon;

import java.net.DatagramPacket;
import java.util.Date;
import java.util.Random;

class RConThreadQueryAuth
{
    /** The creation timestamp for this auth */
    private long timestamp;

    /** A random challenge */
    private int randomChallenge;

    /** A client-provided request ID associated with this query. */
    private byte[] requestId;

    /** A unique string of bytes used to verify client auth */
    private byte[] challengeValue;

    /** The request ID stored as a String */
    private String requestIdAsString;

    /** The RConThreadQuery that this is probably an inner class of */
    final RConThreadQuery queryThread;

    public RConThreadQueryAuth(RConThreadQuery par1RConThreadQuery, DatagramPacket par2DatagramPacket)
    {
        this.queryThread = par1RConThreadQuery;
        this.timestamp = (new Date()).getTime();
        byte[] abyte = par2DatagramPacket.getData();
        this.requestId = new byte[4];
        this.requestId[0] = abyte[3];
        this.requestId[1] = abyte[4];
        this.requestId[2] = abyte[5];
        this.requestId[3] = abyte[6];
        this.requestIdAsString = new String(this.requestId);
        this.randomChallenge = (new Random()).nextInt(16777216);
        this.challengeValue = String.format("\t%s%d\u0000", new Object[] {this.requestIdAsString, Integer.valueOf(this.randomChallenge)}).getBytes();
    }

    /**
     * Returns true if the auth's creation timestamp is less than the given time, otherwise false
     */
    public Boolean hasExpired(long par1)
    {
        return Boolean.valueOf(this.timestamp < par1);
    }

    /**
     * Returns the random challenge number assigned to this auth
     */
    public int getRandomChallenge()
    {
        return this.randomChallenge;
    }

    /**
     * Returns the auth challenge value
     */
    public byte[] getChallengeValue()
    {
        return this.challengeValue;
    }

    /**
     * Returns the request ID provided by the client.
     */
    public byte[] getRequestId()
    {
        return this.requestId;
    }
}
