mikrotik-java
=============
A Java client library implementation for the Mikrotik RouterOS API.
This project provides a Java client to manipulate Mikrotik routers using the remote API. Simple things must be easy to do, and complex things must be possible.
Versions
--------
This library uses [semantic versioning](http://semver.org/)
The current stable version is 2.0.2.
* Fixed bug #13 - processor thread wasn't being stopped on disconnect(), causing non-exit of application in some cases.
Previous 2.0 versions:
* 2.0.1 fixed parsing of !=, < and > operators in a where clause.
* 2.0.0 changed ResultListener to receive errors and completion notifications. This version is not backwards compatible with version 1.x.
Previous 1.1 versions:
* 1.1.5 fixed even more comamnd line parsing bugs.
* 1.1.4 fixed command line parsing bugs #7 and #8.
* 1.1.3 fixed severe command line parsing bugs, #3, #4 and #5.
* 1.1.2 added support for handling multi-line results, like for example /file print.
* 1.1 added TLS (SSL) support to encrypt API traffic.
The latest development version is 2.0.0 which is available using the 2.0.0 branch.
Getting the API
---------------
I recommend using the Maven artifact from Maven Central using this dependency:
```xml
me.legrange
mikrotik
2.0.2
```
You can also clone or fork the repository, or download the source as a zip or tar.gz from [Releases](https://github.com/GideonLeGrange/mikrotik-java/releases)
Contributing
------------
I welcome contributions, be it bug fixes or other improvements. If you fix or change something, please submit a pull request. If you want to report a bug, please open an issue.
Examples
========
These examples should illustrate how to use this library. Please note that I assume that the user is proficient in Java and understands the Mikrotik command line syntax.
Here is a simple example: Connect to a router and reboot it.
```java
ApiConnection con = ApiConnection.connect("10.0.1.1"); // connect to router
con.login("admin","password"); // log in to router
con.execute("/system/reboot"); // execute a command
con.disconnect(); // disconnect from router
```
If your router does not use the default API port, the port can be specified when connecting:
```java
ApiConnection con = ApiConnection.connect("10.0.1.1", 1337); // connect to router on port 1337
```
To open an encrypted (TLS) connection is as simple, assuming the default API-SSL port is used:
```java
ApiConnection con = ApiConnection.connectTLS("10.0.1.1"); // connect to router using TLS
```
#### Notes about TLS:
* Currently only anonymous TLS is supported, not certificates.
* There is a compatibility problem between the current versions of RouterOS supporting API over TLS and the Java Cryptography Extension (JCE) in Java 7 and earlier. TLS encryption works in Java 8 and later. For more information, feel free to contact me.
In following examples the connection, login and disconnection code will not be repeated.
Reading data
------------
A simple example that returns a result: Print all interfaces.
```java
List