A
download ICMPPacket.java
Language: Java
LOC: 96
Project Info
Teaseme Java Virtual Machine(teaseme)
Server: SourceForge
Type: cvs
...sspath\jos\system\net\jeps\
   ARP.java
   ARPPacket.java
   ARPTableEntry.java
   DatagramPacket.java
   DatagramSocket.java
   DummyNetworkInterface.java
   EtherHostDriver.java
   ...etNetworkInterface.java
   EtherPacket.java
   HWAddr.java
   ICMP.java
   ICMPPacket.java
   IllegalRouteException.java
   InetAddress.java
   IP.java
   IPAddr.java
   IPPacket.java
   Main.java
   ...medPacketException.java
   NetworkInterface.java
   NetworkInterfaceCard.java
   NoRouteException.java
   Packet.java
   Protocol.java
   QuoteServerThread.java
   RoutingTableEntry.java
   StackPanic.java
   TCP.java
   UDP.java
   UDPPacket.java
   UDPQueue.java

package jos.system.net.jeps;

/*
 *  ICMP Packet
 */

import java.io.*;

class ICMPPacket extends Packet
{
  public final int HEADER_LEN = 8;

  public static byte TYPE_ECHORP= 0;
  public static int TYPE_DESTUR	= 3;
  public static int TYPE_SRCQ	= 4;
  public static int TYPE_REDIRECT=5;
  public static byte TYPE_ECHORQ= 8;
  public static int TYPE_TIMEX	= 11;
  public static int TYPE_PARAMP	= 12;
  public static int TYPE_TIMERQ	= 13;
  public static int TYPE_TIMERP	= 14;
  public static int TYPE_INFORQ	= 15;
  public static int TYPE_INFORP	= 16;
  public static int TYPE_MASKRQ	= 17;
  public static int TYPE_MASKRP	= 18;
  

  byte type;		// ICMP Type
  byte code;		// Subcode;
  int checksum;		// Checksum on header+data;
  int msg_id;		// ID (echo)
  int seq_nr;		// Sequence Number (echo)
  IPAddr gw;		// Gateway (redirect)
  byte ptr;		// Pointer (Parameter Problem)
  
  ICMPPacket()
  {
    super();
    protocol=0x1;
  }
  
  ICMPPacket(byte[] raw) throws MalformedPacketException
  {
    this();
    data = raw;
    parse();
  }

  void parse() throws MalformedPacketException
  {
    DataInputStream ds=new DataInputStream(new ByteArrayInputStream(data,0,8));
    try 
     { 
      type=(byte)ds.readUnsignedByte();
      code=(byte)ds.readUnsignedByte();
      checksum=ds.readUnsignedShort();
      if ((type == TYPE_ECHORQ) || ((type == TYPE_ECHORP)))
      {
        msg_id=ds.readUnsignedShort();
        seq_nr=ds.readUnsignedShort();
      }
     }
    catch (EOFException e) {}
    catch (IOException e) {}
/*    gw = new IPAddr(data[4],data[5],data[6],data[7]);
    ptr= data[4];*/
    if (checksum(data.length)!=0)
     { throw new MalformedPacketException();}
  }

  ICMPPacket(Packet p) throws MalformedPacketException
  {
    this(p.data);
    wrapper=p.wrapper;
  }

  public void update()
  {
    data[0]=type;
    data[1]=code;
    data[2]=0;data[3]=0;
    if ((type == TYPE_ECHORQ) || ((type == TYPE_ECHORP)))
    { data[4]=(byte)(msg_id >> 8);
      data[5]=(byte)(msg_id & 0xff);
      data[6]=(byte)(seq_nr >> 8);
      data[7]=(byte)(seq_nr & 0xff);}
    // ------ other types. Insert here.
    checksum=checksum(data.length);
    data[2]=(byte)(checksum >> 8);
    data[3]=(byte)(checksum & 0xff);
  }
  
  public ICMPPacket reply()
  {
    if (type==TYPE_ECHORQ)
    {
      ICMPPacket rep = new ICMPPacket();
      rep.data=new byte[data.length];
      System.arraycopy(data,0,rep.data,0,data.length);
      rep.protocol=1; //ICMP
      rep.type=TYPE_ECHORP;
      rep.code=code;
      rep.msg_id=msg_id;
      rep.seq_nr=seq_nr;
      rep.update();
      return rep;
    }
    return null;
  }

  public String toString()
  {
//    return "Type: "+type;
    return type+"/"+code+"/"+msg_id+"/"+seq_nr;
  }
};

About Koders | Resources | Downloads | Support | Black Duck | Terms of Service | DMCA | Privacy Policy | Contact Us