148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/*
248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Copyright (c) 2006-2011 Christian Plattner. All rights reserved.
348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Please refer to the LICENSE.txt for licensing details.
448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */
548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpackage ch.ethz.ssh2.packets;
648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.IOException;
748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/**
948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * PacketDisconnect.
1048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood *
1148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @author Christian Plattner
1248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @version 2.50, 03/15/10
1348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */
1448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpublic class PacketDisconnect
1548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood{
1648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	byte[] payload;
1748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
1848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	int reason;
1948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	String desc;
2048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	String lang;
2148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public PacketDisconnect(byte payload[], int off, int len) throws IOException
2348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
2448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		this.payload = new byte[len];
2548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		System.arraycopy(payload, off, this.payload, 0, len);
2648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		TypesReader tr = new TypesReader(payload, off, len);
2848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		int packet_type = tr.readByte();
3048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		if (packet_type != Packets.SSH_MSG_DISCONNECT)
3248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			throw new IOException("This is not a Disconnect Packet! ("
3348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					+ packet_type + ")");
3448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		reason = tr.readUINT32();
3648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		desc = tr.readString();
3748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		lang = tr.readString();
3848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
3948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public PacketDisconnect(int reason, String desc, String lang)
4148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
4248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		this.reason = reason;
4348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		this.desc = desc;
4448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		this.lang = lang;
4548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
4648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public byte[] getPayload()
4848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
4948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		if (payload == null)
5048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		{
5148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			TypesWriter tw = new TypesWriter();
5248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			tw.writeByte(Packets.SSH_MSG_DISCONNECT);
5348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			tw.writeUINT32(reason);
5448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			tw.writeString(desc);
5548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			tw.writeString(lang);
5648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			payload = tw.getBytes();
5748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		}
5848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		return payload;
5948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
6048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood}
61