Package de.bsvrz.kex.tls.osi7
Class TlsApplicationLayer
java.lang.Object
de.bsvrz.kex.tls.osi7.TlsApplicationLayer
- All Implemented Interfaces:
de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayerListener
,ApplicationLayer
public class TlsApplicationLayer extends java.lang.Object implements ApplicationLayer, de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayerListener
Implementation des TLSApplikationLayers (OSI7-Schicht).
-
Field Summary
Fields Modifier and Type Field Description static Queue
_deBlockQueue
static de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayer
_networkLayer
-
Constructor Summary
Constructors Constructor Description TlsApplicationLayer(de.bsvrz.dav.daf.main.ClientDavInterface daf, de.bsvrz.dav.daf.main.config.ConfigurationObject localDevice, de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayer networkLayer, java.lang.String sourceDataReferencesClassName, boolean sendOnlyDeOk, boolean sendOnlyConnectedSM)
-
Method Summary
Modifier and Type Method Description static void
addSendDeBlock(int jobNumber, DeBlock deBlock)
static void
addSendSingleTelegram(int jobNumber, SingleTelegram singleTelegram)
void
dataReceived(int sender, byte[] data, boolean longTelegram)
Wird durch OSI 3 aufgerufen, wenn Telegramm empfangen wurde.static de.bsvrz.dav.daf.main.config.SystemObject[]
getObjectRefsToDe(de.bsvrz.dav.daf.main.config.SystemObject de)
Liefert die auf dieses DE referenzierenden Fachobjekte eines bestimmten Objekttyps.static DeBlock
getSendDeBlock(int jobNumber)
static SingleTelegram
getSendSingleTelegram(int jobNumber)
static boolean
isCorrectSender(int osi7AdressSender, int osi7AdressReceiver, int de, int fg)
Prüft, ob die angebene Kombination von Sender des Telegramms und den Empfangsdaten (Empfängerknotennummer, DeNummer und FG in der Liste der TLS ähnlichen Kommunikationspartner überhaupt existiert.void
start()
Startmethode von ApplicationLayer.void
stateChanged(int osi7adress, int connectionState)
Wird durch OSI 3 aufgerufen, wenn sich der Verbindungsstatus zu einem Gerät ändert.static void
writeNoDataToUnreachableDe(int[] osi7Adress, long timeStamp)
Ermittelt aus der Liste der übergebenen Osi7Adressen der nicht erreichbaren Geräte (Kommunikationsunterbrechung) alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.static void
writeNoDataToUnreachableDe(int[] osi7Adress, long timeStamp, java.lang.String[] excludedAtgAspArray)
Ermittelt aus der Liste der übergebenen Osi7Adressen der nicht erreichbaren Geräte (Kommunikationsunterbrechung) alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.static void
writeNoDataToUnreachableDe(Eak eak, long timeStamp)
Ermittelt aus dem Eak alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.static void
writeNoDataToUnreachableDe(Eak eak, long timeStamp, int fg)
Ermittelt aus dem Eak alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.static void
writeNoDataToUnreachableDe(Eak eak, long timeStamp, int fg, java.lang.String[] excludedAtgAspArray)
Ermittelt aus dem Eak alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.static void
writeNoDataToUnreachableDe(java.util.List deList, long timeStamp, int fg, java.lang.String atg)
Schreibt bei dem übergebenen De für alle angemeldeten Daten (ausser dem DeFehler) einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.static void
writeNoDataToUnreachableDe(java.util.List deList, long timeStamp, int fg, java.lang.String[] excludedAtgAspArray)
Schreibt bei dem übergebenen De für alle angemeldeten Daten (ausser dem DeFehler) einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.
-
Field Details
-
_deBlockQueue
-
_networkLayer
public static de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayer _networkLayer
-
-
Constructor Details
-
TlsApplicationLayer
public TlsApplicationLayer(de.bsvrz.dav.daf.main.ClientDavInterface daf, de.bsvrz.dav.daf.main.config.ConfigurationObject localDevice, de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayer networkLayer, java.lang.String sourceDataReferencesClassName, boolean sendOnlyDeOk, boolean sendOnlyConnectedSM)
-
-
Method Details
-
addSendDeBlock
- Parameters:
jobNumber
- jobNumberdeBlock
- deBlock
-
addSendSingleTelegram
- Parameters:
jobNumber
- jobNumbersingleTelegram
- singleTelegram
-
getObjectRefsToDe
public static de.bsvrz.dav.daf.main.config.SystemObject[] getObjectRefsToDe(de.bsvrz.dav.daf.main.config.SystemObject de)Liefert die auf dieses DE referenzierenden Fachobjekte eines bestimmten Objekttyps. Dies können z.B. FahrstreifenObjekte sein, die Werte von dieser DE als Quelle erhalten.- Parameters:
de
- Objekt (De), für die die Objekte die auf diese DE referenzieren, ermittelt werden sollen.- Returns:
- Fachobjekte, die auf diese De als Quelle referenzieren (z.B. Fahrstreifen, die Werte von dieser DE erhatlen). Sind keien Objekte vorhanden, wird ein leeres Array zurückgegeben.
-
getSendDeBlock
- Parameters:
jobNumber
- jobNumber- Returns:
- Der De-Block
-
getSendSingleTelegram
- Parameters:
jobNumber
- jobNumber- Returns:
- Das Einzeltelegramm
-
isCorrectSender
public static boolean isCorrectSender(int osi7AdressSender, int osi7AdressReceiver, int de, int fg)Prüft, ob die angebene Kombination von Sender des Telegramms und den Empfangsdaten (Empfängerknotennummer, DeNummer und FG in der Liste der TLS ähnlichen Kommunikationspartner überhaupt existiert. Damit kann z.B. erkannt werden, ob Telegramme von falschen Absendern ins System eingespeist werden.- Parameters:
osi7AdressSender
- Knotennummer des Senders.osi7AdressReceiver
- Knotennummer des Empfängers.de
- DeNummer des Empfängers.fg
- Funktionsgruppe des Empfängers.- Returns:
- true, wenn angegebene Kombination zulässig ist.
-
writeNoDataToUnreachableDe
Ermittelt aus dem Eak alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird. Wird aufgerufen, falls Kommunikation zum EAK an diesem SM gestört ist.- Parameters:
eak
- Eak an Steuermodul, dass nicht mehr angesprochen werden kanntimeStamp
- Zeitpunkt des Kommunikationsausfalls
-
writeNoDataToUnreachableDe
public static void writeNoDataToUnreachableDe(int[] osi7Adress, long timeStamp)Ermittelt aus der Liste der übergebenen Osi7Adressen der nicht erreichbaren Geräte (Kommunikationsunterbrechung) alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.- Parameters:
osi7Adress
- Array der Osi7Adressen der nicht erreichbaren GerätetimeStamp
- Zeitpunkt des Kommunikationsausfalls
-
writeNoDataToUnreachableDe
Ermittelt aus dem Eak alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird. Wird aufgerufen, falls Kommunikation zum EAK an diesem SM für eine spezielle Funktionsgruppe gestört ist (z.B. bei Fehlern in der Folgenummernverwaltung der FG 4).- Parameters:
eak
- Eak an Steuermodul, dass nicht mehr angesprochen werden kanntimeStamp
- Zeitpunkt des Kommunikationsausfallsfg
- Funktionsgruppe, auf die das Erzeugen leerer Datensätze eingeschränkt werden soll.
-
writeNoDataToUnreachableDe
public static void writeNoDataToUnreachableDe(int[] osi7Adress, long timeStamp, java.lang.String[] excludedAtgAspArray)Ermittelt aus der Liste der übergebenen Osi7Adressen der nicht erreichbaren Geräte (Kommunikationsunterbrechung) alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird.- Parameters:
osi7Adress
- Array der Osi7Adressen der nicht erreichbaren GerätetimeStamp
- Zeitpunkt des KommunikationsausfallsexcludedAtgAspArray
- Array mit den Pids der zu ignorierenden Attributgruppen und Aspekten. Es können einzelne Attributgruppen, einzelne Aspekte und mit Doppelpunkt getrennt auch Kombinationen von Attributgruppen und Aspekten spezifiziert werden, für die keine leeren Datensätze erzeugt werden sollen. Außerdem kann auch eine Kombination von DE, Attributgruppe und Aspekt durch Kombination der jeweiligen Pids (Bsp: "de.x:atg.y:asp.z") spezifiziert werden für die für die keine auch keine leeren Datensätze erzeugt werden sollen.
-
writeNoDataToUnreachableDe
public static void writeNoDataToUnreachableDe(Eak eak, long timeStamp, int fg, java.lang.String[] excludedAtgAspArray)Ermittelt aus dem Eak alle betroffenen De und schreibt bei diesen für alle angemeldeten Daten einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird. Wird aufgerufen, falls Kommunikation zum EAK an diesem SM für eine spezielle Funktionsgruppe gestört ist (z.B. bei Fehlern in der Folgenummernverwaltung der FG 4).- Parameters:
eak
- Eak an Steuermodul, dass nicht mehr angesprochen werden kanntimeStamp
- Zeitpunkt des Kommunikationsausfallsfg
- Funktionsgruppe, auf die das Erzeugen leerer Datensätze eingeschränkt werden soll.excludedAtgAspArray
- Array mit den Pids der zu ignorierenden Attributgruppen und Aspekten. Es können einzelne Attributgruppen, einzelne Aspekte und mit Doppelpunkt getrennt auch Kombinationen von Attributgruppen und Aspekten spezifiziert werden, für die keine leeren Datensätze erzeugt werden sollen. Außerdem kann auch eine Kombination von DE, Attributgruppe und Aspekt durch Kombination der jeweiligen Pids (Bsp: "de.x:atg.y:asp.z") spezifiziert werden für die für die keine auch keine leeren Datensätze erzeugt werden sollen.
-
writeNoDataToUnreachableDe
public static void writeNoDataToUnreachableDe(java.util.List deList, long timeStamp, int fg, java.lang.String atg)Schreibt bei dem übergebenen De für alle angemeldeten Daten (ausser dem DeFehler) einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird. Wird aufgerufen, falls De über DeFehler als nicht "ok" gemeldet wird (deshalb wird für den DeFehler kein leerer Datensatz generiert, da dieser ja gültig ist.- Parameters:
deList
- Liste der De, für die Kommunikationsausfall/Fehler zu/bei diesen De erkannt wurde.timeStamp
- Zeitpunkt des Kommunikationsausfallsfg
- Funktionsgruppe, auf die das Erzeugen leerer Datensätze eingeschränkt werden soll.atg
- Attributgruppen-Pid, für die kein leerer Datensätze erzeugt werden soll.
-
writeNoDataToUnreachableDe
public static void writeNoDataToUnreachableDe(java.util.List deList, long timeStamp, int fg, java.lang.String[] excludedAtgAspArray)Schreibt bei dem übergebenen De für alle angemeldeten Daten (ausser dem DeFehler) einen leeren Datensatz, so dass der aktuelle Zustand dieser Daten als nicht bekannt publiziert wird. Wird aufgerufen, falls De über DeFehler als nicht "ok" gemeldet wird (deshalb wird für den DeFehler kein leerer Datensatz generiert, da dieser ja gültig ist.- Parameters:
deList
- Liste der De, für die Kommunikationsausfall/Fehler zu/bei diesen De erkannt wurde.timeStamp
- Zeitpunkt des Kommunikationsausfallsfg
- Funktionsgruppe, auf die das Erzeugen leerer Datensätze eingeschränkt werden soll.excludedAtgAspArray
- Array mit den Pids der zu ignorierenden Attributgruppen und Aspekten. Es können einzelne Attributgruppen, einzelne Aspekte und mit Doppelpunkt getrennt auch Kombinationen von Attributgruppen und Aspekten spezifiziert werden, für die keine leeren Datensätze erzeugt werden sollen. Außerdem kann auch eine Kombination von DE, Attributgruppe und Aspekt durch Kombination der jeweiligen Pids (Bsp: "de.x:atg.y:asp.z") spezifiziert werden für die für die keine auch keine leeren Datensätze erzeugt werden sollen.
-
dataReceived
public void dataReceived(int sender, byte[] data, boolean longTelegram)Wird durch OSI 3 aufgerufen, wenn Telegramm empfangen wurde. Werden Daten empfangen, werden aus den Daten (liegen als Byte-Strom vor) ein Objekt Osi7Telegram erzeugt, welches rekursiv Objekte vom Typ SingleTelegram und DeBlock erzeugt.Anschließend wird aus der Knotennummer des Telegramms ermittelt, wer (i.d.R. ein Sm) für die weitere Bearbeitung zuständig ist. Der Absender wird eigentlich hier nicht verwendet (eine Fremd-UZ sendet eventuell Daten von angeschlossenen SM an die VRZ). Bei direkter Kommunikation mit SM sollten beide Adresse aber übereinstimmen.
- Specified by:
dataReceived
in interfacede.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayerListener
- Parameters:
longTelegram
- true = Ein Langtelegramm, das nicht der TLS Definition entspricht
-
start
public void start()Startmethode von ApplicationLayer.- Specified by:
start
in interfaceApplicationLayer
-
stateChanged
public void stateChanged(int osi7adress, int connectionState)Wird durch OSI 3 aufgerufen, wenn sich der Verbindungsstatus zu einem Gerät ändert. An Geräte, deren Status ungleich DIVICE_CONNECTED ist, und an in Senderichtung dahinterliegende Geräte,dürfen keine Telegramme versendet werden. Gilt also z.B. die KRI als DEVICE_DISCONNECTED, so sind auch die angeschlossenen Sm/Eak/De nicht erreichbar! Der entsprechende Status bei diesen Geräten wird hier gesetzt. Die Rücknahme erfolgt, wenn Daten für ein solches Gerät empfangen werden. Wenn ein Gerät "Lebt", wird für dieses Gerät eine Zeitsyncronisation durchgeführt.- Specified by:
stateChanged
in interfacede.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayerListener
- Parameters:
osi7adress
- Osi7Adresse des Gerätes, dessen Status sich geändert hat.connectionState
- Status des Gerätes.
-