blob: 714d237991b20d751b4ea3abbd9fb7c7e84c3a9d [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
Jian Li5fc14292015-12-04 11:30:46 -080023import static com.google.common.base.MoreObjects.toStringHelper;
Jonathan Hart2a655752015-04-07 16:46:33 -070024import static org.onlab.packet.PacketUtils.*;
25
alshabibc4901cd2014-09-05 16:50:40 -070026/**
27 *
alshabibc4901cd2014-09-05 16:50:40 -070028 */
29public class Data extends BasePacket {
30 protected byte[] data;
31
32 /**
33 *
34 */
35 public Data() {
Jonathan Hart2a655752015-04-07 16:46:33 -070036 data = new byte[0];
alshabibc4901cd2014-09-05 16:50:40 -070037 }
38
39 /**
Yuta HIGUCHI5c947272014-11-03 21:39:21 -080040 * @param data the data
alshabibc4901cd2014-09-05 16:50:40 -070041 */
42 public Data(final byte[] data) {
43 this.data = data;
44 }
45
46 /**
47 * @return the data
48 */
49 public byte[] getData() {
50 return this.data;
51 }
52
53 /**
54 * @param data
55 * the data to set
Yuta HIGUCHI5c947272014-11-03 21:39:21 -080056 * @return self
alshabibc4901cd2014-09-05 16:50:40 -070057 */
58 public Data setData(final byte[] data) {
59 this.data = data;
60 return this;
61 }
62
63 @Override
64 public byte[] serialize() {
65 return this.data;
66 }
67
68 @Override
69 public IPacket deserialize(final byte[] data, final int offset,
Jonathan Hart2a655752015-04-07 16:46:33 -070070 final int length) {
alshabibc4901cd2014-09-05 16:50:40 -070071 this.data = Arrays.copyOfRange(data, offset, data.length);
72 return this;
73 }
74
75 /*
76 * (non-Javadoc)
77 *
78 * @see java.lang.Object#hashCode()
79 */
80 @Override
81 public int hashCode() {
82 final int prime = 1571;
83 int result = super.hashCode();
84 result = prime * result + Arrays.hashCode(this.data);
85 return result;
86 }
87
88 /*
89 * (non-Javadoc)
90 *
91 * @see java.lang.Object#equals(java.lang.Object)
92 */
93 @Override
94 public boolean equals(final Object obj) {
95 if (this == obj) {
96 return true;
97 }
98 if (!super.equals(obj)) {
99 return false;
100 }
101 if (!(obj instanceof Data)) {
102 return false;
103 }
104 final Data other = (Data) obj;
105 if (!Arrays.equals(this.data, other.data)) {
106 return false;
107 }
108 return true;
109 }
Jonathan Hart2a655752015-04-07 16:46:33 -0700110
111 /**
112 * Deserializer function for generic payload data.
113 *
114 * @return deserializer function
115 */
116 public static Deserializer<Data> deserializer() {
117 return (data, offset, length) -> {
118 // Allow zero-length data for now
119 if (length == 0) {
120 return new Data();
121 }
122
123 checkInput(data, offset, length, 1);
124
125 Data dataObject = new Data();
126
127 dataObject.data = Arrays.copyOfRange(data, offset, data.length);
128
129 return dataObject;
130 };
131 }
132
Jian Li5fc14292015-12-04 11:30:46 -0800133 @Override
134 public String toString() {
135 return toStringHelper(getClass())
136 .add("data", Arrays.toString(data))
137 .toString();
138 }
alshabibc4901cd2014-09-05 16:50:40 -0700139}