public class TlsNetworkLayer extends Object implements NetworkLayer, NetworkLayerSender
Modifier and Type | Class and Description |
---|---|
private class |
TlsNetworkLayer.AsyncDataLinkLayerEventHandler
Klasse zur Entkopplung von OSI2 und OSI7 beim Empfang von Daten.
|
private static class |
TlsNetworkLayer.ChannelObject |
(package private) static class |
TlsNetworkLayer.LinkInfo
Informationen von Verbindungen zwischen Geräten.
|
(package private) static class |
TlsNetworkLayer.RouteInfo |
Modifier and Type | Field and Description |
---|---|
private TlsNetworkLayer.AsyncDataLinkLayerEventHandler |
_asyncDataLinkLayerEventHandler |
private static Debug |
_debug |
private Map |
_device2DirectRoutedDeviceListMap |
private Map |
_device2LinksMap
Map, über die sich die von einem Gerät ausgehenden Verbindungen bestimmen lassen.
|
private Map |
_device2RouteMap |
int |
_localDeviceAddress |
private Osi7LongTelegramRecombine |
_longTelegramCombiner |
private Osi7LongTelegramSegment |
_longTelegramSegmenter |
private LinkedList<NetworkLayerListener> |
_networkLayerListeners |
private TelegramProcessor |
_telegramProcessor |
PRIORITY_CLASS_1, PRIORITY_CLASS_2
Constructor and Description |
---|
TlsNetworkLayer() |
Modifier and Type | Method and Description |
---|---|
private void |
addAllRoutedRemoteDevices(Integer device,
Collection resultCollection) |
private void |
addDeviceLink(int device,
int portAddress,
DataLinkLayer linkLayer,
DataLinkLayer.Link link,
int remotePortAddress,
int remoteDevice,
boolean linkIsTransparent,
boolean mirroredReceive,
boolean dontIncrementOsi3Pointer) |
void |
addEventListener(NetworkLayerListener networkLayerListener)
Meldet einen Empfänger für Ereignis der Netzebene an.
|
(package private) void |
addLink(int device,
int portAddress,
DataLinkLayer linkLayer,
DataLinkLayer.Link link,
int remotePortAddress,
int remoteDevice,
boolean linkIsTransparent,
boolean mirroredReceive,
boolean dontIncrementOsi3Pointer) |
void |
completeInitialization()
Suchalgorithmus zur Ermittlung aller möglichen Routen zu anderen Geräten.
|
private TlsNetworkLayer.LinkInfo |
findLinkInfo(int device,
int portAddress,
int remotePortAdress,
boolean resolveTransparentLinks)
Sucht eine Verbindung ausgehend von einem vorgegebenen Gerät über ein bestimmtes Adressenpaar.
|
private TlsNetworkLayer.LinkInfo |
findLinkInfo(int device,
int portAddress,
int remotePortAdress,
boolean resolveTransparentLinks,
int ignoreDevice)
Sucht eine Verbindung ausgehend von einem vorgegebenen Gerät über ein bestimmtes Adressenpaar.
|
DataLinkLayerListener |
getDataLinkLayerListener() |
int[] |
getRoutedRemoteDevices(int device)
Bestimmt die Geräte, die über das angegebene Gerät erreichbar sind.
|
(package private) TlsNetworkLayer.RouteInfo |
getRouteInfo(int device) |
private TlsNetworkLayer.RouteInfo |
getRouteInfo(Integer device) |
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.
|
private void |
notifyLongReceive(int sender,
byte[] data)
Weiterleitung eines empfangenen Langtelegramms an die Osi7 Schicht, falls es vollständig ist.
|
private void |
notifyReceive(int sender,
byte[] data)
Weiterleitung eines empfangenen Telegramms an die Osi7-Schicht.
|
private void |
notifyStateChange(int device,
int state)
Benachrichtigung der Osi7-Listener über die Änderung eines Verbindungsstatus
|
private void |
putRemoteDevice(Integer device,
Integer remoteDevice)
Speichert zu einem Ausgangsgerät ein direkt an diesem angeschlossenes entferntes Gerät ab, das über das Gerät erreichbar ist, d.h.
|
private void |
putRouteInfo(Integer device,
TlsNetworkLayer.RouteInfo route) |
void |
removeEventListener(NetworkLayerListener networkLayerListener)
Meldet einen angemeldeten Empfänger für Ereignisse der Netzebene wieder ab.
|
private void |
sendData(DataLinkLayer.Link link,
int priority,
byte[] tlsOsi3Header,
byte[] data) |
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) |
(package private) void |
setLocalDeviceAddress(int localDeviceAddress)
Setzt die Knotennummer des lokalen Geräts.
|
void |
setTelegramProcessor(TelegramProcessor telegramProcessor) |
void |
start()
Startet die Verarbeitung von Telegrammen
|
private static final Debug _debug
public int _localDeviceAddress
private final LinkedList<NetworkLayerListener> _networkLayerListeners
private Map _device2RouteMap
private Map _device2DirectRoutedDeviceListMap
private final TlsNetworkLayer.AsyncDataLinkLayerEventHandler _asyncDataLinkLayerEventHandler
private final Osi7LongTelegramRecombine _longTelegramCombiner
private Osi7LongTelegramSegment _longTelegramSegmenter
private Map _device2LinksMap
private TelegramProcessor _telegramProcessor
public void addEventListener(NetworkLayerListener networkLayerListener)
NetworkLayer
addEventListener
in interface NetworkLayer
networkLayerListener
- Anzumeldender Empfänger, der die Verarbeitung von empfangenen Telegrammen und Statusänderungen von Verbindungen übernimmt.public void removeEventListener(NetworkLayerListener networkLayerListener)
NetworkLayer
removeEventListener
in interface NetworkLayer
networkLayerListener
- Abzumeldender Empfängerpublic int[] getRoutedRemoteDevices(int device)
NetworkLayer
getRoutedRemoteDevices
in interface NetworkLayer
device
- Gerät zu dem die darüber erreichbaren Geräte ermittelt werden sollen.private void addAllRoutedRemoteDevices(Integer device, Collection resultCollection)
public void sendData(int destination, byte[] data, boolean longTelegram) throws DestinationUnreachableException
NetworkLayer
sendData
in interface NetworkLayer
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 entsprichtDestinationUnreachableException
- Wenn das angegebene Ziel nicht erreichbar ist.public void sendData(int destination, int priority, byte[] data, boolean longTelegram) throws DestinationUnreachableException
sendData
in interface NetworkLayer
destination
- 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 entsprichtDestinationUnreachableException
public void sendWithoutRedirection(int destination, int priority, byte[] data, boolean longTelegram) throws DestinationUnreachableException
sendWithoutRedirection
in interface NetworkLayerSender
DestinationUnreachableException
private void sendData(DataLinkLayer.Link link, int priority, byte[] tlsOsi3Header, byte[] data) throws DestinationUnreachableException
DestinationUnreachableException
public void start()
NetworkLayer
start
in interface NetworkLayer
public DataLinkLayerListener getDataLinkLayerListener()
private void notifyLongReceive(int sender, byte[] data)
sender
- Absender des Telegrammsdata
- Telegramm/Nutzdaten für die Osi7 Schichtprivate void notifyReceive(int sender, byte[] data)
sender
- Absender des Telegrammsdata
- Telegramm/Nutzdaten für die Osi7 Schichtprivate void notifyStateChange(int device, int state)
device
- Zustandsänderung von diesem Gerätstate
- Zustand der Verbindung. 0 steht für verbunden, sonst ist die Verbindung unterbrochen.public boolean isReducingToControlByte(DataLinkLayer.Link link)
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)
event
- Beinhaltet das Telegram und die verwendeten Schnittstellen-Informationen.void setLocalDeviceAddress(int localDeviceAddress)
localDeviceAddress
- Knotennummer des lokalen Geräts.private TlsNetworkLayer.LinkInfo findLinkInfo(int device, int portAddress, int remotePortAdress, boolean resolveTransparentLinks)
device
- Gerät von dem aus gesucht werden soll.portAddress
- Port-Adresse am Gerät von dem die gesuchte Verbindung ausgeht.remotePortAdress
- Port-Adresse des anderen Geräts an dem die gesuchte Verbindung ankommt.resolveTransparentLinks
- Flag, das gesetzt sein muss, wenn bei Verbindungen, die auf OSI-3 Ebene transparent sind, (also Verbindungen zu KRI) rekursiv
weitergesucht werden soll.private TlsNetworkLayer.LinkInfo findLinkInfo(int device, int portAddress, int remotePortAdress, boolean resolveTransparentLinks, int ignoreDevice)
device
- Gerät von dem aus gesucht werden soll.portAddress
- Port-Adresse am Gerät von dem die gesuchte Verbindung ausgeht.remotePortAdress
- Port-Adresse des anderen Geräts an dem die gesuchte Verbindung ankommt.resolveTransparentLinks
- Flag, das gesetzt sein muss, wenn bei Verbindungen, die auf OSI-3 Ebene transparent sind, (also Verbindungen zu KRI) rekursiv
weitergesucht werden soll.ignoreDevice
- Verbindungen zum angegebenen Gerät sollen bei der Suche ignoriert werden, um zyklische rekursive Aufrufe zu unterbinden.void addLink(int device, int portAddress, DataLinkLayer linkLayer, DataLinkLayer.Link link, int remotePortAddress, int remoteDevice, boolean linkIsTransparent, boolean mirroredReceive, boolean dontIncrementOsi3Pointer)
private void addDeviceLink(int device, int portAddress, DataLinkLayer linkLayer, DataLinkLayer.Link link, int remotePortAddress, int remoteDevice, boolean linkIsTransparent, boolean mirroredReceive, boolean dontIncrementOsi3Pointer)
public void completeInitialization()
private void putRemoteDevice(Integer device, Integer remoteDevice)
device
- AusgangsgerätremoteDevice
- Entferntes Gerätprivate void putRouteInfo(Integer device, TlsNetworkLayer.RouteInfo route)
private TlsNetworkLayer.RouteInfo getRouteInfo(Integer device)
TlsNetworkLayer.RouteInfo getRouteInfo(int device)
public void setTelegramProcessor(TelegramProcessor telegramProcessor)