1a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann/* 2a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * Copyright (C) 2016 The Android Open Source Project 3a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * 4a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License"); 5a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * you may not use this file except in compliance with the License. 6a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * You may obtain a copy of the License at 7a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * 8a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * http://www.apache.org/licenses/LICENSE-2.0 9a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * 10a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software 11a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS, 12a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * See the License for the specific language governing permissions and 14a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann * limitations under the License. 15a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann */ 16a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 17a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannpackage com.android.printservice.recommendation.plugin.samsung; 18a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 19a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannimport android.net.nsd.NsdServiceInfo; 20a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannimport android.text.TextUtils; 21a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 22a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannimport java.nio.charset.StandardCharsets; 23a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannimport java.util.Locale; 24a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannimport java.util.Map; 25a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 26a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmannpublic class MDnsUtils { 27a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static final String ATTRIBUTE__TY = "ty"; 28a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static final String ATTRIBUTE__PRODUCT = "product"; 29a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static final String ATTRIBUTE__USB_MFG = "usb_MFG"; 30a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static final String ATTRIBUTE__MFG = "mfg"; 31a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 32a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static String getString(byte[] value) { 33a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann if (value != null) return new String(value,StandardCharsets.UTF_8); 34a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann return null; 35a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann } 36a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 37a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static boolean isVendorPrinter(NsdServiceInfo networkDevice, String[] vendorValues) { 38a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 39a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann Map<String,byte[]> attributes = networkDevice.getAttributes(); 40a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann String product = getString(attributes.get(ATTRIBUTE__PRODUCT)); 41a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann String ty = getString(attributes.get(ATTRIBUTE__TY)); 42a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann String usbMfg = getString(attributes.get(ATTRIBUTE__USB_MFG)); 43a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann String mfg = getString(attributes.get(ATTRIBUTE__MFG)); 44a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann return containsVendor(product, vendorValues) || containsVendor(ty, vendorValues) || containsVendor(usbMfg, vendorValues) || containsVendor(mfg, vendorValues); 45a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 46a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann } 47a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 48a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann public static String getVendor(NsdServiceInfo networkDevice) { 49a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann String vendor; 50a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 51a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann Map<String,byte[]> attributes = networkDevice.getAttributes(); 52a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann vendor = getString(attributes.get(ATTRIBUTE__MFG)); 53a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann if (!TextUtils.isEmpty(vendor)) return vendor; 54a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann vendor = getString(attributes.get(ATTRIBUTE__USB_MFG)); 55a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann if (!TextUtils.isEmpty(vendor)) return vendor; 56a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 57a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann return null; 58a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann } 59a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 60a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann private static boolean containsVendor(String container, String[] vendorValues) { 61a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann if ((container == null) || (vendorValues == null)) return false; 62a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann for (String value : vendorValues) { 63a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann if (containsString(container, value) 64a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann || containsString(container.toLowerCase(Locale.US), value.toLowerCase(Locale.US)) 65a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann || containsString(container.toUpperCase(Locale.US), value.toUpperCase(Locale.US))) 66a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann return true; 67a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann } 68a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann return false; 69a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann } 70a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann 71a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann private static boolean containsString(String container, String contained) { 72a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann return (container != null) && (contained != null) && (container.equalsIgnoreCase(contained) || container.contains(contained + " ")); 73a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann } 74a26b775dc132b135fa23ab17c39c08955e291da2Philip P. Moltmann} 75