All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.spqrinfo.vppserver.ippclient.IppUtil Maven / Gradle / Ivy

package de.spqrinfo.vppserver.ippclient;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.*;
import java.util.ArrayList;

/**
 * Copyright (C) 2008 ITS of ETH Zurich, Switzerland, Sarah Windler Burri
 * 

* This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) any * later version. *

* This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. *

* See the GNU Lesser General Public License for more details. You should have * received a copy of the GNU Lesser General Public License along with this * program; if not, see . */ public class IppUtil { private final static String DEFAULT_CHARSET = "UTF-8"; /** * @param a high byte * @param b low byte * @return short value */ static public short toShort(byte a, byte b) { return (short) (((a & 0x00ff) << 8) + (b & 0x00ff)); } /** * @param b byte * @return String */ static public String toHex(byte b) { String st = Integer.toHexString(b); return (st.length() == 1) ? "0" + st : st; } /** * @param b byte * @return String with Marker '0x' ahead */ static public String toHexWithMarker(byte b) { StringBuilder sb = new StringBuilder(); sb.append("0x").append(toHex(b)); return sb.toString(); } /** * @param dst array of byte * @return String representation */ static String toString(byte[] dst) { int l = dst.length; StringBuilder sb = new StringBuilder(l); for (int i = 0; i < l; i++) { int b = dst[i]; int ival = ((int) b) & 0xff; char c = (char) ival; sb.append(c); } return sb.toString(); } /** * @param str String to encode * @param encoding * @return byte array * @throws UnsupportedEncodingException */ static public byte[] toBytes(String str, String encoding) throws UnsupportedEncodingException { if (encoding == null) { encoding = DEFAULT_CHARSET; } return str.getBytes(encoding); } /** * Encode in default encoding ('utf-8') * * @return array of byte * @throws UnsupportedEncodingException * @see toBytes(str,null) */ static public byte[] toBytes(String str) throws UnsupportedEncodingException { return toBytes(str, null); } /** * see RFC 2579 for DateAndTime byte length and explanation of byte fields IPP * datetime must have a length of eleven bytes * * @param dst byte array * @return String representation of dateTime */ static String toDateTime(byte[] dst) { StringBuffer sb = new StringBuffer(); short year = toShort(dst[0], dst[1]); sb.append(year).append("-"); byte month = dst[2]; sb.append(month).append("-"); byte day = dst[3]; sb.append(day).append(","); byte hours = dst[4]; sb.append(hours).append(":"); byte min = dst[5]; sb.append(min).append(":"); byte sec = dst[6]; sb.append(sec).append("."); byte decSec = dst[7]; sb.append(decSec).append(","); int b = dst[8]; int ival = ((int) b) & 0xff; char c = (char) ival; sb.append(c); hours = dst[9]; sb.append(hours).append(":"); min = dst[10]; sb.append(min); return sb.toString(); } /** * See RFC2910, http://www.ietf.org/rfc/rfc2910 IPP boolean is defined as * SIGNED-BYTE where 0x00 is 'false' and 0x01 is 'true' * * @param b byte * @return String representation of boolean: i.e. true, false */ static public String toBoolean(byte b) { return (b == 0) ? "false" : "true"; } /** * @param ipAddress * @return true or false * @throws IOException */ static public boolean isAlive(String ipAddress) throws IOException { return InetAddress.getByName(ipAddress).isReachable(2000); } /** * @param str * @return * @throws CharacterCodingException */ static public String getTranslatedString(String str) throws CharacterCodingException { return getTranslatedString(str, null); } /** * @param str * @param charsetName * @return * @throws CharacterCodingException */ static public String getTranslatedString(String str, String charsetName) throws CharacterCodingException { if (charsetName == null) { charsetName = DEFAULT_CHARSET; } Charset charset = Charset.forName(charsetName); CharsetDecoder decoder = charset.newDecoder(); CharsetEncoder encoder = charset.newEncoder(); decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); encoder.onUnmappableCharacter(CodingErrorAction.REPLACE); // Convert a string to charsetName bytes in a ByteBuffer // The new ByteBuffer is ready to be read. ByteBuffer buf = encoder.encode(CharBuffer.wrap(str)); // Convert charsetName bytes in a ByteBuffer to a character ByteBuffer // and then to a string. The new ByteBuffer is ready to be read. CharBuffer cbuf = decoder.decode(buf); return cbuf.toString(); } /** * concatenate nio-ByteBuffers * * @param buffers ArrayList * @return ByteBuffer */ public static ByteBuffer concatenateBytebuffers(ArrayList buffers) { int n = 0; for (ByteBuffer b : buffers) n += b.remaining(); ByteBuffer buf = (n > 0 && buffers.get(0).isDirect()) ? ByteBuffer.allocateDirect(n) : ByteBuffer.allocate(n); if (n > 0) buf.order(buffers.get(0).order()); for (ByteBuffer b : buffers) buf.put(b.duplicate()); buf.flip(); return buf; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy