blob: 79abcba1fc2fb12b1dec2498dc096c295c72e816 [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
alshabibc4901cd2014-09-05 16:50:40 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
alshabibc4901cd2014-09-05 16:50:40 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
16
17
alshabibc4901cd2014-09-05 16:50:40 -070018
19package org.onlab.packet;
20
21import java.util.Arrays;
22
Jonathan Hart2a655752015-04-07 16:46:33 -070023import static org.onlab.packet.PacketUtils.*;
24
alshabibc4901cd2014-09-05 16:50:40 -070025/**
26 *
alshabibc4901cd2014-09-05 16:50:40 -070027 */
28public class Data extends BasePacket {
29 protected byte[] data;
30
31 /**
32 *
33 */
34 public Data() {
Jonathan Hart2a655752015-04-07 16:46:33 -070035 data = new byte[0];
alshabibc4901cd2014-09-05 16:50:40 -070036 }
37
38 /**
Yuta HIGUCHI5c947272014-11-03 21:39:21 -080039 * @param data the data
alshabibc4901cd2014-09-05 16:50:40 -070040 */
41 public Data(final byte[] data) {
42 this.data = data;
43 }
44
45 /**
46 * @return the data
47 */
48 public byte[] getData() {
49 return this.data;
50 }
51
52 /**
53 * @param data
54 * the data to set
Yuta HIGUCHI5c947272014-11-03 21:39:21 -080055 * @return self
alshabibc4901cd2014-09-05 16:50:40 -070056 */
57 public Data setData(final byte[] data) {
58 this.data = data;
59 return this;
60 }
61
62 @Override
63 public byte[] serialize() {
64 return this.data;
65 }
66
67 @Override
68 public IPacket deserialize(final byte[] data, final int offset,
Jonathan Hart2a655752015-04-07 16:46:33 -070069 final int length) {
alshabibc4901cd2014-09-05 16:50:40 -070070 this.data = Arrays.copyOfRange(data, offset, data.length);
71 return this;
72 }
73
74 /*
75 * (non-Javadoc)
76 *
77 * @see java.lang.Object#hashCode()
78 */
79 @Override
80 public int hashCode() {
81 final int prime = 1571;
82 int result = super.hashCode();
83 result = prime * result + Arrays.hashCode(this.data);
84 return result;
85 }
86
87 /*
88 * (non-Javadoc)
89 *
90 * @see java.lang.Object#equals(java.lang.Object)
91 */
92 @Override
93 public boolean equals(final Object obj) {
94 if (this == obj) {
95 return true;
96 }
97 if (!super.equals(obj)) {
98 return false;
99 }
100 if (!(obj instanceof Data)) {
101 return false;
102 }
103 final Data other = (Data) obj;
104 if (!Arrays.equals(this.data, other.data)) {
105 return false;
106 }
107 return true;
108 }
Jonathan Hart2a655752015-04-07 16:46:33 -0700109
110 /**
111 * Deserializer function for generic payload data.
112 *
113 * @return deserializer function
114 */
115 public static Deserializer<Data> deserializer() {
116 return (data, offset, length) -> {
117 // Allow zero-length data for now
118 if (length == 0) {
119 return new Data();
120 }
121
122 checkInput(data, offset, length, 1);
123
124 Data dataObject = new Data();
125
126 dataObject.data = Arrays.copyOfRange(data, offset, data.length);
127
128 return dataObject;
129 };
130 }
131
alshabibc4901cd2014-09-05 16:50:40 -0700132}