    001package net.minecraft.network.packet;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.io.DataInputStream;
    006import java.io.DataOutputStream;
    007import java.io.IOException;
    008import java.security.PublicKey;
    009import net.minecraft.util.CryptManager;
    010
    011public class Packet253ServerAuthData extends Packet
    012{
    013    private String serverId;
    014    private PublicKey publicKey;
    015    private byte[] verifyToken = new byte[0];
    016
    017    public Packet253ServerAuthData() {}
    018
    019    public Packet253ServerAuthData(String par1Str, PublicKey par2PublicKey, byte[] par3ArrayOfByte)
    020    {
    021        this.serverId = par1Str;
    022        this.publicKey = par2PublicKey;
    023        this.verifyToken = par3ArrayOfByte;
    024    }
    025
    026    /**
    027     * Abstract. Reads the raw packet data from the data stream.
    028     */
    029    public void readPacketData(DataInputStream par1DataInputStream) throws IOException
    030    {
    031        this.serverId = readString(par1DataInputStream, 20);
    032        this.publicKey = CryptManager.decodePublicKey(readBytesFromStream(par1DataInputStream));
    033        this.verifyToken = readBytesFromStream(par1DataInputStream);
    034    }
    035
    036    /**
    037     * Abstract. Writes the raw packet data to the data stream.
    038     */
    039    public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
    040    {
    041        writeString(this.serverId, par1DataOutputStream);
    042        writeByteArray(par1DataOutputStream, this.publicKey.getEncoded());
    043        writeByteArray(par1DataOutputStream, this.verifyToken);
    044    }
    045
    046    /**
    047     * Passes this Packet on to the NetHandler for processing.
    048     */
    049    public void processPacket(NetHandler par1NetHandler)
    050    {
    051        par1NetHandler.handleServerAuthData(this);
    052    }
    053
    054    /**
    055     * Abstract. Return the size of the packet (not counting the header).
    056     */
    057    public int getPacketSize()
    058    {
    059        return 2 + this.serverId.length() * 2 + 2 + this.publicKey.getEncoded().length + 2 + this.verifyToken.length;
    060    }
    061
    062    @SideOnly(Side.CLIENT)
    063    public String getServerId()
    064    {
    065        return this.serverId;
    066    }
    067
    068    @SideOnly(Side.CLIENT)
    069    public PublicKey getPublicKey()
    070    {
    071        return this.publicKey;
    072    }
    073
    074    @SideOnly(Side.CLIENT)
    075    public byte[] getVerifyToken()
    076    {
    077        return this.verifyToken;
    078    }
    079}