Commit 79a25a24 authored by Christian Kniss's avatar Christian Kniss
Browse files

## [Version 3.10.1] - 2021-04-30

- [Warnung ohne Einschränkung von Jobnummern - #4](#4) behoben: Wenn Property nicht verwendet wird, werden die Standardwerte 1..255 verwendet und es wird keine Meldung mehr ausgegeben.
parent 8f7fb2f5
......@@ -5,6 +5,10 @@ Versionsverlauf
- derzeit keine Änderungen
## [Version 3.10.1] - 2021-04-30
- [Warnung ohne Einschränkung von Jobnummern - #4](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kex.tls.osi2osi3/-/issues/4) behoben: Wenn Property nicht verwendet wird, werden die Standardwerte 1..255 verwendet und es wird keine Meldung mehr ausgegeben.
## [Version 3.10.0] - 2020-10-26
### Neu
......@@ -122,6 +126,7 @@ Setzt den Featurewunsch [Einschränkung von Jobnummern - #12](https://gitlab.ner
[Noch nicht veröffentlicht]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kex.tls.osi2osi3/compare/v3.10.0...HEAD
[Noch nicht veröffentlicht]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kex.tls.osi2osi3/compare/v3.10.1...HEAD
[Version 3.10.1]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kex.tls.osi2osi3/compare/v3.10.0...v3.10.1
[Version 3.10.0]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kex.tls.osi2osi3/compare/v3.9.7...v3.10.0
[Version 3.9.7]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.kex.tls.osi2osi3/compare/v3.9.6...v3.9.7
......@@ -2,7 +2,7 @@
// NERZ-SWE-Plugin
//--------------------------------------------------------------------
plugins {
id "de.bsvrz.gradle.nerzswe" version "0.21.0"
id "de.bsvrz.gradle.nerzswe" version "0.26.0"
}
//--------------------------------------------------------------------
......@@ -10,13 +10,13 @@ plugins {
//--------------------------------------------------------------------
description 'osi2osi3'
group 'de.bsvrz.kex'
version '3.10.1-SNAPSHOT'
version '3.10.1'
// Properties des NERZ-SWE-Plugins:
nerzswe {
mainClassName = ''
sweStatus = 'BETA'
sweDatum = ''
sweStatus = 'FREI'
sweDatum = '2021-04-30'
}
//--------------------------------------------------------------------
......@@ -24,8 +24,8 @@ nerzswe {
//--------------------------------------------------------------------
String kernsoftware_version = '3.17.1'
dependencies {
compile group: 'de.bsvrz.dav', name: 'de.bsvrz.dav.daf', version: kernsoftware_version
implementation group: 'de.bsvrz.dav', name: 'de.bsvrz.dav.daf', version: kernsoftware_version
// Kompatible RXTX-Weiterentwicklung, die ohne lose Binärdateien auskommt.
compile group: 'com.neuronrobotics', name: 'nrjavaserial', version: '5.2.1'
implementation group: 'com.neuronrobotics', name: 'nrjavaserial', version: '5.2.1'
}
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
......@@ -132,12 +132,12 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
public void sendData(int destination, int priority, byte[] data, boolean longTelegram) throws DestinationUnreachableException {
_debug.fine("TlsNetworkLayer.send: Soll Daten der Klasse " + priority + " an Knoten " + destination + " senden");
_debug.finer(HexDumper.toString(data));
if (priority < 1 || priority > 2) {
throw new IllegalArgumentException("Ungültige Priorität");
}
if (data == null) {
throw new IllegalArgumentException("Keine Daten");
}
if (priority < 1 || priority > 2) {
throw new IllegalArgumentException("Ungültige Priorität");
}
if (data == null) {
throw new IllegalArgumentException("Keine Daten");
}
boolean normalProcessing = true;
if (!longTelegram) {
normalProcessing = _telegramProcessor.dataToSend(destination, data);
......@@ -203,9 +203,9 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
}
//Prio im ersten Routingbyte eintragen, oberstes Bit wird bei Prioritätsklasse 2 gesetzt
if (priority == PRIORITY_CLASS_2) {
frame[0] |= 0x80;
}
if (priority == PRIORITY_CLASS_2) {
frame[0] |= 0x80;
}
try {
link.send(frame, priority);
} catch (UnsupportedOperationException e) {
......@@ -274,9 +274,9 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
// Die Mindestgröße des Byte-Arrays sollte >= 9 sein
// OSI7 Telegramm (Allgemeiner Telegrammkopf (4 Bytes) + Einzeltelegrammkopf (5 Bytes)
final byte[] normalProcessingBytes = _telegramProcessor.dataReceived(sender, data);
if (normalProcessingBytes.length >= 9) {
listener.dataReceived(sender, normalProcessingBytes, false);
}
if (normalProcessingBytes.length >= 9) {
listener.dataReceived(sender, normalProcessingBytes, false);
}
} catch (Exception e) {
String nl = System.getProperty("line.separator");
_debug.error(
......@@ -321,8 +321,7 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
* @param link Verbindung, von der die Einstellungen bezogen werden
*
* @return <code>false</code>: Osi3-Adressen werden nicht ignoriert <br><code>true</code>: Osi3-Adressen werden ignoriert und werden bis auf das
* Steuerbyte
* entfernt.
* Steuerbyte entfernt.
*/
public boolean isReducingToControlByte(final DataLinkLayer.Link link) {
if (link.getProperty(TlsNetworkLayerSetting.reduceToControlByte) != null) {
......@@ -363,12 +362,12 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
// Wenn oberstes Bit 0 ist, dann wird Prioritätsklasse
final int osi3PriorityClass = ((osi3HeaderByte & 0x80) == 0) ? PRIORITY_CLASS_1 : PRIORITY_CLASS_2;
final int dataOffset = 1 + osi3Length * 2;
if (dataOffset > data.length) {
throw new Exception("OSI 3 Längenangabe fehlerhaft");
}
if (osi3Pointer > osi3Length) {
throw new Exception("OSI 3 Pointer größer als OSI 3 Länge");
}
if (dataOffset > data.length) {
throw new Exception("OSI 3 Längenangabe fehlerhaft");
}
if (osi3Pointer > osi3Length) {
throw new Exception("OSI 3 Pointer größer als OSI 3 Länge");
}
final byte[] nextLayerData = new byte[data.length - dataOffset];
System.arraycopy(data, dataOffset, nextLayerData, 0, nextLayerData.length);
final byte[] osi3HeaderData = new byte[dataOffset];
......@@ -376,9 +375,9 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
final boolean osi3IgnoreReceivedAddress;
String osi3IgnoreReceivedAddressValue = link.getProperty("osi3.adresseBeiEmpfangIgnorieren");
if (osi3IgnoreReceivedAddressValue == null) {
osi3IgnoreReceivedAddressValue = "";
}
if (osi3IgnoreReceivedAddressValue == null) {
osi3IgnoreReceivedAddressValue = "";
}
osi3IgnoreReceivedAddressValue = osi3IgnoreReceivedAddressValue.trim().toLowerCase();
osi3IgnoreReceivedAddress = osi3IgnoreReceivedAddressValue.equals("ja") || osi3IgnoreReceivedAddressValue.equals("yes") ||
osi3IgnoreReceivedAddressValue.equals("true") || osi3IgnoreReceivedAddressValue.equals("wahr");
......@@ -404,9 +403,9 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
_debug.info("Telegramm wird weitervermittelt, \nOSI3: " + HexDumper.toString(data, 0, dataOffset) + "\nOSI7: " +
HexDumper.toString(data, dataOffset, -1));
//Der Einfachheit halber wird hier das ganze Byte incrementiert, betroffen ist aber nur der osi3Pointer in den unteren 3 Bits
if (!linkInfo._dontIncrementOsi3Pointer) {
osi3HeaderData[0] = (byte) (osi3HeaderByte + 1);
}
if (!linkInfo._dontIncrementOsi3Pointer) {
osi3HeaderData[0] = (byte) (osi3HeaderByte + 1);
}
//Es wird geprüft ob die Option auf ReduzierungAufSteuerbyte aktiviert ist,
//d.h. das Telegram wird auf das Steuerbyte reduziert (Osi3 Routinginformationen entfernt)
......@@ -552,9 +551,9 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
private LinkInfo findLinkInfo(int device, int portAddress, int remotePortAdress, boolean resolveTransparentLinks, int ignoreDevice) {
_debug.fine("findLinkInfo( " + device + ", " + portAddress + ", " + remotePortAdress + ", " + resolveTransparentLinks + " )");
List deviceLinks = (List) _device2LinksMap.get(new Integer(device));
if (deviceLinks == null) {
return null;
}
if (deviceLinks == null) {
return null;
}
for (Iterator linkIterator = deviceLinks.iterator(); linkIterator.hasNext(); ) {
LinkInfo linkInfo = (LinkInfo) linkIterator.next();
if (resolveTransparentLinks && linkInfo._linkIsTransparent) {
......@@ -605,10 +604,8 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
* 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
* 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 completeInitialization() {
......@@ -681,44 +678,49 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
_telegramProcessor = telegramProcessor;
}
public int[] getJobNummernBereichFuerLink(int device) {
int min = 1;
int max = 254;
public int[] getJobNummernBereichFuerLink(int device) {
int min = 1;
int max = 254;
RouteInfo routeInfo = getRouteInfo(device);
RouteInfo routeInfo = getRouteInfo(device);
if (routeInfo != null) {
try {
LinkInfo _firstLinkInfo = routeInfo._firstLinkInfo;
if (routeInfo != null) {
try {
LinkInfo _firstLinkInfo = routeInfo._firstLinkInfo;
Link _link = _firstLinkInfo._link;
Link _link = _firstLinkInfo._link;
String minString = _link.getProperty(TlsNetworkLayerSetting.minimaleJobNummer);
String maxString = _link.getProperty(TlsNetworkLayerSetting.maximaleJobNummer);
String minString = _link.getProperty(TlsNetworkLayerSetting.minimaleJobNummer);
String maxString = _link.getProperty(TlsNetworkLayerSetting.maximaleJobNummer);
try {
min = Integer.parseInt(minString);
max = Integer.parseInt(maxString);
} catch (NumberFormatException e) {
_debug.warning("Beim Parsen der Propertywerte für die Jobnummern ('" + minString + "','" + maxString +
"') trat ein Fehler auf, daher werden die Jobnummern 1 bis 255 verwendet", e);
if (minString == null && maxString == null) {
// Property wurde nicht gesetzt, deshalb Standardwerte verwenden
return new int[] {1, 255};
}
min = 1;
max = 255;
}
} catch (Exception e) {
_debug.warning("Bei der Bestimmung der ersten Vermittlungsabschnitts zum Gerät " + device +
" trat ein Fehler auf, daher werden die Jobnummern 1 bis 255 verwendet", e);
try {
min = Integer.parseInt(minString);
max = Integer.parseInt(maxString);
} catch (NumberFormatException e) {
_debug.warning("Beim Parsen der Propertywerte für die Jobnummern ('" + minString + "','" + maxString +
"') trat ein Fehler auf, daher werden die Jobnummern 1 bis 255 verwendet", e);
min = 1;
max = 255;
}
} catch (Exception e) {
_debug.warning("Bei der Bestimmung der ersten Vermittlungsabschnitts zum Gerät " + device +
" trat ein Fehler auf, daher werden die Jobnummern 1 bis 255 verwendet", e);
min = 1;
max = 255;
}
} else {
_debug.warning("Die Route zum Gerät " + device + " konnte nicht bestimmt werden, daher werden die Jobnummern 1 bis 255 verwendet");
}
min = 1;
max = 255;
}
} else {
_debug.warning("Die Route zum Gerät " + device + " konnte nicht bestimmt werden, daher werden die Jobnummern 1 bis 255 verwendet");
}
return new int[] {min, max};
}
return new int[] {min, max};
}
static class RouteInfo {
......@@ -748,12 +750,12 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
}
}
int arraySize = 1;
if (oldRoute._tlsOsi3Header != null) {
arraySize = oldRoute._tlsOsi3Header.length;
}
if (!newLink._linkIsTransparent) {
arraySize += 2;
}
if (oldRoute._tlsOsi3Header != null) {
arraySize = oldRoute._tlsOsi3Header.length;
}
if (!newLink._linkIsTransparent) {
arraySize += 2;
}
if (arraySize > 15) {
_tlsOsi3Header = null;
......@@ -894,7 +896,7 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
}
}
// STS-Start 2018.11.10
// STS-Start 2018.11.10
/**
* Klasse zur Entkopplung von OSI2 und OSI7 beim Empfang von Daten. Durch den Einsatz eines eigenen Threads kann während der Verarbeitung von
......@@ -913,7 +915,8 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
_eventChannel = new PriorityChannel(1, 2000);
_asyncThread = new Thread(new Runnable() {
/**
* When an object implementing interface <code>Runnable</code> is used to create a thread, starting the thread causes the object's <code>run</code> method
* When an object implementing interface <code>Runnable</code> is used to create a thread, starting the thread causes the object's
* <code>run</code> method
* to be called in that separately executing thread.
* <p>
* The general contract of the method <code>run</code> is that it may take any action whatsoever.
......@@ -955,7 +958,7 @@ public class TlsNetworkLayer implements NetworkLayer, NetworkLayerSender {
}
}
// STS-Ende 2018.11.10
// STS-Ende 2018.11.10
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment