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