Redes.IPv4
Class Reensamblado

java.lang.Object
  extended byRedes.IPv4.Reensamblado

class Reensamblado
extends java.lang.Object

En teoria un buffer de reensamblado debe estar identificado por una tubla pero aqui solo vamos a usar el identificador de datagrama ya que nos hemos asegurado que no se van a repetir estos identificadores en ningun datagrama IPv4 durante toda la simulacion. (ver atributo ID de la clase DatagramaIPv4)


Field Summary
private  Buffer buffer
          Buffer
private  CabeceraIPv4 cabecera
          Datos de la cabecera del datagrama fragmentado
private  DatagramaIPv4 datagrama
          Datagrama reensamblado
private  int datagramaID
          Identificador del datagrama que se esta reensamblando
private  boolean fragmentoInicialRecibido
          Indicador de fragmento inicial recibido
private  int instanteInicial
          Instante inicial en que se inicio la reconstruccion (util para el 'reasembly timeout (icmp)'
private  boolean procesoTerminado
          Indica si el proceso de reensamblado ha terminadp
private  Buffer rcvbt
          Fragment Reveived Bit Table, mapa binario de bytes recibidos (ver el algoritmo en el RFC 791, pagina 28)
private  int TDL
          Total Data Length, Tamaņo total del datagrama, que sera conocido cuando se reciba el ultimo fragmento
 
Constructor Summary
Reensamblado(int instante, DatagramaIPv4 fragmento)
          Constructor
 
Method Summary
 boolean FragmentoInicialRecibido()
          Comprueba si se ha recibido el fragmento inicial
 DatagramaIPv4 getDatagrama()
          Devuelve el datagrama reensablado
 int getID()
          Devuelve el identificador del datagrama que esta siendo reensamblado
 int InstanteInicial()
          Devuelve el instante en que se inicio el reensamblado del datagrama
private  boolean mapaCompleto(int longitud)
          Comprueba que el mapa de bytes recibidos esta completo
 void NuevoFragmento(DatagramaIPv4 fragmento)
          Procesa un nuevo fragmento recibido.
 boolean ProcesoTerminado()
          Comprueba si el proceso de reensamblaje ha acabado
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

buffer

private Buffer buffer
Buffer


instanteInicial

private int instanteInicial
Instante inicial en que se inicio la reconstruccion (util para el 'reasembly timeout (icmp)'


datagramaID

private int datagramaID
Identificador del datagrama que se esta reensamblando


rcvbt

private Buffer rcvbt
Fragment Reveived Bit Table, mapa binario de bytes recibidos (ver el algoritmo en el RFC 791, pagina 28)


procesoTerminado

private boolean procesoTerminado
Indica si el proceso de reensamblado ha terminadp


cabecera

private CabeceraIPv4 cabecera
Datos de la cabecera del datagrama fragmentado


datagrama

private DatagramaIPv4 datagrama
Datagrama reensamblado


fragmentoInicialRecibido

private boolean fragmentoInicialRecibido
Indicador de fragmento inicial recibido


TDL

private int TDL
Total Data Length, Tamaņo total del datagrama, que sera conocido cuando se reciba el ultimo fragmento

Constructor Detail

Reensamblado

public Reensamblado(int instante,
                    DatagramaIPv4 fragmento)
Constructor

Parameters:
instante - Instante en que se inicia el reensamblado
fragmento - Fragmento del datagrama recibido
Method Detail

getID

public int getID()
Devuelve el identificador del datagrama que esta siendo reensamblado

Returns:
ID del datagrama

ProcesoTerminado

public boolean ProcesoTerminado()
Comprueba si el proceso de reensamblaje ha acabado

Returns:
Cierto si el datagrama ya se ha reensamblado

InstanteInicial

public int InstanteInicial()
Devuelve el instante en que se inicio el reensamblado del datagrama

Returns:
Instente inicial de reensamblado

NuevoFragmento

public void NuevoFragmento(DatagramaIPv4 fragmento)
Procesa un nuevo fragmento recibido. Implementa el algoritmo descrito en la pagina 28 del RFC 791, a partir del paso (6)

Parameters:
fragmento - Fragmento del datagrama

mapaCompleto

private boolean mapaCompleto(int longitud)
Comprueba que el mapa de bytes recibidos esta completo

Parameters:
longitud - Tamaņo total del datagrama
Returns:
Ciero si el mapa esta completo (todo a unos)

getDatagrama

public DatagramaIPv4 getDatagrama()
Devuelve el datagrama reensablado

Returns:
Datagrama reensablado

FragmentoInicialRecibido

public boolean FragmentoInicialRecibido()
Comprueba si se ha recibido el fragmento inicial

Returns:
Cierto si el fragmento inicial se ha recibido