public class NetDevice : IEquatable, IComparable { const string TAG = "NetDevice"; public const string DEV_DEVICE = "Network Device"; public const string DEV_ROUTER = "Network Router"; public const string DEV_GATEWAY = "WLAN Gateway"; public const string DEV_COMPUTER = "Computer"; public const string DEV_STORAGE = "File Server"; public const string DEV_PRINTER = "Printer"; public const string DEV_SWITCH = "Power Switch"; public const string DEV_HUB = "Network Hub"; public const string DEV_PHONE = "Smartphone"; public const string DEV_TABLET = "Tablet"; public const string DEV_MEDIA = "Media Device"; public const string DEV_CAMERA = "IP Camera"; public const string DEV_TV = "TV"; public const string DEV_RADIO = "Radio"; public const string DEV_SPEAKER = "Speaker"; public readonly static string[] DeviceTypes = { DEV_DEVICE, DEV_ROUTER, DEV_GATEWAY, DEV_COMPUTER, DEV_STORAGE, DEV_PRINTER, DEV_SWITCH, DEV_HUB, DEV_PHONE, DEV_TABLET, DEV_MEDIA, DEV_CAMERA, DEV_TV, DEV_RADIO, DEV_SPEAKER }; public string id { get; set; } = "WLNDEV000"; public string name { get; set; } = ""; public string type { get; set; } = DEV_DEVICE; public string model { get; set; } = ""; public string mac { get; set; } = ""; public string vendor { get; set; } = "unknown"; public string location { get; set; } = ""; public bool useSSH { get; set; } = false; public bool isLocal { get; set; } = true; public string lanIp6 { get; set; } = ""; public string lanIp4 { get; set; } = ""; public int lanPort { get; set; } = 80; public int lanWebPort { get; set; } = 80; public int lanRtsp { get; set; } = 554; public string wanIp6 { get; set; } = ""; public string wanIp4 { get; set; } = ""; public int wanPort { get; set; } = 80; public int wanWebPort { get; set; } = 80; public int wanRtsp { get; set; } = 554; public string user { get; set; } = ""; public string userPw { get; set; } = ""; public string admin { get; set; } = "admin"; public string adminPw { get; set; } = ""; public string root { get; set; } = ""; public string path { get; set; } = ""; public string server { get; set; } = ""; public string info { get; set; } = ""; public string ip6 => isLocal ? lanIp6 : wanIp6; public string ip4 => isLocal ? lanIp4 : wanIp4; public int port => isLocal ? lanPort : wanPort; public int webPort => isLocal ? lanWebPort : wanWebPort; public string webUrl => "http" + "://" + ip4 + ((webPort > 0 && webPort != 80 && webPort != 443) ? (":" + webPort) : "") + "/"; public string ftpUrl => "ftps" + "://" + ip4 + ":" + port + "/"; public string rtspUrl => "rtsp" + "://" + ip4 + ":" + (isLocal ? lanRtsp : wanRtsp) + "/"; const string sep = "\":\""; private string PwEncrypt (string text) { return new AesCipher("CipherKey").EncryptPw(text); } private string PwDecrypt (string text) { return new AesCipher("CipherKey").DecryptPw(text); } public NetDevice () {} public NetDevice (string jsonString) { JsonParser.JsonObject js = new JsonParser().Parse(jsonString); string value; foreach (var jso in js.fields) { try { value = jso.value != null ? (string) jso.value : ""; switch (jso.name) { case "Id": id = value; break; case "Name": name = value; break; case "Type": type = value; break; case "Model": model = value; break; case "Mac": mac = value; break; case "Vendor": vendor = value; break; case "Location": location = value; break; case "UseSSH": useSSH = value == "true"; break; case "IsLocal": isLocal = value == "true"; break; case "LanIp6": lanIp6 = value; break; case "LanIp4": lanIp4 = value; break; case "LanPort": lanPort = ParseInt(value); break; case "LanWebPort": lanWebPort = ParseInt(value); break; case "LanRtsp": lanRtsp = ParseInt(value); break; case "WanIp6": wanIp6 = value; break; case "WanIp4": wanIp4 = value; break; case "WanPort": wanPort = ParseInt(value); break; case "WanWebPort": wanWebPort = ParseInt(value); break; case "WanRtsp": wanRtsp = ParseInt(value); break; case "User": user = value; break; case "UserPw": userPw = PwDecrypt(value); break; case "Admin": admin = value; break; case "AdminPw": adminPw = PwDecrypt(value); break; case "Root": root = value; break; case "Path": path = value; break; case "Server": server = value; break; case "Info": info = value; break; } } catch (Exception ex) { Log.Error(TAG, "json", jso.name + " : ?? " + ex); } } } public NetDevice (byte[] data) { DataBuffer buffer = new DataBuffer(data); id = buffer.getString(); name = buffer.getString(); type = buffer.getString(); model = buffer.getString(); mac = buffer.getString(); vendor = buffer.getString(); location = buffer.getString(); useSSH = buffer.getBoolean(); isLocal = buffer.getBoolean(); lanIp6 = buffer.getString(); lanIp4 = buffer.getString(); lanPort = buffer.getInt(); lanWebPort = buffer.getInt(); lanRtsp = buffer.getInt(); wanIp6 = buffer.getString(); wanIp4 = buffer.getString(); wanPort = buffer.getInt(); wanWebPort = buffer.getInt(); wanRtsp = buffer.getInt(); user = buffer.getString(); userPw = PwDecrypt(buffer.getString()); admin = buffer.getString(); adminPw = PwDecrypt(buffer.getString()); root = buffer.getString(); path = buffer.getString(); server = buffer.getString(); info = buffer.getString(); } public byte[] toArray () { DataBuffer buffer = new DataBuffer(); buffer.put(id); buffer.put(name); buffer.put(type); buffer.put(model); buffer.put(mac); buffer.put(vendor); buffer.put(location); buffer.put(useSSH); buffer.put(isLocal); buffer.put(lanIp6); buffer.put(lanIp4); buffer.put(lanPort); buffer.put(lanWebPort); buffer.put(lanRtsp); buffer.put(wanIp6); buffer.put(wanIp4); buffer.put(wanPort); buffer.put(wanWebPort); buffer.put(wanRtsp); buffer.put(user); buffer.put(PwEncrypt(userPw)); buffer.put(admin); buffer.put(PwEncrypt(adminPw)); buffer.put(root); buffer.put(path); buffer.put(server); buffer.put(info); return buffer.toArray(); } public string toJson () { var device = new System.Text.StringBuilder(); device.Append("{"); device.Append("\"Id" ).Append(sep).Append(id ).Append("\","); device.Append("\"Name" ).Append(sep).Append(name ).Append("\","); device.Append("\"Type" ).Append(sep).Append(type ).Append("\","); device.Append("\"Model" ).Append(sep).Append(model ).Append("\","); device.Append("\"Mac" ).Append(sep).Append(mac ).Append("\","); device.Append("\"Vendor" ).Append(sep).Append(vendor ).Append("\","); device.Append("\"Location" ).Append(sep).Append(location ).Append("\","); device.Append("\"UseSSH" ).Append(sep).Append(useSSH ? "true" : "false").Append("\","); device.Append("\"IsLocal" ).Append(sep).Append(isLocal ? "true" : "false").Append("\","); device.Append("\"LanIp6" ).Append(sep).Append(lanIp6 ).Append("\","); device.Append("\"LanIp4" ).Append(sep).Append(lanIp4 ).Append("\","); device.Append("\"LanPort" ).Append(sep).Append(lanPort ).Append("\","); device.Append("\"LanWebPort").Append(sep).Append(lanWebPort).Append("\","); device.Append("\"LanRtsp" ).Append(sep).Append(lanRtsp ).Append("\","); device.Append("\"WanIp6" ).Append(sep).Append(wanIp6 ).Append("\","); device.Append("\"WanIp4" ).Append(sep).Append(wanIp4 ).Append("\","); device.Append("\"WanPort" ).Append(sep).Append(wanPort ).Append("\","); device.Append("\"WanWebPort").Append(sep).Append(wanWebPort).Append("\","); device.Append("\"WanRtsp" ).Append(sep).Append(wanRtsp ).Append("\","); device.Append("\"User" ).Append(sep).Append(user ).Append("\","); device.Append("\"UserPw" ).Append(sep).Append(PwEncrypt(userPw)).Append("\","); device.Append("\"Admin" ).Append(sep).Append(admin ).Append("\","); device.Append("\"AdminPw" ).Append(sep).Append(PwEncrypt(adminPw)).Append("\","); device.Append("\"Root" ).Append(sep).Append(root ).Append("\","); device.Append("\"Path" ).Append(sep).Append(path ).Append("\","); device.Append("\"Server" ).Append(sep).Append(server ).Append("\","); device.Append("\"Info" ).Append(sep).Append(info ).Append("\""); device.Append("}"); return device.ToString(); } private int ParseInt (string value) { try { return int.Parse(value); } catch { return 0; } } public int CompareTo (NetDevice dev) { return id.CompareTo(dev.id); } public bool Equals (NetDevice dev) { return id == dev.id; } }

NetDevice
NetDevice: a class with the specifications of a device on the internal network
-
-
import android.content.ContentValues; import android.database.Cursor; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; import java.io.Serializable; import java.util.Arrays; import java.util.List; @Entity(tableName = "NetDeviceTable") public class NetDevice implements Serializable { final static String TAG = NetDevice.class.getSimpleName(); public static final String DEV_DEVICE = "Network Device"; public static final String DEV_ROUTER = "Network Router"; public static final String DEV_GATEWAY = "WLAN Gateway"; public static final String DEV_COMPUTER = "Computer"; public static final String DEV_STORAGE = "File Server"; public static final String DEV_PRINTER = "Printer"; public static final String DEV_SWITCH = "Power Switch"; public static final String DEV_HUB = "Network Hub"; public static final String DEV_PHONE = "Smartphone"; public static final String DEV_TABLET = "Tablet"; public static final String DEV_MEDIA = "Media Device"; public static final String DEV_CAMERA = "IP Camera"; public static final String DEV_TV = "TV"; public static final String DEV_RADIO = "Radio"; public static final String DEV_SPEAKER = "Speaker"; public static final List
DeviceTypes = Arrays.asList( DEV_DEVICE, DEV_ROUTER, DEV_GATEWAY, DEV_COMPUTER, DEV_STORAGE, DEV_PRINTER, DEV_SWITCH, DEV_HUB, DEV_PHONE, DEV_TABLET, DEV_MEDIA, DEV_CAMERA, DEV_TV, DEV_RADIO, DEV_SPEAKER); @NonNull @PrimaryKey() @ColumnInfo(index = true, name = "id") public String id = ""; public String name = ""; public String type = DEV_DEVICE; public String model = ""; public String mac = ""; public String vendor = ""; public String location = ""; public boolean useSSH = false; // SSH access possible public boolean isLocal = true; // indicates local/global connection public String lanIp6 = ""; public String lanIp4 = ""; public int lanPort = 80; public int lanWebPort = 80; public int lanRtsp = 554; public String wanIp6 = ""; public String wanIp4 = ""; public int wanPort = 80; public int wanWebPort = 80; public int wanRtsp = 554; public String user = ""; public String userPw = ""; public String admin = "admin"; public String adminPw = ""; public String root = ""; public String path = ""; public String server = ""; public String info = ""; public boolean isOnline = false; // to show online status in listview public NetDevice() {} public NetDevice (String json) { JsonParser.JsonObject js = new JsonParser().Parse(json); for (JsonParser.JsonField jso : js.fields) { switch (jso.name) { case "Id" -> id = (String) jso.value; case "Name" -> name = (String) jso.value; case "Type" -> type = (String) jso.value; case "Model" -> model = (String) jso.value; case "Mac" -> mac = (String) jso.value; case "Vendor" -> vendor = (String) jso.value; case "Location" -> location = (String) jso.value; case "UseSSH" -> useSSH = jso.value.equals("true"); case "IsLocal" -> isLocal = jso.value.equals("true"); case "LanIp6" -> lanIp6 = (String) jso.value; case "LanIp4" -> lanIp4 = (String) jso.value; case "LanPort" -> lanPort = Integer.parseInt((String) jso.value); case "LanWebPort" -> lanWebPort = Integer.parseInt((String) jso.value); case "LanRtsp" -> lanRtsp = Integer.parseInt((String) jso.value); case "WanIp6" -> wanIp6 = (String) jso.value; case "WanIp4" -> wanIp4 = (String) jso.value; case "WanPort" -> wanPort = Integer.parseInt((String) jso.value); case "WanRtsp" -> wanRtsp = Integer.parseInt((String) jso.value); case "WanWebPort" -> wanWebPort = Integer.parseInt((String) jso.value); case "User" -> user = (String) jso.value; case "UserPw" -> userPw = PwDecrypt((String) jso.value); case "Admin" -> admin = (String) jso.value; case "AdminPw" -> adminPw = PwDecrypt((String) jso.value); case "Root" -> root = (String) jso.value; case "Path" -> path = (String) jso.value; case "Server" -> server = (String) jso.value; case "Info" -> info = (String) jso.value; } } } public NetDevice (@Nullable ContentValues values) { if (values != null) { id = values.getAsString("id"); name = values.getAsString("name"); type = values.getAsString("type"); model = values.getAsString("model"); mac = values.getAsString("mac"); vendor = values.getAsString("vendor"); location = values.getAsString("location"); useSSH = values.getAsString("useSSH").equals("1"); isLocal = values.getAsString("isLocal").equals("1"); lanIp6 = values.getAsString("lanIp6"); lanIp4 = values.getAsString("lanIp4"); lanPort = values.getAsInteger("lanPort"); lanWebPort = values.getAsInteger("lanWebPort"); lanRtsp = values.getAsInteger("lanRtsp"); wanIp6 = values.getAsString("wanIp6"); wanIp4 = values.getAsString("wanIp4"); wanPort = values.getAsInteger("wanPort"); wanRtsp = values.getAsInteger("wanRtsp"); wanWebPort = values.getAsInteger("wanWebPort"); user = values.getAsString("user"); userPw = values.getAsString("userPw"); admin = values.getAsString("admin"); adminPw = values.getAsString("adminPw"); root = values.getAsString("root"); path = values.getAsString("path"); server = values.getAsString("server"); info = values.getAsString("info"); } } public NetDevice (Cursor cursor) { id = cursor.getString(cursor.getColumnIndexOrThrow("id")); name = cursor.getString(cursor.getColumnIndexOrThrow("name")); type = cursor.getString(cursor.getColumnIndexOrThrow("type")); model = cursor.getString(cursor.getColumnIndexOrThrow("model")); mac = cursor.getString(cursor.getColumnIndexOrThrow("mac")); vendor = cursor.getString(cursor.getColumnIndexOrThrow("vendor")); location = cursor.getString(cursor.getColumnIndexOrThrow("location")); useSSH = cursor.getString(cursor.getColumnIndexOrThrow("useSSH")).equals("1"); isLocal = cursor.getString(cursor.getColumnIndexOrThrow("isLocal")).equals("1"); lanIp6 = cursor.getString(cursor.getColumnIndexOrThrow("lanIp6")); lanIp4 = cursor.getString(cursor.getColumnIndexOrThrow("lanIp4")); lanPort = cursor.getInt (cursor.getColumnIndexOrThrow("lanPort")); lanWebPort = cursor.getInt (cursor.getColumnIndexOrThrow("lanWebPort")); lanRtsp = cursor.getInt (cursor.getColumnIndexOrThrow("lanRtsp")); wanIp6 = cursor.getString(cursor.getColumnIndexOrThrow("wanIp6")); wanIp4 = cursor.getString(cursor.getColumnIndexOrThrow("wanIp4")); wanPort = cursor.getInt (cursor.getColumnIndexOrThrow("wanPort")); wanRtsp = cursor.getInt (cursor.getColumnIndexOrThrow("wanRtsp")); wanWebPort = cursor.getInt (cursor.getColumnIndexOrThrow("wanWebPort")); user = cursor.getString(cursor.getColumnIndexOrThrow("user")); userPw = cursor.getString(cursor.getColumnIndexOrThrow("userPw")); admin = cursor.getString(cursor.getColumnIndexOrThrow("admin")); adminPw = cursor.getString(cursor.getColumnIndexOrThrow("adminPw")); root = cursor.getString(cursor.getColumnIndexOrThrow("root")); path = cursor.getString(cursor.getColumnIndexOrThrow("path")); server = cursor.getString(cursor.getColumnIndexOrThrow("server")); info = cursor.getString(cursor.getColumnIndexOrThrow("info")); } public NetDevice getDevice () { return this; } public String ip6 () { return isLocal ? lanIp6 : wanIp6; } public String ip4 () { return isLocal ? lanIp4 : wanIp4; } public int port () { return isLocal ? lanPort : wanPort; } public int webPort () { return isLocal ? lanWebPort : wanWebPort; } public String webUrl () { return "http" + "://" + ip4() + ((webPort() > 0 && webPort() != 80 && webPort() != 443) ? (":" + webPort()) : "") + "/"; } public String ftpUrl () { return "ftps" + "://" + ip4() + ":" + port() + "/"; } public String rtspUrl () { return "rtsp" + "://" + ip4() + ":" + (isLocal ? lanRtsp : wanRtsp) + "/"; } public void CopyValues (NetDevice dev) { dev.id = id; dev.name = name; dev.type = type; dev.model = model; dev.mac = mac; dev.vendor = vendor; dev.location = location; dev.useSSH = useSSH; dev.isLocal = isLocal; dev.lanIp6 = lanIp6; dev.lanIp4 = lanIp4; dev.lanPort = lanPort; dev.lanWebPort = lanWebPort; dev.lanRtsp = lanRtsp; dev.wanIp6 = wanIp6; dev.wanIp4 = wanIp4; dev.wanPort = wanPort; dev.wanWebPort = wanWebPort; dev.wanRtsp = wanRtsp; dev.user = user; dev.userPw = userPw; dev.admin = admin; dev.adminPw = adminPw; dev.root = root; dev.server = server; dev.path = path; dev.info = info; } private String PwEncrypt (String text) { try { return new AesCipher("CipherKey").Encrypt(text); } catch (Exception e) { return text; } } private static String PwDecrypt (String text) { try { return new AesCipher("CipherKey").Decrypt(text); } catch (Exception e) { return text; } } public String toJsonString () { String sep = "\":\""; String device = "{" + "\"Id" + sep + id + "\"," + "\"Name" + sep + name + "\"," + "\"Type" + sep + type + "\"," + "\"Model" + sep + model + "\"," + "\"Mac" + sep + mac + "\"," + "\"Vendor" + sep + vendor + "\"," + "\"Location" + sep + location + "\"," + "\"UseSSH" + sep + (useSSH ? "true" : "false") + "\"," + "\"IsLocal" + sep + (isLocal ? "true" : "false") + "\"," + "\"LanIp6" + sep + lanIp6 + "\"," + "\"LanIp4" + sep + lanIp4 + "\"," + "\"LanPort" + sep + lanPort + "\"," + "\"LanWebPort" + sep + lanWebPort + "\"," + "\"LanRtsp" + sep + lanRtsp + "\"," + "\"WanIp6" + sep + wanIp6 + "\"," + "\"WanIp4" + sep + wanIp4 + "\"," + "\"WanPort" + sep + wanPort + "\"," + "\"WanRtsp" + sep + wanRtsp + "\"," + "\"WanWebPort" + sep + wanWebPort + "\"," + "\"User" + sep + user + "\"," + "\"UserPw" + sep + PwEncrypt(userPw) + "\"," + "\"Admin" + sep + admin + "\"," + "\"AdminPw" + sep + PwEncrypt(adminPw) + "\"," + "\"Root" + sep + root + "\"," + "\"Path" + sep + path + "\"," + "\"Server" + sep + server + "\"," + "\"Info" + sep + info + "\"" + "}"; return device; } } -
class NetDevice (object):