001    package net.minecraft.network.packet;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.io.DataInputStream;
006    import java.io.DataOutputStream;
007    import java.io.IOException;
008    import java.security.PublicKey;
009    import net.minecraft.util.CryptManager;
010    
011    public 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    }