2 * Copyright (c) 2003 University of Murcia. All rights reserved.
3 * --------------------------------------------------------------
4 * For more information, please see <http://www.umu.euro6ix.org/>.
7 package org.umu.cops.stack;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
12 import java.io.ByteArrayOutputStream;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.net.Socket;
16 import java.util.Arrays;
17 import java.util.Date;
20 * Class to hold static utilitarian methods for streaming bytes over a Socket.
22 * @version COPSUtil.java, v 2.00 2004
25 public class COPSUtil {
27 private final static Logger logger = LoggerFactory.getLogger(COPSUtil.class);
31 * @param socket a Socket
32 * @param data a byte[]
36 public static void writeData(final Socket socket, final byte[] data, final int len) throws IOException {
37 logger.trace("Writing COPS data");
38 socket.getOutputStream().write(data, 0, len);
42 * Returns true if the data contained within data1 + padding1 is equivalent to data2 + padding2
43 * @param data1 - the data from the first
44 * @param padding1 - the padding from the first
45 * @param data2 - the data from the second
46 * @param padding2 - the padding from the second
49 public static boolean copsDataPaddingEquals(final COPSData data1, final COPSData padding1,
50 final COPSData data2, final COPSData padding2) {
51 final byte[] data1Bytes = data1.getData();
52 final byte[] padding1Bytes = padding1.getData();
54 final byte[] data2Bytes = data2.getData();
55 final byte[] padding2Bytes = padding2.getData();
57 if (data1Bytes.length + padding1Bytes.length != data2Bytes.length + padding2Bytes.length)
60 final ByteArrayOutputStream thisStream = new ByteArrayOutputStream();
61 final ByteArrayOutputStream thatStream = new ByteArrayOutputStream();
63 thisStream.write(data1Bytes);
64 thisStream.write(padding1Bytes);
65 thatStream.write(data2Bytes);
66 thatStream.write(padding2Bytes);
67 return Arrays.equals(thisStream.toByteArray(), thatStream.toByteArray());
68 } catch (IOException e) {
74 * Reads nchar from a given sockets, blocks on read untill nchar are read of conenction has error
75 * bRead returns the bytes read
77 * @param connId a Socket
78 * @param dataRead a byte[]
87 static int readData(Socket connId, byte[] dataRead, int nchar) throws IOException {
89 input = connId.getInputStream();
92 int startTime = (int) (new Date().getTime());
94 if (input.available() != 0) {
95 nread += input.read(dataRead,nread,nchar-nread);
96 startTime = (int) (new Date().getTime());
98 int nowTime = (int) (new Date().getTime());
99 if ((nowTime - startTime) > 2000)
102 } while (nread != nchar);