public class TlsNetworkLayer extends java.lang.Object implements NetworkLayer, NetworkLayerSender
Implementierung der TLS-OSI-3 Netzwerkebene.
| Modifier and Type | Field and Description |
|---|---|
int |
_localDeviceAddress |
PRIORITY_CLASS_1, PRIORITY_CLASS_2| Constructor and Description |
|---|
TlsNetworkLayer() |
| Modifier and Type | Method and Description |
|---|---|
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. 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.
|
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
|
public void addEventListener(NetworkLayerListener networkLayerListener)
NetworkLayerMeldet 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.
addEventListener in interface NetworkLayernetworkLayerListener - Anzumeldender Empfänger, der die Verarbeitung von empfangenen Telegrammen und Statusänderungen von Verbindungen übernimmt.public void removeEventListener(NetworkLayerListener networkLayerListener)
NetworkLayerMeldet einen angemeldeten Empfänger für Ereignisse der Netzebene wieder ab.
removeEventListener in interface NetworkLayernetworkLayerListener - Abzumeldender Empfängerpublic int[] getRoutedRemoteDevices(int device)
NetworkLayerBestimmt 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.
getRoutedRemoteDevices in interface NetworkLayerdevice - Gerät zu dem die darüber erreichbaren Geräte ermittelt werden sollen.public void sendData(int destination,
byte[] data,
boolean longTelegram)
throws DestinationUnreachableException
NetworkLayerSendet ein Telegramm mit hoher Priorität an ein vorgegebenes Zielgerät.
sendData in interface NetworkLayerdestination - 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 entsprichtDestinationUnreachableException - Wenn das angegebene Ziel nicht erreichbar ist.public void sendData(int destination,
int priority,
byte[] data,
boolean longTelegram)
throws DestinationUnreachableException
Methode zum Versenden von Telegrammen mit vorgegebener Priorität
sendData in interface NetworkLayerdestination - Knotennummer, an die gesendet werden sollpriority - Priorität, unter der das Telegramm versendet werden solldata - Bytearray Telegrammdaten OSI7longTelegram - true = Es soll ein Langtelegramm verschickt werden, das nicht der TLS-Norm entsprichtDestinationUnreachableExceptionpublic void sendWithoutRedirection(int destination,
int priority,
byte[] data,
boolean longTelegram)
throws DestinationUnreachableException
sendWithoutRedirection in interface NetworkLayerSenderDestinationUnreachableExceptionpublic void start()
NetworkLayerStartet die Verarbeitung von Telegrammen
start in interface NetworkLayerpublic DataLinkLayerListener getDataLinkLayerListener()
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.
link - Verbindung, von der die Einstellungen bezogen werdenfalse: Osi3-Adressen werden nicht ignoriert true: Osi3-Adressen werden ignoriert und werden bis auf das Steuerbyte entfernt.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.
event - Beinhaltet das Telegram und die verwendeten Schnittstellen-Informationen.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.
public void setTelegramProcessor(TelegramProcessor telegramProcessor)