de.bsvrz.kex.tls.osi2osi3.longtelegram
Class Osi7LongTelegramSegment.FragmentedLongTelegram

java.lang.Object
  extended by de.bsvrz.kex.tls.osi2osi3.longtelegram.Osi7LongTelegramSegment.FragmentedLongTelegram
Enclosing class:
Osi7LongTelegramSegment

private static final class Osi7LongTelegramSegment.FragmentedLongTelegram
extends Object

Zerlegt ein Langtelegramm in Teilstücke und stellt diese per Methodenaufruf zur Verfügung


Field Summary
private  int _costEndBiggerBlock
          Wie viele Bytes "kosten" die Steuerungsinformationen eines nextBiggerPiece
private  int _costNextBiggerPiece
          Wie viele Bytes "kosten" die Steuerungsinformationen eines nextBiggerPiece
private  int _costStartBiggerBlock
          Wie viele Bytes "kosten" die Steuerungsinformationen eines StartBiggerBlocks
private  int _crcChecksum
          Speichert die CRC-Prüfsumme TBD in dieser Version immer 0
private  byte _dataBlockNumber
          Jeder DatenBlock, der verschickt wird, bekommt die gleiche Nummer, aus dieser Nummer schließt der Empfänger zu welchem Langtelegramm das Teilstück gehört.
private  int _dataBytesLeft
          Speichert, wieviele Bytes noch verschickt werden müssen.
private  int _dataPosition
          Speichert den Index im Byte-Array, ab dem Daten verschickt werden dürfen.
private  int _maxDataForBigTelegram
          Speichert die maximale Anzahl von Bytes, die in einem LongTelegram vom Typ Big gesendet werden kann.
private  int _maxDataForTelegram
          Legt die maximale Größe eines Teil-Telegramms fest.
private  int _numberOfNeededPieces
          Wieviele Datenblockstücke müssen verschickt werden (Start und Ende zählen nicht)
private  boolean _onePieceLeft
          Gibt an, ob noch ein Teil-Telegramm vorhanden ist, das verschickt werden muss.
private  int _priority
          Priorität, mit der die Telegrammstücke verschickt werden sollen
private  int _receiverNodeNumber
          Die Empfängeradresse wird von einer anderen Klasse benötigt, um an den Empfänger zu kommen.
private  int _senderNodeNumber
          Adresse des Senders
private  boolean _startBlockSend
          Gibt an, ob der StartBig/StartBigger Block schon verschickt wurde
private  int _telegramNumber
          Nummer des Telegramms, das verschickt werden soll.
private  LongTelegramType _telegramType
          Speichert den Long-Type, den das zu übertragenen Telegramm haben muss damit alle Daten übertragen werden können
private  byte[] _wholeTelegram
          Speichert das zu übertragene Telegramm
 
Constructor Summary
Osi7LongTelegramSegment.FragmentedLongTelegram(byte[] telegram, int senderNodeNumber, byte dataBlockNumber, int receiverNodeNumber, int priority)
           
 
Method Summary
private  void createSenderNodeNumber(byte[] byteArray)
          Diese Methode trägt in dem übergebenen Byte-Array die Knotennummer des Senders ein
private  int createTelegramFrame(byte[] byteArray)
          Erzeugt einen Header und trägt den richtigen Typ (ShortBlock, StartBig,EndBig, usw ein) Danach können in das Array die Bytes des Datenblocks eingefügt werden, CRC wird ebenfalls eingetragen.
 byte getDataBlockNumber()
           
 byte[] getNextPiece()
           
 int getPriority()
           
 int getReceiverNodeNumber()
           
 int getSenderNodeNumber()
           
 boolean isOnePieceLeft()
          Diese Methode gibt true zurück, wenn noch ein Teil-Telegramm zur Verfügung steht.
private  boolean sendEndBlock()
          Diese Methode stellt fest, ob das zu verschickende Telegramm das EndBigBlock oder EndBiggerBlock sein muss.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_wholeTelegram

private final byte[] _wholeTelegram
Speichert das zu übertragene Telegramm


_senderNodeNumber

private final int _senderNodeNumber
Adresse des Senders


_receiverNodeNumber

private final int _receiverNodeNumber
Die Empfängeradresse wird von einer anderen Klasse benötigt, um an den Empfänger zu kommen. Der Wert dient als Key in einer Map.


_telegramType

private final LongTelegramType _telegramType
Speichert den Long-Type, den das zu übertragenen Telegramm haben muss damit alle Daten übertragen werden können


_dataPosition

private int _dataPosition
Speichert den Index im Byte-Array, ab dem Daten verschickt werden dürfen. Diese "Marke" wandert über das Byte-Array, bis alle Daten verschickt wurden.


_dataBytesLeft

private int _dataBytesLeft
Speichert, wieviele Bytes noch verschickt werden müssen. Ist diese Zahl 0, wurden alle Byte verschickt.


_onePieceLeft

private boolean _onePieceLeft
Gibt an, ob noch ein Teil-Telegramm vorhanden ist, das verschickt werden muss.


_startBlockSend

private boolean _startBlockSend
Gibt an, ob der StartBig/StartBigger Block schon verschickt wurde


_maxDataForTelegram

private final int _maxDataForTelegram
Legt die maximale Größe eines Teil-Telegramms fest. Dieser Platz steht für Header, Nutzdaten, CRC zur Verfügung. So bleibt genügend Platz für das OSI 3 Routing.

See Also:
Constant Field Values

_maxDataForBigTelegram

private final int _maxDataForBigTelegram
Speichert die maximale Anzahl von Bytes, die in einem LongTelegram vom Typ Big gesendet werden kann. Anzahl NextBigPiece * Bytes pro BigPiece (253*231) + Bytes, die in einem StartBig verpackt werden können (229) + Bytes, die in einem EndBig verpackt werden können (230)

See Also:
Constant Field Values

_dataBlockNumber

private final byte _dataBlockNumber
Jeder DatenBlock, der verschickt wird, bekommt die gleiche Nummer, aus dieser Nummer schließt der Empfänger zu welchem Langtelegramm das Teilstück gehört. (Die Zahl ist zwischen 1 und 15)


_numberOfNeededPieces

private final int _numberOfNeededPieces
Wieviele Datenblockstücke müssen verschickt werden (Start und Ende zählen nicht)


_telegramNumber

private int _telegramNumber
Nummer des Telegramms, das verschickt werden soll. 0 = StartBlock . . . _numberOfNeededPieces + 1 = EndBlock


_crcChecksum

private final int _crcChecksum
Speichert die CRC-Prüfsumme TBD in dieser Version immer 0

See Also:
Constant Field Values

_costStartBiggerBlock

private final int _costStartBiggerBlock
Wie viele Bytes "kosten" die Steuerungsinformationen eines StartBiggerBlocks

See Also:
Constant Field Values

_costNextBiggerPiece

private final int _costNextBiggerPiece
Wie viele Bytes "kosten" die Steuerungsinformationen eines nextBiggerPiece

See Also:
Constant Field Values

_costEndBiggerBlock

private final int _costEndBiggerBlock
Wie viele Bytes "kosten" die Steuerungsinformationen eines nextBiggerPiece

See Also:
Constant Field Values

_priority

private final int _priority
Priorität, mit der die Telegrammstücke verschickt werden sollen

Constructor Detail

Osi7LongTelegramSegment.FragmentedLongTelegram

public Osi7LongTelegramSegment.FragmentedLongTelegram(byte[] telegram,
                                                      int senderNodeNumber,
                                                      byte dataBlockNumber,
                                                      int receiverNodeNumber,
                                                      int priority)
Method Detail

getNextPiece

public byte[] getNextPiece()
                    throws IllegalStateException
Throws:
IllegalStateException

isOnePieceLeft

public boolean isOnePieceLeft()
Diese Methode gibt true zurück, wenn noch ein Teil-Telegramm zur Verfügung steht. Steht kein Teil-Telegramm mehr zur Verfügung, dann wird false zurückgegeben.

Returns:
s.o.

createTelegramFrame

private int createTelegramFrame(byte[] byteArray)
Erzeugt einen Header und trägt den richtigen Typ (ShortBlock, StartBig,EndBig, usw ein) Danach können in das Array die Bytes des Datenblocks eingefügt werden, CRC wird ebenfalls eingetragen.

Parameters:
byteArray - s.o.
Returns:
ab welcher Position können Daten eingefügt werden

sendEndBlock

private boolean sendEndBlock()
Diese Methode stellt fest, ob das zu verschickende Telegramm das EndBigBlock oder EndBiggerBlock sein muss.

Returns:
true = das Telegramm muss das EndBlock(Big oder Bigger) sein; false = das Telegramm muss ein NextPiece (Big oder Bigger) sein

createSenderNodeNumber

private void createSenderNodeNumber(byte[] byteArray)
Diese Methode trägt in dem übergebenen Byte-Array die Knotennummer des Senders ein

Parameters:
byteArray - s.o.

getDataBlockNumber

public byte getDataBlockNumber()

getReceiverNodeNumber

public int getReceiverNodeNumber()

getSenderNodeNumber

public int getSenderNodeNumber()

getPriority

public int getPriority()