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  

    Fields inherited from interface de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayerListener

    DEVICE_CONNECTED, DEVICE_DISCONNECTED
  • 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.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • 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

      public static void addSendDeBlock​(int jobNumber, DeBlock deBlock)
      Parameters:
      jobNumber - jobNumber
      deBlock - deBlock
    • addSendSingleTelegram

      public static void addSendSingleTelegram​(int jobNumber, SingleTelegram singleTelegram)
      Parameters:
      jobNumber - jobNumber
      singleTelegram - 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

      public static DeBlock getSendDeBlock​(int jobNumber)
      Parameters:
      jobNumber - jobNumber
      Returns:
      Der De-Block
    • getSendSingleTelegram

      public static SingleTelegram getSendSingleTelegram​(int jobNumber)
      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

      public 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. Wird aufgerufen, falls Kommunikation zum EAK an diesem SM gestört ist.
      Parameters:
      eak - Eak an Steuermodul, dass nicht mehr angesprochen werden kann
      timeStamp - 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äte
      timeStamp - Zeitpunkt des Kommunikationsausfalls
    • writeNoDataToUnreachableDe

      public 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. 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 kann
      timeStamp - Zeitpunkt des Kommunikationsausfalls
      fg - 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äte
      timeStamp - Zeitpunkt des Kommunikationsausfalls
      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​(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 kann
      timeStamp - Zeitpunkt des Kommunikationsausfalls
      fg - 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 Kommunikationsausfalls
      fg - 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 Kommunikationsausfalls
      fg - 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 interface de.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 interface ApplicationLayer
    • 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 interface de.bsvrz.kex.tls.osi2osi3.osi3.NetworkLayerListener
      Parameters:
      osi7adress - Osi7Adresse des Gerätes, dessen Status sich geändert hat.
      connectionState - Status des Gerätes.