A
download IPPacket.java
Language: Java
LOC: 79
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;

import java.io.*;

class IPPacket extends Packet
{
  public int HEADER_LEN=20;

  byte version;		// IP version (=4)
  byte hdr_length;	// in longs;
  int tos;		// Type of service
  int length;		// packet lenght
  int id;		// datagram ID
  int fragment_offs;	// Fragment offset
  int	ttl;		// Time To Live
  int checksum;		// Header checksum
  IPAddr dest; 		// The source hardware address (MAC)
  IPAddr src;  		// The destination hardware address

  IPPacket() 
  {
    protocol=0x800;
  }

  IPPacket(byte[] raw) throws MalformedPacketException
  {
    data=raw;
    parse();
  }

  IPPacket(Packet p) throws MalformedPacketException
  {
    data=p.data;
    parse();
  }

  void parse() throws MalformedPacketException
  {
    hdr_length = (byte)(data[0] & 15);
    version = (byte)(data[0] >> 4);

    if (version != 4) {throw new MalformedPacketException();}
    // RFC 1122

    DataInputStream ds=new DataInputStream(new ByteArrayInputStream(data,0,HEADER_LEN));
    try 
     { 
      int junk=ds.readUnsignedByte();
      tos=ds.readUnsignedByte();
      length=ds.readUnsignedShort();
      id=ds.readUnsignedShort();
      fragment_offs=ds.readUnsignedShort();
      ttl=ds.readUnsignedByte();
      protocol=ds.readUnsignedByte();
      checksum=ds.readUnsignedByte();
     }
    catch (EOFException e) {}
    catch (IOException e) {}
    src = new IPAddr(data[12],data[13],data[14],data[15]);
    dest = new IPAddr(data[16],data[17],data[18],data[19]);
    if (checksum(hdr_length << 2)!=0)
    {
//      System.out.println("IP Checksum failed!!!");
//      System.out.println(checksum+"   "+checksum(hdr_length<<2));
      throw new MalformedPacketException();
    }
  }

  public String toString()
  {
//    return "Prot:"+protocol+"  "+src.toString()+"-->>"+dest.toString();
      return src.toString()+"->"+dest.toString()+"-"+version+"/"+hdr_length+"/"+tos+"/"+length+"/"+id+"/"+fragment_offs+"/"+ttl;
  }
  
  public void update() 
  { 
    data[0]=(byte)(hdr_length+(version << 4));
    data[1]=(byte)(tos & 255);
    data[2]=(byte)(length >> 8);
    data[3]=(byte)(length & 255);
    data[4]=(byte)(id >> 8);
    data[5]=(byte)(id & 255);
    data[6]=(byte)(fragment_offs >> 8);
    data[7]=(byte)(fragment_offs & 255);
    data[8]=(byte)(ttl & 255);
    data[9]=(byte)protocol;
    data[10]=0;data[11]=0;
    System.arraycopy(src.getData(),0,data,12,4);
    System.arraycopy(dest.getData(),0,data,16,4);
    checksum=checksum(hdr_length<<2); 	// Compute checksum.
    data[10]=(byte)(checksum >> 8);	// Store it.
    data[11]=(byte)(checksum & 255);
  }
};

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