package com.openfarmanager.android.utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import rx.Observer;
/**
* @author Vlad Namashko.
*/
public class HardwareUtils {
public static final String TAG = "HardwareUtils";
public static final String NOMAC = "00:00:00:00:00:00";
public final static String MAC_REGEX = "^0x1\\s+0x2\\s+([:0-9a-fA-F]+)\\s+\\*\\s+\\w+$";
public final static String MAC_RE = "^%s\\s+0x1\\s+0x2\\s+([:0-9a-fA-F]+)\\s+\\*\\s+\\w+$";
public static HashMap<String, String> getHardwareAddresses(final HashMap<String, String> addresses) {
final Pattern pattern = Pattern.compile(MAC_REGEX);
CommandLineUtils.excecuteReadCommand("/proc/net/arp").subscribe(new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(String line) {
int ipLen = line.indexOf(' ');
String ip = line.substring(0, ipLen);
String mac = NOMAC;
if (!ip.matches(NetworkCalculator.ipPattern)) {
return;
}
String macLine = line.substring(ipLen).trim();
Matcher matcher = pattern.matcher(macLine);
if (matcher.matches()) {
mac = matcher.group(1);
}
if (!mac.equals(NOMAC)) {
addresses.put(ip, mac);
}
}
});
return addresses;
}
public static String getHardwareAddress(String ip) {
String hw = NOMAC;
BufferedReader bufferedReader = null;
try {
if (ip != null) {
String ptrn = String.format(MAC_RE, ip.replace(".", "\\."));
Pattern pattern = Pattern.compile(ptrn);
bufferedReader = new BufferedReader(new FileReader("/proc/net/arp"), CommandLineUtils.BUF_LEN);
String line;
Matcher matcher;
while ((line = bufferedReader.readLine()) != null) {
matcher = pattern.matcher(line);
if (matcher.matches()) {
hw = matcher.group(1);
break;
}
}
} else {
}
} catch (IOException e) {
e.printStackTrace();
return hw;
} finally {
try {
if(bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return hw;
}
}