de.bsvrz.kex.tls.osi2osi3.osi3
Class TlsNetworkLayer

java.lang.Object
  extended by de.bsvrz.kex.tls.osi2osi3.osi3.TlsNetworkLayer
All Implemented Interfaces:
NetworkLayer, NetworkLayerSender

public class TlsNetworkLayer
extends Object
implements NetworkLayer, NetworkLayerSender

Implementierung der TLS-OSI-3 Netzwerkebene.

Author:
Kappich Systemberatung

Field Summary
 int _localDeviceAddress
           
 
Fields inherited from interface de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayer
PRIORITY_CLASS_1, PRIORITY_CLASS_2
 
Constructor Summary
TlsNetworkLayer()
           
 
Method Summary
 void addEventListener(NetworkLayerListener networkLayerListener)
          Meldet einen Empfänger für Ereignis der Netzebene an.
 void completeInitialization()
          Suchalgorithmus zur Ermittlung aller möglichen Routen zu anderen Geräten.
 DataLinkLayerListener getDataLinkLayerListener()
           
 int[] getRoutedRemoteDevices(int device)
          Bestimmt die Geräte, die über das angegebene Gerät erreichbar sind.
 void handleDataLinkLayerEvent(DataLinkLayerEvent event)
          Wird aufgerufen, wenn ein Daten-Telegramm von der Osi2 Schnittstelle empfangen wird.
 boolean isReducingToControlByte(DataLinkLayer.Link link)
          Es wird geprüft ob die Option auf ReduzierungAufSteuerbyte aktiviert ist, d.h.
 void removeEventListener(NetworkLayerListener networkLayerListener)
          Meldet einen angemeldeten Empfänger für Ereignisse der Netzebene wieder ab.
 void sendData(int destination, byte[] data, boolean longTelegram)
          Sendet ein Telegramm mit hoher Priorität an ein vorgegebenes Zielgerät.
 void sendData(int destination, int priority, byte[] data, boolean longTelegram)
          Methode zum Versenden von Telegrammen mit vorgegebener Priorität
 void sendWithoutRedirection(int destination, int priority, byte[] data, boolean longTelegram)
           
 void setTelegramProcessor(TelegramProcessor telegramProcessor)
           
 void start()
          Startet die Verarbeitung von Telegrammen
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_localDeviceAddress

public int _localDeviceAddress
Constructor Detail

TlsNetworkLayer

public TlsNetworkLayer()
Method Detail

addEventListener

public void addEventListener(NetworkLayerListener networkLayerListener)
Description copied from interface: NetworkLayer
Meldet einen Empfänger für Ereignis der Netzebene an. Dies ist im allgemeinen eine Protokollschicht oberhalb der Netzebene (wie z.B. TLS-OSI-7 Schicht). Nach der Anmeldung werden allen angemeldeten Empfängern empfangene Telegramme und Statusänderung von Verbindungen mitgeteilt.

Specified by:
addEventListener in interface NetworkLayer
Parameters:
networkLayerListener - Anzumeldender Empfänger, der die Verarbeitung von empfangenen Telegrammen und Statusänderungen von Verbindungen übernimmt.

removeEventListener

public void removeEventListener(NetworkLayerListener networkLayerListener)
Description copied from interface: NetworkLayer
Meldet einen angemeldeten Empfänger für Ereignisse der Netzebene wieder ab.

Specified by:
removeEventListener in interface NetworkLayer
Parameters:
networkLayerListener - Abzumeldender Empfänger

getRoutedRemoteDevices

public int[] getRoutedRemoteDevices(int device)
Description copied from interface: NetworkLayer
Bestimmt die Geräte, die über das angegebene Gerät erreichbar sind. Alle Geräte, die bezüglich des OSI-3 Routings direkt oder indirekt hinter dem angegebenen Gerät liegen, werden ermittelt.

Specified by:
getRoutedRemoteDevices in interface NetworkLayer
Parameters:
device - Gerät zu dem die darüber erreichbaren Geräte ermittelt werden sollen.
Returns:
Array mit den Knotennummern der Geräte, die hinter dem angegebenen liegen.

sendData

public void sendData(int destination,
                     byte[] data,
                     boolean longTelegram)
              throws DestinationUnreachableException
Description copied from interface: NetworkLayer
Sendet ein Telegramm mit hoher Priorität an ein vorgegebenes Zielgerät.

Specified by:
sendData in interface NetworkLayer
Parameters:
destination - Knotennummer des Geräts an das das Telegramm gesendet werden soll.
data - Nutzdaten aus Sicht des NetworkLayers (i.a. ein OSI-7 Telegrammblock).
longTelegram - true = Langtelegramm, das nicht der TLS Definition entspricht; false = Telegramm, das der TLS Definition entspricht
Throws:
DestinationUnreachableException - Wenn das angegebene Ziel nicht erreichbar ist.

sendData

public void sendData(int destination,
                     int priority,
                     byte[] data,
                     boolean longTelegram)
              throws DestinationUnreachableException
Methode zum Versenden von Telegrammen mit vorgegebener Priorität

Specified by:
sendData in interface NetworkLayer
Parameters:
destination - Knotennummer, an die gesendet werden soll
priority - Priorität, unter der das Telegramm versendet werden soll
data - Bytearray Telegrammdaten OSI7
longTelegram - true = Es soll ein Langtelegramm verschickt werden, das nicht der TLS-Norm entspricht
Throws:
DestinationUnreachableException

sendWithoutRedirection

public void sendWithoutRedirection(int destination,
                                   int priority,
                                   byte[] data,
                                   boolean longTelegram)
                            throws DestinationUnreachableException
Specified by:
sendWithoutRedirection in interface NetworkLayerSender
Throws:
DestinationUnreachableException

start

public void start()
Description copied from interface: NetworkLayer
Startet die Verarbeitung von Telegrammen

Specified by:
start in interface NetworkLayer

getDataLinkLayerListener

public DataLinkLayerListener getDataLinkLayerListener()

isReducingToControlByte

public boolean isReducingToControlByte(DataLinkLayer.Link link)
Es wird geprüft ob die Option auf ReduzierungAufSteuerbyte aktiviert ist, d.h. der Osi3-Header wird auf das Steuerbyte reduziert (Osi3-Routinginformationen entfernt) Falls keine Einstellung dafür vorhanden ist, wird das Telegram normal (mit Osi3-Routinginformationen) weitergeleitet.

Parameters:
link - Verbindung, von der die Einstellungen bezogen werden
Returns:
false: Osi3-Adressen werden nicht ignoriert
true: Osi3-Adressen werden ignoriert und werden bis auf das Steuerbyte entfernt.

handleDataLinkLayerEvent

public void handleDataLinkLayerEvent(DataLinkLayerEvent event)
Wird aufgerufen, wenn ein Daten-Telegramm von der Osi2 Schnittstelle empfangen wird.

Wenn das Telegramm keine Informationen über den Verbindungdstatus beinhaltet, wird das Telegram anhand des Osi3-Header-Information (Steuerbyte und Routinginformationen) ausgewertet und weitergeleitet.

Parameters:
event - Beinhaltet das Telegram und die verwendeten Schnittstellen-Informationen.

completeInitialization

public void completeInitialization()
Suchalgorithmus zur Ermittlung aller möglichen Routen zu anderen Geräten. Der Algorithmus arbeitet nicht rekursiv nach unten, sondern etagenweise (breadth-first-search) um bei einem Netz mit Maschen die jeweils kürzeste Route zu jedem erreichbaren anderen Knoten zu ermitteln. Ausgehend von einer Liste, die nur den lokalen Knoten enthält werden alle Knoten in spiralförmiger Weise iteriert und jeweils das Routing initialisiert und alle noch nicht bearbeiteten Geräte, die ausgehend vom jeweils bearbeiteten Gerät eine direkte Verbindung haben werden hinten an die Liste angehangen. Als erstes wird ein spezielles Routing für das lokale Gerät selbst eintragen, damit man auch Telegramme an sich selbst senden kann.


setTelegramProcessor

public void setTelegramProcessor(TelegramProcessor telegramProcessor)