Added support for multi-line results

This commit is contained in:
GideonLeGrange 2014-01-29 11:05:59 +02:00
parent 666c6c4e41
commit afe511b593
4 changed files with 51 additions and 5 deletions

View File

@ -9,7 +9,7 @@
<groupId>me.legrange</groupId>
<artifactId>mikrotik</artifactId>
<version>1.1-SNAPSHOT</version>
<version>1.2</version>
<packaging>jar</packaging>
<name>Mikrotik API Java Client Library</name>

View File

@ -9,7 +9,7 @@ import me.legrange.mikrotik.ApiConnection;
abstract class Example {
protected void connect() throws Exception {
con = ApiConnection.connectTLS(Config.HOST);
con = ApiConnection.connect(Config.HOST);
con.login(Config.USERNAME, Config.PASSWORD);
}

View File

@ -0,0 +1,29 @@
package examples;
import java.util.List;
import java.util.Map;
import me.legrange.mikrotik.MikrotikApiException;
/**
* Example 7: Dump your complete config
*
* @author gideon
*/
public class Example7 extends Example {
public static void main(String... args) throws Exception {
Example7 ex = new Example7();
ex.connect();
ex.test();
ex.disconnect();
}
private void test() throws MikrotikApiException, InterruptedException {
con.execute("/export file=conf");
List<Map<String, String>> res = con.execute("/file/print detail where name=conf.rsc");
String text = res.get(0).get("contents");
for (String line : text.split("\r")) {
System.out.println(line);
}
}
}

View File

@ -8,8 +8,6 @@ import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.Provider;
import java.security.Security;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
@ -33,7 +31,9 @@ public final class ApiConnectionImpl extends ApiConnection {
*
* @param host The host to which to connect.
* @param port The TCP port to use.
* @param secure Is TLS required
* @return The ApiConnection
* @throws me.legrange.mikrotik.ApiConnectionException Thrown if there is a problem connecting
*/
public static ApiConnection connect(String host, int port, boolean secure) throws ApiConnectionException {
ApiConnectionImpl con = new ApiConnectionImpl();
@ -46,13 +46,16 @@ public final class ApiConnectionImpl extends ApiConnection {
*
* @return if connection is established to router it returns true.
*/
@Override
public boolean isConnected() {
return connected;
}
/**
* Disconnect from the remote API
* @throws me.legrange.mikrotik.ApiConnectionException Thrown if there is a problem disconnecting
*/
@Override
public void disconnect() throws ApiConnectionException {
if (!connected) {
throw new ApiConnectionException(("Not/no longer connected to remote Mikrotik"));
@ -341,7 +344,12 @@ public final class ApiConnectionImpl extends ApiConnection {
if (line.startsWith(("="))) {
String parts[] = line.split("=", 3);
if (parts.length == 3) {
res.put(parts[1], parts[2]);
if (!parts[2].endsWith("\r")) {
res.put(parts[1], parts[2]);
}
else {
res.put(parts[1], unpackMultiLine(parts[2]));
}
} else {
throw new ApiDataException(String.format("Malformed line '%s'", line));
}
@ -363,6 +371,15 @@ public final class ApiConnectionImpl extends ApiConnection {
return res;
}
private String unpackMultiLine(String head) throws ApiConnectionException, ApiDataException {
StringBuilder buf = new StringBuilder(head);
do {
nextLine();
buf.append(line);
} while (line.endsWith("\r"));
return buf.toString();
}
private Done unpackDone() throws MikrotikApiException {
Done done = new Done(null);
if (hasNextLine()) {