Fixed NPE (Bumped to 3.0.8)

This commit is contained in:
Gideon Le Grange 2024-09-26 14:36:54 +02:00
parent ed0468dbf9
commit e3cf6a933a
2 changed files with 13 additions and 16 deletions

View File

@ -9,7 +9,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>me.legrange</groupId> <groupId>me.legrange</groupId>
<artifactId>mikrotik</artifactId> <artifactId>mikrotik</artifactId>
<version>3.0.7</version> <version>3.0.8</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>Mikrotik API Java Client Library</name> <name>Mikrotik API Java Client Library</name>
<url>https://github.com/GideonLeGrange/mikrotik-java</url> <url>https://github.com/GideonLeGrange/mikrotik-java</url>

View File

@ -14,6 +14,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import javax.net.SocketFactory; import javax.net.SocketFactory;
import me.legrange.mikrotik.ApiConnection; import me.legrange.mikrotik.ApiConnection;
import me.legrange.mikrotik.ApiConnectionException; import me.legrange.mikrotik.ApiConnectionException;
@ -162,8 +163,7 @@ public final class ApiConnectionImpl extends ApiConnection {
} }
private synchronized String nextTag() { private synchronized String nextTag() {
_tag++; return Integer.toHexString(_tag.incrementAndGet());
return Integer.toHexString(_tag);
} }
private Socket sock = null; private Socket sock = null;
@ -173,7 +173,7 @@ public final class ApiConnectionImpl extends ApiConnection {
private Reader reader; private Reader reader;
private Processor processor; private Processor processor;
private final Map<String, ResultListener> listeners; private final Map<String, ResultListener> listeners;
private Integer _tag = 0; private final AtomicInteger _tag = new AtomicInteger(0);
private int timeout = ApiConnection.DEFAULT_COMMAND_TIMEOUT; private int timeout = ApiConnection.DEFAULT_COMMAND_TIMEOUT;
/** /**
@ -186,7 +186,7 @@ public final class ApiConnectionImpl extends ApiConnection {
} }
private String take() throws ApiConnectionException, ApiDataException { private String take() throws ApiConnectionException, ApiDataException {
Object val = null; Object val;
try { try {
val = queue.take(); val = queue.take();
} catch (InterruptedException ex) { } catch (InterruptedException ex) {
@ -223,7 +223,7 @@ public final class ApiConnectionImpl extends ApiConnection {
private void put(Object data) { private void put(Object data) {
try { try {
queue.put(data); queue.put(data);
} catch (InterruptedException ex) { } catch (InterruptedException ignored) {
} }
} }
@ -280,7 +280,7 @@ public final class ApiConnectionImpl extends ApiConnection {
private void nextLine() throws ApiConnectionException, ApiDataException { private void nextLine() throws ApiConnectionException, ApiDataException {
if (lines.isEmpty()) { if (lines.isEmpty()) {
String block = reader.take(); String block = reader.take();
String parts[] = block.split("\n"); String[] parts = block.split("\n");
lines.addAll(Arrays.asList(parts)); lines.addAll(Arrays.asList(parts));
} }
line = lines.remove(0); line = lines.remove(0);
@ -293,7 +293,7 @@ public final class ApiConnectionImpl extends ApiConnection {
private String peekLine() throws ApiConnectionException, ApiDataException { private String peekLine() throws ApiConnectionException, ApiDataException {
if (lines.isEmpty()) { if (lines.isEmpty()) {
String block = reader.take(); String block = reader.take();
String parts[] = block.split("\n"); String[] parts = block.split("\n");
lines.addAll(Arrays.asList(parts)); lines.addAll(Arrays.asList(parts));
} }
return lines.get(0); return lines.get(0);
@ -309,7 +309,6 @@ public final class ApiConnectionImpl extends ApiConnection {
case "!done": case "!done":
return unpackDone(); return unpackDone();
case "!trap": case "!trap":
return unpackError();
case "!halt": case "!halt":
return unpackError(); return unpackError();
case "": case "":
@ -320,12 +319,10 @@ public final class ApiConnectionImpl extends ApiConnection {
private Result unpackRe() throws ApiDataException, ApiConnectionException { private Result unpackRe() throws ApiDataException, ApiConnectionException {
nextLine(); nextLine();
int l = 0;
Result res = new Result(); Result res = new Result();
while (!line.startsWith(("!"))) { while (!line.startsWith(("!"))) {
l++;
if (line.startsWith(("="))) { if (line.startsWith(("="))) {
String parts[] = line.split("=", 3); String[] parts = line.split("=", 3);
if (parts.length == 3) { if (parts.length == 3) {
if (!parts[2].endsWith("\r")) { if (!parts[2].endsWith("\r")) {
res.put(parts[1], unpackResult(parts[2])); res.put(parts[1], unpackResult(parts[2]));
@ -342,7 +339,7 @@ public final class ApiConnectionImpl extends ApiConnection {
throw new ApiDataException(String.format("Malformed line '%s'", line)); throw new ApiDataException(String.format("Malformed line '%s'", line));
} }
} else if (line.startsWith(".tag=")) { } else if (line.startsWith(".tag=")) {
String parts[] = line.split("=", 2); String[] parts = line.split("=", 2);
if (parts.length == 2) { if (parts.length == 2) {
res.setTag(parts[1]); res.setTag(parts[1]);
} }
@ -383,12 +380,12 @@ public final class ApiConnectionImpl extends ApiConnection {
while (!line.startsWith("!")) { while (!line.startsWith("!")) {
if (line.startsWith(".tag=")) { if (line.startsWith(".tag=")) {
String parts[] = line.split("=", 2); String[] parts = line.split("=", 2);
if (parts.length == 2) { if (parts.length == 2) {
done.setTag(parts[1]); done.setTag(parts[1]);
} }
} else if (line.startsWith(("=ret"))) { } else if (line.startsWith(("=ret"))) {
String parts[] = line.split("=", 3); String[] parts = line.split("=", 3);
if (parts.length == 3) { if (parts.length == 3) {
done.setHash(parts[2]); done.setHash(parts[2]);
} else { } else {
@ -412,7 +409,7 @@ public final class ApiConnectionImpl extends ApiConnection {
if (hasNextLine()) { if (hasNextLine()) {
while (!line.startsWith("!")) { while (!line.startsWith("!")) {
if (line.startsWith(".tag=")) { if (line.startsWith(".tag=")) {
String parts[] = line.split("=", 2); String[] parts = line.split("=", 2);
if (parts.length == 2) { if (parts.length == 2) {
err.setTag(parts[1]); err.setTag(parts[1]);
} }