/** * Check if two internationalized domain names are equal, possibly causing * a serialization of both domain names. * @param name1 The first domain name. * @param name2 The second domain name. * @return True if both domain names are the same. */ public static boolean idnEquals(String name1, String name2) { if (name1 == name2) return true; // catches null, null if (name1 == null) return false; if (name2 == null) return false; if (name1.equals(name2)) return true; try { return Arrays.equals(toByteArray(name1),toByteArray(name2)); } catch (IOException e) { return false; // impossible } }
/** * Generate a binary paket for this dns question. * @return The dns question. */ public byte[] toByteArray() { if (byteArray == null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(512); DataOutputStream dos = new DataOutputStream(baos); try { dos.write(NameUtil.toByteArray(this.name)); dos.writeShort(type.getValue()); dos.writeShort(clazz.getValue() | (unicastQuery ? (1 << 15) : 0)); dos.flush(); } catch (IOException e) { // Should never happen throw new IllegalStateException(e); } byteArray = baos.toByteArray(); } return byteArray; }